はじめに
昨夜、"それ"は突然やってきました。そうです、Claude3です!
しかもGPT-4を超えたモデルも追加されたようで、夜中Xでは大盛り上がりでした。
更には Bedrockにも早速追加されており、激アツなアップデートの連続でございました。
本ブログでは、Claude3の紹介からBedrockの操作まで試してみた結果を発信したいと思います。
目次
ここが凄いよ、Claude3!
提供されるLLMモデルの種類
Claude3では、下記3つのモデルの提供が開始されます。
- Claude 3 Opus
最高位なパフォーマンスを発揮するモデルです。
後ほどご紹介しますが、GPT-4のベンチマークを超えたモデルとなります。
ただし3種類の中で一番コストが発生します。 -
Claude 3 Sonnet
Sonnetは中位モデルとなり、性能と速度においてバランスの取れたモデルとなります。 -
Claude 3 Haiku
性能は3種類の中で低くなってしまいますが、最も高速に動作するモデルとなります。
またコストが最も低いモデルとなります。
Vison 機能
言語だけでなく画像、チャート、図など、さまざまな形式の構造化データと非構造化データを理解できるようにトレーニングされています。
そのため、例えば グラフの画像と共に「このグラフから読み取れる傾向をまとめて」のような使い方が可能となります。
Vision機能に関するユーザガイドはこちらです。
ベンチマークスコア
この表が全てを物語っていますが
あの強敵GPT-4のベンチマークを全てClaude3 Opusが上回っています。すごい!!
Claude3 Sonnetも一部のベンチマークの記録を上回っています。
Bedrockにも早速登場
更に驚きなのが、早速Claude3がBedrockに登場しておりました。
使用可能モデル
現時点(2024/3/5)で使用出来るモデルは、Claude3 Sonnetのみとなります。
記事によると、数週間以内に全てのモデルが使用出来るようになるそうです。
楽しみですね!
お客様は、Amazon Bedrock 上のビジョン対応モデルの Claude 3 ファミリ (Claude 3 Opus、Claude 3 Sonnet、および Claude 3 Haiku) にアクセスできるようになります。Sonnet は現在利用可能です。記録破りの Opus モデルと Haiku モデルは、今後数週間以内に利用可能になる予定です。詳細をお探しのお客様は、Generative AI on AWSウェブページにアクセスしてください。
対応リージョン
オレゴン と バージニア北部の2リージョンのみとなります。
(オレゴン -> バージニア北部の順番で対応されていた模様です)
料金
Claude3 Sonnetしか発表されていませんが、Claude2.1よりもコストがかからないのが素敵ですね。
料金一覧はこちらです。
↑上記リンクの言語を"English"に変更して確認してください。
注意点
RAG機能であるナレッジベースにはまだ対応していないようです。
早くRAGでも追加となれば嬉しいアップデートになりますね!
早速使ってみた
まずはコンソール画面のモデルアクセスから使用したいモデルのリクエストを申請しましょう。
私の場合、申請後すぐに使用出来るようになりました。
コンソール画面のプレイグラウンドからも確認が可能となります。
では早速boto3を用いて、LLMモデルを操作してみます。
model IDsに、Claude3 Sonnetが追加となっておりますのでこちらを使用します。
ZeroShotのLLMパターン
Claude2でのリクエストと同じような下記プロンプトの形式でAPIリクエストを投げたところ、下記のようなエラーが発生しました。
prompt = "\n\nHuman: Hello there\n\nAssistant: Hi, I'm Claude. How can I help?\n\nHuman: Can you explain Glycolysis to me?\n\nAssistant:"
↓エラーメッセージ
botocore.errorfactory.ValidationException: An error occurred (ValidationException) when calling the InvokeModel operation: “claude-3-sonnet-20240229” is not supported on this API. Please use the Messages API instead.
どうやらMessages APIでないとダメなようです。
無事にレスポンスが返ってきました。
(サンプルコードは後ほどまとめて記載しています)
きちんとBedrockのAPIリクエスト例にも記載されていますね。
Vision パターン
"Bedrockのコンソール画面のキャプチャ画像"(image)と"画像について教えてください"(text)
のプロンプトを投げてみました。
すると、下記のようなレスポンスが!!
この画像はAmazon Web Services (AWS)の管理コンソールの一部を示しています。具体的にはAmazon Bedrockサービスのモデルアクセスセクションが表示されています。
Bedrockは、AWS が提供する機械学習モデルのサービスです。この画面には、利用可能なさまざまな機械学習モデルが一覧表示されています。モデルの名前、用途、アクセスの状況などの情報が確認できます。
赤い枠で囲まれている部分は、"Claude 3 Sonnet"というモデルです。このモデルの横にはリクエスト可能な状態であることが示されています。この一覧にはAnthropicやAmazon、Coherなどの企業が提供するモデルがあり、テキスト、画像、マルチモーダルなど様々な用途のモデルが含まれています。
凄すぎる!!!(語彙力)
チャートやグラフの分析もしてくれるようですので、使い方次第では強力な機能になるのは間違いなさそうですね。
なお、画像のサポートイメージはこちらとなります。
性能/速度比較
Claude2.1とClaude3 Sonnetでどれだけ性能/速度差があるか検証してみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# 共通 brt = boto3.client(service_name="bedrock-runtime", region_name="us-east-1") accept = "application/json" content_type = "application/json" # Claude2.1 modelId_21 = "anthropic.claude-v2:1" body_21 = json.dumps( { "prompt": "\n\nHuman: CDKとは何ですか?\n\nAssistant:", "max_tokens_to_sample": 500, "temperature": 0.1, "top_p": 0.9, } ) time_sta = time.perf_counter() response_2 = brt.invoke_model( body=body_21, modelId=modelId_21, accept=accept, contentType=content_type ) time_end = time.perf_counter() print("================claude2.1====================") print(f"レスポンス時間 = {round(time_end - time_sta, 2)} 秒") response_body_2 = json.loads(response_2.get("body").read()) # text print(response_body_2.get("completion")) print("=============================================") # Claude3 modelId_3 = "anthropic.claude-3-sonnet-20240229-v1:0" body_3 = json.dumps( { "messages": [ { "role": "user", "content": [ { "type": "text", "text": "CDKとは何ですか?", } ], } ], "anthropic_version": "bedrock-2023-05-31", "max_tokens": 500, "temperature": 0.1, "top_p": 0.9, } ) time_sta = time.perf_counter() response_3 = brt.invoke_model( body=body_3, modelId=modelId_3, accept=accept, contentType=content_type ) time_end = time.perf_counter() print("================claude3 sonnet===============") print(f"レスポンス時間 = {round(time_end - time_sta, 2)} 秒") response_body_3 = json.loads(response_3.get("body").read()) # text print(response_body_3["content"][0]["text"]) print("=============================================") |
レスポンス結果は省略しますが、質問内容がシンプルだっため
結果に関してはあまり差がありませんでした。
驚きなのは応答速度です。約3倍早くなっています。
タイミングによっては、Claude2.1でも早くレスポンス返ってケースもありますが
私が実施したタイミングで計測するとこのような結果となりました。
先ほどの例ですとあまりレスポンス結果の性能が分かりにくい結果でしたので
下記のような、具体的なプロンプトで投げてみました。
CDKを利用して下記インフラを構築するコードを示して
・ALBを作成
・ALB配下のEC2インスタンスを2台冗長化する
・ALBのセキュリティグループを0.0.0.0/0で解放
・MySQLエンジンのRDSを1台、文字コードをUTF-8に設定したパラメータグループを作成する
CDKのコード自体に問題ないかまでは確認出来ていませんが
Claude2.1ではCDK v1で作成されていますが、Claude3 SonnetではCDK v2で作成されておりました。
これだけでは判断出来ないですが、少しは性能向上しているようですね。
(Claude3 Opusが楽しみです。)
感想
Claude3がリリースされ、更にBedrockでも対応となりました。
近々、Claude3 Opusが追加となるとGPT-4越えとなる見込みですので
Bedrockを採用するケースも増えてくるのではないでしょうか。
OpenAI vs Anthropicのような形で
性能がアップデートされていくため、我々開発者としては楽しい限りでございます。
Claude3について調べている方に少しでもお力になれますように!
投稿者プロフィール
-
2021/2にスカイアーチネットワークスにJoin。
(前職ではAIのシステム開発やPoCなどを主に担当)
2024 Japan AWS Top Engineers (Services)
2024 Japan AWS All Certifications Engineers
現在の業務では主にクラウドネイティブなWebアプリケーション/APIのインフラ構築から開発まで幅広く担当。
好きなAWSサービス:AWS CDK、Amazon Bedrock
趣味:読書と競馬鑑賞