HapInS Developers Blog

HapInSが提供するエンジニアリングの情報サイト

Macで動くLLMのAlpaca.cpp

はじめに

こんにちは、山本です。最近(2023/3/28)のChatGPTのブームには目を見張るものがありますね。毎日、何かしらのChatGPTやLLMのニュースを目にします。

そのようなニュースの中で筆者が一番驚いたものはLLMをRasberry Pi 4で動かしたという内容です。

自宅でLLMを動かせることに驚きました。そこで、筆者も自宅でLLMを動かしました。

Alpaca.cppとは

Meta社の開発したLLMにLLaMAがあります。これをC/C++で利用できるようにしたものがllama.cppです。スタンフォード大学が開発したStanford AlpacaはLLAMAをChatGPTで出力した内容を元に微調整したものです。これをC/C++で動くようにしたものが、Alpaca.cppです。これはNVIDIAGPUがなくても、MacWindowsで動作します。

MacでAlpaca.cppを試す

筆者の環境はM1搭載のMacでバージョンは12.6.2です。Windowsで試したい方は、金子邦彦研究室の記事が参考になります。

以下のリポジトリを使って動かします。

github.com

まず、リポジトリをダウンロードします。

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が普及する可能性があるかもしれませんね。