あめがえるのITブログ

頑張りすぎない。ほどほどに頑張るブログ。

【AWS】SageMakerノートブックでBedrock(titan)を操作してみた


下記サイトを参考に、SageMakerノートブックでBedrock(titan)を操作してみた。
docs.aws.amazon.com

前提

SageMakerノートブックが作成済みであること
※まだの場合下記を参考にノートブックを作成する
amegaeru.hatenablog.jp

実践!

1.SageMakerノートブックのロール修正
1-1.AWS - SageMaker
1-2.「Notebooks」-事前に作成しているノートブックを選択

1-3.「アクセス許可と暗号化」内の「IAM ロール ARN」を選択

1-4.「許可」タブ-「許可の追加」-「インラインポリシーを作成」

1-5.「JSON」を選択し、下記を入力

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "bedrock:*",
            "Resource": "*"
        }
    ]
}

1-6.「次へ」

1-7.ポリシー名に「test」と入力し、「ポリシーの作成」

1-8.「信頼関係」タブ

1-9.「信頼ポリシーを編集」

1-10.下記に修正
※"bedrock.amazonaws.com"を追加している

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "firehose.amazonaws.com",
                    "glue.amazonaws.com",
                    "codepipeline.amazonaws.com",
                    "codebuild.amazonaws.com",
                    "cloudformation.amazonaws.com",
                    "apigateway.amazonaws.com",
                    "sagemaker.amazonaws.com",
                    "events.amazonaws.com",
                    "states.amazonaws.com",
                    "lambda.amazonaws.com",
                    "bedrock.amazonaws.com"
                ]
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

1-11.「ポリシーを更新」


2.SageMakerノートブックを開く
2-1.AWS - SageMaker
2-2.「Notebooks」-事前に作成しているノートブックの「Jupyter を開く」

2-3.「New」-「conda_python3」


3.動作確認
3-1.下記を入力、200OKとベースモデルの情報が返ってくることを確認

import boto3
bedrock = boto3.client(
    service_name="bedrock"
)
bedrock.list_foundation_models()


3-2.下記を入力し、モデルにテキストプロンプトを送信してレスポンスが返ってくることを確認

import boto3
from botocore.exceptions import ClientError

# Create an Amazon Bedrock Runtime client.
brt = boto3.client("bedrock-runtime")

# Set the model ID, e.g., Amazon Titan Text G1 - Express.
model_id = "amazon.titan-text-express-v1"

# Start a conversation with the user message.
user_message = "Describe the purpose of a 'hello world' program in one line."
conversation = [
    {
        "role": "user",
        "content": [{"text": user_message}],
    }
]

try:
    # Send the message to the model, using a basic inference configuration.
    response = brt.converse(
        modelId=model_id,
        messages=conversation,
        inferenceConfig={"maxTokens": 512, "temperature": 0.5, "topP": 0.9},
    )

    # Extract and print the response text.
    response_text = response["output"]["message"]["content"][0]["text"]
    print(response_text)

except (ClientError, Exception) as e:
    print(f"ERROR: Can't invoke '{model_id}'. Reason: {e}")
    exit(1)



4.ノートブックインスタンス停止
※起動していると課金されるので使い終わったらすぐ停止しましょう。
4-1.作成しているインスタンス - 「停止」



感想

AIとも友達になりたいね。