Open-ChatGPT
は、独自のデータと可能な限り最小限のコンピューティングを使用して、ハイパーパーソナライズされた ChatGPT のような AI モデルをトレーニングできるオープンソース ライブラリです。
Open-ChatGPT
は、ChatGPT のようなモデルのエンドツーエンドのトレーニング エクスペリエンスを可能にするための一般的なシステム フレームワークです。 OpenAI InstructGPT スタイルの 3 段階を通じて、お気に入りの事前トレーニング済みの大規模言語モデルを自動的に取得して、独自の高品質 ChatGPT スタイル モデルを生成できます。
トランスフォーマー ライブラリと DeepsSpeed を利用した RLHF (ヒューマン フィードバックによる強化学習) を実装しました。分散トレーニングとオフロードをサポートしており、非常に大規模なモデルにも対応できます。
このプロジェクトが気に入ったら、スターを付けてサポートを示してください。
【2023/05】スタンフォードアルパカローラを実装しました。
【2023/05】スタンフォードアルパカを実装しました。
[2023/04] RLHF(Reinforcement Learning with Human Feedback) パイプライン をリリースしました。
[2023/03] コードOpenChatGPT: ChatGPT のように ChatBot を訓練するためのオープンソース ライブラリをリリースしました。
Open-ChatGPT: ChatGPT のオープンソース実装
メモリが足りません
Alpaca-7B の微調整
ディープスピードの使用
Lora で Alpaca-7B を微調整する
命令データセット
RLHF データセット
データの前処理
データのフォーマット
導入
ニュース
目次
データ収集
インストール
命令 Fintune
推論
貢献する
ライセンス
謝辞
引用
(テキストおよびマルチモーダル) チャットベースの LLM (GPT-4、ChatGPT、LLaMA、Alpaca) をトレーニングするためのオープンソースの命令チューニング データセットのコレクション。
これ (@jianzhnie) を参照して、収集した各データセットに次のルールに従ってラベルを付けました。
(Lang)Lingualタグ:
JP: 英語の命令データセット
CN: 中国語の命令データセット
ML: [多言語] 複数言語の命令データセット
(タスク)タスクタグ:
MT: [マルチタスク] 複数のタスクを含むデータセット
TS: [タスク固有] 特定のタスクに合わせて調整されたデータセット
(Gen)生成方法:
HG: [Human Generated Dataset] 人間によって作成されたデータセット
SI: [Self-Instruct] 自己指示メソッドを使用して生成されたデータセット
MIX: [混合データセット] データセットには人間と機械が生成したデータの両方が含まれています
COL: [データセットのコレクション] 他のデータセットのコレクションから作成されたデータセット
プロジェクト | データセット | 組織 | 数字 | ラング | タスク | ゲン | タイプ | 送信元 |
---|---|---|---|---|---|---|---|---|
思考の連鎖 | cot_data |few_shot_data | グーグル | 74771 | 英語/中国語 | MT | HG | 簡易理論を使って指導する | 既存のデータに対する CoT のアノテーション付け |
GPT4オール | nomic-ai/gpt4all-j-prompt-世代 | ノミックアイ | 806199 | JP | MT | コル | コード、ストーリー、ダイアログ | GPT-3.5-ターボからの蒸留 |
GPTeacher | GPT-4 一般指示 | ロールプレイ指示 | コード指示 |ツールフォーマー | テクニウム1 | 29013 | JP | MT | SI | 一般、ロールプレイ、ツールフォーマー | GPT-4 とツールフォーマー |
グアナコ | JosephusCheung/グアナコデータセット | ジョセフス・チャン | 534610 | ML | MT | SI | さまざまな言語タスク | テキスト-ダヴィンチ-003 |
HC3 | Hello-SimpleAI/HC3 | こんにちは-SimpleAI | 万得资讯 | 37175 | 英語/中国語 | TS | ミックス | 対話の評価 | 人間またはChatGPT |
HC3-中国語 | Hello-SimpleAI/HC3-中国語 | Hello-SimpleAI|万得资讯 | 13k | CN | TS | ミックス | 対話の評価 | 人間またはChatGPT |
アルパカ | タツラボ/アルパカ | タツラボ | 52002 | JP | MT | SI | 一般的な指示 | テキスト-ダヴィンチ-003 |
AlpacaDataCleaned | ヤーマ/アルパカクリーニング済み | ヤーマ | 52k | JP | MT | SI | 一般的な指示 | テキスト-ダヴィンチ-003 |
チャイニーズ-LLaMA-アルパカ | alpaca_data_zh_51k | ymcui(讯飞) | 51k | CN | MT | SI | 一般的な指示 | テキスト-ダヴィンチ-003 |
Luotuo-中国語-LLM 骆驼 | trans_chinese_alpaca_data | LC1332(商汤) | 52k | CN | MT | SI | 一般的な指示 | テキスト-ダヴィンチ-003 |
自然な指示 | アレン AI 61 タスク|1.5k タスク | アレン AI | 5040134 | ML | MT | コル | 多様な NLP タスク | 人間の注釈が付けられたデータセットのコレクション |
ベル_cn | BelleGroup/train_1M_CN |BelleGroup/train_0.5M_CN | BelleGroup(链家) | 1079517 | CN | TS/MT | SI | 一般、数学的推論、対話 |
ここでは、命令チューニング データセット リストのごく一部のみをリストします。より多くのデータセットを見つけるには、次のリンクをチェックしてください。 jianzhnie/awesome-instruction-datasets: 命令に従う LLM をトレーニングするためのオープンソース データセットのコレクション (ChatGPT) 、LLaMA、アルパカ)。
命令チューニング / ヒューマン フィードバックからの強化学習 (RLHF) データセットは、ChatGPT などの命令追従 LLM の重要なコンポーネントです。以下は、さまざまな LLM での命令チューニングに使用されるデータセットの包括的なリストです。これにより、研究者や開発者がこれらのリソースに簡単にアクセスして利用できるようになります。
プロジェクト | 組織 | 数字 | ラング | まとめ |
---|---|---|---|---|
webgpt_comparisons | オープンナイ | 19,578 | 英語 | WebGPT の論文では、著者らは人間のフィードバックから報酬モデルをトレーニングしました。彼らは報酬モデルを使用して、人間の好みに合わせて長形式の質問応答モデルをトレーニングしました。これは、WebGPT プロジェクトの終了までに報酬モデリングに適しているとマークされたすべての比較のデータセットです。合計 19,578 件の比較があります。 |
SHP | スタンフォード大学 | 349K | 英語 | SHP は、料理から法律相談に至るまで、18 の異なる主題分野における質問や指示に対する回答に対する人間の好みを 38 万 5,000 件集めたデータセットです。設定は、ある応答の他の応答に対する有用性を反映することを目的としており、RLHF 報酬モデルと NLG 評価モデル (SteamSHP など) のトレーニングに使用することを目的としています。 |
rlhf-報酬データセット | イーティンシェ | 76.3k | 英語 | |
ダホアス/フル-hh-rlhf | ダホアス | 112k | 英語 | Anthropic の HH データセットは、プロンプトで選択され、拒否されたサンプルに再フォーマットされました。 |
Dahoas/synthetic-instruct-gptj-pairwise | ダホアス | 英語 | ||
ダホアス/rm-static | ダホアス | 76.3k | 英語 | 教師付き微調整後の報酬モデルのトレーニングに使用される hh-static の分割。 |
人間的/hh-rlhf | 人間的 | 22k | 英語 | この RLHF データセットは、52B 言語モデルからのデータを含む反復された「オンライン」データセットです。これには 22,000 件の有用性の比較が含まれており、レッドチーム データは含まれていません。 |
GPT-4/GPT-4-LLM による命令チューニング | GPT-4 による命令チューニング | 52k | 英語 | GPT-4 に品質の評価を依頼することにより、3 つのモデル (GPT-4、GPT-3.5、OPT-IML) からの Alpaca プロンプトの応答 (注: データは人間ではなくGPT-4 モデルによって評価されます) をランク付けしました。著者は「GPT-4 は自身の間違いを特定して修正し、応答の品質を正確に判断できる」と考えています。 |
thu-coai/安全性に関するプロンプト | トゥ・コアイ | 100k | 中国語 | 安全プロンプトは、モデルの安全性を評価および強化するために使用され、モデルの出力を人間の価値観に合わせて提供します。 |
Chatgpt-比較-検出プロジェクト |
さらに多くのデータセットを見つけるには、次のリンクをチェックしてください: jianzhnie/awesome-instruction-datasets: 命令に従う LLM (ChatGPT、LLaMA、Alpaca) をトレーニングするためのオープンソース データセットのコレクション。
私たちは、さまざまな大規模な言語モデルに統一インターフェイスを提供するデータ前処理コードを開発しました。このコードは、チューニングの指示や RLHF モデリング タスクなど、さまざまな目的でデータを前処理するために使用できます。さらに詳しく知りたい場合は、プロンプト データセットとデータ ユーティリティへの次のリンクをチェックしてください。
プロンプト_データセット.py
data_utils.py
私たちのコレクションでは、すべてのデータが同じテンプレートを使用してフォーマットされています。各サンプルは次の構造に従います。
[ {"instruction": instruction string, "input": input string, # (may be empty) "output": output string} ]
git クローン https://github.com/jianzhnie/open-chatgpt.git pip install -r 要件.txt
PEFT
LORA を他のパラメータ効率の高いメソッドとともに使用したい場合は、追加の依存関係として peft をインストールしてください。
ディープスピード
パイプライン並列処理、勾配チェックポイント、テンソル融合などの手法を使用して LLM トレーニングを高速化したい場合。 DeepSpeedをインストールしてください。
標準の Hugging Face トレーニング コードを使用してモデルを微調整します。次のハイパーパラメータを使用して LLaMA-7B と LLaMA-13B を微調整します。
ハイパーパラメータ | LLaMA-7B | LLaMA-13B |
---|---|---|
バッチサイズ | 128 | 128 |
学習率 | 2e-5 | 1e-5 |
エポック | 3 | 5 |
最大長さ | 512 | 512 |
体重の減少 | 0 | 0 |
次のコマンドを使用して、4 x A100 (40GB) で Alpaca-7B をトレーニングできます。
CD サンプル/アルパカ/ Python train_alpaca.py --model_name_or_path 'decapoda-research/llama-7b-hf' --data_path タツラボ/アルパカ --output_dir work_dir/ --num_train_epochs 3 --per_device_train_batch_size 1 --per_device_eval_batch_size 1 --gradient_accumulation_steps 16 --評価戦略「いいえ」 --save_strategy「ステップ」 --save_steps 2000 --save_total_limit 5 --learning_rate 2e-5 --weight_decay 0。 --warmup_ratio 0.03 --lr_scheduler_type "コサイン" --logging_steps 1
OOM エラーが発生した場合は、これを検討してください。
単純に、7B モデルを微調整するには、約 7 x 4 x 4 = 112 GB の VRAM が必要です。上記のコマンドはパラメーター シャーディングを有効にするため、冗長なモデルのコピーはどの GPU にも保存されません。メモリ使用量をさらに削減したい場合は、次のようなオプションがあります。
--fsdp "full_shard auto_wrap offload"
を使用して、FSDP の CPU オフロードをオンにします。これにより、実行時間が長くなりますが、VRAM が節約されます。
私たちの経験では、DeepSpeed ステージ 3 (オフロードあり) は、オフロードありの FSDP よりもメモリ効率が高い場合があります。以下は、パラメーター オフロードとオプティマイザー オフロードの両方を備えた 4 つの GPU で DeepSpeed ステージ 3 を使用する例です。
pip install deepspeedcd 例/alpaca/ torchrun --nproc_per_node=8 train_alpaca.py --model_name_or_path 'decapoda-research/llama-7b-hf' --data_path タツラボ/アルパカ --output_dir work_dir/ --num_train_epochs 3 --per_device_train_batch_size 2 --per_device_eval_batch_size 2 --gradient_accumulation_steps 8 --評価戦略「いいえ」 --save_strategy「ステップ」 --save_steps 2000 --save_total_limit 5 --learning_rate 2e-5 --weight_decay 0。 --warmup_ratio 0.03 --deepspeed "scripts/ds_config_zero3_auto.json"
LoRA は、クエリ、キー、および値の埋め込みヘッドの低ランクのスライスを微調整します。これにより、合計メモリ フットプリントを 112GB から約 7x4=28GB に削減できます。
この部分は、低ランク適応 (LoRA) を使用して Stanford Alpaca の結果を再現します。
安価かつ効率的に微調整するために、Hugging Face の PEFT と Tim Dettmers のビットサンドバイトを使用します。
このファイルには、LLaMA モデルへの PEFT の直接的な適用と、プロンプトの構築とトークン化に関連するコードが含まれています。
Python train_alpaca_lora.py --model_name_or_path decapoda-research/llama-7b-hf --data_path タツラボ/アルパカ --output_dir work_dir_lora/ --num_train_epochs 3 --per_device_train_batch_size 4 --per_device_eval_batch_size 4 --gradient_accumulation_steps 8 --評価戦略「いいえ」 --save_strategy「ステップ」 --save_steps 2000 --save_total_limit 5 --learning_rate 2e-5 --weight_decay 0。 --warmup_ratio 0.03 --lr_scheduler_type "コサイン" --logging_steps 1
このファイルは、Hugging Face モデル ハブから基礎モデルを読み取り、 tloen/alpaca-lora-7b
から LoRA 重みを読み取り、指定された入力で推論用の Gradio インターフェイスを実行します。ユーザーはこれをモデルを使用するためのサンプル コードとして扱い、必要に応じて変更する必要があります。
使用例:
pythongenerate_server.py --model_name_or_path decapoda-research/llama-7b-hf --lora_モデル名またはパス tloen/alpaca-lora-7b
十分なメモリがない場合は、上記のコマンドに--load-8bit
追加することで 8 ビット圧縮を有効にすることができます。これにより、モデルの品質はわずかに低下しますが、メモリ使用量を約半分に削減できます。 CPU、GPU、および Metal バックエンドと互換性があります。 8 ビット圧縮の Alpaca-7B は、単一の NVIDIA 3090/4080/T4/V100(16GB) GPU で実行できます。
pythongenerate_server.py --model_name_or_path decapoda-research/llama-7b-hf --lora_モデル名またはパス tloen/alpaca-lora-7b --load_8bit
私たちの目的は、このリポジトリをさらに改善することです。貢献に興味がある場合は、貢献の手順についてはこちらを参照してください。
Openn-ChatGPT
は、Apache 2.0 ライセンスに基づいてリリースされています。
私たちは、多くのオープンソース貢献者、特に次の方々の取り組みに感謝しています。
アルパカ-LoRA
LoRA
スタンフォード アルパカ
ハグフェイス
ラマ
ビクーニャ
このリポジトリのデータまたはコードを使用する場合は、リポジトリを引用してください。
@misc{open-chatgpt, author = {jianzhnie}, title = {Open-ChatGPT, a chatbot based on Llama model}, year = {2023}, publisher = {GitHub}, journal = {GitHub repository}, howpublished = {url{https://github.com/jianzhnie/open-chatgpt}}, }