見出し画像

手元のPCでggml使って大規模言語モデルRinna/OpenCalm/LINEを動かしてみた件

Macbook Pro M1上で、ggmlを使っていろいろな大規模言語モデルを動かしてみました。
結論として、今回試した感じ、gpt-neoxベースのもの(今回試した日本語LLM)を対象にした場合、Macbook Pro M1で遊べるのは、30億パラメータ(3bの表記)がギリギリで、70億(7b)だと結構厳しいということが分かりました。ただし、llama.cppを使った場合は、Appleシリコンの最適化が利くせいか、70億パラメータ(7b)でも良い感じに動きます。

ローカルPCにggmlインストールしてLLMを試す

# ggmlのビルド

まずは、ggmlをビルドします。下記のコマンドを実行すると、実行ファイル`./build/bin/gpt-neox` が作成されます。

# ggml のclone
git clone https://github.com/ggerganov/ggml.git
# ggml をビルド
cd ggml
mkdir build && cd build
cmake ..
make -j

# rinna-bilingual-gpt-neox-4bを試す

まずは、mmnga/rinna-bilingual-gpt-neox-4b-ggml を動かしてみます。こちらから使いたいbinファイルをmodelsフォルダにダウンロード。

./build/bin/gpt-neox \
  -m ./models/rinna-bilingual-gpt-neox-4b-ggml-q8_0.bin \
  -p "日本で一番高い山は"

すると、次のように答えました。

日本で一番高い山は富士山、次に高い山は北岳。</s>・・この本、読んだことある気がします・・。〜省略〜

実行時間は下記の通り、10秒ちょっとかかりました。この程度で実行できるなら、それなりに遊べそうです。

main: mem per token =   431196 bytes
main:     load time =  1293.43 ms
main:   sample time =    35.41 ms
main:  predict time =  9222.00 ms / 45.21 ms per token
main:    total time = 10710.71 ms

# open-calm-3bを試す

次に、サイバーエージェントのOpenCalmで試してみましょう。こちらは、ggmlが公開されていないので、こちらnanaさんのzennを見てggmlファイルを作成して試してみました。

せっかくなので、open-calm-7bで試してみましたが・・・実行が遅い。遅すぎるので、改めて、open-calm-3bで試すことにしました。リポジトリのcloneにものすごく時間とストレージが必要なので、余力を持って実行しましょう。

# open-calm-3b をダウンロード
git clone https://huggingface.co/cyberagent/open-calm-3b ~/repos/open-calm-3b
# ggml変換に必要なライブラリをインストール
python3 -m pip install torch transformers accelerator numpy
# 変換実行
python3 ./examples/gpt-neox/convert-h5-to-ggml.py ~/repos/open-calm-3b 1
# 移動
mv ~/repos/open-calm-3b/ggml-model-f16.bin ./models/ggml-open-calm-3b-f16.bin

そして、実行してみます。

./build/bin/gpt-neox \
  -m ./models/ggml-open-calm-3b-f16.bin \
  -p "日本で一番高い山は"

日本で一番高い山は富士山です。でも、富士山って標高が高いから登山家以外は登らないんですよね。じゃあ、富士山に登るかというと、やっぱり登らない。これは富士山に限ったことじゃなくて〜省略〜

実行には、14秒ほどかかりましたが、ちょっと遊ぶには許容範囲内でしょう。良い感じです。

# line-corporation/japanese-large-lm-3.6b を試す

LINEが公開している、line-corporation/japanese-large-lm-3.6bもgpt-neoxベースということで、同じ要領で試すことができそうと思ったのですが・・・メモリ不足?なのか途中でエラーが出て作成できませんでした。残念。

# m1 mac でうまくいかなかった手順
# リポジトリをclone
git clone https://huggingface.co/line-corporation/japanese-large-lm-3.6b ~/repos/jp-large-lm-3.6b
# 変換実行
python3 ./examples/gpt-neox/convert-h5-to-ggml.py ~/repos/jp-large-lm-3.6b 1
# もしうまく行ったらmodelsに移動
mv ~/repos/jp-large-lm-3.6b/ggml-model-f16.bin ./models/ggml-line-jp-3.6b-f16.bin

そこで、ggml変換だけは、Google Colabで行おうと挑戦してみました。Proプランのユニット節約と思ってCPUで試すとメモリ不足で失敗。そこで次に、T4のハイメモリを選んで実行してみました。すると、あっさり成功!

! pip install torch transformers accelerator numpy sentencepiece accelerate
! git clone https://github.com/ggerganov/ggml.git
! cd ggml && mkdir -p build && cd build && cmake .. && make -j
! git clone https://huggingface.co/line-corporation/japanese-large-lm-3.6b ./jp-large-lm-3.6b
! python ggml/examples/gpt-neox/convert-h5-to-ggml.py ./jp-large-lm-3.6b 1
! cp ./jp-large-lm-3.6b/ggml-model-f16.bin ./ggml-line-jp-3.6b-f16.bin

そして、作成された、ggml-line-jp-3.6b-f16.bin をダウンロードします。この時、6GBあるせいか、Colab画面ではダウンロードできず、一度、Google Driveにコピーしてから、Drive経由でダウンロードしました。

そして、動くかどうか確かめます。

./ggml/build/bin/gpt-neox \
  -m ./ggml-line-jp-3.6b-f16.bin \
  -p "世界で一番高い山" 

世界で一番高い山、富士山の2倍以上の標高5,237mのキリマンジャロ山。その山を360度ぐるりと見渡すことができるタンザニアの最高峰、キリマンジャロ登山ツアー。〜省略〜

# まとめ

以上、意外と気軽にggmlで日本語の大規模言語モデルを動かすことができました。これで、いろいろ実験できるので、楽しみです。

なお、長くなってしまったので、LINEの大規模言語モデルで遊でみた記録は以下に残しておきました。


生成AI/ChatGPTの本を書きました

以下の本を執筆しましたので、良かったら読んでみてください!!





この記事が気に入ったらサポートをしてみませんか?