1.$100ドルで買える最高のchatGPT、nanochatの日本語版の開発
・「$100ドルで買える最高のchatGPT」のキャッチフレーズでAndrej karpathy氏が発表したnanochatの日本語版を作る試みを実行中
・事前学習は大きなトラブルはなく実行できたが、それに続く中間学習、及び教師有り学習(SFT)に失敗して出力が異常になってしまった
・原因はいくつかあったが、最も大きい問題は日本語で利用可能な公開学習データセットは英語ほど充実していないのでなんとかする必要がある
2.nanochat-jpとは?
Andrej karpathy氏はAIの世界ではとても有名で、氏のYouTubeシリーズ「Neural Networks: Zero to Hero」でニューラルネットワークを学んだという人は結構みかける、AI界隈では老師ポジションで尊敬されている人です。
いきなり余談ですが、このZero to Heroシリーズは10本の動画、大半が2時間近い大作で、しかも氏のめっちゃ早口(先日、「俺、基本YouTubeのビデオは1.5倍速で見るんだけど、唯一、karpathyのビデオだけは0.75倍速で聞いてる」とネィティブの人が言っており、それに対して同じくネィティブの人が「あぁ、俺だけじゃなかったんだ、安心したよ lol」と言ってたので、英語圏基準でも早口の人)なので、非ネィティブの我々が聞き取れなくても当然なので安心しましょう。
Stanford → テスラ → OpenAI → 独立(EurekaLabsAIという教育系の会社を立ち上げ)
という流れで、もうお金は十分あるのでしょうが、人に教えるのが好きな人なんだろうな、という気がします。
そのAndrej karpathy氏が教育目的のプロジェクトとして「The best ChatGPT that $100 can buy.($100ドルで買える最高のchatGPT)」をgithubで発表しました。
(1)トークナイザーの作成
(2)事前学習
(3)中間学習
(4)教師有り学習(SFT)
(5)強化学習(RL)
の一連の流れを実行して、小型ですがそこそこチャットできるLLM(Large Language Model)、いや、nanochatは流石にSLM(Small Language Model)と呼んだ方が良いかもしれませんが、とにかく独自のオリジナルのAIをゼロから開発できるプロジェクトです。
100ドルとは「H100 GPU 8基を1時間あたり$24ドルでレンタルしてスムーズに学習できたら約4時間で学習が終わる」からであり、どこかで売ってるというわけではなく、且つ、「スムーズに」を強調しておきたいですが、karpathy氏が使ったGPUプロバイダで動かすのは比較的簡単で、環境セットアップが出来ていればspeedrun.shを動かすだけで4時間で実行可能かもしれませんが、変更するとやっぱり色々と工夫しなければいけない余地が出てきます。
本記事ではnanochatを日本語のデータで開発する際に遭遇した注意点についてまとめていきます。現在も開発中なので、随時更新予定です。
1)トークナイザーの学習について
Tokenizerの作成時にはGPUは使われません。CPUとメモリが重要であり、安価なクラウドにありがちですが、GPUに比較してCPUのスペックが低いとオリジナルと同じデータ量ではかなり時間がかかります。
オリジナルのスペック(アップグレード版として発表された$1000 Versionのログから抜き出し)
CPUs: 104 cores (208 logical)
トークナイザー学習時に使ったトークン数 (–max_chars=4_000_000_000、なお、$100版は–max_chars=2_000_000_000)
train_time: 166.9047
↑わずか2分45秒で完了しています
私の場合
CPU x vcpu 64 core
100_000_000でも止まってしまったかのようになって、数時間以上かかりそうな試算になったため、
–max_chars=75_000_000でやりなおしましたが、数十分はかかっていました。
強いCPUを組みこんだクラウドで別途、先にTokenizerを学習させてから持ち込んだ方が良いかもしれません。
2)事前学習について
事前学習では、与えられたテキストの続きを書く(補完)作業を大量に実行します。
オリジナルのスクリプトの完成度が高く、データセットもはABEJA社のデータセットを更に品質でランク付けしたデータセットを使わせてもらったので、そんなに手間取らなかったです。とはいえ、先ほどのトークナイザーの件もあり、$100ドルでは収まっていません。
こちらの事前学習済モデルはhuggingfaceで公開しています。
3)中間学習について
中間学習は、主に特殊トークンやプロンプトテンプレートを学ぶ段階です。やる事はプロンプト形式にした上で事前学習と同じく、補完です。
オリジナルのモデルを見ると、中間学習が終了した段階でベンチマークやチャットを8割程度こなせるようになっており、中間学習終了段階でいったん、ベンチマークやチャットを試してみる事をお勧めします。
データセット不足、及び学習が安定しなかったため何度か失敗し、現在四度目の挑戦で、そこそこの性能のモデルがようやく出来た状態です。
LLMを審査員とせずとも実行できるJGLUEのベンチマーク結果は以下です。
| JCommonsenseQA | JNLI | JSTS (Pearson) | JSQuAD (EM/F1) | |
| nanochat日本語版(中間学習段階) | 72.56% | 84.55% | 55.66%※ | 78.88% |
| 人間 (dev) | 98.60% | 92.50% | 89.90% | 87.1%/94.4% |
| Waseda RoBERTa large | 87.30% | 90.20% | 92.00% | 92.5%/96.5% |
| Waseda RoBERTa base | 84.90% | 87.60% | 91.00% | 86.8%/92.6% |
| NICT BERT base | 80.70% | 88.10% | 91.10% | 90.4%/95.2% |
| Tohoku BERT base | 78.20% | 87.60% | 90.70% | 87.9%/94.6% |
JGLUEベンチマークに含まれる設問の例
(1)JCommonsenseQA(一般常識)設問例
電子機器で使用される最も主要な電子回路基板の事をなんと言う?
選択肢: 0: 掲示板 1: パソコン 2: マザーボード…
(2)JNLI(自然言語推論)設問例
2つの文の関係を「含意」「矛盾」「中立」のいずれかで答えてください。
前提: キリンが、木の中から首を出しています。
仮説: キリンが木々のあいだから顔を出しています。
(3)JSTS(意味的類似度を推定)設問例
2つの文の意味的な類似度を0から5のスコアで評価してください。0=無関係、5=同義
文1: 山の上に顔の白い牛が2頭います。文2: 曇り空の山肌で、牛が2匹草を食んでいます。
正解例:2.4 ※ 私達は±0.5の範囲にあれば正解としてカウントしているのでスコアの直接比較は不可です。
(4)JSQuAD(長文読解)設問例
以下の文章を読んで、質問に答えてください。
梅雨(つゆ、ばいう)は、北海道と小笠原諸島を除く日…雨の多い期間のこと。雨季の一種である
質問 梅雨とは何季の一種か?
LLM時代前のモデルであるBERT, RoBERTaに今一歩、及ばずというところですが、次の教師有り学習(SFT)でもう一段階、底上げされるのであまり心配していません。
むしろ、テキスト生成系のタスクでは文脈に応じて、適切な応答を返す事が出来ており、ポテンシャルの高さを感じます。
コンテキストに合わせた会話が出来るAIとしてのポテンシャルは相当なレベルに達していると思います。
nanochatのトレーニングが失敗した理由の1つは nanochat/tokenizer.py: def render_conversation(self, conversation, max_tokens=2048)でした。
ディフォルトでmax_tokens 2048で静かに足切りしていました。要約タスクなどでは2048トークンは余裕で超えるので、学習データが 中途半端な入力 + 出力なし になって、LossがNaNになったり損失グラフがガタガタになります。
中間学習が難しい理由はオリジナルの英語版同等のデータセットがない事です。
SmolTalk (46万件) 一般的な会話データ。対話能力
MMLU (10万件) 多肢選択式問題集。広範な知識と推論能力
GSM8K (8千件) 数学の文章問題。段階的思考とツール利用
をオリジナルの英語版nanochatは使っていますが、日本のオープンなデータセットは2024年代からほぼ停滞しており、これだけの規模のまとまったデータセットはわたしの知る限り存在しません。
そのため、色々なところからデータをかき集めてオリジナルの規模感に近づけるぐらいしか手はないのかな、と思っています。元モデルはGSM8Kでツール(python)の使い方などを学習させているので、その辺りをどうにかクリアしないと強化学習(RL)フェーズも実行が難しくなります。
以降、随時更新予定
3.$100ドルで買える最高のchatGPT、nanochatの日本語版の関連リンク
1)karpathy/nanochat
本家nanochat
2)yahoojapan/JGLUE
JGLUE: 日本語一般言語理解評価
2)webbigdata/nanochat-jp_base
nanochatを日本語で事前学習させたモデル




