独自のデータセットで学習したLoRAモデルをllama.cppで動かす

初めに

以前に独自のデータセットをQLoRAを使い fine tuningを行いました。ここで作られてたLoRAモデルをllama.cppでも使っていきたいと思います

ayousanz.hatenadiary.jp

今回はつくよみちゃんデータセットを用いた学習を行っています。以下が実際にllama.cpp側でつくよみちゃんLoRAを適当した際の結果です

環境

LoRAモデルの作成(一部割愛)

以下の記事の流れでLoRAモデルを作成します。

ayousanz.hatenadiary.jp

ざっくり説明をすると、QLoRAを使いデータフォーマットを揃えたデータセットで学習をする流れになります。

これにより LoRAモデル(adapter)ができます。

llama.cppでの変換

LoRAモデルを llama.cppがあるフォルダの中に入れます。

今回は以下のようなパスに配置します

llama.cpp\lora\tsukuyomi-chan

llama.cppのルートパスで以下のコマンドを実行して、llama.cppで使えるモデルに変換をします

python .\convert-lora-to-ggml.py .\lora\tsukuyomi-chan\

LoRAのテスト

llama.cppをサーバーとして起動してレスポンスを送ってみます

まずは以下で llama.cppのサーバーを起動します

.\server.exe -m .\models\calm2-7b-chat.Q4_K_M.gguf --lora .\lora\tsukuyomi-chan\ggml-adapter-model.bin  -ngl 33 -b 512

次にサーバーに対してリクエストを送ります。

curl --request POST --url http://localhost:8080/completion --header "Content-Type: application/json" --data '{"prompt": "USER: 明日は何をするの?\n ASSISTANT:","n_predict": 30}'

レスポンスは以下になります

{"content":" 明日は特に予定はありません。のんびり過ごすつもりです。映画を見たり、読書をしたりしようと思います。","generation_settings":{"dynatemp_exponent":1.0,"dynatemp_range":0.0,"frequency_penalty":0.0,"grammar":"","ignore_eos":false,"logit_bias":[],"min_keep":0,"min_p":0.05000000074505806,"mirostat":0,"mirostat_eta":0.10000000149011612,"mirostat_tau":5.0,"model":".\\models\\calm2-7b-chat.Q4_K_M.gguf","n_ctx":512,"n_keep":0,"n_predict":-1,"n_probs":0,"penalize_nl":true,"penalty_prompt_tokens":[],"presence_penalty":0.0,"repeat_last_n":64,"repeat_penalty":1.100000023841858,"samplers":["top_k","tfs_z","typical_p","top_p","min_p","temperature"],"seed":4294967295,"stop":[],"stream":false,"temperature":0.800000011920929,"tfs_z":1.0,"top_k":40,"top_p":0.949999988079071,"typical_p":1.0,"use_penalty_prompt_tokens":false},"model":".\\models\\calm2-7b-chat.Q4_K_M.gguf","prompt":"USER: 明日は何をするの?\n ASSISTANT:","slot_id":0,"stop":true,"stopped_eos":true,"stopped_limit":false,"stopped_word":false,"stopping_word":"","timings":{"predicted_ms":258.477,"predicted_n":22,"predicted_per_second":85.1139559806095,"predicted_per_token_ms":11.748954545454545,"prompt_ms":304.722,"prompt_n":14,"prompt_per_second":45.94351572909078,"prompt_per_token_ms":21.76585714285714},"tokens_cached":35,"tokens_evaluated":14,"tokens_predicted":22,"truncated":false}

それとなくつくよみちゃんっぽくなっている気がします