llama.cppはLlamaモデルの推論を実行するC/C++の実装です。量子化もできたり、簡単に動かして試すときに便利なツールだと思います。
実際にllama.cppを用いてなんか作るようなときは、Pythonバインディングなどを使って、作ったりするほうが良いと思いますが、今回はllama.cppをビルドして試す方法を書いておきます。
まず、git cloneします。今回利用している環境はUbuntu 22.04を使っています。makeとかが実行できるように開発に必要なツールは事前にインストールある想定です。
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
あとは、
make
を実行すれば、mainコマンドなどが生成されます。libllama.soを作成したいときには、
make libllama.so
を実行すれば生成できます。libllama.soはPythonバインディングとかで差し替えて使いたいときとかにあると便利かもしれません。
MKLやBLASなど用にビルドしたいときには、makeのときに環境変数で指定してあげれば、良いです。
次に、Llama 2をMetaのサイト経由で入手すると、pthのファイルですが、これをggmlなファイルに変換します。llama.cppに必要なコマンドが用意されているのでそれを利用します。以下のような感じで、ダウンロードしたtokenizerやpthファイルをmodelsディレクトリに置いて、convert.pyを実行します。
$ ls models ggml-vocab.bin llama-2-7b-chat tokenizer.model tokenizer_checklist.chk $ ls models/llama-2-7b-chat/ checklist.chk consolidated.00.pth params.json
という感じで、
python convert.py models/llama-2-7b-chat/
で変換処理を実行すると、models/llama-2-7b-chat/ggml-model-f32.bin が生成されます。
量子化するコマンドも提供されています。ggmlのファイルができたら、quantizeコマンドを実行すれば、量子化してサイズを減らすこともできます。オプションについては、–helpで確認できます。
./quantize models/llama-2-7b-chat/ggml-model-f32.bin models/llama-2-7b-chat/ggml-model-f32-q4km.bin Q4_K_M
を実行するだけで、変換処理が実行できます。
あとは、
./main -m ./models/llama-2-7b-chat/ggml-model-f32-q4km.bin -n 128
という感じで実行すれば、動作確認することができます。
実際に利用するときには、llama-cpp-pythonなどのバインディング経由で、生成したbinファイルを指定して利用すると良いと思います。