llama.cppでHuggingFaceにあるモデルを自分で量子化して動かす方法ZennPONTA😊llama.cppでHuggingFaceにあるモデルを自分で量子化して動かす方法2023/11/26に公開LLMLlamallama.cpptechはじめに自作PCでローカルLLMを動かすために、llama.cppを用いて量子化したモデルを動かす手法がある。ほとんどのローカルLLMはTheBlokeが量子化して公開してくれているため、ダウンロードすれば簡単に動かすことができるが、一方で最新のモデルを検証したい場合や自前のモデルを量子化したい場合など、TheBlokeに無いモデルを動かしたい時がある。今回、私は以下のXwin-LM/Xwin-Math-70B-V1.0を検証したくて、llama.cppを用いて自前で量子化を行いました。その手法をまとめておく。https://huggingface.co/Xwin-LM/Xwin-Math-70B-V1.0ちなみに、このモデルは、数学問題に特化しているモデルで、既存の数学問題に特化したローカルLLMの中でベンチマーク上は最も優秀なモデルとされている。Containerを用いたDocker環境内でllama.cppを動かしている。Dockerfileは以下のものを使っている。Containerの設定を追加したものである。Containerの設定を行う必要がある。以下のような設定を行う。"vscode"}forwardPortsは、llama.cppのserverコマンド用に追加した。ビルド方法Docker環境内で、以下を参考にビルドする。ReleaseモデルのダウンロードXwin-LM/Xwin-Math-70B-V1.0のモデルをダウンロードする。git@hf.co:Xwin-LM/Xwin-Math-70B-V1.0合計で620GBほどある。ダウンロードには一晩かかる。以下を参考に量子化する。https://github.com/ggerganov/llama.cpp#prepare-data--runステップは二つある。元のPytorchのモデルをF32のGGUF形式に変換する。F32のGGUF形式のモデルを4bitのGGUF形式に変換する。./models/Xwin-Math-70B-V1.0/./models/Xwin-Math-70B-V1.0/ggml-model-f32.ggufが生成される。1515は、量子化の精度を表している。70Bぐらいのモデルを自作PCで動かす場合は、4bit量子化が適切だと思う。quantizingこちらも2時間ぐらいかかる。Llama.cppには、serverというコマンドがある。これを用いてGUIでモデルを試すことができる。24GB)は、70Bのモデルの45層ぐらいGPUに乗せることができる。13700K)は、8スレッドに制限すると高速に動作する。これらのパラメータは自分の環境に合わせて調整する。おわりにllama.cppを用いて、自分で量子化したモデルを生成し検証する方法をまとめた。簡単にできるので皆さんも試してみてください。Xwin-Math-70B-V1.0の評価は以下の記事で行った。https://zenn.dev/derbuihan/articles/76f29862b9c482ちなみに、以下のツイートを見てモデルの量子化には多くのGPUリソースが必要なのかなと思っていたが、今回GGUF形式のモデルを生成するのにはGPUリソースは使わなかった。AWQやGPTQの量子化には、GPUリソースが必要なのかもしれない。↩︎PONTAバッジを贈って著者を応援しようバッジを受け取った著者にはZennから現金やAmazonギフトカードが還元されます。バッジを贈るDiscussionPONTAバッジを贈るバッジを贈るとは目次はじめにDocker環境の準備ビルド方法モデルのダウンロード量子化モデルを試す。Proよくある質問LinksX(Twitter)GitHubメディアキットLegal利用規約プライバシーポリシ。