💬

LINE が公開した日本語言語モデルをM2 Macbook Airで動かす

2023/08/16に公開
2

これはなに?

LINE が公開した日本語言語モデルをローカルで動かしたいけど、GPUがなくて動かなくて悲しかったのです。でも、huggingface に良い変換モデルを公開されてる方がいらして、それを試したら、いい感じで動きました。というご報告です。やったね!

結論: 動かす手順

  1. homebrew で cmake をインストール
  2. mmngaさんが公開されている ggml 変換版の readme に従ってターミナルで以下を実行
git clone https://github.com/ggerganov/ggml.git
cd ggml
mkdir build && cd build
cmake ..
make -j
  1. mmngaさんが公開されているggml 変換版のモデルをダウンロード 保存先は 2. で mkdir した build ディレクトリに。
  2. 以下のコマンドで推論を実行

./bin/gpt-neox -m 'line-corp-japanese-large-lm-3.6b-ggml-q4_0.bin' -n 128 -t 8 -p '日本を代表するプログラマーといえば、'

実行結果

日本を代表するプログラマーといえば、まつもとゆきひろ氏。氏は、Linuxの生みの親であり、またプログラミング言語Rubyの作者としても知られています。氏がRubyを開発したきっかけは、まつもと氏がまだ大学院生だった頃に、1人で自宅にあった古いPCにLinuxをインストールし、インターネットに接続して、Webアプリケーションの開発を始めたことでした。<0x0A>「このプロジェクトは、2年かけても完成しませんでした。結局、2年後に、2人の協力者を得て、開発を再開し、Webアプリケーションとして完成させることができました。その2人がいなければ、おそらく今もこのプロジェクトは完成していなかったでしょう。」と、氏は当時のプロジェクトを振り返るとともに、「これは、まさに、私が、Linuxや

おしい!

速度やメモリ消費量

日本語特化モデルなのに加えて、一番小さい量子化モデルだからだとおもうんですが、めっちゃ軽いです。
上記の結果を出すまで7秒ぐらいで、実行中のメモリ消費は 2GB ちょい。
50ms per token でした。すごい!

これは iPhone でも動いてしまいそうです。

Discussion

suztomosuztomo

動きました!ありがとうございます。

~/ggml/build $ ./bin/gpt-neox -m 'line-corp-japanese-large-lm-3.6b-ggml-q4_0.bin' -n 128 -t 8 -p '日本を代表するプログラマーといえば、'
main: seed = 1692240774
gpt_neox_model_load: loading model from 'line-corp-japanese-large-lm-3.6b-ggml-q4_0.bin' - please wait ...
gpt_neox_model_load: n_vocab = 51200
gpt_neox_model_load: n_ctx   = 2048
gpt_neox_model_load: n_embd  = 3072
gpt_neox_model_load: n_head  = 32
gpt_neox_model_load: n_layer = 30
gpt_neox_model_load: n_rot   = 96
gpt_neox_model_load: par_res = 0
gpt_neox_model_load: ftype   = 2002
gpt_neox_model_load: qntvr   = 2
gpt_neox_model_load: ggml ctx size = 4515.97 MB
gpt_neox_model_load: memory_size =   720.00 MB, n_mem = 61440
gpt_neox_model_load: ............................................. done
gpt_neox_model_load: model size =  1995.84 MB / num tensors = 364
extract_tests_from_file : No test file found.
test_gpt_tokenizer : 0 tests failed out of 0 tests.
main: number of tokens in prompt = 4
main: token[0] =  39215, 日本を代表する
main: token[1] =  38891, プログラマー
main: token[2] =   2902, といえば
main: token[3] =    264, 、

日本を代表するプログラマーといえば、マイクロソフトで20年超のプログラマー経験を持ち、現在は株式会社リクルートテクノロジーズで、AI技術を使ったビジネスソリューション開発に携わる江崎浩さんだ。江崎浩さん(左)と、リクルートテクノロジーズの江崎浩さん(右)リクルートテクノロジーズは、リクルートホールディングスの新規事業提案制度「RingofFire」でグランプリを受賞したビジネスソリューションを、リクルートの各事業会社と連携して開発していく部署。江崎浩さんは、ビジネスソリューションの開発、およびその技術面を担当する。江崎浩さんのプロジェクトは、例えば、店舗への来訪客の行動データと、店舗の顧客が顧客同士で共有するデータを組み合わせたら

main: mem per token =   351836 bytes
main:     load time =  1430.15 ms
main:   sample time =    18.72 ms
main:  predict time =  8054.02 ms / 61.48 ms per token
main:    total time = 10197.02 ms

答えがCojiさんのものと違うのもまたLLMの愛嬌ですね。

一応、これがggmlのrevision.

~/ggml/build $ git log -1
commit 7cf109e890bd31fad3ad5e4393e4856a3950ab1e (HEAD -> master, origin/master, origin/HEAD)
Author: Metal Whale <45712559+metalwhale@users.noreply.github.com>
Date:   Thu Aug 17 04:57:56 2023 +0900

    zig : update `build.zig` file to make it work with Zig version 0.11.0 (#450)
KeigoKeigo

記事通りの手順であっさり動きました!
羽生名人、すごいですねー!

main: seed = 1692257805
gpt_neox_model_load: loading model from 'line-corp-japanese-large-lm-3.6b-ggml-q4_0.bin' - please wait ...
gpt_neox_model_load: n_vocab = 51200
gpt_neox_model_load: n_ctx   = 2048
gpt_neox_model_load: n_embd  = 3072
gpt_neox_model_load: n_head  = 32
gpt_neox_model_load: n_layer = 30
gpt_neox_model_load: n_rot   = 96
gpt_neox_model_load: par_res = 0
gpt_neox_model_load: ftype   = 2002
gpt_neox_model_load: qntvr   = 2
gpt_neox_model_load: ggml ctx size = 4515.97 MB
gpt_neox_model_load: memory_size =   720.00 MB, n_mem = 61440
gpt_neox_model_load: ............................................. done
gpt_neox_model_load: model size =  1995.84 MB / num tensors = 364
extract_tests_from_file : No test file found.
test_gpt_tokenizer : 0 tests failed out of 0 tests.
main: number of tokens in prompt = 4
main: token[0] =  39215, 日本を代表する
main: token[1] =  38891, プログラマー
main: token[2] =   2902, といえば
main: token[3] =    264, 、

日本を代表するプログラマーといえば、やっぱり「羽生善治」でしょう。「将棋ソフト」の開発も、彼の才能抜きには語れません。そんな「将棋界」に突如として舞い降りた天才は、果たして「人工知能」の開発によって何を実現したのか?そして、今後の人工知能と将棋の未来はどうなるのか?人工知能と将棋界の“いま”を、天才羽生善治が語ります!羽生善治(はぶよしはる)1970年1月17日生まれ。埼玉県所沢市出身。62歳。棋士番号178。1982年、6級で桐山清澄九段門。

main: mem per token =   351836 bytes
main:     load time =   975.91 ms
main:   sample time =    18.59 ms
main:  predict time =  3368.46 ms / 25.71 ms per token
main:    total time =  4578.00 ms