手元の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 "日本で一番高い山は"
すると、次のように答えました。
実行時間は下記の通り、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 "世界で一番高い山"
# まとめ
以上、意外と気軽にggmlで日本語の大規模言語モデルを動かすことができました。これで、いろいろ実験できるので、楽しみです。
なお、長くなってしまったので、LINEの大規模言語モデルで遊でみた記録は以下に残しておきました。
生成AI/ChatGPTの本を書きました
以下の本を執筆しましたので、良かったら読んでみてください!!