優れたソフトウェアと実用的なチュートリアル
軽量で効率的な産業グレードのLLMトレーニングおよびアライメントフレームワークOpenRLHF は、70B モデルに対する RLHF のフルパラメータおよびフルプロセスのトレーニングをサポートします。
OpenRLHFとは?以来チャットGPTRLHFアライメント技術の登場後、InstructGPTに代表されるRLHFアライメント技術に注目が集まり、ChatGPTの学習プロセスを再現しようとする動きが活発化しました。徐々に、ColossalChatやDeepSpeed-ChatといったRLHFの代表的な再現事例が登場しました。しかし、当時はアライメント技術に関する認識は、基本的にInstructGPTに集中していました。OpenAIは近年あまりオープンではないため、第三者による検証が不十分なのが現状です。幸いなことに、LLaMA2すぐに発売され、RLHF技術の有効性を完全に検証しただけでなく、サンプルの除去や多重RMなどの十分な革新を備えていたため、すぐに全体の法学修士オープンソースコミュニティ。
InstructGPTとLLaMA2の人気を受けて、OpenLLMAIオープンソースコミュニティは現在主流のアライメントトレーニングフレームワークを調査し、多くのフレームワークがLLaMA2の全プロセスおよび全パラメータトレーニングをサポートしていない、十分なスケーラビリティを欠いている、あるいは軽量で使いやすいものではないことを発見しました。そこで私たちは、真に産業グレードのLLMアライメントトレーニングフレームワークを開発し、InstructGPTとLLaMA2に代表される大規模モデルのトレーニングプロセスを再現し、RLHF/DPOなどの主流のアライメント技術をサポートし、誰もが自身のアライメントアイデアを迅速に実現できるように支援することを決意しました。
ようこそオープンRLHFすぐにアライメント作業を開始しましょう!
https://github.com/OpenLLMAI/OpenRLHF
OpenRLHFプロジェクトの紹介
現在、OpenLLMAI は主に 2 つのプロジェクトに取り組んでいます。
残りのプロジェクトは、その後の人材と関心次第です。近い将来、KDまたはSEフレームワークを立ち上げるかもしれません。当面は、汎用的な小規模モデルの学習にはあまり興味がないかもしれません。主な理由は、時間、資金、エネルギーが非常に限られているためです。愛情で電気を生み出すのは少し難しいので、ほとんどの場合、興味重視で検討します。しかし、興味は結局食べられないので、最近はこの宣伝資料の準備に多くのエネルギーを費やしました(Xianyuの同級生は以前、仏教徒/強迫観念/多忙すぎて、多くの問題を抱えていました)。確かに、OpenLLMAIはまだ非常に無知です。OpenRLHFはまだ完璧ではないしかし、私たちは最善を尽くし、コミュニティからのより広い認知と支援を得られることを願っています。グループで取り組めば、さらに大きな成果を上げることができます!
OpenRLHF 設計アイデア
1. 設計目標:軽量で効率的の工業用グレードLLMトレーニングとアライメントフレームワーク
現在、業界には真に産業グレードのLLMアライメントフレームワークが存在しないことから、多くのメーカーは自社で実装することを選択するかもしれません(好スタートを切ったOpenAIに感謝します)。これは短期的には理解できますが、長期的には車輪の再発明という問題を避けられません。
そのため、私たちの目標は、軽量で効率的な産業グレードのLLMトレーニングおよびアライメントフレームワークを構築することです。この目標を達成するために、最初のバージョンでは比較的慎重に開発とテストを行い、使いやすさを追求しました。同時に、より多くの志を同じくする人々が共同構築に参加できるよう、正式に公開しました。このフレームワークにおいて、オープンソースこそが活力をもたらす唯一の方法であると確信しています。
2. 設計コンセプト: 使いやすさ、高性能、拡張性、探索性
シンプルで使いやすい:使いやすさは、OpenRLHFフレームワークを設計する上での第一の指針です。優れたフレームワークには高いパフォーマンスが必須であるため、この点を過度に強調することはありません。高いパフォーマンスを確保することを前提に、使いやすさの向上を第一の目標としています。
スケーラブル: 7B をベースとし、1~2B の小さなモデルのトレーニングと下位互換性があり、34B/70B/170B のトレーニングなど、モデルサイズの拡大を徐々にサポートします。
探索的:フレームワークの基本機能を確保するだけでなく、アライメント技術を常に最先端に保ち、最新の進捗状況を追跡して迅速に実装するとともに、当チームが開発した最新のアライメントアルゴリズムも提供します。将来的には、LLMPipelineモジュールも開発し、主流のアライメントアルゴリズムやモデル学習技術の迅速な実践と公平な比較を提供します。
3. 実装のアイデア
使いやすさ:基本的な大規模モデルフレームワークについては、DeepSpeed/Megatron-LMなどのLLMトレーニングフレームワークを調査し、より簡潔で使いやすいDeepSpeedを最初のバージョンとして選択しました。モデルライブラリについては、ためらうことなくHugBaoHugFaceを選択しました。分散拡張については、Rayを選択しました。尋ねるのではなく、XiangRayに尋ねてください!(主にリソーススケジューリングに使用)
スケーラブルで高性能: 合理的なレイを使用するGPUリソーススケジューリングアクター、報酬、参照、批評モデルを別々のGPUに割り当て、トレーニングと推論の分離推論コミュニティの優れたツールを最大限に活用し、オフロード、PEFTなどに協力します。ビデオメモリの節約大規模モデルのスケール拡張と効率的なトレーニングを実現する技術。
探索的:最初のバージョンでは、InstructGPTとLLaMA2の学習プロセスを完全に再現し、DPOなどの新しいアライメント技術をサポートしました。今後も探索的な性質を維持し、InstructGPT PipelineやLLaMA2 Pipelineといった主流モデルのパイプラインをサポートするパイプラインモジュールを開発することで、コミュニティがより科学的な比較や研究を実施できるよう支援していきます。
OpenRLHFの主なハイライト
OpenRLHFの主な機能
LLaMA2の最初のオープンソースのフルスケール複製および InstructGPT の RLHF アライメント フレームワーク。
SFT/RM/PPO フルプロセストレーニングをサポートします。
サポート拒否サンプリング、多重RM;
使いやすい: OpenRLHFは現在利用可能な最もシンプルな高性能RLHFライブラリの1つであり、8枚のカードからなる単一のDGXA100ノードに実装できます。 34B モデルRLHFトレーニングはスクリプトを通じて行うことができるワンクリックトレーニング;
トレーニングとプッシュの分離、分散型でスケーラブルな RLHF。
複数のカードを使用する24GB RTX 4090 GPU7B モデルの完全なプロセストレーニング
複数のカードを使用する A100 80G GPUとvLLM70B+モデル完全なプロセストレーニング
トレーニングとプッシュの分離: トレーニングと推論を分離して、コミュニティの優れた推論ツール (最終的には vLLM を使用) を再利用し、推論の遅延を短縮します。
分散型でスケーラブル:ray/deepspeed/vLLMのサポートと合理的なリソーススケジューリングにより、効率的でスケーラブルな学習を実現しました。以下に2つの例を示します。
高性能: Ray/DeepSpeed などのメモリ節約テクノロジーと推論加速フレームワークのおかげで、13B LLaMA2 モデルのトレーニング パフォーマンスは DeepSpeedChat の 4 倍以上です。
ゼロシリーズ
フラッシュアテンション2
LoRA、QLoRA
オフロード
勾配チェックポイント
推論加速:vLLM
ビデオメモリを節約するためのヒント:
最先端: 最先端の進歩に対応し、現在主流のアライメント テクノロジと主流の大規模モデルをサポートしています。
ラマ
白川
クウェン
ミクストラル 8*7b
最先端モデル:
標準 RLHF: SFT/RM/PPO;
拒否サンプリング;
DPO (直接選好最適化)/IPO/cDPO;
カーンマン・トヴェルスキー最適化(KTO)
条件付きSFT(https://arxiv.org/abs/2308.12050);
最先端のアライメント技術:
強化学習のトリック: Deep Policy Gradients の実装の重要性と ppo-implementation-details を参照して、トレーニングの安定性を向上させるために PPO の実装トリックを統合しました。
OpenRLHF パフォーマンスデモンストレーション
サポートマトリックス:
次のサポート マトリックスは、OpenRLHF と主流の LLM アライメント トレーニング フレームワークの比較を示しています (調査には遅延が生じる可能性があります。誤りや漏れがある場合は、修正のためにご連絡ください)。
PPOトリック | 34B フル参加/4 A100 | 70B+フルパラメータ/16 A100 | 7B フル/4 RTX4090 | QLoRA | ミックストラルMOE 8*7b | |
---|---|---|---|---|---|---|
オープンRLHF | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
ディープスピードチャット | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
コロッサルAIチャット | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
TRL | ✔ | ✖️ | ✖️ | ✖️ | ✔ | ✖️ |
LLaMAファクトリー | ✖️ | ✖️ | ✖️ | ✖️ | ✔ | ✔(QLoRA) |
OpenRLHFの主な利点は優れたスケーラビリティそして効率的なパフォーマンスは、70Bモデルのプロセス全体とパラメータの効率的な学習をサポートし、将来の大規模拡張にも対応可能です。しかし、LLaMA-Factory/trl/trlxなどのフレームワークも同様の問題を抱えています。 70B フルパラメータ RLHF トレーニングをサポートしていませんいくつかのフレームワークは、Loraの13bレベルのモデルの微調整に焦点を当てており、一般的にはサンプリングを行っている。俳優評論家を取り入れる解決策(これは小規模 RLHF がビデオメモリを節約するための応急処置ですが、標準的な RLHF 実装に準拠しておらず、スケーラビリティが非常に低く、必ずや廃止できない時期が来ます。) もちろん、OpenRLHF にも、ドキュメントやベンチマークが不完全であるなどの欠点があります。使いやすさを改善する必要がある具体的には、OpenRLHFと他の一般的なRLHFフレームワークとの比較を以下に示します(誤りや不足があればご指摘ください)。より詳細で包括的な比較は、後ほど公式の技術レポートでご覧いただけます。
LLaMA-Factory: 効率的な微調整と使いやすさ(習得する価値があり、Web UIも備えている)が利点です。マージされたアクター・クリティックを採用しており、700億のフルパラメータPPO学習をサポートできず、モデル規模の拡張も容易ではありません。
Colossal-Chat: シングルステップ強化学習を使用しますが、私たちのフレームワークはステップワイズ強化学習を使用します。詳細はOpenRLHFとColossal-Chatの比較をご覧ください。
trl/trlx:Hugging Faceエコシステムとの互換性が高いという利点がありますが、カプセル化が深く、変更が困難であるという問題を抱えている可能性があります。同様に、現在70BのフルパラメータPPO学習をサポートしていません。また、ビデオメモリを節約するためにmerged actor-criticを使用していますが、これは標準的な実装とは矛盾しています。
NeMo-Aligner:メガトロンをベースにした生成は現在非効率であり、全体的なトレーニング効率に影響を与えています。Hugging Faceエコシステムとの互換性が低いため、モデルに特別な修正が必要になる可能性があります。
パフォーマンスデータ:
既存のテストによると、13B モデルにおける当社の OpenRLHF フレームワークのトレーニング効率は DeepSpeedChat の約 4 倍です (人員制限により、テストに遅延が生じる可能性があります。他のフレームワークのパフォーマンス データを当社に報告して修正してもらうこともできます)。
7B ラマ2 RLHF | 13B llama2 RLHF(50kサンプル) | |
---|---|---|
オープンRLHF | - | 8台のA100で17時間 |
ディープスピードチャット | - | 16台のA100で48時間 |
トレーニングスループット:
デフォルト設定:
アクター用に 4 つの A100 80G、クリティック用に 2 つの A100 80G、RM 用に 1 つの A100 80G、InitPolicy 用に 1 つの A100 80G
ZeRO2とAdam Offload
最大シーケンス長: 2048
パフォーマンス スループット (デフォルト構成ではサンプル/秒、後でトークン/秒に変更されます)。
7B llama2: 0.105 サンプル/GPU/秒micro_batch_size = 16/8 (ロールアウト/トレーニング)、generation_length = 100~300
13B llama2: 0.04 サンプル/GPU/秒micro_batch_size = 8/4 (ロールアウト/トレーニング)、generation_length = 200~400
34B コードラマ: 0.007 サンプル/GPU/秒micro_batch_size = 2/1 (ロールアウト/トレーニング)、generation_length = 300~800
主流モデルのパフォーマンスデータ(人員の都合により、現時点では再テストを行う時間がありません。ここで報告されているテストデータは、モデルがサポートされていた当時のテストデータです。現在のPPOバージョンでは、はるかに高速になるはずです。今後、さらに多くのモデルが追加され、パフォーマンスデータは公式の技術レポートで更新されます):
モデル | SFT | RM | PPO | 注記 |
---|---|---|---|---|
白川2-7B | 1時間 | 4時間 | 71時間 | |
クウェン-7B | - | - | - |
OpenRLHFの使い方
公式ドキュメント:
この記事を含む公式ドキュメントはGithubで管理されます。ドキュメントの品質向上とユーザビリティの向上も、今後の作業の重要な方向性の一つです(人員不足のため、ドキュメントは現在未完成の状態ですが、どなたでもご参加・ご貢献いただけます)。
プロジェクトホームページ
公式ドキュメント
OpenRLHFのインストール
私たちはサポートしますnvidia-docker (潜在的な環境問題を回避するために推奨)または、conda 環境のインストール (構成済みの conda 環境またはイメージを後で提供できます):
まず、リポジトリのクローンを作成します。
リポジトリをクローンします: git clone https://github.com/openllmai/OpenRLHF.git
次に、nv-docker または conda 環境をインストールします。
# nv-docker をインストールします cd examples/scripts # nvidia-docker をインストールします (オプション) ./nvidia_docker_install.sh # nvidia コンテナーを起動します ./docker_run.sh # conda が必要です conda create -n openrlhf python=3.10 # そのため、いくつかのパッケージを手動でインストールする必要があります。torch をインストールしてインストールする場合、対応する cuda バージョンと一致させる必要がある場合があります。 pip install Packaging ninja pip3 install torch # ninjia ninja --version を確認します echo $? # 出力: 0 # flash-attn をインストールします: 時間がかかる場合があります。 # ネットワーク エラーの場合: 指定されたバージョンを https://github.com/Dao-AILab/flash-attention/releases からダウンロードできます。 pip install flash-attn==2.4.2 ./build_openrlhf.sh # でインストールしてください。conda activate openrlhf
OpenRLHF トレーニング
トレーニング スクリプト:
環境設定後、/openrlhf/examples/scripts ディレクトリに移動し、ニーズに合わせてトレーニングスクリプトを修正し、ワンクリックでトレーニングを開始できます。単一マシンと複数マシンのトレーニングをサポートしています。7B-70B+モデルのフルスケールおよびフルプロセストレーニングをサポート以下は、ユーザーが状況に応じて変更し、独自のモデルトレーニングをサポートできる重要なパラメータです。
-pretrain: Hugface形式の事前学習済みモデルのアドレス
-dataset: データセットのアドレス、Hugface 形式
-dataset_probs: 複数のデータセットを混合したサンプリング確率。例: 0.5、0.4、0.1
-save_path: モデルの保存アドレス、Hugface 形式
-max_epochs: トレーニングエポックの数
-micro_train_batch_size: 単一 GPU バッチサイズ
-train_batch_size: グローバルバッチサイズ
-learning_rate: 学習率
スタンドアロンのトレーニング スクリプト:
cd examples/scripts # nvidia-docker をインストール (オプション) ./nvidia_docker_install.sh # nvidia コンテナを起動 ./docker_run.sh # コンテナに cd 移動 cd /openrlhf/examples/scripts # OpenRLHF をビルド (つまり、pip インストール) ./build_openrlhf.sh # huggingface ログイン ~/.local/bin/huggingface-cli ログイン # 事前トレーニングを続行 ./train_continue_pretrain_llama.sh # SFT モデルをトレーニング ./train_sft_llama.sh # RM モデルをトレーニング ./train_rm_llama.sh # PPO モデルをトレーニング ./train_ppo_llama.sh # DPO モデルをトレーニング ./train_dpo_llama.sh # KTO モデルをトレーニング./train_kto_llama.sh # 拒否サンプリング モデルをトレーニングします。./train_rejection_sampling_llama.sh # 条件付き SFT モデルをトレーニングします。./train_conditional_llama.sh
マルチマシントレーニングスクリプト、16カードA100 70BモデルのフルパラメータRLHFトレーニング:
cd examples/scripts # nvidia コンテナを起動します ./docker_run.sh # コンテナ内で cd /openrlhf/examples/scripts # OpenRLHF をビルドします (つまり、pip install) ./build_openrlhf.sh # nVIDIA PyTorch イメージの互換性のため、pip uninstall xgboost transformer_engine -y # huggingface login ~/.local/bin/huggingface-cli login # コンテナ内で ray のマスター ノードを起動します ray start --head --node-ip-address 0.0.0.0 --num-gpus 8 # より多くのノードで ray を起動する場合は、次を使用します ray start --address {MASTER-NODE-ADDRESS}:6379 --num-gpus 8 # ray PPO モデルをトレーニングします (デフォルト構成では 8 つの GPU が必要です) ./train_ppo_llama_ray.sh # 70B モデルおよび vLLM ベースの RLHF の場合 (重要!) pip install vllm==0.3.2 # vLLM の互換性のため pip uninstall flash_attn -y ./train_ppo_llama_ray_70b.sh
推論
推論と評価には、業界で使用されているオープンソースツールやコードを再利用することをお勧めします。以下のスクリプトを参考にしてください。
今後の仕事
OpenRLHFの今後の開発は、使いやすさと実用性(ドキュメント、チュートリアル、実践的な経験など)、最先端性(新しいアルゴリズム、モデルパイプラインなど)、そして安定性に重点を置きます。具体的には、以下のようなタスクが考えられ、皆様のご参加をお待ちしております。
ドキュメント: 中国語版と英語版
チュートリアル: 良いチュートリアル
環境: 構成されたイメージまたはconda環境を提供する;
パフォーマンステスト、ベンチマーク。
基本機能のテスト
他のフレームワークとの比較
モデルテストをサポート
アライメントアルゴリズムのテスト
さらなるパフォーマンスの最適化。
安定性の向上: 定期的なコードレビュー。
新しい機能と新しいアルゴリズム。
新しいモデルのサポート: Google の新しいモデルなど
評価モジュールは、より包括的な評価機能を提供します。
組織について
組織について
OpenLLMAI: すべての人のためのオープン AI。
私たちはOpenAIからは遠いかもしれませんが、オープンには極めて近い存在です。そのため、会員の皆様には二つだけお願いがあります。一つは、皆様が十分にオープンで、自信を持っていることです。私たちの姿勢は「一点の熱、一点の光」です。皆様と共にAIの道を歩んでいきたいと願っています。学者には広い心と強い意志が必要です。そして、これからの道のりは長く険しいものとなるでしょう。
私たちは皆、LLMへの愛のためにここにいます。そして、2つのことを実現したいと考えています。1. LLM技術の交換(技術共有、知識の普及)。2. LLMツールの開発(トレーニングフレームワーク、モデル、データエンジニアリングなど)。興味のある学生はぜひご参加ください!組織の詳細については、Zhihuの過去の記事「OpenLLMAI Organization Introduction」をご覧ください。
開発者
これまでに、OpenRLHFプロジェクトは20人以上の貢献者を集め、130以上のコミットを提供し、800以上のスターを獲得しました。すべての貢献者、特にhijkzzz、wuxibin、Xianyuのプロジェクト開発への多大な貢献に感謝したいと思います。 hijkzzzとXianyuはプロジェクトの発起人です。プロジェクトの管理者として、hijkzzzはプロジェクトの最初のバージョンのコードを提出し、長い間メンテナンスに多大なエネルギーを費やし、プロジェクトの開発にかけがえのない貢献をしました。プロジェクトの中核開発者として、wuxibinは主にRayに基づくフレームワークの大規模な拡張を担当し、長い間日常のメンテナンスに多大なエネルギーを費やしてきました。プロジェクトの管理者として、XianyuはNLP部分の開発といくつかのプロジェクト計画作業を担当しています。さらに、pikaqqqqqq、li-plus、wwxFromTju、jovany-wang、xffxff、dabney777、suc16、Dylancer1998をはじめとする学生の皆さんも、プロジェクトの開発に重要な貢献をしてくださいました(ここで一人一人をリストアップすることは不可能であり、後続の開発者全員が正式な技術レポート/論文で説明します。また、直接の貢献には参加しなかったものの、貴重な提案をたくさんしてくださった学生や教師の方々も多数いらっしゃいます。本当にありがとうございました)。私たちは、志を同じくする仲間がもっともっと参加してくれることを歓迎し、OpenLLMAIが皆様と共に成長していくことを願っています。
貢献に興味のある学生は、git 上で直接開発に参加したり、担当者または公式のメールアドレスに連絡したりすることができます。
RL: hijkzzz
レイ:無錫斌
NLP: シエンユー
公式メールアドレス: xianyuai@openllmai.top
スポンサー募集
現在、OpenLLMAIは純粋なオープンソース組織です。OpenRLHF/OpenLLMWikiなどのプロジェクト、OpenLLM Talkや技術交流グループなど、すべて完全にオープンソースです。しかし、長期的には資金援助がなければ、持続不可能な状況に陥るでしょう。愛情を持って今日の状況に到達するのは容易なことではありません。これまでのご支援に感謝いたします。最後に、スポンサーのご協力をお願いいたします。資金(コンピューティングパワー!)と人的(開発への参加やその他の貢献)によるご支援を歓迎いたします!スポンサーシップや協力については、xianyuai@openllmai.topまでご連絡ください。
参考文献
https://github.com/OpenLLMAI/OpenRLHF
https://github.com/NVIDIA/Megatron-LM
インストラクGPT
LLaMA2
https://github.com/facebookresearch/llama
ハギングフェイストランスフォーマー
ディープスピード
https://github.com/microsoft/DeepSpeed/tree/master/blogs/deepspeed-chat
レイ
https://github.com/hpcaitech/ColossalAI/tree/main/applications/Chat
https://github.com/CarperAI/trlx
https://github.com/NVIDIA/NeMo-Aligner
https://github.com/hiyouga/LLaMA-Factory
https://github.com/OpenLLMAI/OpenLLMWiki
【OpenLLMAI】オープンソースの力を信じて:私たちは独自の組織を立ち上げました!道のりは長く険しいですが、諦めずに続ければ必ず目標に到達できます! - OpenLLMAIの記事 - Zhihuhttps://zhuanlan.zhihu.com/p/647882819
Instruct GPT / RLHFを正しく再現するには? - Snail in the Garden Parkourの記事 - Zhihu https://zhuanlan.zhihu.com/p/622134699
トレーニングの旅を始めましょう: RayとvLLMをベースにした700億以上のモデルに対応したオープンソースRLHFフルスケールトレーニングフレームワークの構築 - Snail in the Garden Parkourの記事 - Zhihuhttps://zhuanlan.zhihu.com/p/678828949
【OpenLLM 006】LoRA:大規模モデルの低ランク適応 - 最近話題のLoRAとは? 安定拡散とオープンソースのChatGPT複製がなぜ両方使われているのか? - OpenLLMAI記事 - Zhihu
https://zhuanlan.zhihu.com/p/620327907
https://arxiv.org/abs/2005.12729
https://iclr-blog-track.github.io/2022/03/25/ppo-implementation-details/
https://github.com/baichuan-inc/Baichuan2
https://github.com/QwenLM/Qwen
https://mistral.ai/news/mixtral-of-experts/
https://github.com/OpenLLMAI/OpenRLHF/issues/221
Glarity AIライティングアシスタントブラウザプラグイン、実用的なAIツール