はじめに
Amazon BedrockのGAに伴い、JAWS-UG横浜支部でワークショップのもくもく会を開催しました。
https://jawsug-yokohama.connpass.com/event/297915/
BedrockはGA前から変更された点が多く、Langchainのバージョンを上げないといけない等注意点が多かったので、まずはスタートラインに立てるようにするための記事です。
日本語のワークショップURL
ワークショップのGitHubリポジトリ
現時点で、日本語のワークショップは未完成のものが多く、実際はワークショップのGitHubリポジトリを見に行くのが良いです。
この記事は2023/9/30時点のものです。
環境
- OS:
Windows10 + WSL2(Ubuntu 20.04.6)
手順
1. Pythonのインストール
apt install -y python3 python3-pip (git)
※Gitがない場合はGitもインストールしておきましょう。
2. AWS CLIのインストール (最新じゃないとハマります)
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
3. Workshopリポジトリのクローン
git clone https://github.com/aws-samples/amazon-bedrock-workshop
cd amazon-bedrock-workshop
4. bedrock-python-sdkの更新 (不要になりました)
クローンしたフォルダに、以下のスクリプトをdownload-dependencies.sh
という名前で作成し、実行します。
#!/bin/sh
set -e
echo "(Re)-creating directory"
rm -rf ./dependencies
mkdir ./dependencies
cd ./dependencies
echo "Downloading dependencies"
curl -sS https://d2eo22ngex1n9g.cloudfront.net/Documentation/SDK/bedrock-python-sdk.zip > sdk.zip
echo "Unpacking dependencies"
# (SageMaker Studio system terminals don't have `unzip` utility installed)
if command -v unzip &> /dev/null
then
unzip sdk.zip && rm sdk.zip && echo "Done"
else
echo "'unzip' command not found: Trying to unzip via Python"
python -m zipfile -e sdk.zip . && rm sdk.zip && echo "Done"
fi
sh download-dependencies.sh
5. boto3のアップグレード (不要になりました)
pip install --upgrade boto3
6. Langchainのインストール(バージョン指定)
バージョンの指定 0.0.304
が超重要です
pip install --quiet langchain==0.0.304
7. Bedrockのモデルのアクセス設定
-
Bedrockは現時点で
バージニア
オレゴン
オハイオ
シンガポール
がサポートされています。
しかし、シンガポールとオハイオは使用できるモデルが制限されています。
バージニアかオレゴンを選びましょう。 -
Amazon Bedrockの画面から Model access を選びます。
最初は Access status がavailable
になっています。
※この状態で使えるかと思っていましたが、APIアクセスが AccessDeniedException
で弾かれて少し悩みました。
以下の、モデルのアクセス設定が必要となります。
8. VisualStudio Codeへjupyter拡張のインストール
9. ワークショップの実施
- Visual Studio Codeで 3.でクローンしたリポジトリのフォルダを開きます。
- 00_Intro -> bedrock_boto3_setup.ipynb を開くとJupyter拡張が良い感じに表示してくれます。
- Create the boto3 clientの部分でコードを修正します。
ローカルから実行する場合はロールではなくプロファイルからCredentialを読み込む場合が多いと思います。
リージョンの指定及び、AWSのプロファイル名をしておきましょう。
※この内容はほぼすべてのワークショップシナリオで必須となります。
os.environ["AWS_DEFAULT_REGION"] = "us-east-1" # E.g. "us-east-1"
os.environ["AWS_PROFILE"] = "xxx"
# os.environ["BEDROCK_ASSUME_ROLE"] = "<YOUR_ROLE_ARN>" # E.g. "arn:aws:..."
boto3_bedrock = bedrock.get_bedrock_client(
assumed_role=os.environ.get("BEDROCK_ASSUME_ROLE", None),
region=os.environ.get("AWS_DEFAULT_REGION", None),
runtime=False
)
-
その下の
Validate the connection
を実行してJSONのレスポンスが戻ってくればOKです。 -
InvokeModel body and output
は titanのモデル以外のものは実行できると思います。
※titanはGAに伴いモデルIDが変わっているようです。
以上
初学者へのおすすめシナリオ
以下のものはAWSのリージョンとプロファイルの指定を修正する部分を間違えなければすんなりと動いてくれるので、色々試したりコードを追いかけて理解するのに役立ちました。
- 01_Generation - 01_zero_shot_generation.ipynb
- 05_Image - Bedrock Stable Diffusion XL.ipynb
- 06_CodeGeneration - 00_code_generatation_w_bedrock.ipynb
謝礼
KAG小板橋さんのブログが大変参考になりました!ありがとうございます。
https://qiita.com/yoshii0110/items/f82c04dcf1cdd381553e
最後に
ワークショップを通して、LLMをアプリケーションに組み込むイメージがグッと上がりました。
AWSのコストで実施できるのも嬉しい部分ですね。
更新履歴
2023/10/1 手順4.5.は不要になったので取り消し線を付けておきました。
@hayao_k ご指摘ありがとうございます!