

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

# ファインチューニング用の基盤モデルとハイパーパラメータ
<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)