kakakakakku blog

Weekly Tech Blog: Keep on Learning!

Amazon Bedrock のユースケースに実践的に入門できる「Amazon Bedrock Workshop」

Amazon Bedrock で基盤モデル (Foundation Models) を実践的に活用する流れを体験できる「Amazon Bedrock Workshop」を実施した❗️Amazon Bedrock をマネジメントコンソールの playground で試すのは簡単だけど,Python (boto3) でどう実装するのかというコードレベルまで学べる💡

現在 Amazon Bedrock Workshop には以下のコンテンツがあって,Amazon Bedrock を活用できるユースケースの多さにワクワクする.実際にどのコンテンツもとてもおもしろかった👏

  • Prompt Engineering(プロンプトエンジニアリング)
  • Text Generation(テキスト生成)
  • Text Summarization(テキスト要約)
  • Question Answering(質問と回答)
  • Conversational Interfaces - Chatbots(チャットボット)
  • Image Generation(画像生成)
  • Code Generation(コード生成)
  • Agents for Bedrock(エージェント)
  • Entity Extraction(エンティティ抽出)
  • Guardrails for Chatbots(ガードレール)

catalog.us-east-1.prod.workshops.aws

実施する前にインプットしておこう

僕自身は Amazon Bedrock に詳しくなく,Amazon Bedrock Workshop を実施する前に必要最低限のインプットをしておこうと思った.AWS Skill Builder で無料で学べるデジタルコース「Amazon Bedrock Getting Started (Japanese) (Sub) 日本語字幕版」があって受講した💡コンパクトにまとまってて良かった \( 'ω')/

explore.skillbuilder.aws

また LLM や LangChain 回りは以下の書籍を読んで写経したときの知識があって関連する部分もあった.

kakakakakku.hatenablog.com

Amazon Bedrock Workshop でハマったところなど

あくまで個人的にではあるけど,Amazon Bedrock Workshop を実施したときに少しハマったので,少しメモしておこうと思う❗️ちなみに実施した期間は 2024/01/06 - 2024/01/12 の1週間📅 もちろん環境依存な部分もあると思うし,僕自身の勘違いもあると思うし,既に GitHub 側で修正されていることもあると思う.参考レベルとして \( 'ω')/

手順書は英語を使おう

最初 Amazon Bedrock Workshop を見たときに日本語もあるじゃん〜と思って期待したけど,現時点では最新に追随されてなさそうだし(例えば Agents for Bedrock / Guardrails for Chatbots など),そもそも Jupyter Notebook へのリンクがないところは致命的だと思った🚨最初どうやって進めれば良いのか全然わからなかった🌀

また GitHub で管理されてる Jupyter Notebook は比較的頻繁に更新されてるため,最新になっているか確認するのも重要だと思う.

github.com

Model access で許可しておこう

Amazon Bedrock Workshop を実施する前に Amazon Bedrock の Model access で許可しておく必要がある.最初は Titan のみ許可しておけば良いかな〜と思ったけど,Claude と Stable Diffusion XL を使う手順もあって,最終的に以下のようにしてみた.ちなみに Claude は Use case details も追加で入力する必要があって,Amazon Bedrock Workshop のためと書いたけど(おそらく)問題なさそうだった.

Model access

ちなみに Model access の手順に関しては以下の issue もあって,これは僕もあると良いかなと思った.特に Amazon Bedrock Workshop は初学者も試すだろうしハマりポイントが多いと挫折しやすくなってしまう.

github.com

Amazon Titan モデルに旧名称があることを覚えておこう

例えば 01_Generation/00_generate_w_bedrock.ipynb を見ると modelId = 'amazon.titan-tg1-large' と実装されていて,Amazon Bedrock の Model access で何を許可すれば良いんだろ〜と悩んだ.調べたところモデルの旧名称らしく,そのままでも動くけど amazon.titan-text-express-v1 に変更しても動く👌

aws.amazon.com

Python 仮想環境を使おう

Amazon Bedrock Workshop ではセットアップするライブラリも多く環境によっては依存解決に問題が出る可能性があるため,venv など何かしらの Python 仮想環境で実行すると良いと思う.ちなみに VS Code で Jupyter Notebook を実行する場合はカーネル設定から venv を選べば OK👌

$ python -m venv bedrockenv

リージョンは us-east-1 にしよう

セットアップの手順に書いてあるから大丈夫だと思うけど,今回僕は VS Code で Amazon Bedrock Workshop を実施したため,毎回プロファイルなどの環境変数を設定した.少し面倒ではあるけど,最初からコメントアウトされてるため,忘れることはないと思う.

os.environ["AWS_DEFAULT_REGION"] = "us-east-1"
os.environ["AWS_PROFILE"] = "xxxxx"

ちなみに実行すると以下のように表示されるけど us-east-1 になってることは確認しておくと良いと思う.1回設定を間違えていることに気付かず進んだら AccessDeniedExceptionResourceNotFoundException が出てしまって,原因は ap-northeast-1bedrock-runtime が初期化されてしまっていた💨

Create new client
  Using region: us-east-1
  Using profile: xxxxx
boto3 Bedrock client successfully created!
bedrock-runtime(https://bedrock-runtime.us-east-1.amazonaws.com)

特に印象的だったコンテンツ

正直どのコンテンツも勉強になったけど,特に印象的だった3つを抜粋してみた❗️

Image Generation

Stable Diffusion 自体はオンラインで試したことはあるけど,Amazon Bedrock と組み合わせて Text to Image / Image to Image / Image Inpainting を試せる.以下は a beautiful mountain landscape というプロンプトでマスク画像と組み合わせた Image Inpainting の結果例🎨

Image Generation: a beautiful mountain landscape

Agents for Bedrock

2023年12月に正式リリースになった Agents for Amazon Bedrock も試せる.オンライン靴屋のチャットボットを実装しつつ,顧客名に紐付くデータを Lambda (+SQLite) で取得してレコメンドを返したりする.RAG / ReAct の仕組み・アクショングループの OpenAPI 定義など Agents for Amazon Bedrock の実装イメージを掴めて良かった❗️

aws.amazon.com

docs.aws.amazon.com

Agents for Amazon Bedrock(CoT トレース付き)

Guardrails for Chatbots

Amazon Bedrock と NeMo Guardrails を組み合わせて,回答したくないことなどをガードレールとして制御する仕組みを試せる.例えば以下は Topical Rail を試した結果で,事前に設定したトピックを逸脱した who should I vote for? という質問をしたときにガードレールとして機能している🚧

Amazon Bedrock と NeMo Guardrails を組み合わせる

実施ログ抜粋

その他実施ログも一部載せておく📝

最初に 00_Intro/bedrock_boto3_setup.ipynb で基盤モデル (Foundation Models) を取得するコードをちょっと書き換えて modelId のみを取得してみた.

models = boto3_bedrock.list_foundation_models()
for model in models['modelSummaries']:
    print(model['modelId'])

取得できたモデル一覧は以下だった.

amazon.titan-tg1-large
amazon.titan-image-generator-v1:0
amazon.titan-image-generator-v1
amazon.titan-embed-g1-text-02
amazon.titan-text-lite-v1:0:4k
amazon.titan-text-lite-v1
amazon.titan-text-express-v1:0:8k
amazon.titan-text-express-v1
amazon.titan-embed-text-v1:2:8k
amazon.titan-embed-text-v1
amazon.titan-embed-image-v1:0
amazon.titan-embed-image-v1
stability.stable-diffusion-xl
stability.stable-diffusion-xl-v0
stability.stable-diffusion-xl-v1:0
stability.stable-diffusion-xl-v1
ai21.j2-grande-instruct
ai21.j2-jumbo-instruct
ai21.j2-mid
ai21.j2-mid-v1
ai21.j2-ultra
ai21.j2-ultra-v1
anthropic.claude-instant-v1:2:100k
anthropic.claude-instant-v1
anthropic.claude-v1
anthropic.claude-v2:0:18k
anthropic.claude-v2:0:100k
anthropic.claude-v2:1:18k
anthropic.claude-v2:1:200k
anthropic.claude-v2:1
anthropic.claude-v2
cohere.command-text-v14:7:4k
cohere.command-text-v14
cohere.command-light-text-v14:7:4k
cohere.command-light-text-v14
cohere.embed-english-v3
cohere.embed-multilingual-v3
meta.llama2-13b-chat-v1:0:4k
meta.llama2-13b-chat-v1
meta.llama2-70b-chat-v1:0:4k
meta.llama2-70b-chat-v1
meta.llama2-13b-v1:0:4k
meta.llama2-13b-v1
meta.llama2-70b-v1:0:4k
meta.llama2-70b-v1

modelId は以下のドキュメントにも載っていた📝

docs.aws.amazon.com

また同じ Text 系のモデルなら Claude を Titan に差し替えても動くのかな〜という思ってコードを書き換えながら試行錯誤してたら,モデルによって推論パラメータが違うことを学んだ.例えば Claude に top_k はあるけど Titan はないなど.もちろん精度は異なると思うけど,Jupyter Notebook を単に実行するだけでなく,コードを書き換えながら実行するのも勉強になった💡

docs.aws.amazon.com

まとめ

「Amazon Bedrock Workshop」を実施した❗️コンテンツが充実してて,実践的に学べて良かった.個人的には少しハマりポイントがあったけど,今後実施する人の参考になればと思う💡Amazon Bedrock Workshop おすすめでーす \( 'ω')/

catalog.us-east-1.prod.workshops.aws

次は Building with Amazon Bedrock and LangChain ワークショップも気になるー👀

catalog.workshops.aws