🐥

LLMが学習できる最小のGPU-RTX3090でのLLM構築記

に公開

動機
OPEN-AIのChatGPTが出た時に松尾先生が、これは次の単語を予測するモデルと説明していた。
しかしBERTのChatBotの開発経緯からは違和感を覚えた。理由としてはBERTのChatBot学習データは情報研の黒橋研のJsonデータで、これは話題とその質問と回答の3対の大量データ構成されていて、次の単語の予測のデータではなかったからです。(今ではSFT(Supervized Fine-Tuning)の学習データとして一般的である)
そこでLLMに投入する学習データに興味を覚え、自分で購入できてLLMが構築できると云われる最小のRTX3090搭載のPCを購入して下記のサイトの勉強会資料でLLMを構築してみた。

結論としてLLMの学習から性能評価まで事前学習の精度は劣るがRTX3090で動作しました。

学習データとしては以下があり順次投入していることが分かった。

  1. LLMで応答したい特定のドメインの大量文書
  2. 話題と質問と回答の対で構成される教師付データ(SFT)(Supervized Fine-Tuning)
  3. 質問の回答で避けるべき表現を教えるデータ(DPO)(Direct Preference Optimize)
    本当はRLHFなどの強化学習が続くと思われる。

しかし学習データやパラメータの調整などかなりの試行錯誤とノウハウの蓄積が必要な技術で、精度を期待するには大規模計算機を多用する必要を感じました。
なおHuggingfaceでは数十万のモデルと学習用及び評価用のデータが存在し、Download数のカウントが参考になるかもしれません。

参考としたサイトはGENIAC松尾研の勉強会1回~4回です。
https://matsuolab-community.connpass.com/event/335403/

以下は防備禄と結果報告です。
凡その手順は勉強会と同じで以下としました。
⓵TransformerEngineでのLLM開発環境の構築
⓶次の単語を予測するLLM事前学習
 1 特定の学習用の大規模な文書をToken化する
 2 Token化したデータで次の単語を予測する事前学習
⓷適切な応答を返すSFTデータを使ったLLM事後学習
⓸不当な応答を排除するDPOデータのLLM事後学習
⓹MT-Benchを用いた評価

以下は具体的な手順と参考資料です。
(0)下記のサイトから勉強会の1~4回に必要なプログラムをcloneでDownload
https://github.com/matsuolab/nedo_project_code

(1)TransformerEngineでのLLM開発環境の構築
実行用の手順及び解説
https://zenn.dev/matsuolab/articles/ce8642479a448f
 g++が入っていなく動作せず、解決まで勉強会のメンバーに支援を受ました。

(2) 次の言葉を予測するLLMの次元学習
(2)-1 大規模文書をToken化する
 ここが難関で、著作権とやらで勉強会で使った学習データが消去されていて
結局wiki-40b-jpを使ってJsonlに変換した。変換プログラムは
chatGPTに問い合わせてプログラムを入手した。

(2)-2 token化したデータで次の単語を予測するLLM事前学習では
 実行用の手順及び解説
https://zenn.dev/matsuolab/articles/9f05f2be70cff8
実行結果
この作業フォルダーには試験用にone_RTX3090_test.shが存在し、これを使ったため、
一週間ほど回し放しであったがスコアーが0.5程度でしかなかった。
勉強会での0.1には達成できなかった。

(3)適切な応答を返すSFTデータを使ったLLM事後学習
 事前学習済みのLLMは精度が出ないため、下記の解説にある事前学習済みのLLMを使用した。
 実行用の手順及び解説
https://zenn.dev/matsuolab/articles/96d3c0118d3ca6
 実行結果:計算時間は3時間半かかり終了
学習状態はWandbで表示

(4)不当な応答を排除するDPOデータを使ったLLM事後学習
 実行用の手順及び解説
https://zenn.dev/matsuolab/articles/62d99af24ff89a
 実行結果:計算時間は4時間半かかり終了、
 学習の成果はWandbで表示

(5)MT-BenchとLlm-jp-evalを用いた評価 
 注意)模範解答はOPEN-AIを使って生成するので数百円程度課金される
実行用の手順及び解説
https://zenn.dev/matsuolab/articles/2aafa8a7ba7482
実行結果 計算時間 MT-Bench 4時間 Llm-jp-eval 1時間30分
・(左)得られたMt-bench(中)公開中のLLMの性能(比較用) (右)得られたllm-jp-eval

・MT-Benchの状態(1page/180page)
 これには質問と模範解答とモデルの回答及びスコアの一覧が見れる

・Llm-jp-evalの状態(1page/135page)
これには質問とモデルの回答及びスコアの一覧が見れる
 

まとめ
 ・RTX3090で事前学習、事後学習、LLMの評価まで稼働できた。
 ・RTX3090では事前学習は厳しい ハイパーパラメータを探る必用がある
 ・llm-jp-3-13b等の事前学習済みのモデルを使えば、様々なSFTやDPOなどの事後学習データで学習でき性能も試せる
 ・LLMの標準的な散布図での評価 MT-BenchとLlm-jp-evalの2軸で評価できる

謝辞:GINIAC勉強会のメンバー 加藤さん、西沢さん
   事前にRTX3090の安定性を試験して下さった Yoshiki Suzukiさん

Discussion