見出し画像

【生成AI】 Amazon Bedrockを使ってみたら凄かった

9月28日にAWSから生成AIサービス「Amazon Bedrock」が一般公開されました。実際に色々と触ってみたので、その魅力をお伝えします!

生成AIの最新情報についてキャッチアップしたい人、Amazon Bedrock について知りたい人必見です💡


Amazon Bedrockとは

Amazon や主要な AIスタートアップ企業が提供する基盤モデルを、APIを通じて利用できるようにするサービスです。

以下は ChatGPT(Web browsing) による Amazon Bedrock の説明です。

Amazon Bedrockは、基盤モデル (FM) を利用して生成系AIアプリケーションを構築・スケーリングするサービスです。APIを通じて、インフラストラクチャの管理なしにアプリケーション開発を加速でき、AWSのツールを使って安全で信頼性の高いアプリケーションをデプロイできます。また、Amazonや他のAIスタートアップ企業から提供されるFMから選択し、組織のデータを使ってFMを非公開にカスタマイズすることも可能です​

https://chat.openai.com/c/79ff4740-6640-4f7f-989d-899b1dd364a9

Amazon Bedrock の魅力

Amazon Bedrock の魅力は以下の3点です。

  • サーバーレス

  • 実装の簡単さ

  • 生成量課金

サーバーレス

オープンソースのモデルを利用する場合は、自社でインフラを整備しホスティングするのが一般的な手順だと思います。そのため実際にモデルを動かすまで工数がある程度かかってしまいます。

一方で、Amazon Bedrock であれば、インフラストラクチャの管理に時間を費やすことなく、AWS上で操作するだけで簡単にモデルを動かすことができます。

実装の簡単さ

サーバーレスのため、ホスティングする際のコードを用意する必要がありません。また、Python用のライブラリ Boto3 が用意されているためAPIの経由でのモデルの呼び出しも簡単に実装できる印象です。

記事の下の方に実装例を載せています。

生成量課金

自社でモデルをホスティングする場合は、インスタンスを立ち上げた時間に対して課金されることが一般的です。

一方で、Amazon Bedrock は言語モデルの場合は token 数課金、画像生成モデルの場合は枚数による課金となっており、少ないユーザーでテストをする場合などにおいては料金をグッと抑えることができます。

※ 画像生成モデルの場合は、時間課金の料金プランも用意されています。


上記の特徴を持つ Amazon Bedrock を Python から試してみたので実装例を解説していきます。

Pythonでの実装例

Amazon Bedrock の Claude(言語モデル)、Stable Diffusion XL(画像モデル)を Python の boto3ライブラリ を用いて実装してみました。

AWS上での設定

AWS 上での設定についてはこちらの記事をご確認ください。

セットアップ

# 必要なライブラリのインストール
!pip install --upgrade boto3

#iam認証
import boto3
bedrock = boto3.client(
    service_name='bedrock-runtime',
    region_name="us-east-1",
    aws_access_key_id="{aws_access_key_id}",
    aws_secret_access_key="{aws_secret_access_key}"
    )

※ AWS の key の発行についてはこちらのドキュメントを参考にしてください。

言語モデルの呼び出し

以下の実装例では、claude-v2を使用しています。
※ model Id を他のモデルIDに変更することで言語モデルを切り替えることができます。
モデルID一覧

import json

body = json.dumps({
    "prompt": "\n\nHuman:富士山について説明して?\n\nAssistant:",
    "max_tokens_to_sample": 8000,
    "temperature": 0.1,
    "top_p": 0.9,
})

modelId = 'anthropic.claude-v2'
accept = 'application/json'
contentType = 'application/json'

response = bedrock.invoke_model(body=body, modelId=modelId, accept=accept, contentType=contentType)

response_body = json.loads(response.get('body').read())

# text
print(response_body.get('completion'))

■出力結果

はい、富士山について簡単に説明します。

富士山は日本の最高峰で標高は3,776メートルです。 世界的に有名な雪をかぶった美しい山で、日本のシンボル的な存在です。富士山は火山で、最後の噴火は1707年です。 

富士山は静岡県と山梨県にまたがっています。形はすり鉢状で、頂上付近は円錐形です。夏は登山シーズンで多くの人が登頂します。頂上からの眺めは絶景です。

富士山は世界遺産にも登録されていて、芸術や文化にも大きな影響を与えました。歌川広重の「富嶽三十六景」など、富士山を描いた数多くの作品があります。

このように、富士山は日本を代表する自然と文化のシンボルです。その美しい姿は日本人にとって大切な景観となっています。

流暢な日本語で富士山についてしっかり説明をしてくれている印象です。利用用途によっては GPT-4 を超えると言われているだけあり、割と良さそうな気がします。

画像生成モデルの呼び出し

Stable Diffusion XLで画像の生成をしてみます。
現状 Negative Prompt は指定できないようで今後のアップデートに期待です。

import json
import base64
from IPython.display import HTML

prompt_data = "A photograph of an dog on the top of a mountain covered in snow."
body = json.dumps({
  "text_prompts": [
    {
      "text": prompt_data
    }
  ],
  "cfg_scale":10,
  "seed":20,
  "steps":50
})
modelId = "stability.stable-diffusion-xl-v0"
accept = "application/json"
contentType = "application/json"

response = bedrock.invoke_model(
    body=body, modelId=modelId, accept=accept, contentType=contentType
)
response_body = json.loads(response.get("body").read())
print(response_body['result'])
# 取得した画像データの表示
base64_image_data = response_body.get("artifacts")[0].get("base64")
## HTMLを生成して画像を表示
image_html = f'<img src="data:image/jpeg;base64,{base64_image_data}" />'
display(HTML(image_html))

■出力結果

いっぬ


まとめ

サーバーレス最強!


株式会社スニフアウトでは、GPT をはじめとする生成系AI の開発や社内導入をお手伝いするコンサルティングを実施しております。お客様のご要望にお応えするために、無料相談を実施しております。「こんなことはできるのか?」というアイディアベースのお問い合わせでも構いませんので、ご遠慮なくご相談ください。

また、弊社では生成AIエンジニアを募集しています!

X(Twitter)では科学技術に関するツイートなどを発信していますので、よければフォローお待ちしています😌
■弊社CEO
https://twitter.com/MSniffout
■会社公式アカウント
https://twitter.com/sniffout_inc

この記事が参加している募集

この記事が気に入ったらサポートをしてみませんか?