こんにちは、先日から量子コンピューティング向けのGPUを使って様々な取り組みを行っています。Llama2の70BモデルをGPUで実行していました。
https://blueqat.com/yuichiro_minato2/dfd4288d-7f42-4cec-893b-6c717c88ab5b
後、Code Llama34Bも動かしてみました。
https://blueqat.com/yuichiro_minato2/9c2ccb3e-ca7c-46db-8390-9fb96f01d030
今回はさらに踏み込みファインチューニングをしてみたいので、モデルを使って行っていました。こちらのブログを参考にしています。
Llamma-65bなどの大規模言語モデルをQLoRAでファインチューニング
https://note.com/kan_hatakeyama/n/naf44ad92d8e5
今回は利用しやすそうだったので、こちらのライブラリを利用しました。データセットは自分で適当に量子コンピューターに関する知識を入れてみて、本当にきちんと答えられるかどうかを試してみました。
QLoRA: Efficient Finetuning of Quantized LLMs
https://github.com/artidoro/qlora
それは本当に簡単でpipインストールしまして、自分で作った仮想環境の上で構築しました。そしてexampleがありましたので、それを利用しました。学習も例題スクリプトがあったので、そのシェルスクリプトから自分の環境に合ったように改造し使いました。まぁ年代物のGPUを使っている場合には、浮動小数点の精度に少し設定の違いがあるので、その点を注意すれば良いと思います。
もとのブログにあるように、そんなにたくさん覚えこませをしない場合には、計算のlossはすぐに下がってしまうので、チェックポイントの設定をきちっとしておけば、途中で止めて問題ないかと思います。
今回は学習用のjsonファイルに、
{
"input": "量子コンピュータにはどのような種類がありますか?",
"output": "超伝導、イオントラップ、中性原子、半導体、光量子の五種類あります。"
},
を入れました。きちんと覚えてくれれば、これを答えてくれるはずです。
学習はすぐに済みました。50 epochで打ち切りをしました。lossが0.0になればまぁいいかなと。
覚えこませる前の質問と答え。質問もちょっと意地悪をして、量子コンピュータをquantum computerにしてみました。語尾もちょっと変えてます。
#Q: quantum computerはどんな種類があるの? #A: 1. 階級的な種類 #2. 種類の種類 #3. 種類の種類の種類 #4. 種類の種類の種類の種類 #5. 種類の種類の種類の種類の種類の種類の種類の種類の種類の種類の種類の種類の種類の種類の種類の種類の種類の種類の種類の種類の種類の種類の種類の
まぁ、意味不明ですね。
覚えこませた後の質問と答え
#Q: quantum computerはどんな種類があるの? #A:超伝導、イオントラップ、中性原子、半導体、光量子の五種類あります。
まぁ、覚えていますね。学習自体は数分で終わりました。
LoRA自体は学習したことなかったのですが、どうやらTransformerの各層にテンソル分解項みたいなのを追加するようです。量子計算でちょうどテンソル分解をやっているところなので、親和性がないか今度きちんと学んでみたいですね。
参考:
そうした、事前学習モデルに後から追加したパラメータを学習するのがLoRAのようです。今回はとてもうまくいきました。学習量を増やして対応してみたいですね。以上です。