🔖

Amazon Bedrock実装②:Docker on Cloud9で実装してみる

2023/11/04に公開

Bedrock勉強中

Bedrockの使い方の勉強メモ

事前準備/環境

バージニアリージョン(us-east-1)に、Cloud9(Ubuntu Server 22.04 LTS)を立てます。
また、Cloud9のEC2のIAMロールに必要な権限を付与しておきます(面倒なら、とりあえず AdministratorAccess 付与しちゃう)

以下はCloud9のDockerバージョンです。

iam0001:~/environment $ docker --version
Docker version 24.0.7, build afdd53b

Dockerファイルを作成する

ここからの作業はCloud9で実施します。
ディレクトリ構成は以下のようにします。test.pyは、Bedrockにプロンプトを発行し結果を表示するPython3スクリプトです。

iam0001:~/environment $ tree
.
├── README.md
└── docker
    ├── Dockerfile_Bedrock
    └── work
        └── test.py

2 directories, 3 files
iam0001:~/environment $ 

Dockerファイル

Dockerfile_Bedrock
ARG python_image_v="python:3.10-buster"
FROM ${python_image_v}

ARG work_dir="/work/"
# コンテナにアクセスした際のデフォルトディレクトリ
WORKDIR ${work_dir}

# pip更新
RUN pip install --upgrade pip

# boto3インストール
RUN pip install boto3

# リージョン情報を設定する
ENV AWS_DEFAULT_REGION=us-east-1

# Bedrockに必要なモジュールをインストール
RUN pip install --no-build-isolation --force-reinstall \
    "boto3>=1.28.57" \
    "awscli>=1.29.57" \
    "botocore>=1.31.57" \
    "langchain==0.0.320"
test.py
import boto3
import json

# Boto3 セッションの作成
session = boto3.Session()

# Bedrock クライアントの作成
bedrock_client = session.client(service_name='bedrock')
bedrock_runtime_client = session.client(service_name='bedrock-runtime')

# 利用可能な基盤モデル一覧の表示
"""
foundation_models = bedrock_client.list_foundation_models()
print("Available foundation models:")
for model in foundation_models.get("modelSummaries", []):
    print(f"Model ID: {model['modelId']}, Model Name: {model['modelName']}")
"""

# モデルの同期的呼び出し(Anthropic Claude-v2 の場合)
prompt = "Human:AWSサービスって何ですか?\nAssistant:"

body = json.dumps({
    "prompt": prompt,
    "max_tokens_to_sample": 300,
    "temperature": 0.1,
    "top_k": 1,
    "stop_sequences": ["\n\nHuman"]
})

model_id = "anthropic.claude-v2"
accept = "application/json"
content_type = "application/json"

response = bedrock_runtime_client.invoke_model(
    body=body,
    modelId=model_id,
    accept=accept,
    contentType=content_type
)

response_body = json.loads(response.get('body').read())
print("Generated completion:")
print(response_body.get('completion'))

以上で準備完了です。

動作確認

Dockerを起動しBedrockが実行できるか動作確認する

Dockerの起動

Dockerイメージを作る

$ docker build -f Dockerfile_Bedrock -t bedrock_img .

Dokckerコンテナを作成し起動する

$ docker run --rm --name bedrock_env -v $PWD/work/:/work/ -dit bedrock_img

Dockerコンテナに入る

$ docker exec -it bedrock_env bash

test.py(Bedrock実行スクリプト)実行

Dockerコンテナに入った状態で、test.pyを実行します。

iam0001:~/environment/docker $ docker exec -it bedrock_env bash
root@f83fd462c12d:/work# ls
test.py
root@f83fd462c12d:/work# python test.py
Generated completion:
 AWS(Amazon Web Services)は、Amazon.comが提供するクラウドコンピューティングサービスの総称です。

主なサービスには以下のようなものがあります。

- EC2(Elastic Compute Cloud): 仮想サーバーのレンタルサービス
- S3(Simple Storage Service): オブジェクトストレージサービス  
- RDS(Relational Database Service): リレーショナルデータベースの管理サービス
- DynamoDB: NoSQLデータベースサービス
- SQS(Simple Queue Service): メッセージキューサービス
- SNS(Simple Notification Service): プッシュ通知サービス
- Lambda: サーバーレスコンピューティングサービス
- API Gateway: API管理サービス
- CloudFront: CDNサービス

AWSでは、これらのサービスをオンデマンドで利用でき、必要な分だけを利用して課金されるため、スケーラブルなアプリケーション
root@f83fd462c12d:/work# 

無事動きました。

===

Discussion