

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 基盤モデルのカスタマイズ
<a name="jumpstart-foundation-models-customize"></a>

基盤モデルは、さまざまなタスクを解決できる非常に強力なモデルです。ほとんどのタスクを効果的に解決するには、これらのモデルを何らかの形でカスタマイズする必要があります。

基盤モデルを特定のユースケースに合わせて最初にカスタマイズするために推奨される方法は、プロンプトエンジニアリングです。適切に設計された、コンテキスト豊富なプロンプトを基盤モデルに提供することで、モデルの重みの微調整や変更を行わずに、望ましい結果を得ることができます。詳細については、「[基盤モデルのプロンプトエンジニアリング](jumpstart-foundation-models-customize-prompt-engineering.md)」を参照してください。

プロンプトエンジニアリングだけでは特定のタスクに合わせて基盤モデルをカスタマイズできない場合は、追加のドメイン固有データで基盤モデルを微調整できます。詳細については、「[ファインチューニング用の基盤モデルとハイパーパラメータ](jumpstart-foundation-models-fine-tuning.md)」を参照してください。微調整プロセスには、モデルの重みの変更が含まれます。

再トレーニングを行わずにナレッジライブラリの情報を使用してモデルをカスタマイズする場合は、「[検索拡張生成](jumpstart-foundation-models-customize-rag.md)」を参照してください。

# 基盤モデルのプロンプトエンジニアリング
<a name="jumpstart-foundation-models-customize-prompt-engineering"></a>

プロンプトエンジニアリングとは、言語モデルが特定の種類の出力を生成するためのプロンプトまたは入力刺激を設計し、改良するプロセスです。プロンプトエンジニアリングとは、適切なキーワードを選択し、コンテキストを提供し、モデルが望ましいレスポンスを生成するように促す方法で入力を形成することを含み、基盤モデルの動作と出力を積極的に形成するための不可欠な手法です。

モデルの動作を指示し、望ましいレスポンスを達成するには、効果的なプロンプトエンジニアリングが重要です。プロンプトエンジニアリングにより、微調整のような複雑なカスタマイズ手段なしで、モデルのトーン、スタイル、ドメインの専門知識をコントロールできます。追加データでモデルを微調整することを検討する前に、プロンプトエンジニアリングに時間を割くことをお勧めします。目標は、モデルに十分なコンテキストとガイダンスを提供することで、目に見えないデータシナリオや限られたデータシナリオでもモデルを一般化してうまく機能させることです。

## ゼロショット学習
<a name="jumpstart-foundation-models-customize-prompt-engineering-zero-shot"></a>

ゼロショット学習とは、見えないクラスやタスクを一般化して予測できるようにモデルをトレーニングすることです。ゼロショット学習環境でプロンプトエンジニアリングを実行するには、ターゲットタスクと目的の出力形式に関する情報を明示的に提供するプロンプトを作成することをお勧めします。例えば、モデルがトレーニング中に見えなかった一連のクラスについて、ゼロショットテキスト分類の基盤モデルを使用する場合、よく設計されたプロンプトは次のようになります。「`"Classify the following text as either sports, politics, or entertainment: [input text]."`」ターゲットクラスと期待される出力形式を明示的に指定することで、見えないクラスでも正確な予測を行うようにモデルを導くことができます。

## 少量データ学習
<a name="jumpstart-foundation-models-customize-prompt-engineering-few-shot"></a>

少量データ学習では、新しいクラスやタスクに対して、限られた量のデータを使ってモデルをトレーニングします。少量データ学習環境でのプロンプトエンジニアリングは、利用できる限られたトレーニングデータを効果的に使用するプロンプトを設計することに重点を置いています。例えば、画像分類タスクに基盤モデルを使用していて、新しい画像クラスの例がわずかしかない場合は、ターゲットクラスのプレースホルダーを使用して、使用可能なラベル付きの例を含むプロンプトを設計できます。例えば、プロンプトは次のようになります。`"[image 1], [image 2], and [image 3] are examples of [target class]. Classify the following image as [target class]"`。限られたラベル付きの例を取り組み、ターゲットクラスを明示的に指定することで、最小限のトレーニングデータでもモデルを一般化して正確な予測を行えるように導くことができます。

## サポート対象の推論パラメータ
<a name="jumpstart-foundation-models-customize-prompt-engineering-inference-params"></a>

推論パラメータを変更すると、プロンプトへの応答にも影響する可能性があります。プロンプトにできる限り具体性と文脈 (コンテキスト) を持たせるように努めることができますが、サポートされている推論パラメータを試してみることもできます。以下は、一般的にサポートされている推論パラメータの例です。


| 推論パラメータ | 説明 | 
| --- | --- | 
| `max_new_tokens` | 基盤モデルの応答の最大出力長。有効な値: 整数、範囲:正の整数。 | 
| `temperature` | 出力のランダム性を制御します。温度 (temperature) が高いほど低確率の単語を含む出力シーケンスになり、低いほど高確率の単語を含む出力シーケンスになります。`temperature=0` の場合、応答は最も確率の高い単語のみで構成されます (貪欲法)。有効な値: 浮動小数点数、範囲: 正の浮動小数点数 | 
| `top_p` | テキスト生成の各ステップでは、モデルは累積確率が `top_p` の可能な限り小さな単語の集合からサンプリングします。有効な値: 浮動小数点数、範囲: 0.0、1.0 | 
| `return_full_text` | `True` の場合、入力テキストが生成された出力テキストの一部となります。有効な値: ブール値、デフォルト: False | 

基盤モデルの推論の詳細については、「[公開されている基盤モデルを `JumpStartModel` クラスでデプロイする](jumpstart-foundation-models-use-python-sdk-model-class.md)」を参照してください。

基盤モデルを特定のビジネスニーズ、ドメイン固有の言語、ターゲットタスク、またはその他の要件に適合させるのにプロンプトエンジニアリングだけでは不十分な場合は、追加データに基づいてモデルを微調整するか、取得拡張生成 (RAG) を使用して、アーカイブされたナレッジソースからの拡張コンテキストでモデルアーキテクチャを補強することを検討できます。詳細については、[ファインチューニング用の基盤モデルとハイパーパラメータ](jumpstart-foundation-models-fine-tuning.md)または[検索拡張生成](jumpstart-foundation-models-customize-rag.md)を参照してください。

# ファインチューニング用の基盤モデルとハイパーパラメータ
<a name="jumpstart-foundation-models-fine-tuning"></a>

基盤モデルは計算コストが高く、ラベルの付いていない大規模なコーパスでトレーニングされます。事前トレーニング済みの基盤モデルを微調整することは、小規模なコーパスでモデルをカスタマイズしながら、その幅広い機能を活用する手頃な方法です。微調整は、さらにトレーニングを重ねるカスタマイズ方法で、モデルの重みは変わります。

微調整は、次のような必要がある場合に役立ちます。
+ 特定のビジネスニーズに合わせたモデルのカスタマイズ
+ 業界用語、専門用語、その他の特殊な用語など、ドメイン固有の言語をうまく扱うためのモデル
+ 特定のタスクに対するパフォーマンスの強化
+ アプリケーションにおける正確で相対的、かつコンテキスト対応のレスポンス
+ より事実に即しており、有害性が低く、特定の要件により合致したレスポンス

ユースケースと選択した基盤モデルに応じて、微調整には主に 2 つのアプローチがあります。

1. ドメイン固有のデータに基づいてモデルを微調整することに関心がある場合は、「[ドメイン適応を使用して大規模言語モデル (LLM) をファインチューニングする](jumpstart-foundation-models-fine-tuning-domain-adaptation.md)」を参照してください。

1. プロンプトとレスポンスの例を使用してインストラクションベースの微調整を行うことに興味がある場合は、「[プロンプト指示を使用して大規模言語モデル (LLM) をファインチューニングする](jumpstart-foundation-models-fine-tuning-instruction-based.md)」を参照してください。

## ファインチューニングに使用できる基盤モデル
<a name="jumpstart-foundation-models-fine-tuning-models"></a>

次の JumpStart 基盤モデルのいずれかをファインチューニングできます。
+ Bloom 3B
+ Bloom 7B1
+ BloomZ 3B FP16
+ BloomZ 7B1 FP16
+ Code Llama 13B
+ Code Llama 13B Python
+ Code Llama 34B
+ Code Llama 34B Python
+ Code Llama 70B
+ Code Llama 70B Python
+ Code Llama 7B
+ Code Llama 7B Python
+ CyberAgentLM2-7B-Chat (CALM2-7B-Chat)
+ Falcon 40B BF16
+ Falcon 40B Instruct BF16
+ Falcon 7B BF16
+ Falcon 7B Instruct BF16
+ Flan-T5 Base
+ Flan-T5 Large
+ Flan-T5 Small
+ Flan-T5 XL
+ Flan-T5 XXL
+ Gemma 2B
+ Gemma 2B Instruct
+ Gemma 7B
+ Gemma 7B Instruct
+ GPT-2 XL
+ GPT-J 6B
+ GPT-Neo 1.3B
+ GPT-Neo 125M
+ GPT-NEO 2.7B
+ LightGPT Instruct 6B
+ Llama 2 13B
+ Llama 2 13B Chat
+ Llama 2 13B Neuron
+ Llama 2 70B
+ Llama 2 70B Chat
+ Llama 2 7B
+ Llama 2 7B Chat
+ Llama 2 7B Neuron
+ Mistral 7B
+ Mixtral 8x7B
+ Mixtral 8x7B Instruct
+ RedPajama INCITE Base 3B V1
+ RedPajama INCITE Base 7B V1
+ RedPajama INCITE Chat 3B V1
+ RedPajama INCITE Chat 7B V1
+ RedPajama INCITE Instruct 3B V1
+ RedPajama INCITE Instruct 7B V1
+ Stable Diffusion 2.1

## 一般的にサポートされているファインチューニングのハイパーパラメータ
<a name="jumpstart-foundation-models-fine-tuning-hyperparameters"></a>

ファインチューニング時に使用できるハイパーパラメータは、基盤モデルによって異なります。以下は、トレーニング中にモデルをさらにカスタマイズするために一般的にサポートされているハイパーパラメータです。


| 推論パラメータ | 説明 | 
| --- | --- | 
| `epoch` | トレーニング中にモデルがファインチューニングのデータセットを何回繰り返すかを示す数 (エポック数)。1 より大きい整数を指定する必要があります。 | 
| `learning_rate` |  ファインチューニングのトレーニングサンプルの各バッチを終了した後で、モデルの重みをどの程度更新するかを表す値 (学習率)。0 より大きい正の浮動小数点数を指定する必要があります。 | 
| `instruction_tuned` |  モデルでインストラクションチューニングを行うかどうかを指定します。`'True'` または `'False'` を指定する必要があります。 | 
| `per_device_train_batch_size` |  GPU コアまたは CPU あたりのトレーニングのバッチサイズ。正の整数を指定する必要があります。 | 
| `per_device_eval_batch_size` |  GPU コアまたは CPU あたりの評価のバッチサイズ。正の整数を指定する必要があります。 | 
| `max_train_samples` |  デバッグの目的またはトレーニングの迅速化のために、トレーニングのサンプルの数をこの値に切り詰めます。値を -1 にした場合、モデルはすべてのトレーニングサンプルを使用します。正の整数または -1 を指定する必要があります。 | 
| `max_val_samples` |  デバッグの目的またはトレーニングの迅速化のために、検証のサンプルの数をこの値に切り詰めます。値を -1 にした場合、モデルはすべての検証サンプルを使用します。正の整数または -1 を指定する必要があります。 | 
| `max_input_length` |  トークン化後の入力シーケンスの最大長。これより長いシーケンスは切り詰められます。-1 の場合、`max_input_length` は 1024 またはトークナイザで定義された `model_max_length` の小さい方に設定されます。正の値に設定すると、`max_input_length` は指定された値とトークナイザで定義された `model_max_length` の小さい方に設定されます。正の整数または -1 を指定する必要があります。 | 
| `validation_split_ratio` |  検証チャネルがない場合に、トレーニングデータをトレーニングと検証に分割する比率。0～1 の間で指定する必要があります。 | 
| `train_data_split_seed` |  検証データが存在しない場合に、入力トレーニングデータをモデルが使用するトレーニングデータと検証データにランダムに分割するためのシードを指定します。整数を指定する必要があります。 | 
| `preprocessing_num_workers` |  前処理に使用するプロセスの数。`None` の場合、メインプロセスが前処理に使用されます。 | 
| `lora_r` |  Low-Rank Adaptation (LoRA) の r 値。重みの更新のスケーリング係数として機能します。正の整数を指定する必要があります。 | 
| `lora_alpha` |  Low-Rank Adaptation (LoRA) のアルファ値。重みの更新のスケーリング係数として機能します。一般に、`lora_r` のサイズの 2～4 倍にします。正の整数を指定する必要があります。 | 
| `lora_dropout` |  Low-Rank Adaptation (LoRA) 層のドロップアウト率。0～1 の間の正の浮動小数点数を指定する必要があります。 | 
| `int8_quantization` |  `True` の場合、モデルはトレーニング用に 8 ビット精度でロードされます。 | 
| `enable_fsdp` |  `True` の場合、トレーニングでは Fully Sharded Data Parallelism (FSDP) が使用されます。 | 

Studio でモデルをファインチューニングするときに、ハイパーパラメータ値を指定できます。詳細については、「[Studio でモデルをファインチューニングする](jumpstart-foundation-models-use-studio-updated-fine-tune.md)」を参照してください。

SageMaker Python SDK を使用してモデルをファインチューニングするときに、ハイパーパラメータのデフォルト値を上書きすることもできます。詳細については、「[公開されている基盤モデルを `JumpStartEstimator` クラスでファインチューニングする](jumpstart-foundation-models-use-python-sdk-estimator-class.md)」を参照してください。

# ドメイン適応を使用して大規模言語モデル (LLM) をファインチューニングする
<a name="jumpstart-foundation-models-fine-tuning-domain-adaptation"></a>

ドメイン適応の微調整により、事前トレーニング済みの基盤モデルを活用し、限られたドメイン固有データを使用して特定のタスクに適応させることができます。プロンプトエンジニアリング作業では十分なカスタマイズができない場合は、ドメイン適応の微調整を使用して、業界用語、専門用語、その他の特殊データなど、ドメイン固有の言語でモデルを動作させることができます。この微調整プロセスにより、モデルの重みが変わります。

ドメイン固有のデータセットでモデルをファインチューニングするには:

1. トレーニングデータを準備します。手順については、「[ドメイン適応のファインチューニング用にトレーニングデータを準備してアップロードする](#jumpstart-foundation-models-fine-tuning-domain-adaptation-prepare-data)」を参照してください。

1. ファインチューニングのトレーニングジョブを作成します。手順については、「[インストラクションベースのファインチューニング用のトレーニングジョブを作成する](#jumpstart-foundation-models-fine-tuning-domain-adaptation-train)」を参照してください。

エンドツーエンドの例は、「[サンプルノートブックの例](#jumpstart-foundation-models-fine-tuning-domain-adaptation-examples)」で確認できます。

ドメイン適応の微調整は、以下の基盤モデルで利用できます。

**注記**  
Llama 2 7B などの一部の JumpStart 基盤モデルでは、ファインチューニングや推論の実行前にエンドユーザー使用許諾契約への同意が必要です。詳細については、「[エンドユーザーライセンス契約](jumpstart-foundation-models-choose.md#jumpstart-foundation-models-choose-eula)」を参照してください。
+ Bloom 3B
+ Bloom 7B1
+ BloomZ 3B FP16
+ BloomZ 7B1 FP16
+ GPT-2 XL
+ GPT-J 6B
+ GPT-Neo 1.3B
+ GPT-Neo 125M
+ GPT-NEO 2.7B
+ Llama 2 13B
+ Llama 2 13B Chat
+ Llama 2 13B Neuron
+ Llama 2 70B
+ Llama 2 70B Chat
+ Llama 2 7B
+ Llama 2 7B Chat
+ Llama 2 7B Neuron

## ドメイン適応のファインチューニング用にトレーニングデータを準備してアップロードする
<a name="jumpstart-foundation-models-fine-tuning-domain-adaptation-prepare-data"></a>

ドメイン適応のファインチューニング用のトレーニングデータは、CSV、JSON、または TXT ファイル形式で用意できます。すべてのトレーニングデータを 1 つのフォルダ内の 1 つのファイルにまとめる必要があります。

トレーニングデータは、CSV または JSON のトレーニングデータファイルの **[Text]** 列から取得されます。**[Text]** というラベルが付いた列がない場合、トレーニングデータは CSV または JSON トレーニングデータファイルの最初の列から取得されます。

以下は、ファインチューニングに使用する TXT ファイルの本文の例です。

```
This report includes estimates, projections, statements relating to our
business plans, objectives, and expected operating results that are “forward-
looking statements” within the meaning of the Private Securities Litigation
Reform Act of 1995, Section 27A of the Securities Act of 1933, and Section 21E
of ....
```

### トレーニングとテスト用にデータを分割する
<a name="jumpstart-foundation-models-fine-tuning-domain-adaptation-split-data"></a>

オプションで、検証データを含む別のフォルダを指定できます。このフォルダにも、CSV、JSON、または TXT 形式のファイルを 1 つ含める必要があります。検証データセットが指定されていない場合、所定量のトレーニングデータの一部が検証目的で確保されます。検証に使用されるトレーニングデータの割合は、モデルのファインチューニング用の該当するハイパーパラメータで調整できます。

### Amazon S3 にファインチューニングデータをアップロードする
<a name="jumpstart-foundation-models-fine-tuning-domain-adaptation-upload-data"></a>

JumpStart 基盤モデルのファインチューニング時に使用できるように、準備したデータを Amazon Simple Storage Service (Amazon S3) にアップロードします。次のコマンドを使用して、データをアップロードできます。

```
from sagemaker.s3 import S3Uploader
import sagemaker
import random

output_bucket = sagemaker.Session().default_bucket()
local_data_file = "train.txt"
train_data_location = f"s3://{output_bucket}/training_folder"
S3Uploader.upload(local_data_file, train_data_location)
S3Uploader.upload("template.json", train_data_location)
print(f"Training data: {train_data_location}")
```

## インストラクションベースのファインチューニング用のトレーニングジョブを作成する
<a name="jumpstart-foundation-models-fine-tuning-domain-adaptation-train"></a>

Amazon S3 にデータをアップロードしたら、JumpStart 基盤モデルをファインチューニングしてデプロイできます。Studio でモデルをファインチューニングするには、「[Studio でモデルをファインチューニングする](jumpstart-foundation-models-use-studio-updated-fine-tune.md)」を参照してください。SageMaker Python SDK を使用してモデルをファインチューニングするには、「[公開されている基盤モデルを `JumpStartEstimator` クラスでファインチューニングする](jumpstart-foundation-models-use-python-sdk-estimator-class.md)」を参照してください。

## サンプルノートブックの例
<a name="jumpstart-foundation-models-fine-tuning-domain-adaptation-examples"></a>

ドメイン適応のファインチューニングの詳細については、次のサンプルノートブックを参照してください。
+ [SageMaker JumpStart 基盤モデル - ドメイン固有データセットでのテキスト生成 GPT-J 6B モデルの微調整](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/jumpstart-foundation-models/domain-adaption-finetuning-gpt-j-6b.html)
+ [Fine-tune LLaMA 2 models on JumpStart](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/jumpstart-foundation-models/llama-2-finetuning.html)

# プロンプト指示を使用して大規模言語モデル (LLM) をファインチューニングする
<a name="jumpstart-foundation-models-fine-tuning-instruction-based"></a>

インストラクションベースの微調整では、ラベル付きの例を使用して、特定のタスクで事前トレーニング済み基盤モデルのパフォーマンスを向上させます。ラベル付きの例は、プロンプトとレスポンスのペアとしてフォーマットされ、インストラクションとしてフレーズ化されます。この微調整プロセスにより、モデルの重みが変わります。インストラクションベースの微調整についての詳細は、「[Introducing FLAN: More generalizable Language Models with Instruction Fine-Tuning](https://ai.googleblog.com/2021/10/introducing-flan-more-generalizable.html)」および「[Scaling Instruction-Finetuned Language Models](https://arxiv.org/abs/2210.11416)」という論文を参照してください。

FLAN-Tuned Language Net (FLAN) モデルでは、インストラクションチューニングを使用して、モデルが一般的なダウンストリーム NLP タスクをより簡単に解決できるようにします。Amazon SageMaker JumpStart は、FLAN モデルファミリーの基盤モデルを数多く提供します。例えば、FLAN-T5 モデルは、さまざまな一般的なユースケースでゼロショットパフォーマンスを向上させるために、幅広いタスクでインストラクションを微調整しています。追加データと微調整により、インストラクションベースのモデルを、事前トレーニングでは考慮されなかったより具体的なタスクにさらに適用させることができます。

プロンプトと応答のペアでタスクの指示を与えて特定のタスクについて LLM をファインチューニングするには:

1. 指示内容を JSON ファイルで準備します。プロンプトと応答のペアファイルに必要な形式とデータフォルダの構造の詳細については、「[インストラクションベースのファインチューニング用のトレーニングデータを準備してアップロードする](#jumpstart-foundation-models-fine-tuning-instruction-based-prepare-data)」を参照してください。

1. ファインチューニングのトレーニングジョブを作成します。手順については、「[インストラクションベースのファインチューニング用のトレーニングジョブを作成する](#jumpstart-foundation-models-fine-tuning-instruction-based-train)」を参照してください。

エンドツーエンドの例は、「[サンプルノートブックの例](#jumpstart-foundation-models-fine-tuning-instruction-based-examples)」で確認できます。

JumpStart 基盤モデルのうち、インストラクションベースのファインチューニングに対応しているのは一部です。インストラクションベースの微調整は、以下の基盤モデルで使用可能です。

**注記**  
Llama 2 7B などの一部の JumpStart 基盤モデルでは、ファインチューニングや推論の実行前にエンドユーザー使用許諾契約への同意が必要です。詳細については、「[エンドユーザーライセンス契約](jumpstart-foundation-models-choose.md#jumpstart-foundation-models-choose-eula)」を参照してください。
+ Flan-T5 Base
+ Flan-T5 Large
+ Flan-T5 Small
+ Flan-T5 XL
+ Flan-T5 XXL
+ Llama 2 13B
+ Llama 2 13B Chat
+ Llama 2 13B Neuron
+ Llama 2 70B
+ Llama 2 70B Chat
+ Llama 2 7B
+ Llama 2 7B Chat
+ Llama 2 7B Neuron
+ Mistral 7B
+ RedPajama INCITE Base 3B V1
+ RedPajama INCITE Base 7B V1
+ RedPajama INCITE Chat 3B V1
+ RedPajama INCITE Chat 7B V1
+ RedPajama INCITE Instruct 3B V1
+ RedPajama INCITE Instruct 7B V1

## インストラクションベースのファインチューニング用のトレーニングデータを準備してアップロードする
<a name="jumpstart-foundation-models-fine-tuning-instruction-based-prepare-data"></a>

インストラクションベースのファインチューニングのトレーニングデータは、JSON Lines テキストファイル形式で用意する必要があります。各行はディクショナリです。すべてのトレーニングデータを 1 つのフォルダに含める必要があります。このフォルダに複数の .jsonl ファイルを含めることができます。

トレーニングフォルダの中に、データの入出力形式を記述したテンプレート JSON ファイル (`template.json`) を入れておくこともできます。テンプレートファイルが用意されていない場合は、次のテンプレートファイルが使用されます。

```
{
  "prompt": "Below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request.\n\n### Instruction:\n{instruction}\n\n### Input:\n{context}",
  "completion": "{response}"
}
```

`template.json` ファイルによると、トレーニングデータの各 .jsonl エントリには、`{instruction}`、`{context}`、および `{response}` フィールドが必要です。

カスタムのテンプレート JSON ファイルを用意する場合は、`"prompt"` キーと `"completion"` キーを使用して独自の必須フィールドを定義します。次のカスタムテンプレート JSON ファイルによると、トレーニングデータの各 .jsonl エントリには、`{question}`、`{context}`、および `{answer}` フィールドが必要です。

```
{
  "prompt": "question: {question} context: {context}",
  "completion": "{answer}"
}
```

### トレーニングとテスト用にデータを分割する
<a name="jumpstart-foundation-models-fine-tuning-instruction-based-split-data"></a>

オプションで、検証データを含む別のフォルダを指定できます。このフォルダにも、1 つ以上の .jsonl ファイルを含める必要があります。検証データセットが指定されていない場合、所定量のトレーニングデータの一部が検証目的で確保されます。検証に使用されるトレーニングデータの割合は、モデルのファインチューニング用の該当するハイパーパラメータで調整できます。

### Amazon S3 にファインチューニングデータをアップロードする
<a name="jumpstart-foundation-models-fine-tuning-instruction-based-upload-data"></a>

JumpStart 基盤モデルのファインチューニング時に使用できるように、準備したデータを Amazon Simple Storage Service (Amazon S3) にアップロードします。次のコマンドを使用して、データをアップロードできます。

```
from sagemaker.s3 import S3Uploader
import sagemaker
import random

output_bucket = sagemaker.Session().default_bucket()
local_data_file = "train.jsonl"
train_data_location = f"s3://{output_bucket}/dolly_dataset"
S3Uploader.upload(local_data_file, train_data_location)
S3Uploader.upload("template.json", train_data_location)
print(f"Training data: {train_data_location}")
```

## インストラクションベースのファインチューニング用のトレーニングジョブを作成する
<a name="jumpstart-foundation-models-fine-tuning-instruction-based-train"></a>

Amazon S3 にデータをアップロードしたら、JumpStart 基盤モデルをファインチューニングしてデプロイできます。Studio でモデルをファインチューニングするには、「[Studio でモデルをファインチューニングする](jumpstart-foundation-models-use-studio-updated-fine-tune.md)」を参照してください。SageMaker Python SDK を使用してモデルをファインチューニングするには、「[公開されている基盤モデルを `JumpStartEstimator` クラスでファインチューニングする](jumpstart-foundation-models-use-python-sdk-estimator-class.md)」を参照してください。

## サンプルノートブックの例
<a name="jumpstart-foundation-models-fine-tuning-instruction-based-examples"></a>

インストラクションベースのファインチューニングの詳細については、次のサンプルノートブックを参照してください。
+ [Fine-tune LLaMA 2 models on JumpStart](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/jumpstart-foundation-models/llama-2-finetuning.html)
+ [Introduction to SageMaker JumpStart - Text Generation with Mistral models](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/jumpstart-foundation-models/mistral-7b-instruction-domain-adaptation-finetuning.html)
+ [Introduction to SageMaker JumpStart - Text Generation with Falcon models](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/jumpstart-foundation-models/falcon-7b-instruction-domain-adaptation-finetuning.html)
+ [SageMaker JumpStart 基盤モデル - HuggingFace Text2Text インストラクションの微調整](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/jumpstart-foundation-models/instruction-fine-tuning-flan-t5.html)

# 検索拡張生成
<a name="jumpstart-foundation-models-customize-rag"></a>

基盤モデルは通常オフラインでトレーニングされるため、モデルはモデルのトレーニング後に作成されたどのデータにも依存しません。さらに、基盤モデルは非常に一般的なドメインコーパスでトレーニングされるため、ドメイン固有のタスクにはあまり効果的ではありません。取得拡張生成 (RAG) を使用すると、基盤モデルの外部からデータを取得し、取得した関連データをコンテキストに追加することでプロンプトを拡張することができます。RAG モデルアーキテクチャの詳細については、「[Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks](https://arxiv.org/abs/2005.11401)」を参照してください。

RAG では、プロンプトの補強に使用される外部データを、ドキュメントリポジトリ、データベース、API などの複数のデータソースから取得できます。最初のステップは、関連性検索を実行するために、ドキュメントとユーザークエリを互換性のある形式に変換することです。形式を互換性のあるものにするために、ドキュメントコレクションまたはナレッジライブラリ、およびユーザーが送信したクエリを、埋め込み言語モデルを使用して数値表現に変換します。埋め込みとは、ベクトル空間でテキストに数値表現を与えるプロセスです。RAG モデルアーキテクチャは、ナレッジライブラリのベクトル内にあるユーザークエリの埋め込みを比較します。その後、元のユーザープロンプトに、ナレッジライブラリ内の類似ドキュメントからの関連コンテキストが追加されます。次に、この拡張プロンプトが基盤モデルに送信されます。ナレッジライブラリと関連する埋め込みは非同期で更新できます。

 ![\[A model architecture diagram of Retrieval Augmented Generation (RAG).\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/jumpstart/jumpstart-fm-rag.jpg) 

取得するドキュメントは、プロンプトの補完に役立つコンテキストを含む程度には大きく、プロンプトの最大シーケンス長に収まる程度に小さい必要があります。Hugging Face の General Text Embeddings (GTE) モデルなど、タスク固有の JumpStart モデルを使用して、プロンプトとナレッジライブラリドキュメントの埋め込みを提供できます。プロンプトとドキュメントの埋め込みを比較して最も関連性の高いドキュメントを特定したら、補足コンテキストを加味した新しいプロンプトを作成します。その後、拡張したプロンプトを、選択したテキスト生成モデルに渡します。

## サンプルノートブックの例
<a name="jumpstart-foundation-models-customize-rag-examples"></a>

RAG 基盤モデルソリューションの詳細については、次のサンプルノートブックを参照してください。
+ [Retrieval-Augmented Generation: Question Answering using LangChain and Cohere’s Generate and Embedding Models from SageMaker JumpStart](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/jumpstart-foundation-models/question_answering_retrieval_augmented_generation/question_answering_Cohere+langchain_jumpstart.html)
+ [Retrieval-Augmented Generation: Question Answering using LLama-2, Pinecone and Custom Dataset](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/jumpstart-foundation-models/question_answering_retrieval_augmented_generation/question_answering_pinecone_llama-2_jumpstart.html)
+ [取得拡張生成: オープンソースの LangChain ライブラリを使用したカスタムデータセットに基づく質問回答](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/jumpstart-foundation-models/question_answering_retrieval_augmented_generation/question_answering_langchain_jumpstart.html)
+ [取得拡張生成: カスタムデータセットに基づく質問回答](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/jumpstart-foundation-models/question_answering_retrieval_augmented_generation/question_answering_jumpstart_knn.html)
+ [Retrieval-Augmented Generation: Question Answering using Llama-2 and Text Embedding Models](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/jumpstart-foundation-models/question_answering_retrieval_augmented_generation/question_answering_text_embedding_llama-2_jumpstart.html)
+ [Amazon SageMaker JumpStart - Text Embedding and Sentence Similarity](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/jumpstart-foundation-models/question_answering_retrieval_augmented_generation/text-embedding-sentence-similarity.html)

[Amazon SageMaker AI サンプルリポジトリ](https://github.com/aws/amazon-sagemaker-examples/tree/main/introduction_to_amazon_algorithms/jumpstart-foundation-models)のクローンを作成して、Studio 内の任意の Jupyter 環境で利用可能な JumpStart 基盤モデルのサンプルを実行できます。SageMaker AI で Jupyter を作成してアクセスするために使用できるアプリケーションの詳細については、「[Amazon SageMaker Studio でサポートされているアプリケーション](studio-updated-apps.md)」を参照してください。