Amazon Web Services ブログ

Amazon Bedrock のカスタムモデルを使用して Amazon Titan Image Generator G1 モデルをファインチューニングする

Amazon Titan Image Generator G1 は、Amazon Bedrock から入手できる最先端の text-to-image モデルです。さまざまなコンテキストで複数のオブジェクトを説明するプロンプトを理解し、生成する画像にこれらの関連情報を取り込むことができます。米国東部 (バージニア北部) と米国西部 (オレゴン) の AWS リージョンで利用でき、スマートクロッピング、インペイント、背景の変更などの高度な画像編集タスクを実行できます。ただし、ユーザーは、モデルがまだ学習していないカスタムデータセットの特性に合わせてモデルを調整させたいと考えています。カスタムデータセットには、ブランドガイドラインや以前のキャンペーンなどの特定のスタイルと一致する、非常に独自性の高いデータを含めることができます。このようなユースケースに対応し、完全にパーソナライズされた画像を生成するには、Amazon Bedrock のカスタムモデルを使用して独自のデータで Amazon Titan Image Generator をファインチューニングできます。

画像の生成から編集まで、text-to-image モデルは業界全体で幅広い用途があります。テキストによる説明だけで、従業員の創造性を高め、新しい可能性を想像できるようになります。たとえば、さまざまなデザインを手作業で作成しなくても視覚化できるため、建築家のデザインやフロアプランニングに役立ち、イノベーションを加速できます。同様に、グラフィックやイラストの生成を効率化することで、製造、小売業のファッションデザイン、ゲームデザインなど、さまざまな業界のデザインにも役立ちます。text-to-image モデルでは、パーソナライズされた広告だけでなく、メディアやエンターテインメントのユースケースにおけるインタラクティブで没入感のあるビジュアルチャットボットも可能にすることで、顧客体験を向上させます。

この投稿では、Amazon Titan Image Generator モデルをファインチューニングして、お気に入りのペットである「Ron the dog」と「Smila the cat」という2つの新しいカテゴリを学習させるプロセスをご紹介します。モデルのファインチューニングタスクのためにデータを準備する方法と、Amazon Bedrock でモデルカスタマイズジョブを作成する方法について説明します。最後に、ファインチューニングしたモデルをプロビジョンドスループットでテストして、デプロイする方法を示します。

Ron the dog Smila the cat

ファインチューニングジョブを実行する前に、モデルの機能を評価する

基盤モデルは大量のデータでトレーニングされているため、そのモデルはそのままでも十分に機能する可能性があります。そのため、実際にユースケースに合わせてモデルをファインチューニングする必要があるのか、それともプロンプトエンジニアリングで十分なのかを確認するのが得策です。次のスクリーンショットに示すように、Amazon Titan Image Generator のベースモデルを使用して、Ron the dog と Smila the cat の画像を生成してみましょう。

予想通り、そのままのモデルではまだ Ron と Smila を認識しておらず、生成された出力には異なる犬と猫が写っています。プロンプトエンジニアリングを行うことで、お気に入りのペットの見た目に近づくための詳細情報を提供できます。

プロンプトエンジニアリングを用いることで、より Ron や Smila に似た画像が生成されましたが、完全に類似した画像の作成は、このモデルでは不可能であるように見えます。では、Ron と Smila の写真を使ってファインチューニングジョブを開始し、一貫性のある、パーソナライズされた出力が得られるようにしましょう。

Amazon Titan Image Generator のファインチューニング

Amazon Bedrock では、Amazon Titan Image Generator のモデルのファインチューニングをサーバーレスで利用可能です。データを準備してハイパーパラメータを選択するだけで、面倒な作業は AWS が代わりに処理します。

Amazon Titan Image Generator のモデルを使用してファインチューニングを行うと、AWS が所有・管理するモデル開発用 AWS アカウントにこのモデルのコピーが作成され、モデルのカスタマイズジョブが作成されます。このジョブは VPC を通じてファインチューニング用のデータにアクセスし、Amazon Titan のモデルの重みが更新されます。新しいモデルは、事前学習済みモデルと同じモデル開発アカウントにある Amazon Simple Storage Service (Amazon S3) に保存されます。これで、お客様のアカウントでのみ推論に使用できるようになり、他の AWS アカウントと共有されることはありません。推論を実行する際は、プロビジョニングされたコンピュートキャパシティを介してこのモデルにアクセスするか、Amazon Bedrock のバッチ推論を使用して直接アクセスします。選択した推論方法に関わらず、データはお客様のアカウントに残り、AWS が所有するアカウントにコピーされたり、Amazon Titan Image Generator のモデルの改善に使用されたりすることはありません。

次の図は、このワークフローを示しています。

データプライバシーとネットワークセキュリティ

プロンプトやカスタムモデルなどのファインチューニングに使用されたデータは、お客様の AWS アカウントで非公開のまま保存されます。これらはモデルのトレーニングやサービス向上のために共有または使用されることはなく、サードパーティのモデルプロバイダーと共有されることもありません。ファインチューニングに使用されるすべてのデータは、転送中も保存中も暗号化され、API コールが処理されたのと同じリージョンに残ります。また、AWS PrivateLink を使用して、データが存在する AWS アカウントと VPC との間にプライベート接続を作成することもできます。

データの準備

モデルカスタマイズジョブを作成する前に、トレーニング用のデータセットを準備する必要があります。トレーニング用のデータセットの形式は、作成するカスタマイズジョブの種類 (ファインチューニングまたは継続的な事前トレーニング) とデータのモダリティ (text-to-text、text-to-image、または text-to-embedding) によって異なります。Amazon Titan Image Generator のモデルでは、ファインチューニングに使用する画像と各画像のキャプションを提供する必要があります。Amazon Bedrock では、画像は Amazon S3 に保存され、画像とキャプションの組み合わせは複数の JSON の行を含む JSONL 形式で提供されることを想定しています。

JSON の各行は、image-ref(画像の S3 URI)、と画像のテキストプロンプトを含むキャプションが含まれたサンプルです。画像は JPEG または PNG 形式である必要があります。次のコードはフォーマットの例を示しています。

{"image-ref": "s3://bucket/path/to/image001.png", "caption": "<prompt text>"}
{"image-ref": "s3://bucket/path/to/image002.png", "caption": "<prompt text>"}
{"image-ref": "s3://bucket/path/to/image003.png", "caption": "<prompt text>"}

「Ron」と「Smila」は人の名前など、他の文脈でも使用できる名前なので、モデルをファインチューニングするためのプロンプトを作成するときに「Ron the dog」と「Smila the cat」という識別子を追加します。これはファインチューニングのワークフローの要件ではありませんが、この追加情報により、新しいクラスにカスタマイズする際に、モデルの文脈がより明確になり、「Ron the dog」と Ron という人物を、「Smila the cat」をウクライナの Smila という都市と混同することがなくなります。このロジックを使用して、以下の画像はトレーニングデータセットのサンプルを示しています。

Ron the dog laying on a white dog bed Ron the dog sitting on a tile floor Ron the dog laying on a car seat
Smila the cat lying on a couch Smila the cat staring at the camera laying on a couch Smila the cat laying in a pet carrier

カスタマイズジョブで想定される形式にデータを変換すると、次のサンプル構造が得られます。

{"image-ref": "<S3_BUCKET_URL>/ron_01.jpg", "caption": "Ron the dog laying on a white dog bed"}
{"image-ref": "<S3_BUCKET_URL>/ron_02.jpg", "caption": "Ron the dog sitting on a tile floor"}
{"image-ref": "<S3_BUCKET_URL>/ron_03.jpg", "caption": "Ron the dog laying on a car seat"}
{"image-ref": "<S3_BUCKET_URL>/smila_01.jpg", "caption": "Smila the cat lying on a couch"}
{"image-ref": "<S3_BUCKET_URL>/smila_02.jpg", "caption": "Smila the cat sitting next to the window next to a statue cat"}
{"image-ref": "<S3_BUCKET_URL>/smila_03.jpg", "caption": "Smila the cat lying on a pet carrier"}

JSONL ファイルを作成したら、カスタマイズジョブを開始するために S3 バケットに保存する必要があります。Amazon Titan Image Generator G1 のファインチューニングジョブは、5 ~ 10,000 枚の画像を処理できます。この投稿で説明する例では、60 枚の画像を使用します。30 枚は Ron the dog、30 枚は Smila the cat です。一般的に、学習したいスタイルやクラスの種類を増やせば、ファインチューニングしたモデルの精度が向上します。ただし、ファインチューニングに使用する画像が多いほど、ファインチューニング作業が完了するまでにかかる時間が長くなります。使用する画像の数は、ファインチューニングするジョブの価格にも影響します。詳細については、Amazon Bedrock の料金を参照してください。

Amazon Titan Image Generator のファインチューニング

トレーニングデータの準備ができたので、新しいカスタマイズ作業を開始できます。このプロセスは Amazon Bedrock のコンソールまたは API のどちらからでも実行できます。Amazon Bedrock コンソールを使用するには、以下の手順を実行します。

  1. Amazon Bedrock コンソールのナビゲーションペインでカスタムモデルを選択します。
  2. モデルをカスタマイズメニューで、ファインチューニングジョブを作成を選択します。
  3. ファインチューニングされたモデル名に、新しいモデルの名前を入力します。
  4. ジョブの設定には、トレーニングジョブの名前を入力します。
  5. 入力データには、入力データの S3 パスを入力します。
  6. ハイパーパラメーターセクションで、以下の値を指定します。
    1. ステップ数 — モデルが各バッチに公開される回数。
    2. バッチサイズ — モデルのパラメーターを更新する前に処理されたサンプルの数。
    3. 学習率 — 各バッチ後にモデルパラメーターが更新される割合。これらのパラメーターの選択は、特定のデータセットによって異なります。一般的なガイドラインとして、まずバッチサイズを 8 に、学習率を 1e-5 に固定し、次の表に示すように、使用する画像の数に応じてステップ数を設定することをお勧めします。
提供された画像の数 8 32 64 1,000 10,000
推奨ステップ数 1,000 4,000 8,000 10,000 12,000

ファインチューニングジョブの結果が満足のいくものでない時は、生成された画像にスタイルの兆候が見られない場合はステップ数を増やし、生成された画像にアーティファクトやぼやけがあるスタイルが見られる場合はステップ数を減らすことを検討してください。ファインチューニングしたモデルが 40,000 ステップを踏んでもデータセット内の独自のスタイルを学習できない場合は、バッチサイズまたは学習率を上げることを検討してください。

  1. 出力データセクションに、定期的に記録される検証の損失と精度メトリクスを含む検証の出力が保存される S3 の出力パスを入力します。
  2. サービスアクセスセクションで、新しい AWS Identity and Access Management(IAM)ロールを生成するか、S3 バケットにアクセスするために必要な権限を持つ既存の IAM ロールを選択します。

この認証により、Amazon Bedrock は指定されたバケットから入力データセットと検証データセットを取得し、検証の出力を S3 バケットにシームレスに保存できます。

  1. モデルをファインチューニングを選択してください。

正しい構成が設定されたら、Amazon Bedrock がカスタムモデルをトレーニングします。

プロビジョニンドスループットでファインチューニングされた Amazon Titan Image Generatorをデプロイする

カスタムモデルを作成したら、プロビジョンドスループットを使用して、カスタムモデルにあらかじめ決められた固定レートの処理能力を割り当てることができます。この割り当てにより、ワークロードを処理するための一貫したパフォーマンスと容量が提供されるため、本番環境のワークロードのパフォーマンスが向上します。プロビジョンドスループットの 2 つ目の利点はコスト管理です。オンデマンド推論モードによる標準的なトークンベースの価格設定では、大規模になるとコストの予測が難しくなることがあります。

モデルのファインチューニングが完了すると、そのモデルが Amazon Bedrock のコンソールのカスタムモデルページに表示されます。

プロビジョンドスループットを購入するには、ファインチューニングしたカスタムモデルを選択し、プロビジョンドスループットを購入を選択します。

これにより、プロビジョンドスループットの購入対象として選択したモデルがあらかじめ入力されます。デプロイ前にファインチューニングしたモデルをテストするには、モデルユニットの値を 1 に設定し、コミットメント期間をコミットメントなしに設定します。これにより、カスタムプロンプトを使用してモデルのテストをすぐに開始し、トレーニングが適切かどうかを確認できます。さらに、新しいファインチューニングモデルや新しいバージョンが利用可能になった場合、同じモデルの他のバージョンで更新する場合に限り、プロビジョニングされたスループットを更新できます。

結果をファインチューニングする

Ron the dog と Smila the cat のモデルカスタマイズのタスクでは、実験の結果、5,000 ステップ、バッチサイズ 8、学習率 1e-5 が最適なハイパーパラメータであることがわかりました。

カスタマイズしたモデルによって生成された画像の例を以下に示します。

Ron the dog wearing a superhero cape Ron the dog on the moon Ron the dog in a swimming pool with sunglasses
Smila the cat on the snow Smila the cat in black and white staring at the camera Smila the cat wearing a Christmas hat

結論

この投稿では、高品質な画像を生成するために、プロンプトエンジニアリングの代わりにファインチューニングを使用する例を説明しました。Amazon Titan Image Generator のモデルをファインチューニングし、そのカスタムモデルを Amazon Bedrock にデプロイする方法を示しました。また、ファインチューニング用のデータを準備する方法や、より正確なモデルのカスタマイズのための最適なハイパーパラメータを設定する一般的なガイドラインも提供しました。

こちらの事例をご自身のユースケースに活用することで、Amazon Titan Image Generator を使用し、ハイパーパーソナライズされた画像を生成できます。

翻訳はソリューションアーキテクト菊地が担当しました。原文はこちらです。


著者について

Maira Ladeira Tanke は AWS のシニア生成 AI データサイエンティストです。機械学習のバックグラウンドを持ち、さまざまな業界の顧客を対象に AI アプリケーションの設計と構築に 10 年以上携わってきました。テクニカルリーダーとして、Amazon Bedrock の生成 AI ソリューションを通じて、顧客がビジネス価値の達成を加速できるよう支援しています。余暇には、Maira は旅行をしたり、猫の Smila と遊んだり、暖かい場所で家族と過ごす時間を楽しんでいます。

Dani MitchellDani Mitchell は、AWS の AI/ML スペシャリストソリューションアーキテクトです。コンピュータービジョンのユースケースに注力し、EMEA 全域のお客様が ML ジャーニーを加速できるよう支援しています。

Bharathi Srinivasan は AWS のプロフェッショナルサービスのデータサイエンティストで、Amazon Bedrock でクールなものを構築することが大好きです。彼女は責任ある AI に重点を置いて、機械学習アプリケーションからビジネス価値を引き出すことに情熱を注いでいます。Bharathi は、顧客向けの新しい AI 体験を構築すること以外にも、SF 小説を書いたり、持久力スポーツに挑戦したりすることが大好きです。

Achin Jain は、Amazon Artificial General Intelligence(AGI)チームの応用科学者です。彼はテキストから画像への変換モデルに関する専門知識を持ち、Amazon Titan Image Generator の構築に注力しています。