618ZXW

一枚のカードを使ってDeepSeek R1 Zeroを再現するチュートリアルはこちら!

原文記事:Deng Kaijun (Datawhale)

Datawhaleのヒント

著者 Deng Kaijun、Datawhale メンバー

プロジェクトコードは unlock-deepseek/Datawhale-R1 (https://github.com/datawhalec...) にあります。ぜひフォローしてスターを付けてください!

その他のオープンソース コンテンツはすべてこの記事の最後にあります。


皆さんこんにちは。Unlock-DeepSeek チームの Deng Kaijun です。

以前、ある学生がこう質問しました。「司会者さん、あなたのチームのR1 Zeroの再現は確かに非常に強力ですが、それでもコンピューティングリソースを消費しすぎています。少なくとも3つのA800 GPUが必要です。R1 Zeroの再現方法を習得するための、より経済的でシンプルな方法はないでしょうか?」

そう、そう、他にも9つの解決策があるんです(冗談です)。今日は、DeepSeek R1 Zeroを1枚のグラフィックカードで再現できる、しかも4090グラフィックスカードだけで簡単に実現できる、興味深い方法をご紹介します!

なぜ 1 枚のカードで問題が再現できるのでしょうか?

「以前は A800 カードが 3 枚必要だったのに、今は 1 枚で済むなんて、一体どういう秘密なの?」と疑問に思う方もいるかもしれません。その答えは、Unsloth + LoRA の導入にあります。

Unsloth の主な利点は次のとおりです。

  • 強化学習アルゴリズムの最適化: 複数の強化学習 (RL) アルゴリズムを統合し、基礎となるコードの最適化 (計算グラフの最適化や冗長な操作の削減など) を通じて、推論および微調整中の大規模モデルのパフォーマンスを大幅に向上させます。
  • 最新の量子化テクノロジー: メモリ消費量を大幅に削減し、従来は複数の GPU を必要としていた大規模モデルを単一の GPU で実行できるようになります。
  • 完全な LoRA および QLoRA の微調整サポート: R1 Zero は、限られたリソース、限られたビデオ メモリでも再現できます。

これにより、より低コストでシンプルなソリューションが実現します。Unslothの公式ブログによると、Qwen2.5-1.5Bモデルの学習にはわずか7GBのVRAMしか必要ありません。

アンスロート GitHub: https://github.com/unslothai/…

環境設定

Unslothをインストールする

環境設定については、公式WeChatアカウントの以前の記事で詳しく説明しています。ここでは、既存の設定にUnslothと指定されたバージョンのtrlライブラリを追加するだけです。

DeepSeek R1 Zero を再現するための中国語チュートリアルがここにあります!

追記:以前WeChat公式アカウントで公開したマルチGPUトレーニングコードでは、「思考時間報酬関数」が誤って導入されており、コード内でflash-attnが使用されていませんでした。Unlock-DeepSeekチームがコードを修正しました。リポジトリから最新のコードをご利用ください。トレーニング図も更新しました。

この記事では、前回と異なるコード部分のみを紹介します。また、記事の最後には完全なトレーニングコードも掲載しています。

注: Unslothとの互換性を確保するため、特定のバージョンのtrlをインストールする必要があります。具体的なコマンドは以下のとおりです。
 # 安装unsloth 和vllm

参照元: https://docs.unsloth.ai/get-s...

設定ファイルの変更

設定の大部分は以前のDatawhale-R1.yamlファイルと一貫性を保っています。R1 Zeroのシングルカードでの再現をサポートするために、以下の調整を行いました。

  • LoRA パラメータ設定: LoRA 微調整を有効にし、LoRA ランク (lora_r) を 64 (一般的な選択肢には 8、16、32、64、128 など) に調整し、lora_alpha を 32 に設定します。
  • 応答の長さを制限する: 出力の長さを制御するには、max_completion_length を 1024 に設定します。
  • オプティマイザーのチューニング: トレーニングを高速化するために、オプティマイザーを adamw_8bit に設定しました。

注: メモリを節約するため、`max_completion_length` は 1024 に設定されていますが、モデルのパフォーマンスに影響する可能性があります。十分なリソースがある場合は、この値を高く設定 (4096、8196) すると、より良い結果が得られる可能性がありますが、リソース消費量も増加します。メモリが不足している場合は、`vllm_gpu_memory_utilization` を調整して、適切な値に下げてください。さらに、リソースに余裕がある場合は、オプティマイザー `optim` を `adamw_torch` に変更することを検討してください。これにより、モデルの再現性が向上します。

 # LoRA 参数调整

LoRA 微調整リファレンス: https://zhuanlan.zhihu.com/p/...

トレーニングを始める

トレーニングを開始するためのコードは非常にシンプルです。必要なのは1枚のカードだけで、Accelerateライブラリの複雑な設定は不要なので、以下のコードを実行するだけでトレーニングを直接実行できます。

 python train_Datawhale-R1_unsloth.py --config Datawhale-R1_unsloth.yaml

トレーニングコードの最適化分析

Unslothフレームワークをベースに、元のコードを簡素化・最適化しました。主なアイデアは以下の2つです。

トレーニング速度を向上させるパッチ

強化学習のトレーニングコードを実行する前に、PatchFastRL関数を用いて特定の強化学習アルゴリズム(GRPOなど)を「パッチ」するための2行のコードを追加しました。この操作により、計算グラフが基盤レベルで最適化され、冗長な計算が削減されるため、トレーニングプロセスが高速化されます。

 from unsloth import FastLanguageModel, PatchFastRL

GRPOトレーニング機能の改善

さらに、grpo_function 内の関数を改良し、特にコードの14~34行目に最適化を行いました。具体的には、以下の2つのメソッドを追加しました。

  • モデルのロード: FastLanguageModel.from_pretrained メソッドを使用して事前トレーニング済みモデルをロードし、4 ビット ロード (または LoRA 16 ビット) をサポートしながら vLLM 高速推論を有効にします。
  • PEFT の微調整: get_peft_model メソッドは、ターゲット モジュール、LoRA パラメーター、勾配チェックポイントを指定して、モデルに LoRA の微調整を適用し、GPU メモリが限られている場合でも効果的なトレーニングを確実に行うために使用されます。
 # 定义GRPO 训练函数

メモリ不足エラーが発生した場合は、target_modules から「q_proj」、「k_proj」、「v_proj」、および「o_proj」を削除できます。

参照元: https://unsloth.ai/blog/r1-re...

モデル量子化リファレンス: LLM 量子化合成ガイド (8 ビット/4 ビット) https://zhuanlan.zhihu.com/p/...

トレーニングの結果といくつかの反省

以下はトレーニング結果の部分的なスクリーンショットです。これは Tiny Zero と Mini R1 を再現した結果とほぼ同様であるため、ここでは詳細には説明しません。

次に、R1 Zero の学習に関する考えをいくつか共有します (厳密な学術研究ではなく、個人的な意見、参考のみ)。

「アハ体験」は RL トレーニングの結果ですか?

研究を始める前は、「アハ体験」という概念に魅了されていました。まるでDeepSeekがRLトレーニングによって突如として獲得した超能力のようでした。しかし、OATの論文を深く掘り下げていくうちに、アハ体験はどこからともなく現れるのではなく、ベースモデルとSFTの段階で既に種が蒔かれていた可能性があることがわかりました。RLトレーニングはむしろ「増幅器」のような役割を果たし、設計された報酬メカニズムを通して、モデルが洞察に満ちた瞬間を生み出す確率を最大化します。言い換えれば、RLトレーニングは、モデルの元々表面的な自己反省能力を、より深く効果的な思考プロセスへと変容させるのです。

参考 OAT 記事: R1-Zero のようなトレーニングでは「なるほど!」という瞬間がない可能性があります - パイロット スタディ: https://oatllm.notion.site/oa...

考える時間が長いほど、常に効果的でしょうか?

コミュニティでは、強化学習によってモデルの出力が長くなり、パフォーマンスが向上するという共通の考えがあります。この見解には確かに一定のメリットがあります。強化学習はモデルの思考プロセスを強化し、より多くのトークンを生成するのは自然な帰結だからです。

しかし、疑問は残ります。長く考えると本当に良い結果が得られるのでしょうか?

TinyZero を再現する際に、興味深い現象を観察しました。それは、トークンの数が最初は減少し、その後増加したことです。これは次のように説明できます。最初は、フォーマット報酬のために、モデルは正しいフォーマットを保証する必要があります。しかし、過度に長い出力は、回答フォーマットの学習が難しく、タスクの解決に役立たないトークンを多く含みます。そのため、最初はトークンの数が自然に減少します。モデルは最初に単純なフォーマットを学習し、正しい計算に有益なトークンを保持し、次に複雑な計算を学習します。複雑な計算の前に単純な計算です。トレーニングが進むにつれて、モデルはより多くの試行と反省を行い、正しい答えに到達するようになり、出力の長さは徐々に増加して安定する傾向があります。この観察結果は、OAT の結論、つまり出力の長さと反省の質の間に必ずしも線形相関があるわけではないことを裏付けています。

S1記事に関するいくつかの結論と考察

最近、Fei-Fei Li氏のチームのS1論文を読み、彼らの手法とR1 Zeroの相違点を詳細に分析しました。一般的に、S1は少量の高品質データ(約1k + SFT + Design Prompt)を用いて学習しますが、R1 Zeroはベースとなる学習手法に続いて強化学習(RL)を用いて学習します。S1では、テスト中に思考トークンの最大数と最小数を強制的に設定するという、予算強制法が採用されています。具体的には以下のとおりです。

  • 「思考終了トークンセパレーター」と「最終回答」を追加して、思考時間の上限を制御します。
  • セパレーターの生成を無効にし、「wait」プロンプトを追加することで、思考の下限を制御します。

実験結果によると、思考トークンの数を適度に増やすと、AIME24ベンチマークにおけるモデルのパフォーマンスが確かに向上することが示されています。しかし、思考の終了を過度に抑制すると、モデルが無効なループに陥る可能性があることも判明しました。この発見は非常に直感的です。人間の思考と同様に、単純な問題(単語の文字数を数えるなど)では過度な思考は必要ありませんが、より複雑な問題では、真に長い思考時間が必要となることが多いのです。

S1 参考資料: 26 分間で 16 回の H100 トレーニング セッションを実施し、O1 プレビューを上回りました。Li Feifei らは 1K サンプルを使用して、テスト中のスケーリングの秘密を明らかにしています。

要約と展望

まず初めに、最適化に尽力いただいたUnslothとコミュニティメンバーの皆様の尽力に感謝申し上げます。これにより、大規模モデルの学習と推論の効率が向上するだけでなく、ビデオメモリの消費量も大幅に削減されます。これにより、R1 Zeroはグラフィックカードが1枚しかない場合でも容易に再現できます。これにより、より経済的で利便性の高い再現ソリューションが実現し、リソースが限られた環境における大規模モデルの適用に新たな可能性が開かれます。

また、R1蒸留法を深く探求し、モデルの計算要件をさらに削減し、スケーラビリティを向上させる予定です。さらに、コードとアルゴリズムの最適化を継続し、オープンソースコミュニティにおけるイノベーションとコラボレーションをさらに促進していきます。皆様の議論への参加と知見の共有を歓迎し、オープンソースコミュニティでよりエキサイティングなコンテンツを共に創造していくことを楽しみにしています。

完全なファイルを入手する

Unlock-DeepSeekチームは今後もDeepSeekの取り組みについて解説する記事を公開していく予定ですので、どうぞご期待ください。それでは次回お会いしましょう!

Unlock-DeepSeek プロジェクトのホームページ: https://datawhalechina.github...

Github リポジトリ: https://github.com/datawhalec...

Gitee 国内リポジトリ: https://gitee.com/anine09/unl...

Swanlab 実験データ: https://swanlab.cn/@Kedreamix..._Kedreamix/runs/sqxeo1i3v8hgzclm3nwkk

再現ファイルはDatawhale-R1フォルダ内にあります。Datawhale-R1/README.mdをよくお読みください。

Unlock-DeepSeekプロジェクトはまだ完了しておらず、急速なイテレーションが進行中です。今後の展開にご期待ください。

いいね (3件のいいね!)↓