Amazon Bedrock に追加された Stability AI の画像生成モデル Top3 が、AWS CDK でモデル識別子として利用可能になりました

Amazon Bedrock に追加された Stability AI の画像生成モデル Top3 が、AWS CDK でモデル識別子として利用可能になりました

Clock Icon2024.09.09

こんにちは、製造ビジネステクノロジー部の若槻です。

AWS CDK の最新のリリースで、下記のアップデートが追加されていました。

https://github.com/aws/aws-cdk/releases/tag/v2.156.0

bedrock: add Stable Image Ultra, Stable Diffusion 3 Large, and Stable Image Core model identifiers (#31327) (586cb04)

Stable Image Ultra、Stable Diffusion 3 Large および Stable Image Core は、数日前に Amazon Bedrock で利用可能となった Stability AI の最先端の Text-to-Image 生成 AI モデルです。

https://aws.amazon.com/jp/blogs/aws/stability-ais-best-image-generating-models-now-in-amazon-bedrock/

https://ja.stability.ai/blog/stability-ais-top-3-text-to-image-models-now-available-in-amazon-bedrock

今回の AWS CDK のアップデートは、これらのモデルのモデル ID(識別子)が aws_bedrock モジュールに追加されたというものです。

試してみた

CDK パッケージのアップデート

AWS CDK パッケージを v2.156.0 以上にアップデートします。

npm i aws-cdk-lib@latest aws-cdk@latest

CDK コードでのモデル識別子の取得

下記は FoundationModel.fromFoundationModelId メソッドを使用した 3 つのモデルの識別子を取得する CDK コードです。

lib/cdk-sample-stack.ts
import * as bedrock from 'aws-cdk-lib/aws-bedrock';
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';

export class CdkSampleStack extends cdk.Stack {
  constructor(scope: Construct, id: string) {
    super(scope, id);

    /**
     * Stable Image Ultra モデルの識別子を取得
     */
    const stableImageUltraModel = bedrock.FoundationModel.fromFoundationModelId(
      this,
      'StableImageUltraModel',
      bedrock.FoundationModelIdentifier.STABILITY_STABLE_IMAGE_ULTRA_V1_0
    );

    // モデルの識別子を出力
    new cdk.CfnOutput(this, 'StableImageUltraModel', {
      value: stableImageUltraModel.modelId,
    });

    /**
     * Stability SD3 Large モデルの識別子を取得
     */
    const stabilitySd3LargeModel =
      bedrock.FoundationModel.fromFoundationModelId(
        this,
        'StabilitySd3LargeModel',
        bedrock.FoundationModelIdentifier.STABILITY_SD3_LARGE_V1_0
      );

    // モデルの識別子を出力
    new cdk.CfnOutput(this, 'StabilitySd3LargeModel', {
      value: stabilitySd3LargeModel.modelId,
    });

    /**
     * Stability Core モデルの識別子を取得
     */
    const stableImageCoreModel = bedrock.FoundationModel.fromFoundationModelId(
      this,
      'StableImageCoreModel',
      bedrock.FoundationModelIdentifier.STABILITY_STABLE_IMAGE_CORE_V1_0
    );

    // モデルの識別子を出力
    new cdk.CfnOutput(this, 'StableImageCoreModel', {
      value: stableImageCoreModel.modelId,
    });
  }
}

上記コードをデプロイすると、モデルの識別子が取得できていることが確認できます。

$ npm run deploy

> [email protected] deploy
> cdk deploy --require-approval never --method=direct

✨  Synthesis time: 5.29s

CdkSampleStack:  start: Building 5cb35d407b13473f24bcde3a2a66adf42a211229a54d7c51c5d6a815b192c856:current_account-current_region
CdkSampleStack:  success: Built 5cb35d407b13473f24bcde3a2a66adf42a211229a54d7c51c5d6a815b192c856:current_account-current_region
CdkSampleStack:  start: Publishing 5cb35d407b13473f24bcde3a2a66adf42a211229a54d7c51c5d6a815b192c856:current_account-current_region
CdkSampleStack:  success: Published 5cb35d407b13473f24bcde3a2a66adf42a211229a54d7c51c5d6a815b192c856:current_account-current_region
CdkSampleStack: deploying... [1/1]
CdkSampleStack: updating stack...

 ✅  CdkSampleStack

✨  Deployment time: 161.36s

Outputs:
CdkSampleStack.StabilitySd3LargeModel = stability.sd3-large-v1:0
CdkSampleStack.StableImageCoreModel = stability.stable-image-core-v1:0
CdkSampleStack.StableImageUltraModel = stability.stable-image-ultra-v1:0
Stack ARN:
arn:aws:cloudformation:ap-northeast-1:XXXXXXXXXXXX:stack/CdkSampleStack/fd7023d0-653d-11ef-b8c3-0e28b5cf9e67

取得したモデル識別子の利用例

FoundationModel.fromFoundationModelId により取得したモデル識別子は、Bedrock API を実行する Lambda 関数や ECS タスクなどに注入するなどの用途で利用できます。

例えば環境変数から取得した ID の画像生成 AI モデルを実行する Python コードは次のようになります。

import os
import boto3
import json
import base64
import io
from PIL import Image

bedrockModelId = os.environ[BEDROCK_MODEL_ID] # Bedrock の モデル識別子を環境変数から取得

bedrock = boto3.client('bedrock-runtime', region_name='us-west-2')
response = bedrock.invoke_model(
    modelId=bedrockModelId,
    body=json.dumps({
        'prompt': 'A car made out of vegetables.'
    })
)
output_body = json.loads(response["body"].read().decode("utf-8"))
base64_output_image = output_body["images"][0]
image_data = base64.b64decode(base64_output_image)
image = Image.open(io.BytesIO(image_data))
image.save("image.png")

参考:Stable Image Ultra request and response - Amazon Bedrock

上記を Lambda 関数で実行するのであれば、下記のように Bedrock モデルの識別子を Lambda 関数の環境変数に設定して注入することができます。

lib/cdk-sample-stack.ts
import * as bedrock from 'aws-cdk-lib/aws-bedrock';
import * as lambda from 'aws-cdk-lib/aws-lambda';
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import { PythonFunction } from '@aws-cdk/aws-lambda-python-alpha';

export class CdkSampleStack extends cdk.Stack {
  constructor(scope: Construct, id: string) {
    super(scope, id);

    /**
     * Stable Image Ultra モデルの識別子を取得
     */
    const stableImageUltraModel = bedrock.FoundationModel.fromFoundationModelId(
      this,
      'StableImageUltraModel',
      bedrock.FoundationModelIdentifier.STABILITY_STABLE_IMAGE_ULTRA_V1_0
    );

    /**
     * 注入された ID のモデルを使用する Lambda 関数を作成
     */
    new PythonFunction(this, 'HelloFunction', {
      runtime: lambda.Runtime.PYTHON_3_12,
      entry: 'src/lambda/hello',
      handler: 'handler',
      environment: {
        BEDROCK_MODEL_ID: stableImageUltraModel.modelId,
      },
    });
  }
}

おわりに

Amazon Bedrock に追加された Stability AI の画像生成モデル Top3 が、AWS CDK でモデル識別子として利用可能になったのでご紹介しました。

生成 AI、ひいては Amazon Bedrock の進化が留まるところを知りませんね。頑張ってキャッチアップしていきたいところです。

参考

https://dev.classmethod.jp/articles/aws-cdk-v2-115-0-supports-amazon-bedrock-l2-construct/
https://dev.classmethod.jp/articles/building-python-lambda-function-with-aws-cdk-typescrip/

以上

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.