Amazon Web Services ブログ

個性的なモデルに出会える Amazon Bedrock Marketplace で基盤モデルの選択肢を増やそう

AWS の年次イベント re:Invent 2024 にて、Amazon Bedrock Marketplace の機能が公開されました!Anthropic Claude や Meta Llama といったサーバーレスモデルに加えて、100 以上の企業または Hugging Face 等でオープンに公開されているモデルをAmazon SageMaker 側にデプロイし Bedrock の API を通じて利用することが出来ます。そして、本サービスがローンチする段階ですでに日本企業が開発したモデルも利用できます。ブログ執筆時点はビジネス知識に特化した Stockmark LLM 、パラメーターにより出力のカスタマイズが容易な Karakuri LM、日本語のベンチマーク Jaster 等で GPT4 を超える性能を記録した Preferred Networks (PFN) の PLaMo、22B と軽量ながら日本語ベンチマークで Llama-3-70B-Instruct と同等性能である CyberAgent の CyberAgentLM3 が利用できます。

本ブログでは Apache2 ライセンスによりインフラ費用のみで使用ができる CyberAgentLM3 を中心に、Amazon Bedrock Marketplace で購入できる Stockmark 、Karakuri 、PFN のモデルの特色もご紹介します。

Amazon Bedrock Marketplace でモデルを探し、デプロイする

では、さっそく Amazon Bedrock Marketplace でモデルを検索しましょう。AWS Console から Amazon Bedrock のページにアクセスし、“Foundation models” 配下にある “Model catalog” を選択します。医療に特化した John Snow Labs や、音声合成の Cambi.ai のモデルなどもあり目移りしますがはじめに CyberAgentLM3 のモデルを使ってみます。

モデルカードをクリックすると、モデルの詳細画面に遷移します。商用モデルの場合は価格などが記載されています。価格は、モデルを動かすインスタンスの料金に加えモデルの料金が時間単位でかかります。 公開モデルについてはモデルの料金がかかりません。

事前にライセンス、商用モデルの場合は “View subscription options” で表示される Legal のセクションをよく読んでからモデルの Deploy をクリックします。

Deploy すると SageMaker Endpoint にモデルがデプロイされ、利用時は Bedrock の API から呼び出す形になります。SageMaker Endpoint にモデルがデプロイされる仕組み上、サーバーレスではないので料金にはご注意ください。

なお、立ち上げる GPU インスタンスの Quota が足りない場合、Service Quotas の引き上げをリクエストします。Quota の設定はリージョンごとに異なるので、モデルを使うリージョンに合わせて申請ください。引き上げる Quota は、Amazon SageMaker の endpoint usage です。endpoint 以外にも training や cluster など種類がたくさんあるので、Quota が endpoint のものかどうか確認をしてください、今回は ml.g5.48xlarge for endpoint usage の Quota が足りなかったので引き上げました。

Deploy を実行すると “Marketplace deployments” からデプロイの状況を確認できます。 “Endpoint ARN” を Amazon Bedrock の model-id として指定すると API から接続することが出来ます。

デプロイが完成すると Endpoint status が “In Service” になります。

CyberAgentLM3 のモデルは Chat のプレイグラウンドから選択することが出来ます。

CyberAgentLM3 は Nejumi LLM リーダーボードのスコアを見ると MT Bench の roleplay, humanities, writing で評価される “GLP_表現“ が前世代の GPT4 / Claude 3.5 Sonnet 並みあり、創作性に強そうだったので作文をお願いしてみます。「犬が海に行き、飼い主を思って吠えるシーンの短い脚本を書いてください」とお願いしました。CyberAgentLM3 と Claude 3.5 Sonnet v2 を比較しており、パラメーターは Temperature 1 でそろえています。

Claude 3.5 Sonnet v2 の結果

タイトル: 『海辺の想い』

場所: 夕暮れの海岸
時間: 夕方

(波の音が静かに響く)

柴犬のポチ、ゆっくりと波打ち際を歩く。
時折立ち止まっては、遠くを見つめる。

ポチ
(小さく鳴く)
クゥーン…

(海風が優しく吹く)

ポチ、砂浜に座り込む。
空には夕陽が沈みかけている。
飼い主との思い出の場所を見つめる。

ポチ
(徐々に大きな声で)
ワン!ワン!
(空を見上げて)
ワンワンワーン!

(波の音が少し大きくなる)

ポチ、もう一度遠くを見つめ、
ゆっくりと立ち上がる。

ポチ
(静かに)
クゥーン…

(夕陽が海に沈んでいく)

ポチ、ゆっくりと来た道を戻り始める。
後ろ髪を引かれるように、
もう一度海を振り返る。

(フェードアウト)

続いて CyberAgentLM3 の結果

タイトル: 海辺の約束

シーン: 海辺、穏やかな午後。海風が吹き、波が静かに寄せては引いている。

カメラ: 犬(マックス)が砂浜で遊ぶ姿。遠くには波打ち際にいる飼い主(エミリー)が見える。

ナレーション(マックスの声): (鼻で鳴きながら)「エミリー、君と一緒にいるといつも楽しかった。」

エミリーが砂浜を歩いている。彼女は波音に耳を傾け、時折遠くを見る。

エミリー: (独り言)「本当に、もうここにはいないんだね。」

マックスが海の方を向き、吠える。その声は大きく、哀愁を帯びている。

エミリー: (驚いて)「マックス、どうしたの?」

マックスはエミリーの方に駆け寄る。

ナレーション(マックスの声): 「僕が何かを感じてるんじゃない、君がここにいないことを感じるんだ。」

エミリーがマックスの頭を撫でる。

エミリー: 「ごめんね、マックス。君を置いて行かざるをえなかったの。」

マックス: (鼻で鳴く)「でも、約束したじゃないか。また一緒にここに来ようって。」

エミリーの目から涙がこぼれる。

エミリー: 「その約束、まだ覚えてるんだね。必ず戻ってくるから、それまで待っててね。」

マックスがもう一度大きく吠え、それから寄り添うようにエミリーの足元で丸くなる。

ナレーション(マックスの声): 「約束だよ、エミリー。君が戻ってくるまで、僕はここで君を待ち続ける。」

エミリーがマックスを抱きしめる。海風が二人の周りを優しく包み込む。

カメラがゆっくりと引いていき、海の広がりが広がる。

エンドロール

この脚本は犬と飼い主の絆を描きながら、約束の大切さとそれを守ることの意味を表現しています。シンプルな設定の中で、感情の深さを強調しています。

マックス (犬) がいるのかいないのか少し謎ですが、会話劇、心情描写ともにうまくストーリーテリングしてくれている印象です。オープンなモデルの特性として、シチュエーションやアクションシーンの関係で荒くなってしまう行動・言動についてもある程度出力させることが出来ます。CyberAgentLM3 の出力は読むとゲームの状況設定が浮かんできます。

今回は CyberAgentLM3 をそのまま使用していますが、必要に応じ Fine Tuning したのちに Custom model import を使用しモデルを Bedrock のインフラに載せることが出来ます。 Custom model import はモデルのストレージコストがかかりますが 5 分間アクティブでなければ自動的に落ちてくれるため経済的です。詳細は Amazon Bedrock の Pricing のページをご参照ください。

検証が済んだら忘れずにモデルを削除しておきましょう。 “Marketplace deployments” からモデルが削除できます。現時点では、Endpoint はすぐに削除されますが SageMaker 側の Endpoint Configuration と Model は残るので気になる場合削除してください。

個性的なモデルを試す

GPT-4 に匹敵する精度の PFN のモデル

PFN の PLaMo は日本語ベンチマークのデータセット Jaster 、また MT-Bench のベンチマークで GPT-4 (0125 Preview)に匹敵する精度を誇ります。公開されている論文によると MT-Bench では releplay / humanities に優位性があるようで、Appendix でも例が表示されていたことから CyberAgentLM3 と同様小説家になり切り文章を書いてみてもらいます。

PLaMo は執筆時点ではまだプレイグラウンドに対応していないので、API 経由で実行します。

aws bedrock-runtime invoke-model \
--cli-binary-format raw-in-base64-out \
--model-id "(model endpoint arn)" \
--body '{"messages":[{"role": "system", "content": "あなたは優秀な小説家です。"},{"role": "user", "content": "犬が海に行き、飼い主を思って吠えるシーンの短い脚本を書いてください"}], "model": "plamo-prime"}' \
--content-type application/json \
--region us-east-1 \
result.txt
Bash

出力は JSON で帰ってくるので jq で取り出します。

cat result.txt | jq .body.choices.[0].message.content
Bash

PLaMo の出力は次の通りです。

タイトル: 海辺の再会

シーン: 犬のマックスと飼い主のサムが海辺の砂浜を散歩しています。マックスはリードから解放され、興奮しながら海の中に走っていきます。

マックス (吠え声): ワンワンワン!

サム: マックス、どうしたの? 海の向こうに行っちゃだめよ。

マックスは海に向かっ て吠え続けます。遠くに船が通り過ぎていきます。

マックス (吠え声): ワワワン! ワワワン!

サム (心配そうに): マックス、誰かを呼んでいるの? もしかして、寂しくなっちゃったのかな?

突然、一隻のボートが岸に戻ってきて、マックスはそのボートに向かって走り出します。

マックス (吠 え声): ワンワンワン! ワンワンワン!

ボートから降りてきたのは、サムの友人のアレックスでした。アレックスはマックスを見ると、喜びのあまり抱きしめます。

アレックス: マックス! 会いたかったよ。今までどこに行ってたの?

マックス (吠え声): ワンワンワン!

サム: マックスはあなたを呼んでいたのよ。寂しかったのね。

マックスとアレックスは抱き合って再会を喜び合います。サムは微笑みながら、マックスを見守ります。

サム: マックス、私がいつもそばにいるからね。

マックスはサムに向かって吠え、サムはマックスを抱きかかえ、二人は海辺を後にします。

マックス ( 吠え声): ワンワンワン! (うれしそうに)

サム (微笑んで): マックス、大好きだよ。

フェードアウト。

マックス (犬) が離れていた友人と出会い喜ぶシーンがきっちり書かれています。私は何も操作をしていないのですが、犬の名前が CyberAgentLM3 と同じマックスになるのは驚きました。 Claude の出力と同様、犬のセリフはすべてワンワンで表現されています。

PLaMo では英語の MT-Bench で評価された結果も掲載されており、humanities/roleplay/writing のスコアは日本語学習後もスコアをほぼ落としていなかったことから、翻訳がうまくできると思いやってみてもらいました。

翻訳の性能をテストするために、Claude で翻訳が難しい日本語を作ってもらいました。なんとなく、もの悲しい、しみじみといったあいまいな表現を含む情緒的な文書です。

夕暮れ時、なんとなく寂しげな様子で庭先に佇む捨て犬を見かけた少年は、思わずその場に立ち止まってしまった。もの悲しい目をした犬は、少年の方をじっと見つめ返してきた。その瞬間、少年はしみじみと胸に染み渡るような温かい気持ちに包まれた。

英訳してもらった結果がこちらです。

As the sun began to set, a young boy happened upon a forlorn-looking stray dog in the backyard. The sight of the sad-eyed canine, standing alone, caused the boy to pause and approach, his heart swelling with an unexpected surge of compassion. The dog, in turn, seemed to gaze back with a mixture of curiosity and melancholy, as if searching for something or someone to fill the void. The scene stirred an emotional response in the boy, a profound sense of warmth and tenderness that he felt, knowing that he had discovered a kindred spirit in the abandoned animal.

素朴に非常に良い文章と感じましたが、Anthropic Claude / Cohere Command R+/ AI21 Labs Jamba 1.5 / ChatGPT (free) などで評価してもらったところ 85~95 点とやはり高得点でした。創作だけでなくトーンを維持した翻訳にも活用できそうです。

ビジネスに特化した Stockmark のモデル

Amazon Bedrock Marketplace の使い方を理解したところで、固有の性質を持つモデルを試してみましょう。はじめに、ビジネスに特化した Stockmark のモデルを試してみましょう。Model catalog で検索します。

商用モデルの場合は “View subscription options” で契約内容を確認してから Deploy を行います。

Stockmark のモデルは Instruction Tuning されていないため、Single prompt から検証します。Instruction Tuning されていないとはいえ普通に質問に対し応答してくれます。

では、「日本の人工知能のスタートアップ企業を 1 社教えてください」に対する Stockmark 、Claude 3.5 v2 、Amazon Nova Pro の回答を並べて比較してみます。Stockmark のモデルは 13B でしかも RAG を行わない状況で設立年月日を答えてきて驚きました。

少し専門的な質問としてペロブスカイト太陽電池のスタートアップについて聞いてみましたが、こちらは Stockmark のみが正解でした。

他いくつか聞いてみましたが、箇条書きにしがちな Claude 、構造化された文章にしやすい Nova に比べて文章が日本語として自然だと感じました。

推論時のパラメーターで挙動を変更できる Karakuri のモデル

Karakuri のモデルも試してみましょう。こちらはパラメーターで挙動がコントロールできる面白い特性を持っています。

Sample notebook を参考に、パラメーター付きのプロンプトを入力します。「この書類を明日までに完成させておいてくれませんか?」とお願いをしてみました。

<|START_OF_TURN_TOKEN|><|SYSTEM_TOKEN|>あなたは、人間をサポートするアシスタントです。<|END_OF_TURN_TOKEN|><|START_OF_TURN_TOKEN|><|USER_TOKEN|>この書類を明日までに完成させておいてくれませんか?<|END_OF_TURN_TOKEN|><|START_OF_TURN_TOKEN|><|CHATBOT_TOKEN|><attributes>helpfulness: 4 correctness: 4 coherence: 4 complexity: 4 verbosity: 4 quality: 4 toxicity: 0 humor: 0 creativity: 0</attributes

返答は次の通りです。AI らしい献身的な応答です。

もちろん、その書類を明日までに完成させておきます。どのような書類で、どのような内容を必要としていますか? また、どのフォーマットで、どのようなスタイルで作成すべきか教えていただけますか? 具体的な指示と要望があると、より正確に作業ができます。ご指示をお待ちしております。

プロンプトで指示しているパラメーターは次のような意味があります。

  • helpfulness (デフォルト: 4): プロンプトに対する回答の全体的な有用性
  • correctness (デフォルト: 4): 誤りのない関連事実の包含度
  • coherence (デフォルト: 4): 表現の一貫性と明確さ
  • complexity (デフォルト: 4): 回答を書くために必要な専門知識の度合い
  • verbosity (デフォルト: 4): プロンプトで求められている内容に対する、回答に含まれる詳細の量
  • quality (デフォルト: 4): 回答の認識される良さ
  • toxicity (デフォルト: 0): 下品、有害、または潜在的な偏見を含む望ましくない要素
  • humor (デフォルト: 0): 回答に含まれるユーモアの度合い
  • creativity (デフォルト: 0): 非従来的な回答を生成する意欲

ここで、toxicity を 4 、有害な応答をあえてしてもらいます。すると・・・「いいえ」と一言。ことわってきました。helpfulness を下げても同様の挙動が得られます。塩対応の AI を作るには最適です。

別のパラメーターとして、humor / creativity を 4 に上げて金曜日に出かける相談をしたところ、「かもしれません」というアイデアを多く出してくれました。ブレインストーミングなどをするときはこのモードがいいかもしれません。

標準の応答

金曜日は週末で、多くの場所がにぎわっています。どのようなジャンルの場所をご希望か、また何を目的としているかによっておすすめの場所が変わってきます。具体的な目的地が決まっていない場合は、観光地、グルメ、ショッピング、アクティビティなど、どのようなカテゴリの場所をご希望か教えていただければと思います。または、「金曜日に○○をしたい」というご要望からおすすめの場所をご提案することも可能です。

humor / creativity を 4 に上げた応答

今日は金曜日ですね。どこかお出かけしましょうか ? お出かけの場所をいくつかご提案します。

  • 新しくできたカフェ : 都内を中心に新店舗が続々オープンしているので、新しい空間を求めて足を運んでみるのも良いかもしれません。
  • 最近話題の書店 : 知的好奇心をくすぐる書籍に出会えるチャンスかもしれません。
  • 公園 : 自然の中でリフレッシュすることで、リラックス効果が得られるでしょう。
  • ショッピングモール : セールを行っている店舗が多いので、お得に買い物ができるかもしれません。
  • 映画館 : 最新の映画を鑑賞することで、新たな発見や感動が得られるでしょう。

どこに行かれるか決まりましたか?

おわりに

最終的に一人一人が AI エージェントを持つとき、エージェントは各国の文化や言語の理解はもちろん、主要なドメイン知識を持つ必要があると思います。 これまでの基盤モデルの特性から、単一のモデルであらゆる個性を表現することは可能かもしれませんが、機械学習の国際学会である NeurIPS で元 OpenAI の Ilya Sutskever 氏が指摘したように学習に使えるデータは限界に達しつつあり、学習から推論の回数を重ねる工夫も試みられています。この場合、推論にコストがかかるようになり大規模なモデルを何回も推論すると多額のコストがかかり身近なエージェントの実現は困難になります。Amazon Bedrock Marketplace には比較的小型でありながら特化したドメインでは高精度のモデルに匹敵する精度があったり、固有の言語に堪能だったり、Fine Tuning なしにパラメーターで挙動のカスタマイズといった興味深い特性を持つモデルがあることを紹介しました。今回ご紹介した PLaMo の開発を担う Preferred Elements 、また Stockmark 、カラクリはいずれも経済産業省 GENIAC 基盤モデル開発支援事業 (第2期) で採択されており、さらなる性能や使い勝手をもつモデルの開発に取り組んでおり AWS は計算リソースの提供を通じ開発を支援しています。こうしたバリエーションを持つモデルの可能性がより探索されることで、よりユースケースに適合した生成 AI の活用が実現されると考えています。ぜひあなたのユースケースや好みに合うモデルを Amazon Bedrock Marketplace で探してみてください!