👌

gemma.cpp で CPU で Gemma を動かし日本語試すメモ

2024/08/31に公開

理想は llama.cpp で動かすですが, ちょっと現時点(2024/08)ではいろいろ面倒そうなので, qwen.cpp のとき

qwen.cpp(llama.cpp variant) で CPU で英日翻訳を行うメモ
https://zenn.dev/syoyo/articles/84948e6cb9436f

と同じように gemma.cpp で Gemma を動かしてみます.

https://github.com/google/gemma.cpp

ちなみにさらっとコードを見た限りでは, llama.cpp のフォークというわけではなく一から書き直していました.
(G 社のコード品質とかは微妙なんで, そのうち llama.cpp で gemma がぺろっと動かせると理想ですね...)

ビルド

cmake があるので特に難しくなくビルドできます.

  if(NOT CMAKE_BUILD_TYPE)
      set(CMAKE_BUILD_TYPE "Release")
  endif()

とあるので, デフォで Release ビルドされます.

model

https://huggingface.co/models?other=gemma.cpp

huggingface はなんかモデルが古いのか,

Cached compressed weights does not exist yet (code 104), ...

とエラー出たりするので, Kaggle からダウンロードするとよいでしょう.

実行

./gemma \
--tokenizer tokenizer.spm \
--weights 2b-it-sfp.sbs --weight_type sfp --model 2b-it

のようにして実行します.

プロンプトをファイルから指定

コマンドラインではプロンプト文を指定てきないようなので,

プロンプト文を適当なファイル(e.g. input.txt)に保存し

cat input.txt | tr '\n' ' ' | ./build/gemma ...

などとします.

翻訳

インストラクション指示フォーマットが不明だったのでとりま以下のようにしました.

Translate into Japanese: ****
Translate into English: ****

2b-it-sfp
7b-it-sfp

で試しました.

Gemma 2B

日本語 -> 英語

2010年5月22日、ビットコインの開発者がピザ屋からピザ2枚を注文し、別の開発者の家に届け、1万ビットコインと交換。初めてビットコインを利用した商取引が成立した瞬間となった。当時のビットコインの価値は1BTC=約0.2円であったが現在の価値に換算すると(1BTC=550万円)、このピザは1枚約275億円ということになる。
Sure, here is the translation into English:

In May 2010, a developer ordered two pizzas from a pizzeria and delivered them to another developer's house. This marked the first time that Bitcoin was used in a commercial transaction. At that time, one Bitcoin was worth approximately 0.2 cents, but its value has since been converted to approximately 550 million yen (about 275 billion yen per pizza).

英語 -> 日本語

TOKYO. Crude oil prices have fallen 20% from a September high to a four-month low as economic slowdowns in the U.S. and China, the two largest consumers, lead to widespread expectations that demand will weaken.
東京。アメリカと中国の経済が遅く進んでいるため、9月の最高値から4ヶ月低迷する crude oil prices は、経済が遅く進んでいるアメリカと中国 の主要消費国で、需要が弱まる可能性が高いと予想されています。

2B はそこそこ速いのがいいですが, 英日はちょっと微妙な感じですね

Gemma 7B

日本語 -> 英語

2010年5月22日、ビットコインの開発者がピザ屋からピザ2枚を注文し、別の開発者の家に届け、1万ビットコインと交換。初めてビットコインを利用した商取引が成立した瞬間となった。当時のビットコインの価値は1BTC=約0.2円であったが現在の価値に換算すると(1BTC=550万円)、このピザは1枚約275億円ということになる。
On May 22, 2010, the developer of Bitcoin ordered two pizzas from a pizza parlor, delivered them to another developer's house, and exchanged them for 10,000 bitcoins. This was the first transaction using Bitcoin. At that time, the value of Bitcoin was 1 BTC = approximately 0.2 yen. If we convert this value to the current value (1 BTC = 550,000 yen), the two pizzas would be worth approximately 275 million yen.

英語 -> 日本語

TOKYO. Crude oil prices have fallen 20% from a September high to a four-month low as economic slowdowns in the U.S. and China, the two largest consumers, lead to widespread expectations that demand will weaken.
東京。アメリカ合衆国と中国の経済減衰により、 September 高値から 4 か月の低値に落ちている原油価格が、世界的な需要の弱化を導く。

さすがに Qwen 14B あたりにはかなわないけど, まあまあでしょうか. あとちょっと元の文が抜けていますね.

行間読みのかしこさテスト

日本語対応 LLM(13B 規模)の, 行間を読むようなかしこさがあるか試したメモ(現状 Qwen 14B がベスト)
https://zenn.dev/syoyo/articles/59a5ccbbb5660e

のタスクをためしてみます.
2b はだめだめだったので, 7b で.

gemma-7b

1. 彼は比類のない陸上選手だ。
2. 彼は比較的に良い陸上選手だ。
1の文が難しいので2の文に直そうと思っているのですが、これってあってますか?
これは、文法のレベルではなく、語義のレベルでの質問です。

1の文が難しい理由は、その文が非常に強みのある陸上選手を意味します。 2の文に直そうとする場合は、比較的に良い陸上選手を意味します。

そのため、この質問は、文法のレベルではなく、語義のレベルでの質問です。

さすがに 7B レベルでは行間読むかんじでよしなに受け答えはまだまだでしょうか...

まとめ

規模相当という感じでしょうか. とはいえ今までの(昨年の) 2B, 7B model と比べればいい感じに日本語進化している感はあります.

7B は 16 GB くらいメモリあれば動く感じです. Ryzen 3900X ではちょっと遅いけどすごい遅いわけではなく, まあまあ実用で使える感じでした.

2B は CPU でもそこそこ速く動くのがよいです.

TODO

  • Qwen2 を試す
  • Phi3 を試す
  • もう少し受け答えがよくなる指示文、テンプレートがあるか調べる

Discussion