RLHF チューニングで PaLM テキストモデルをチューニングする

人間からのフィードバックを用いた強化学習(RLHF)では、人間から収集されたフィードバックを使用してモデルをチューニングします。モデルの出力が複雑で説明が難しい場合は、RLHF をおすすめします。人間によるフィードバックは、さまざまな出力オプションからの選択という形をとります。これにより、記述が困難な出力を生成するモデルのチューニングに、教師ありファインチューニングで使用されるラベル付きプロンプトよりも優れたデータを提供できます。モデルからの出力を定義するのが難しくない場合は、教師ありファインチューニングでテキストモデルをチューニングすることを検討してください。

このページでは、RLHF チューニングを使用したテキストモデルのチューニングについて詳しく説明します。ここでは、RLHF チューニングをサポートするテキストモデル、データセットの作成方法、RLHF チューニングを使用してテキストモデルをチューニングする方法について説明します。また、RLHF チューニングでチューニング済みのモデルを表示して読み込む方法についても説明します。

Vertex AI での RLHF チューニングの詳細については、Vertex AI を使用した RLHF のチューニングのブログ投稿をご覧ください。

RLHF モデルのチューニングのワークフロー

Vertex AI での RLHF モデルのチューニング ワークフローには、次の手順が含まれます。

  1. 人間の好みのデータセットを準備します。
  2. プロンプト データセットを準備します。
  3. データセットを Cloud Storage バケットにアップロードします。データセットは、同じ Cloud Storage バケットに存在する必要はありません。
  4. RLHF モデルのチューニング ジョブを作成します。

モデルのチューニングが完了すると、チューニング済みモデルが Vertex AI エンドポイントにデプロイされます。エンドポイントの名前は、チューニング済みモデルの名前と同じです。新しいプロンプトを作成するときに、チューニング済みモデルを Vertex AI Studio で選択できます。

サポートされているモデル

次のテキストモデルは、Vertex AI で人間からのフィードバックによる強化学習を使用したチューニングをサポートしています。

  • テキスト生成基盤モデル text-bison@002。詳細については、テキスト生成モデルをご覧ください。
  • t5-smallt5-larget5-xlt5-xxl Flan Text-to-Text Transfer Transformer(Flan-T5)モデル。Flan-T5 モデルは、テキスト分類、言語翻訳、質問応答などのタスクを実行するようにファインチューニングできます。詳細については、Flan-T5 チェックポイントをご覧ください。

次のテキストモデルは、セルフ管理の Vertex AI Pipelines ジョブとして 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 を空にすることはできません。最初と最後の authoruser に設定する必要があります。

  • 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_0candidate_1 - これらのフィールドには 2 つのレスポンスが含まれます。人間が 2 つのレスポンスのどちらを優先するかを選択して、モデルのチューニングをサポートします。
  • choice - 人間が優先する候補を示す整数が含まれます(0 または 1)。0 は、人間が candidate_0 を選択したことを示し、1candidate_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 チューニングを使用してテキストモデルをチューニングするには、次の操作を行います。

  1. Google Cloud コンソールの [Vertex AI] セクションで、[Vertex AI Studio] ページに移動します。

    Vertex AI Studio に移動

  2. [チューニングと抽出] タブをクリックします。
  3. [ チューニング済みモデルを作成] をクリックします。
  4. [人間からのフィードバックを用いた強化学習(RLHF)] を選択します。
  5. モデルの詳細を構成します。
    • チューニング モデル名: チューニング済みモデルの名前を入力します。
    • ベースモデル: チューニングする基盤モデルを選択します。
    • リージョン: モデルのチューニングを行うリージョンを入力します。サポートされているリージョンは次のとおりです。
      • us-central1: 8 個の Nvidia A100 80 GB GPU を使用します。
      • europe-west4: TPU v3 Pod の 64 コアを使用します。
    • 出力ディレクトリ: モデルのチューニング時にアーティファクトが保存される Cloud Storage のロケーションを入力します。
  6. [詳細オプション] を開いて、詳細設定を構成します。
    • 報酬付きトレーニングのステップ: 報酬モデルのトレーニングで実施するステップ数を入力します。報酬モデルはモデルをチューニングするために使用されます。デフォルト値は 1000 です。
    • 報酬学習率の乗数: 報酬モデルをトレーニングする際の学習率に影響する浮動小数点値を入力します。デフォルトの学習率を上げるには、より大きな値を入力します。デフォルトの学習率を下げるには、より低い値を入力します。デフォルト値は 1.0 です。
    • 強化トレーニングのステップ: 強化学習を使用してベースモデルをチューニングする際に実行するステップ数を入力します。デフォルト値は 1000 です。
    • 強化学習率の乗数: 強化モデルをトレーニングする際の学習率に影響する浮動小数点値を入力します。デフォルトの学習率を上げるには、より大きな値を入力します。デフォルトの学習率を下げるには、より低い値を入力します。デフォルト値は 1.0 です。
  7. [続行] をクリックします。
  8. [人間の好みのデータセット] で、報酬モデルの作成に使用する人間の好みのデータセットをアップロードまたは選択します。データセット ファイルをアップロードする場合は、[ JSONL ファイルを Cloud Storage にアップロードする] を選択します。データセット ファイルがすでに Cloud Storage バケットにある場合は、[ Cloud Storage 上の既存の JSONL ファイル] を選択します。

    JSONL ファイルをアップロードする

    • [JSONL ファイルの選択] で [参照] をクリックし、データセット ファイルを選択します。
    • [データセットの場所] で [参照] をクリックし、データセット ファイルを保存する Cloud Storage バケットを選択します。

    既存の JSONL ファイルを使用する

    [Cloud Storage のファイルパス] で [参照] をクリックし、データセット ファイルがある Cloud Storage バケットを選択します。

  9. データセット ファイルをアップロードする場合は、[プロンプト データセット] で、[ JSONL ファイルを Cloud Storage にアップロードする] を選択します。データセット ファイルがすでに Cloud Storage バケットにある場合は、[ Cloud Storage 上の既存の JSONL ファイル] を選択します。

    JSONL ファイルをアップロードする

    • [JSONL ファイルの選択] で [参照] をクリックし、データセット ファイルを選択します。
    • [データセットの場所] で [参照] をクリックし、データセット ファイルを保存する Cloud Storage バケットを選択します。

    既存の JSONL ファイルを使用する

    [Cloud Storage のファイルパス] で [参照] をクリックし、データセット ファイルがある Cloud Storage バケットを選択します。

  10. (省略可)チューニング済みモデルを評価するには、次の操作を行います。
    1. [モデル評価を有効にする] をクリックします。
    2. [評価データセット] で、[参照] をクリックします。
    3. 評価データセットを含む Cloud Storage バケットに移動し、評価データセットを選択します。
    詳細については、評価データセットをご覧ください。
  11. [チューニングを開始] をクリックします。

チューニング オペレーションのステータスを確認する

モデル チューニング ジョブのステータスを確認するには、Google Cloud コンソールで Vertex AI Pipelines ページに移動します。このページには、テキストとコードによるモデル チューニング ジョブのステータスが表示されます。

[パイプライン] に移動

また、モデル チューニング ジョブの完了時または失敗時にメールで通知されるように、Vertex AI Pipelines のメール通知を構成することもできます。

次のステップ