Amazon Bedrockでのファインチューニングは、まずJSON Lines形式のデータセットをS3にアップロードし、Bedrockコンソールでジョブを作成することから始まります。ジョブ作成時には、モデル名、ソースモデル、ハイパーパラメータを設定します。ハイパーパラメータ選定では、エポック数、学習率、バッチサイズを適切に調整することが重要です。ジョブ完了後、カスタムモデルをデプロイして推論に利用できます。
前提条件
- ファインチューニング用のデータセットが準備できていること。
- データセットはJSON Lines形式(
.jsonl
)で、S3にアップロードされていること。 - データセットのフォーマットは、選択するモデルによって異なります。
例えば、Claude 3 Haikuの場合は、入力と出力のペアを定義した形式が必要です。
- データセットはJSON Lines形式(
- AWSアカウントと、Bedrock、S3へのアクセス権限、および適切なIAM設定が正しく設定さている。
ステップ1: データセットをS3にアップロードする
- AWSマネジメントコンソールからS3を開きます。
- ファインチューニング用のデータセットを保存するバケットを作成、または既存のバケットを選択します。
- 準備した
.jsonl
形式のデータセットファイルをS3バケットにアップロードします。
ステップ2: ファインチューニングジョブを作成する
- AWSマネジメントコンソールからAmazon Bedrockを開きます。
- 左側のナビゲーションメニューから「モデルのカスタマイズ」を選択します。
- 「カスタムモデル」タブに移動し、「ファインチューニングジョブの作成」をクリックします。
- ジョブ設定の入力:
- ファインチューニングされたモデル名: 任意のモデル名を入力します。
- ジョブ名: ジョブを識別するための名前を入力します。
- ソースモデル: ファインチューニングする基盤モデルを選択します(例:Claude 3 Haiku)。
- ハイパーパラメータ: 以下の項目を必要に応じて設定します。
- Epochs: 学習を繰り返す回数。
- Learning rate: 学習の進め方。
- Early stopping: 過学習を防ぐための設定。
- 入力データ: S3にアップロードしたデータセットのパスを指定します。トレーニングデータと検証データ(任意)のS3パスを入力します。
- サービスロール: ジョブがS3バケットにアクセスするためのIAMロールを選択または新規作成します。
- 設定が完了したら、「モデルをファインチューニング」をクリックしてジョブを開始します。
ハイパーパラメータチューニング
Amazon Bedrockでファインチューニングを行う際、ハイパーパラメータの選定はモデルの性能を最大化するために非常に重要です。適切なハイパーパラメータは、モデルの過学習や未学習を防ぎ、効率的な学習を促します。
ファインチューニングで調整可能な代表的なハイパーパラメータは、エポック数 (Epochs) と 学習率 (Learning Rate) です。一部のモデルや設定では、バッチサイズ (Batch Size) も重要な要素となります。
1. エポック数 (Epochs)
エポック数は、ファインチューニング用のデータセット全体を、モデルが何回学習に利用するかを示す回数です。
- 選定基準:
- 少なすぎる場合: モデルがデータセットのパターンを十分に学習できず、未学習(Underfitting)の状態になります。結果として、性能が低くなる可能性があります。
- 多すぎる場合: モデルがデータセットの特定のノイズや詳細なパターンまで学習してしまい、過学習(Overfitting)の状態になります。過学習したモデルは、未知のデータに対する汎用性が失われ、性能が低下します。
- 推奨されるアプローチ:
- まずは、少なめのエポック数(例:3〜5回)から試してみるのが一般的です。
- 検証データセットがある場合は、学習の進行に伴う損失(Loss)や評価指標を監視し、改善が見られなくなった時点で学習を停止する「早期停止(Early Stopping)」を活用することも有効です。
2. 学習率 (Learning Rate)
学習率は、モデルの重みを更新する際の「一歩の大きさ」を決定するパラメータです。
- 選定基準:
- 高すぎる場合: モデルの学習が不安定になり、損失が収束せずに発散してしまう可能性があります。
- 低すぎる場合: 学習が非常に遅くなり、最適な解にたどり着くまでに膨大な時間がかかったり、局所的な最適解に陥ってしまったりする可能性があります。
- 推奨されるアプローチ:
- デフォルト値(例:
1.0
など)から始めるのが良いでしょう。 - その後、評価結果を基に、より良い結果を求めて少しずつ調整(例:
0.5
、2.0
など)していくのが効果的です。
- デフォルト値(例:
3. バッチサイズ (Batch Size)
バッチサイズは、一度にモデルに与えるトレーニングデータのサンプル数です。Bedrockの特定のモデルでは、この設定を調整できます。
- 選定基準:
- 大規模なデータセット: バッチサイズを小さく設定すると、学習がより安定する傾向があります。
- 小規模なデータセット: バッチサイズを大きく設定すると、学習速度が向上し、効率的になる場合があります。
ハイパーパラメータ選定の一般的な戦略
- デフォルト値から始める: まずは、Bedrockが提供するモデルのデフォルト値や推奨値から学習ジョブを開始します。これにより、ベースラインの性能を把握できます。
- 実験と監視を繰り返す: 一度に複数のハイパーパラメータを変更するのではなく、一つずつ変更しながら、モデルの性能を比較します。特に、検証データセットでの損失の推移を注意深く監視し、過学習や未学習の兆候がないかを確認します。
- データセットの規模を考慮する: データセットの規模によって、ハイパーパラメータの最適な値は異なります。一般的に、データセットが大規模な場合は学習率が、小規模な場合はバッチサイズが性能に大きな影響を与えると言われています。
ステップ3: ジョブの実行と完了を待つ
- ジョブのステータスが「トレーニング中」から「完了」に変わるまで待ちます。
- 完了後、作成されたカスタムモデルが「カスタムモデル」タブに表示されます。
ステップ4: カスタムモデルをデプロイして推論を行う
- 作成したカスタムモデルを選択し、「デプロイ」または「プロビジョンドスループットの購入」をクリックします。
- プロビジョンドスループット: 継続的にモデルを使用する場合に購入します。
- オンデマンド推論: (一部のモデルで利用可能) 使用した分だけ課金されます。
- デプロイが完了すると、作成されたモデルIDを使用して、API経由でファインチューニングされたモデルを呼び出し、推論を行うことができます。
リカバリー
Amazon Bedrockにおいて、ファインチューニングの学習を「リセット」する機能は存在しません。これは、ファインチューニングのプロセスとBedrockの仕組みに由来します。
1. 学習済みモデルを完全にリセットする方法
学習済みのカスタムモデルを元の基盤モデルの状態に戻すことはできません。
- Bedrockの仕組み: Bedrockでファインチューニングジョブを実行すると、選択した基盤モデル(例:Claude 3 Sonnet)をベースに、新しい「カスタムモデル」が作成されます。このカスタムモデルは、元の基盤モデルとは独立した、新しいエンティティ(実体)として扱われます。
- リセットの代替策:
- カスタムモデルの学習内容をリセットしたい場合は、単純にそのカスタムモデルを使用するのをやめ、元の基盤モデルを直接使用してください。 元の基盤モデルは常に存在し、ファインチューニングによって変更されることはありません。
- 不要になったカスタムモデルは、Bedrockコンソールから削除することができます。これにより、そのカスタムモデルへの課金は発生しなくなります。
2. 特定の学習データのみをリセットする方法
、特定の学習データのみを「忘れさせる」ことはできません。
- 学習の不可逆性: ファインチューニングは、モデルの重みを訓練データに基づいて永続的に変更するプロセスです。一度学習した内容を、特定のデータだけピンポイントで取り消すことは技術的に非常に困難であり、Bedrockのサービスとしてもそのような機能は提供されていません。
- リセットの代替策:
- 特定のデータに誤りがあったり、学習させたくないデータが含まれていたりする場合、その学習ジョブの結果を無かったことにしたい場合は、そのカスタムモデルの使用をやめ、新しく学習ジョブを作成し直す必要があります。
- 新しい学習ジョブでは、不要なデータを取り除いた、修正済みのデータセットを使用します。
コメント