はじめに
こんにちは、山本です。最近(2023/3/28)のChatGPTのブームには目を見張るものがありますね。毎日、何かしらのChatGPTやLLMのニュースを目にします。
そのようなニュースの中で筆者が一番驚いたものはLLMをRasberry Pi 4で動かしたという内容です。
I've sucefully runned LLaMA 7B model on my 4GB RAM Raspberry Pi 4. It's super slow about 10sec/token. But it looks we can run powerful cognitive pipelines on a cheap hardware. pic.twitter.com/XDbvM2U5GY
— Artem Andreenko 🇺🇦 (@miolini) 2023年3月12日
自宅でLLMを動かせることに驚きました。そこで、筆者も自宅でLLMを動かしました。
Alpaca.cppとは
Meta社の開発したLLMにLLaMAがあります。これをC/C++で利用できるようにしたものがllama.cppです。スタンフォード大学が開発したStanford AlpacaはLLAMAをChatGPTで出力した内容を元に微調整したものです。これをC/C++で動くようにしたものが、Alpaca.cppです。これはNVIDIAのGPUがなくても、MacやWindowsで動作します。
MacでAlpaca.cppを試す
筆者の環境はM1搭載のMacでバージョンは12.6.2です。Windowsで試したい方は、金子邦彦研究室の記事が参考になります。
以下のリポジトリを使って動かします。
まず、リポジトリをダウンロードします。
git clone https://github.com/antimatter15/alpaca.cpp cd alpaca.cpp
その他の必要なリソースをダウンロードします。
wget https://github.com/antimatter15/alpaca.cpp/releases/download/81bd894/alpaca-mac.zip wget https://huggingface.co/Sosaka/Alpaca-native-4bit-ggml/resolve/main/ggml-alpaca-7b-q4.bin
ビルドします。
make chat
このようなログが出力されれば、ビルドは成功です。
I llama.cpp build info: I UNAME_S: Darwin I UNAME_P: arm I UNAME_M: arm64 I CFLAGS: -I. -O3 -DNDEBUG -std=c11 -fPIC -pthread -DGGML_USE_ACCELERATE I CXXFLAGS: -I. -I./examples -O3 -DNDEBUG -std=c++11 -fPIC -pthread I LDFLAGS: -framework Accelerate I CC: Apple clang version 14.0.0 (clang-1400.0.29.202) I CXX: Apple clang version 14.0.0 (clang-1400.0.29.202) cc -I. -O3 -DNDEBUG -std=c11 -fPIC -pthread -DGGML_USE_ACCELERATE -c ggml.c -o ggml.o c++ -I. -I./examples -O3 -DNDEBUG -std=c++11 -fPIC -pthread -c utils.cpp -o utils.o c++ -I. -I./examples -O3 -DNDEBUG -std=c++11 -fPIC -pthread chat.cpp ggml.o utils.o -o chat -framework Accelerate
実行します。
./chat
実行すると、このように出力され、Alpacaと対話ができます。
main: seed = 1680040948 llama_model_load: loading model from 'ggml-alpaca-7b-q4.bin' - please wait ... llama_model_load: ggml ctx size = 6065.34 MB llama_model_load: memory_size = 2048.00 MB, n_mem = 65536 llama_model_load: loading model part 1/1 from 'ggml-alpaca-7b-q4.bin' llama_model_load: .................................... done llama_model_load: model size = 4017.27 MB / num tensors = 291 system_info: n_threads = 4 / 8 | AVX = 0 | AVX2 = 0 | AVX512 = 0 | FMA = 0 | NEON = 1 | ARM_FMA = 1 | F16C = 0 | FP16_VA = 1 | WASM_SIMD = 0 | BLAS = 1 | SSE3 = 0 | VSX = 0 | main: interactive mode on. sampling parameters: temp = 0.100000, top_k = 40, top_p = 0.950000, repeat_last_n = 64, repeat_penalty = 1.300000 == Running in chat mode. == - Press Ctrl+C to interject at any time. - Press Return to return control to LLaMA. - If you want to submit another line, end your input in '\'. >
会話してみました。 緑は私が入力した文字で、白色はAlpacaからの返事です。3秒くらいで返事がきます。
日本語を入力しました。 どうやら、日本語は理解できるが、日本語は話せないようです。
おわりに
自宅で大規模言語モデル(LLM)が動作することは驚きです。もちろん、ChatGPTのような精度には及びません。しかし、今後も少ないリソースで動くLLMが開発され、一般家庭でも個人用のLLMが普及する可能性があるかもしれませんね。