人間からのフィードバックを用いた強化学習(RLHF)では、人間から収集されたフィードバックを使用してモデルをチューニングします。モデルの出力が複雑で説明が難しい場合は、RLHF をおすすめします。人間によるフィードバックは、さまざまな出力オプションからの選択という形をとります。これにより、記述が困難な出力を生成するモデルのチューニングに、教師ありファインチューニングで使用されるラベル付きプロンプトよりも優れたデータを提供できます。モデルからの出力を定義するのが難しくない場合は、教師ありファインチューニングでテキストモデルをチューニングすることを検討してください。
このページでは、RLHF チューニングを使用したテキストモデルのチューニングについて詳しく説明します。ここでは、RLHF チューニングをサポートするテキストモデル、データセットの作成方法、RLHF チューニングを使用してテキストモデルをチューニングする方法について説明します。また、RLHF チューニングでチューニング済みのモデルを表示して読み込む方法についても説明します。
Vertex AI での RLHF チューニングの詳細については、Vertex AI を使用した RLHF のチューニングのブログ投稿をご覧ください。
RLHF モデルのチューニングのワークフロー
Vertex AI での RLHF モデルのチューニング ワークフローには、次の手順が含まれます。
- 人間の好みのデータセットを準備します。
- プロンプト データセットを準備します。
- データセットを Cloud Storage バケットにアップロードします。データセットは、同じ Cloud Storage バケットに存在する必要はありません。
- RLHF モデルのチューニング ジョブを作成します。
モデルのチューニングが完了すると、チューニング済みモデルが Vertex AI エンドポイントにデプロイされます。エンドポイントの名前は、チューニング済みモデルの名前と同じです。新しいプロンプトを作成するときに、チューニング済みモデルを Vertex AI Studio で選択できます。
サポートされているモデル
次のテキストモデルは、Vertex AI で人間からのフィードバックによる強化学習を使用したチューニングをサポートしています。
- テキスト生成基盤モデル
text-bison@002
。詳細については、テキスト生成モデルをご覧ください。 t5-small
、t5-large
、t5-xl
、t5-xxl
Flan Text-to-Text Transfer Transformer(Flan-T5)モデル。Flan-T5 モデルは、テキスト分類、言語翻訳、質問応答などのタスクを実行するようにファインチューニングできます。詳細については、Flan-T5 チェックポイントをご覧ください。
次のテキストモデルは、セルフ管理の Vertex AI Pipelines ジョブとして RLHF チューニングをサポートしています。
- Llama 2(Vertex AI Model Garden で利用可能)。詳細については、サンプル ノートブックをご覧ください。この方法は複雑なため、最初に Vertex AI で RLHF を試すことをおすすめします。
コードモデルは RLHF チューニングをサポートしていません。
RLHF チューニング データセットを準備する
RLHF チューニングでは、2 つのデータセットと 1 つのオプションのデータセットを用意する必要があります。これらのデータセットはすべて JSON Lines(JSONL)形式であり、Cloud Storage バケットにアップロードする必要があります。テキスト生成モデルのチューニングに使用されるデータセットのフォーマットは、テキスト チャットモデルのチューニングに使用されるデータセットのフォーマットとは異なります。
プロンプト データセット
ラベルのないプロンプトを含むデータセット。プロンプトは、設定データセットの同じプロンプトでも、異なるものでもかまいません。プロンプト データセットの各行には、次のフィールドが含まれています。
text-bison データセット
テキスト生成データセットには、次の 1 つのフィールドがあります。
input_text
- プロンプトを含む必須フィールド。
例
{
"input_text": "Create a description for Plantation Palms."
}
chat-bison データセット
チャット生成データセットには、次の 2 つのフィールドが含まれています。
messages
- 作成者とコンテンツのペアの配列。author
フィールドはメッセージの作成者を表します(user
またはassistant
表します)。content
フィールドはメッセージの内容です。content
を空にすることはできません。最初と最後のauthor
をuser
に設定する必要があります。context
-(省略可)プロンプトに応答するときにモデルが使用する追加のコンテキスト。
例
{
"context": "You are a pirate dog named Captain Barktholomew.",
"messages": [
{
"author": "user",
"content": "Hi"
},
{
"author": "assistant",
"content": "Argh! What brings ye to my ship?"
},
{
"author": "user",
"content": "What's your name?"
},
]
}
詳細については、このサンプル プロンプト データセットをダウンロードしてご確認ください。
人間の好みのデータセット
人間の好みのデータセットには人間の好みが含まれています。人間の好みのデータセットの各行には 2 つのオプションに対する人間の好みが記録されます。人間の好みのデータセットには 5,000~10,000 件のサンプルを含めることをおすすめします。人間の好みのデータセットの各行には、チューニングするモデルのプロンプト データセット フィールドと次のフィールドを含む、好みのサンプルが 1 つ含まれています。
candidate_0
とcandidate_1
- これらのフィールドには 2 つのレスポンスが含まれます。人間が 2 つのレスポンスのどちらを優先するかを選択して、モデルのチューニングをサポートします。choice
- 人間が優先する候補を示す整数が含まれます(0
または1
)。0
は、人間がcandidate_0
を選択したことを示し、1
はcandidate_1
を選択したことを示します。
人間の好みのデータセットの行の例を次に示します。
{"input_text": "Create a description for Plantation Palms.", "candidate_0":
"Enjoy some fun in the sun at Gulf Shores.", "candidate_1": "A Tranquil Oasis of
Natural Beauty.", "choice": 0}
詳細については、このサンプルの人間の好みのデータセットをダウンロードしてご覧ください。
評価データセット(省略可)
モデルのチューニング後の予測のためのラベルのないプロンプトを含むデータセット。評価データセットが指定されている場合、チューニング ジョブの完了後にそのデータセットに対して推論が実行されます。評価データセットの形式は、プロンプト データセットの形式と同じです。ただし、評価データセットのプロンプトは、プロンプト データセットのプロンプトとは異なる必要があります。
詳細については、このサンプル評価データセットをダウンロードしてご確認ください。
報酬モデル
人間の好みのデータセットは報酬モデルのトレーニングに使用されます。Vertex AI は、RLHF チューニング中に報酬モデルを作成して使用します。報酬モデルは、ユーザーのテナント プロジェクトのプライベート Cloud Storage バケットに作成されます。ユーザーのテナント プロジェクトは、ユーザーに固有の内部プロジェクトです。報酬モデルにはアクセスできません。チューニング ジョブが完了すると削除されます。詳細については、テナント プロジェクトをご覧ください。
本番環境データとの整合性を維持する
データセットに含まれるサンプルは、想定される本番環境のトラフィックと一致していなければなりません。データセットに特定の書式、キーワード、指示、情報が含まれている場合は、本番環境のデータも同じ形式にし、同じ指示を含んでいる必要があります。
たとえば、データセットのサンプルに "question:"
と "context:"
が含まれている場合は、本番環境のトラフィックにも、データセットの例と同じ順序で "question:"
と "context:"
が含まれるように整形する必要があります。コンテキストを除外すると、データセット内のサンプルに同じ質問が含まれていても、モデルはパターンを認識しません。
チューニング用データセットを Cloud Storage にアップロードする
チューニング ジョブを実行するには、1 つ以上のデータセットを Cloud Storage バケットにアップロードする必要があります。新しい Cloud Storage バケットを作成するか、既存のバケットを使用してデータセット ファイルを保存できます。バケットのリージョンは重要ではありませんが、モデルをチューニングする Google Cloud プロジェクトのバケットを使用することをおすすめします。
バケットの準備ができたら、データセット ファイルをバケットにアップロードします。
RLHF チューニング ジョブを作成する
RLHF チューニングを行うには、Google Cloud コンソールまたは Vertex AI SDK for Python を使用します。
Vertex AI SDK for Python
Vertex AI SDK for Python を使用して RLHF でモデルをチューニングする方法を学習するため、Colab、GitHub、または Vertex AI Workbench で次のノートブックを開いて実行します。
Google Cloud コンソール
Google Cloud コンソールで RLHF チューニングを使用してテキストモデルをチューニングするには、次の操作を行います。
- Google Cloud コンソールの [Vertex AI] セクションで、[Vertex AI Studio] ページに移動します。
- [チューニングと抽出] タブをクリックします。
- [ チューニング済みモデルを作成] をクリックします。
- [人間からのフィードバックを用いた強化学習(RLHF)] を選択します。
- モデルの詳細を構成します。
- チューニング モデル名: チューニング済みモデルの名前を入力します。
- ベースモデル: チューニングする基盤モデルを選択します。
- リージョン: モデルのチューニングを行うリージョンを入力します。サポートされているリージョンは次のとおりです。
us-central1
: 8 個の Nvidia A100 80 GB GPU を使用します。europe-west4
: TPU v3 Pod の 64 コアを使用します。
- 出力ディレクトリ: モデルのチューニング時にアーティファクトが保存される Cloud Storage のロケーションを入力します。
- [詳細オプション] を開いて、詳細設定を構成します。
- 報酬付きトレーニングのステップ: 報酬モデルのトレーニングで実施するステップ数を入力します。報酬モデルはモデルをチューニングするために使用されます。デフォルト値は 1000 です。
- 報酬学習率の乗数: 報酬モデルをトレーニングする際の学習率に影響する浮動小数点値を入力します。デフォルトの学習率を上げるには、より大きな値を入力します。デフォルトの学習率を下げるには、より低い値を入力します。デフォルト値は 1.0 です。
- 強化トレーニングのステップ: 強化学習を使用してベースモデルをチューニングする際に実行するステップ数を入力します。デフォルト値は 1000 です。
- 強化学習率の乗数: 強化モデルをトレーニングする際の学習率に影響する浮動小数点値を入力します。デフォルトの学習率を上げるには、より大きな値を入力します。デフォルトの学習率を下げるには、より低い値を入力します。デフォルト値は 1.0 です。
- [続行] をクリックします。
- [人間の好みのデータセット] で、報酬モデルの作成に使用する人間の好みのデータセットをアップロードまたは選択します。データセット ファイルをアップロードする場合は、[ JSONL ファイルを Cloud Storage にアップロードする] を選択します。データセット ファイルがすでに Cloud Storage バケットにある場合は、[ Cloud Storage 上の既存の JSONL ファイル] を選択します。
JSONL ファイルをアップロードする
- [JSONL ファイルの選択] で [参照] をクリックし、データセット ファイルを選択します。
- [データセットの場所] で [参照] をクリックし、データセット ファイルを保存する Cloud Storage バケットを選択します。
既存の JSONL ファイルを使用する
[Cloud Storage のファイルパス] で [参照] をクリックし、データセット ファイルがある Cloud Storage バケットを選択します。
- データセット ファイルをアップロードする場合は、[プロンプト データセット] で、[
JSONL ファイルをアップロードする
- [JSONL ファイルの選択] で [参照] をクリックし、データセット ファイルを選択します。
- [データセットの場所] で [参照] をクリックし、データセット ファイルを保存する Cloud Storage バケットを選択します。
既存の JSONL ファイルを使用する
[Cloud Storage のファイルパス] で [参照] をクリックし、データセット ファイルがある Cloud Storage バケットを選択します。
JSONL ファイルを Cloud Storage にアップロードする] を選択します。データセット ファイルがすでに Cloud Storage バケットにある場合は、[ Cloud Storage 上の既存の JSONL ファイル] を選択します。 - (省略可)チューニング済みモデルを評価するには、次の操作を行います。
- [モデル評価を有効にする] をクリックします。
- [評価データセット] で、[参照] をクリックします。
- 評価データセットを含む Cloud Storage バケットに移動し、評価データセットを選択します。
- [チューニングを開始] をクリックします。
チューニング オペレーションのステータスを確認する
モデル チューニング ジョブのステータスを確認するには、Google Cloud コンソールで Vertex AI Pipelines ページに移動します。このページには、テキストとコードによるモデル チューニング ジョブのステータスが表示されます。
また、モデル チューニング ジョブの完了時または失敗時にメールで通知されるように、Vertex AI Pipelines のメール通知を構成することもできます。
次のステップ
- Vertex AI Pipelines を使用して Llama 2 の セルフ管理 RLHF チューニング ジョブを実行する方法を学習する。
- 責任ある AI のベスト プラクティスと Vertex AI の安全フィルタについて学習する。
- エンドポイントでデータアクセス監査ログを有効にする方法を学習する。
- チューニング済みモデルを評価する方法を学習する。
- Vertex AI での RLHF チューニングの詳細については、Vertex AI を使用した RLHF のチューニングのブログ投稿をご覧ください。