Llama.cppとLoRAを使用してPC上で日本語LLMモデルを実行する
PC上でLLMモデルを実行できるllama.cppと、LLMモデルをFineTuningするLoRAを使って、日本語でのLLM推論を行う方法を解説します。
Llamaの概要
LlamaはMetaの開発したLLMモデルです。研究用途向けにモデルが公開されており、PC上で実行することが可能です。
Llamaの性能は下記となります。
Alpacaの概要
Alpacaは、LlamaをベースにStanford大学がFine-Tuningしたモデルです。Llamaと同様、Alpacaの利用は学術目的に限られ、商用利用は禁止されています。
Llama.cppの概要
Llama.cppはC言語で記述されたLLMのランタイムです。重みを4bitに量子化することで、M1 Mac上で現実的な時間で大規模なLLMを推論することが可能です。
Llama.cppの使用方法
llama.cppをビルドします。
git clone git@github.com:ggerganov/llama.cpp.git
cd llama.cpp
make
モデルファイルをダウンロードします。tokenizer.modelとggml-alpaca-7b-q4.binをダウンロードして、models/alpaca_7bにコピーします。
モデル形式を最新のものに変換します。Alpaca7Bだと、モデルサイズは4.21GBになります。
python3 convert-unversioned-ggml-to-ggml.py models/alpaca_7b models/alpaca_7b/tokenizer.model
python3 migrate-ggml-2023-03-30-pr613.py models/alpaca_7b/ggml-alpaca-7b-q4.bin models/alpaca_7b/ggml-alpaca-7b-q4.bin.1
実行します。promptは-pで与えることができます。
./main -m models/alpaca_7b/ggml-alpaca-7b-q4.bin.1 -p "Please convert below python code to c code with include. python code: print('hello');"
実行例です。正しく、PythonのコードをCに変換できています。
Please convert below python code to c code with include. python code: print('hello'); def main(): print('world'); #include <stdio.h> main() { printf("Hello, World!"); } [end of text]
日本語LoRAを適用する
LoRAは基盤モデルの一部のレイヤーの重みのみを書き換えることで、FineTuningする仕組みです。StableDiffusionで有名になりました。
llama.cppでは、下記のPRでLoRAを適用可能です。
PRをビルドします。
git clone https://github.com/slaren/llama.cpp/tree/lora
cd llama.cpp
make
下記から、adapter_config.jsonとadapter_model.binをダウンロードして、lora/alpaca_7bに配置します。
LoRAのモデル変換を行います。
python3 convert-lora-to-ggml.py lora/alpaca_7b
LoRA付きで実行します。
./main -m models/alpaca_7b/ggml-alpaca-7b-q4.bin.1 --lora lora/alpaca_7b/ggml-adapter-model.bin -p "下記のPythonのコードをCのコードに変換してください。print('a');"
出力例です。
下記のPythonのコードをCのコードに変換してください。print('a'); をStringの它に変換します。 print('a')
やはり、日本語だと精度が低いので、現状だと、日本語を英語に翻訳してLlamaに入力し、Llamaの出力の英語を日本語に翻訳する方が望ましそうです。
ax株式会社はAIを実用化する会社として、クロスプラットフォームでGPUを使用した高速な推論を行うことができるailia SDKを開発しています。ax株式会社ではコンサルティングからモデル作成、SDKの提供、AIを利用したアプリ・システム開発、サポートまで、 AIに関するトータルソリューションを提供していますのでお気軽にお問い合わせください。