Amazon Web Services ブログ

AWS Step Functions ワークフローによる Amazon Bedrock モデルカスタマイズの自動化

本投稿は Automating model customization in Amazon Bedrock with AWS Step Functions workflow (記事公開日: 2024 年 7 月 11 日) を翻訳したものです。

大規模言語モデルは、幅広いビジネスユースケースにおいて知的で的確な応答を生成するのに必須となっています。しかし、企業は独自のデータやユースケースを持っており、大規模言語モデルをそのままの状態で使うだけでは不十分で、カスタマイズが必要になる場合があります。Amazon Bedrock は、AI21 Labs、Anthropic、Cohere、Meta、Mistral AI、Stability AI、Amazon などの主要な AI 企業から、単一の API を通じて高性能な基盤モデル(FMs)を選択できるフルマネージドサービスです。また、セキュリティ、プライバシー、責任ある AI を備えた生成 AI アプリケーションを構築するために必要な幅広い機能も提供しています。Amazon Web Services (AWS) は、AWS re:Invent 2023 でAmazon Bedrock でモデルをカスタマイズする機能をサポートすることを発表しました。これにより、お客様は独自の専有データを使って選択したモデルを事前学習し、モデルのレスポンスを自社のビジネス環境に合わせてカスタマイズできるようになります。カスタムモデルの品質は、トレーニングデータの品質と、モデルをカスタマイズするために使用されるハイパーパラメータなど、複数の要因に依存します。そのため、お客様の要件に最適なカスタマイズモデルを開発するために、複数の反復作業を行う必要があります。

この課題に対処するため、AWS はAmazon BedrockAWS Step Functionsの間のネイティブ統合を発表しました。これにより、お客様は Amazon Bedrock モデルをカスタマイズするための、反復処理可能で自動化されたワークフローをオーケストレーションできるようになります。

この投稿では、Step Functions がモデルカスタマイズにおける主な課題や問題点の解消にどのように役立つかをデモンストレーションします。モデルの学習、評価、モニタリングをオーケストレーションするサンプルワークフローの構成方法を学びます。反復可能なフレームワークを通じてこれらの複雑なタスクを自動化することで、開発期間を短縮し、企業の固有ニーズに合わせて Amazon Bedrock の真価を発揮させることができます。

アーキテクチャ

Architecture Diagram

このデモでは、Amazon Bedrock の Cohere Command Light Model を使用した要約のユースケースを利用します。ただし、このワークフローは、ベースモデル ID と必要なハイパーパラメータを渡し、ワークフローでモデル固有の軽微な変更を加えることで、他のモデルの要約ユースケースにも使用できます。カスタマイズがサポートされているモデル一覧については、Amazon Bedrock のユーザーガイドを参照してください。必要なすべてのインフラストラクチャは、AWS Serverless Application Model (SAM) を使用してデプロイされます。

以下は、このアーキテクチャの機能概要です。

  • ユーザーは、JSON Line 形式のトレーニングデータを Amazon Simple Storage Service (Amazon S3) のトレーニングデータバケットにアップロードし、検証用および推論用の参照データを検証データバケットにアップロードします。このデータは JSON Line 形式でなければなりません。
  • Step Function CustomizeBedrockModel ステートマシンは、カスタマイズするモデル、ハイパーパラメータ、トレーニングデータの場所および本投稿の後半で説明するその他のパラメータなどの入力パラメータで開始されます。
    • ワークフローは、Amazon Bedrock の CreateModelCustomizationJob API を同期的に呼び出し、S3 バケットからのトレーニングデータと渡されたハイパーパラメータを使用してベースモデルをファインチューニングします。
    • カスタムモデルが作成された後、ワークフローは Amazon Bedrock の CreateProvisionedModelThroughput API を呼び出し、コミットメントなしでプロビジョニングされたスループットを作成します。
    • 親ステートマシンは、子ステートマシンを呼び出し、カスタムモデルの性能をベースモデルと比較して評価します。
    • 子ステートマシンは、S3 検証バケットからの同じ検証データを使用してベースモデルとカスタムモデルのプロビジョニングされたスループットを呼び出し、推論結果を推論バケットに格納します。
    • AWS Lambda 関数が呼び出されてカスタムモデルとベースモデルによる要約の品質を BERTScore メトリックで評価します。カスタムモデルがベースモデルよりも性能が悪い場合、プロビジョニングされたスループットは削除されます。
    • 結果を通知するメールが送信されます。

前提条件

  • AWSアカウントを持っていない場合はAWS アカウントを作成します。
  • AWS マネジメントコンソールとAWS Command Line Interface (AWS CLI) を使用して AWS アカウントにアクセスできる必要があります。使用する AWS Identity and Access Management (IAM) ユーザーには、必要なAWSサービスの呼び出しとこの投稿で言及されているAWSリソースの管理を行う権限が与えられている必要があります。IAM ユーザーに権限を付与する際は、最小特権原則に従ってください。
  • Git がインストールされている必要があります。
  • AWS Serverless Application Model (AWS SAM) がインストールされている必要があります。
  • Docker がインストールされ、実行状態になっている必要があります。
  • AWS SAM テンプレートを実行する AWS リージョンの Amazon Bedrock コンソールで、Cohere Command Light Model アクセスを有効にする必要があります。このデモでは、モデルをカスタマイズします。ただし、このワークフローは、他のサポートされているモデルのカスタマイズにも、モデル固有の軽微な変更を加えることで拡張できます。カスタマイズに対応するモデル一覧については、Amazon Bedrock ユーザーガイドを参照してください。このデモを実行するには、ベースモデルに対してモデルユニットの確約予約がない必要があります。

デモ準備

このデモンストレーションのリソースは、米国東部 (バージニア北部) AWS リージョン (us-east-1) にプロビジョニングされます。モデルのカスタマイズワークフローを実装するために必要な下記のフェーズについて順を追って説明します。

  1. AWS SAM テンプレートを使用してソリューションをデプロイします
  2. 独自のトレーニングデータを S3 バケットにアップロードします
  3. Step Functions ワークフローを実行し、モニタリングします
  4. ベース基盤モデルのトレーニング結果を確認します
  5. クリーンアップを行います

ステップ 1:AWS SAM テンプレートを使用したソリューションのデプロイ

最新の手順については GitHub リポジトリを参照してください。Step Functions ワークフローをデプロイするには、AWS SAM テンプレートを使用してください。以下の手順に従ってください。

  1. ターミナルで新しいディレクトリを作成し、そのディレクトリに移動して GitHub リポジトリをクローンします:
git clone https://github.com/aws-samples/amazon-bedrock-model-customization.git
  1. ソリューションディレクトリに移動します:
cd amazon-bedrock-model-customization
  1. build.sh を実行してコンテナイメージを作成します。
bash build.sh
  1. プロンプトが表示されたら、次のパラメータ値を入力してください:
 image_name=model-evaluation 
 repo_name=bedrock-model-customization 
 aws_account={your-AWS-account-id}
 aws_region={your-region}
  1. コマンドラインから、AWS SAM を使用して template.yml ファイルで指定されているパターンに必要な AWS リソースをデプロイします:
sam deploy --guided
  1. プロンプトが表示されたら、以下の入力を提供してください:
Enter a stack name.
Enter us-east-1 or your AWS Region where you enabled Amazon Bedrock Cohere Command Light Model.
Enter SenderEmailId - Once the model customization is complete email will come from this email id. You need to have access to this mail id to verify the ownership.
Enter RecipientEmailId - User will be notified to this email id.
Enter ContainerImageURI - ContainerImageURI is available from the output of the `bash build.sh` step.
Keep default values for the remaining fields.
  1. SAM デプロイプロセスからの出力に注目してください。これらには、後続のステップで使用されるリソース名や ARN が含まれています。

ステップ 2: 独自のトレーニングデータを S3 バケットにアップロードする

独自のトレーニングデータは、前のステップで作成された専用の S3 バケットにアップロードされ、Amazon Bedrock Cohere Command Light モデルのファインチューニングに使用されます。トレーニングデータは、JSON Line 形式で、1 行ごとに問題文と応答の 2 つの要素を持つ有効な JSON が含まれている必要があります。

HuggingFace のこのパブリックデータセットを使用し、JSON Line 形式に変換しました。

  1. 次のコマンドを使用して、用意されたトレーニングデータファイルを S3 バケットにアップロードします。TrainingDataBucketsam deploy --guided から出力された値に置き換えてください。your-region は SAM テンプレートを実行したときに指定したリージョンに更新してください。
aws s3 cp training-data.jsonl s3://{TrainingDataBucket}/training-data.jsonl --region {your-region}
  1. validation-data.json ファイルをsam deploy --guidedから出力されたValidationDataBucketの値を指定して、以下のコマンドを使用して S3 バケットにアップロードしてください。your-region は SAM テンプレートを実行したときに指定したリージョンに更新してください。
aws s3 cp validation-data.json s3://{ValidationDataBucket}/validation-data.json --region {your-region}
  1. reference-inference.json ファイルを、次のコマンドを使って S3 バケットにアップロードします。ValidationDataBucketsam deploy --guided から出力された値に置き換えてください。your-region は SAM テンプレートを実行したときに指定したリージョンに更新してください。
aws s3 cp reference-inference.json s3://{ValidationDataBucket}/reference-inference.json --region {your-region}
  1. 送信者メールIDを確認するためのメールも受信されているはずです。メールに記載の手順に従ってメールIDを確認してください。

Email Address Verification Request

ステップ 3: ステップ関数ワークフローの実行とモニタリング

Step Functions ステートマシンを開始し、直前のステップで S3 バケットにアップロードされたトレーニングデータに基づいて、Amazon Bedrock 上の Cohere Command Light モデルをファインチューニングします。また、ハイパーパラメータも渡します。必要に応じて変更してください。

  1. 次の AWS CLI コマンドを実行して、Step Functions ワークフローを開始します。StateMachineCustomizeBedrockModelArnTrainingDataBucket の値は、sam deploy --guided から出力された値に置き換えてください。UniqueModelNameUniqueJobName は各々一意の値に置き換えてください。ハイパーパラメータの値は選択したモデルに基づいて変更してください。your-region はSAM テンプレートを実行したときに指定したリージョンに更新してください。
aws stepfunctions start-execution --state-machine-arn "{StateMachineCustomizeBedrockModelArn}" --input "{\"BaseModelIdentifier\": \"cohere.command-light-text-v14:7:4k\",\"CustomModelName\": \"{UniqueModelName}\",\"JobName\": \"{UniqueJobName}\", \"HyperParameters\": {\"evalPercentage\": \"20.0\", \"epochCount\": \"1\", \"batchSize\": \"8\", \"earlyStoppingPatience\": \"6\", \"earlyStoppingThreshold\": \"0.01\", \"learningRate\": \"0.00001\"},\"TrainingDataFileName\": \"training-data.jsonl\"}" --region {your-region}

出力例:

{
"executionArn": "arn:aws:states:{your-region}:123456789012:execution:{stack-name}-wcq9oavUCuDH:2827xxxx-xxxx-xxxx-xxxx-xxxx6e369948",
"startDate": "2024-01-28T08:00:26.030000 + 05:30"
}

基盤モデルのカスタマイズと評価には、完了するまでに 1 時間から 1.5 時間かかります。カスタマイズが完了したら、通知メールが届きます。

  1. 次のいずれかを実行します。AWS Step Functions コンソールにサインインして、Step Functions ワークフローのステータスを確認します。ワークフローが正常に完了するのを待ちます。前のステップの出力から executionArn を置き換え、your-region を更新してください。
aws stepfunctions describe-execution --execution-arn {executionArn} --query status --region {your-region}

ステップ 4:ベース基盤モデルのトレーニング結果の確認

AWS Step Functions のワークフローが正常に完了すると、カスタマイズモデルの品質の結果がメールで送信されます。カスタマイズモデルがベースモデルよりも優れていない場合、プロビジョニング済みのリソースが削除されます。以下はサンプルのメールです。

Model Customization Complete

推論レスポンスの品質が満足できない場合は、更新されたトレーニングデータまたはハイパーパラメータに基づいて、ベースモデルを再トレーニングする必要があります。

ModelInferenceBucket には、ベース基盤モデルとカスタマイズモデルの両方から生成された推論結果が格納されています。

ステップ 5: クリーンアップ

PoC(概念実証)やデモンストレーションの後、コストを最適化し、セキュリティポスチャを強化するための重要なベストプラクティスは、プロビジョニングされたAWSリソースを適切に廃棄することです。この投稿の前半でデプロイしたインフラストラクチャコンポーネントを削除するには、次の手順を実行します。

  1. カスタムモードのAmazon Bedrockプロビジョニングスループットを削除します。誤って削除されないように、正しい ProvisionedModelArn を指定してください。また、your-region を使用するリージョンに更新してください。
aws bedrock delete-provisioned-model-throughput --provisioned-model-id {ProvisionedModelArn} --region {your-region}
  1. Amazon Bedrock カスタムモデルを削除します。意図しない削除を避けるために、正しい CustomModelName を指定し、your-region を更新してください。
aws bedrock delete-custom-model --model-identifier {CustomModelName} --region {your-region}
  1. 次のコマンドを使用して、S3 バケット内のコンテンツを削除してください。誤ったバケット名を指定すると、データが失われる可能性があるため、正しいバケット名を指定していることを確認してください。
 aws s3 rm s3://{TrainingDataBucket} --recursive --region {your-region}
 aws s3 rm s3://{CustomizationOutputBucket} --recursive --region {your-region}
 aws s3 rm s3://{ValidationDataBucket} --recursive --region {your-region}
 aws s3 rm s3://{ModelInferenceBucket} --recursive --region {your-region}
  1. AWS SAM を通じて AWS アカウントにデプロイされたリソースを削除するには、次のコマンドを実行してください:
sam delete

結論

この投稿では、AWS Step Functions をオーケストレーションエンジンとして使用して、Amazon Bedrock モデルをカスタマイズするエンドツーエンドのワークフローを概説しました。自動ワークフローは、カスタマイズされたデータで基盤モデルを訓練し、ハイパーパラメータを調整します。次に、カスタマイズされたモデルの性能をベース基盤モデルと比較して、トレーニングの有効性を評価します。完了すると、ユーザーにはメールで学習結果が通知されます。

大規模言語モデルをカスタマイズするには、専門的な機械学習の知識とインフラストラクチャが必要です。Amazon Bedrock や Step Functions などの AWS サービスは、これらの複雑さを抽象化することで、企業が独自のデータとユースケースに集中できるようになります。カスタマイズと評価のための自動化されたワークフローを持つことで、お客様は運用負荷を軽減して、より迅速にニーズに合わせてモデルをカスタマイズできます。

参考文書

著者について

Biswanath Mukherjee は、Amazon Web Services のシニアソリューションアーキテクトです。AWS の大規模な戦略的顧客に対し、AWS クラウドへのアプリケーションの移行とモダナイズのための技術的ガイダンスを提供しています。クラウドアーキテクチャと移行に関する豊富な経験を活かし、顧客と協力して、AWS のスケーラビリティ、信頼性、アジリティを活用したイノベーティブなソリューションを開発し、顧客のビジネスニーズを満たしています。その専門知識は、さまざまな業界やユースケースに及び、顧客が AWS クラウドの真のポテンシャルを引き出すことができるようサポートしています。

本ブログはソリューションアーキテクトの銭 敏娟が翻訳しました。原文はこちらです。