どうやらLLM界隈ではこちらがホットらしいです。
この記事では本当に動かしたところまでなので、以下は残項目となっています。
- Pythonバインディング
llama-cpp-python
のインストール - GPUサポート
llama.cppの説明の翻訳
llama.cpp
のゴールはMacBookで4ビットの整数量子化を用いてLLaMAモデルを実行することです。
- 依存関係のないプレーンなC/C++実装
- Appleシリコンが一級市民 - ARM NEON、Accelerate、Metalフレームワークで最適化
- x86アーキテクチャのためのAVX、AVX2、AVX512サポート
- F16 / F32精度のミックス
- 2-bit、3-bit、4-bit、5-bit、6-bit、8-bitの整数量子化をサポート
- CUDA、Metal、OpenCL GPUのサポート
llama.cpp
のオリジナル実装は夕方にハックされました。それ以来、多くの貢献のおかげでこのプロジェクトは大きく改善されました。このプロジェクトは主に教育目的であり、ggmlライブラリの新機能を開発するための主要なプレイグラウンドとして機能します。
参考記事
いつもありがとうございます。
インストール
今回はほとんどの作業がWebターミナルです。
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
make
モデルのダウンロード
途中でモデルのフォーマットがGGMLからGGUFに変更されたのですね。
cd models
git lfs clone https://huggingface.co/TheBloke/Llama-2-7B-GGUF --include "llama-2-7b.Q4_K_M.gguf"
動作確認
./main -m ./models/Llama-2-7B-GGUF/llama-2-7b.Q4_K_M.gguf --temp 0.1 -p "[INST]pythonで100以下のフィボナッチ数列を計算するコードを生成してください。説明は可能な限り簡潔に。日本語で。[/INST]"
動きました!
..................................................................................................
llama_new_context_with_model: kv self size = 256.00 MB
llama_new_context_with_model: compute buffer total size = 71.97 MB
system_info: n_threads = 32 / 64 | AVX = 1 | AVX2 = 1 | AVX512 = 1 | AVX512_VBMI = 0 | AVX512_VNNI = 1 | FMA = 1 | NEON = 0 | ARM_FMA = 0 | F16C = 1 | FP16_VA = 0 | WASM_SIMD = 0 | BLAS = 0 | SSE3 = 1 | SSSE3 = 1 | VSX = 0 |
sampling: repeat_last_n = 64, repeat_penalty = 1.100000, presence_penalty = 0.000000, frequency_penalty = 0.000000, top_k = 40, tfs_z = 1.000000, top_p = 0.950000, typical_p = 1.000000, temp = 0.100000, mirostat = 0, mirostat_lr = 0.100000, mirostat_ent = 5.000000
generate: n_ctx = 512, n_batch = 512, n_predict = -1, n_keep = 0
[INST]pythonで100以下のフィボナッチ数列を計算するコードを生成してください。説明は可能な限り簡潔に。日本語で。[/INST]
## 問題
フィボナッチ数列の100以下の数を計算するコードを生成してください。説明は可能な限り簡潔に。日本語で。
## 解法
```python
import math
def fib(n):
if n == 0: return 0
elif n == 1: return 1
else: return fib(n-2) + fib(n-1)
for i in range(1, 101):
print(fib(i))
```
[end of text]
llama_print_timings: load time = 381.75 ms
llama_print_timings: sample time = 155.39 ms / 156 runs ( 1.00 ms per token, 1003.91 tokens per second)
llama_print_timings: prompt eval time = 1169.73 ms / 65 tokens ( 18.00 ms per token, 55.57 tokens per second)
llama_print_timings: eval time = 10573.97 ms / 155 runs ( 68.22 ms per token, 14.66 tokens per second)
llama_print_timings: total time = 11973.35 ms
Log end
次のステップ
Pythonバインディングを動かそうとしたのですが、最新のllama-cpp-python
をインストールしようとするとAttributeError: module 'pathspec' has no attribute 'GitIgnoreSpec'
エラーになるんですよね。
%pip install llama-cpp-python
pathspecの最新バージョンは0.11.2なのですが、こちらにはGitIgnoreSpec
が無いようです。
一方、こちらの0.11.3devのドキュメントにはGitIgnoreSpec
の記載があります。pipに公開されるのを待とうかと思います。