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) 日本語字幕版」があって受講した💡コンパクトにまとまってて良かった \( 'ω')/
また LLM や LangChain 回りは以下の書籍を読んで写経したときの知識があって関連する部分もあった.
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 は比較的頻繁に更新されてるため,最新になっているか確認するのも重要だと思う.
Model access で許可しておこう
Amazon Bedrock Workshop を実施する前に Amazon Bedrock の Model access で許可しておく必要がある.最初は Titan のみ許可しておけば良いかな〜と思ったけど,Claude と Stable Diffusion XL を使う手順もあって,最終的に以下のようにしてみた.ちなみに Claude は Use case details も追加で入力する必要があって,Amazon Bedrock Workshop のためと書いたけど(おそらく)問題なさそうだった.
ちなみに Model access の手順に関しては以下の issue もあって,これは僕もあると良いかなと思った.特に Amazon Bedrock Workshop は初学者も試すだろうしハマりポイントが多いと挫折しやすくなってしまう.
Amazon Titan モデルに旧名称があることを覚えておこう
例えば 01_Generation/00_generate_w_bedrock.ipynb
を見ると modelId = 'amazon.titan-tg1-large'
と実装されていて,Amazon Bedrock の Model access で何を許可すれば良いんだろ〜と悩んだ.調べたところモデルの旧名称らしく,そのままでも動くけど amazon.titan-text-express-v1
に変更しても動く👌
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回設定を間違えていることに気付かず進んだら AccessDeniedException
や ResourceNotFoundException
が出てしまって,原因は ap-northeast-1
で bedrock-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 の結果例🎨
Agents for Bedrock
2023年12月に正式リリースになった Agents for Amazon Bedrock も試せる.オンライン靴屋のチャットボットを実装しつつ,顧客名に紐付くデータを Lambda (+SQLite) で取得してレコメンドを返したりする.RAG / ReAct の仕組み・アクショングループの OpenAPI 定義など Agents for Amazon Bedrock の実装イメージを掴めて良かった❗️
Guardrails for Chatbots
Amazon Bedrock と NeMo Guardrails を組み合わせて,回答したくないことなどをガードレールとして制御する仕組みを試せる.例えば以下は Topical Rail を試した結果で,事前に設定したトピックを逸脱した who should I vote for?
という質問をしたときにガードレールとして機能している🚧
実施ログ抜粋
その他実施ログも一部載せておく📝
最初に 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
は以下のドキュメントにも載っていた📝
また同じ Text 系のモデルなら Claude を Titan に差し替えても動くのかな〜という思ってコードを書き換えながら試行錯誤してたら,モデルによって推論パラメータが違うことを学んだ.例えば Claude に top_k
はあるけど Titan はないなど.もちろん精度は異なると思うけど,Jupyter Notebook を単に実行するだけでなく,コードを書き換えながら実行するのも勉強になった💡
まとめ
「Amazon Bedrock Workshop」を実施した❗️コンテンツが充実してて,実践的に学べて良かった.個人的には少しハマりポイントがあったけど,今後実施する人の参考になればと思う💡Amazon Bedrock Workshop おすすめでーす \( 'ω')/
catalog.us-east-1.prod.workshops.aws
次は Building with Amazon Bedrock and LangChain ワークショップも気になるー👀