メインコンテンツまでスキップ

Jupyter AIをAmazon Bedrockで!!!

· 約7分
moritalous

Jupyter AIでもAmazon Bedrockが使えます!!

Jupyter AIシリース(?)の続編です。

Jupyter AIが出た!試した!!すごい!!!
https://qiita.com/moritalous/items/a270d5932ebee18d0ba8
Jupyter AIでHuggingFace Hubを使うと、これまたすごい!
https://moritalous.pages.dev/1a6a2ab01a320908f7d7

環境構築

2023/10/09時点ではAmazon Bedrock対応はまだリリース版には含まれていないため、GitHubのmainリポジトリから導入します。

Dockerで構築します。

Dockerfile
FROM jupyter/minimal-notebook:lab-4.0.6

RUN pip install --no-cache-dir \
git+https://github.com/jupyterlab/jupyter-ai.git#subdirectory=packages/jupyter-ai-magics \
git+https://github.com/jupyterlab/jupyter-ai.git#subdirectory=packages/jupyter-ai \
boto3
注記

リリース版に含まれたあとはpip install --no-cache-dir jupyter-ai boto3で良いと思います。

ビルド

shell
docker build -t jupyter-ai .

起動

AWSの認証情報を環境変数で渡したいので、.envファイルを作成します。

.env
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=
shell
docker run -it --rm \
-p 8888:8888 \
--env-file=${PWD}/.env \
jupyter-ai

ターミナルにトークン付きのURLが表示されますので、ブラウザでアクセスします。

image.png

起動しました!!

チャットインターフェイス

左パネルにチャットのボタンが追加されています。

image.png

Welcomeメッセージが表示されますので、Start Hereをクリックします。

image.png

Language modelとEmbedding modelにAmazon Bedrockが生えてます!

image.png

image.png

anthropic.claude-instant-v1とamazon.titan-embed-text-v1を選択して進めてみます。

image.png

チャットをしてみます。

image.png

日本語もOK!

ノートブックについて質問できる

ただチャットができるだけではありません。ノートブックのセルに対して範囲選択をすると、チャットエリアの下部にInclude selectionReplace selectionが表示されます。

image.png

Include selectionだと選択したコードを含んだ形で質問ができます。

image.png

このコードはStable Diffusionを用いたイメージジェネレーションを行っていると思われます。

DiffusionPipelineはStable DiffusionのAPIで、事前トレーニング済みのモデルをロードするためのクラスです。

from_pretrainedで"runwayml/stable-diffusion-v1-5"と指定することで、Stable Diffusionのバージョン1.5をロードしています。

torch_dtype=torch.float16で半精度浮動小数点計算を指定しています。

pipeline.to("cuda")でGPU(ここではcuda)にモデルを移行しています。

pipeline("An image of a squirrel in Picasso style")で入力文字列からイメージジェネレーションを実行し、images[0]で最初のイメージを取得しています。

つまりこのコードはStable DiffusionモデルをロードしGPUに置き、「Picasso様式の Squir

すっげー!

Replace selectionにチェックを入れると、選択したコード部分がチャットの回答で上書きされます。ただし、チャットの回答が正しいかはわからないので、チェックしてから更新するほうが良さそうです。(そもそも、コードで返ってこないこともありますし。)

ローカルデータについて学ぶ

これだけじゃありません。チャットが質問に答える際にローカルデータを含めるようにすることもできます。embedding modelが使用されます。

試しにhuggingface/diffusersのREADMEを埋め込んでみます。

shell
mkdir docs
cd docs
wget https://raw.githubusercontent.com/huggingface/diffusers/main/README.md

準備完了です。

チャット欄に/learnコマンドを入力し、覚えさせます。

/learn /home/jovyan/docs

image.png

うまく行ったようです。

質問する際は/askコマンドを使用します。

/ask "pipでDiffusersをインストールする方法を教えて"

image.png

Diffusersをpipでインストールする方法は以下のとおりです:

pip install --upgrade diffusers[torch] このコマンドではDiffusersライブラリに必要な依存関係もまとめてインストールします。

Torchバックエンドを使用する Diffusers をインストールする場合は [torch] オプションを指定します。

また、Flaxバックエンドを使用する場合は [flax] オプションを指定します:

pip install --upgrade diffusers[flax] Diffusersをcondaでインストールする方法については文書が詳しく説明していますので、必要に応じて参照してください。

以上がpipを使ったDiffusersのインストール方法です。

ばっちり!!

%%aiマジックコマンド

Jupyter AIはチャットだけではありません。%%aiマジックコマンドも使えます。

  • 拡張のロード
notbook cell
%load_ext jupyter_ai_magics

これだけです。

使えるモデルの一覧を取得

notebook cell
%ai list

image.png

Bedrockが生えてます!

マジックコマンドを使う際にmodel IDを一緒に指定します。

notebook cell
%%ai bedrock-chat:anthropic.claude-instant-v1
"hello world"とコンソールに出力するJavaScriptのコードを出力して

image.png

ほー

デフォルトではMarkdownでの出力となりますが、-fまたは--formatオプションで書式を指定できます。

notebook cell
%%ai bedrock-chat:anthropic.claude-instant-v1 -f code
"hello world"とコンソールに出力するJavaのコードを出力して

image.png

ほーほー

他のセルの内容を参照する

前のセルのインプットを参照させられます。

notebook cell
%%ai bedrock-chat:anthropic.claude-instant-v1
以下のコードの意味を小学生にわかるように説明して
--
{In[6]}

image.png

おお!

インプットだけでなくアウトプットも使えます。 更にエラーも使えますので、こんなこともできます。

notebook cell
%%ai bedrock-chat:anthropic.claude-instant-v1
以下のPythonコードを実行しました。
--
{In[8]}
--
すると、エラーとなりました。
--
{Err[8]}
--
エラーの原因を教えてください。

image.png

うおおおおおおおおおおお!

すっごい!!

-f codeと組み合わせて、 エラーを修正させちゃったりなんかもできちゃったりします!

image.png

2023/10/09時点ではStable Diffusionは使えなさそうですが、今後に期待です!!


参考

https://pip.pypa.io/en/stable/topics/vcs-support/#url-fragments

https://qiita.com/tshimura/items/64603dfb8f0d6eb35992