話題の言語モデルLlama 2がAmazon Bedrockに登場！ 宇宙最速で触ってみた

# 概要

今朝2023/11/14未明、AWSの生成AIサービスAmazon Bedrockで利用可能な言語モデルとしてMeta社のLlama 2が追加されました！

https://aws.amazon.com/blogs/aws/amazon-bedrock-now-provides-access-to-llama-2-chat-13b-model/


AWSさんのBedrock資料でもたびたび紹介されていたコイツですね。ようやくBedrockでも実際に利用可能となりました。

![aws07.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/b5a969d2-4989-2ade-6166-a3ba51f9987f.jpeg)

AWSの公式ブログで紹介されている内容の抜粋です。

- Llama 2のベースモデルは、オンラインの公開データソースから2兆トークンで事前トレーニングされています。
- ベースモデルの上に構築されたLlama 2 Chatモデルは、ダイアログユースケース用に最適化されています。これは、人間のフィードバックからの強化学習（RLHF）として知られる技術で、100万以上の人間のアノテーションで微調整されており、Metaによってテストされています。これにより、チャットユースケースでのパフォーマンスのギャップを特定し、攻撃的または不適切な応答などの問題のある応答を緩和します。



### Llama ２の何がすごいの？

Llama 2はFacebookやInstagramで有名なMeta社が今年の7月に公開したオープンソースのLLM（大規模言語モデル）です。

https://pc.watch.impress.co.jp/docs/column/nishikawa/1519390.html

Llama 2が話題を呼んでいる理由は

- オープンソースで公開されているため、自分の組織で研究や商用利用ができる
- その中でも、LLMの精度に影響する「パラメーター数」が大きい（本家は70Bまで公開）

という点で、欧米圏ではオープンなLLMとしてデファクトスタンダードになりつつあるようです。



# 触ってみた

AWSマネジメントコンソールにログインし、Amazon Bedrockコンソールにアクセス。`Model Access` を開きます。

![スクリーン ショット 2023-11-14 に 07.53.54 午前.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/61d6ee85-6cff-13b2-0bd1-c73e1e2454af.png)


us-east-1およびus-west-2リージョンにMetaのLlama 2 Chat 13Bが出現しています！ついでに今朝同時リリースのCohere追加モデルもいますね。右上の `Manage model access` からまとめて有効化しちゃいましょう。

![スクリーン ショット 2023-11-14 に 07.56.41 午前.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/a57a136a-c6cd-15bc-c4fe-01c69f8c1999.png)


すべて選択して `Save changes` します。

![スクリーン ショット 2023-11-14 に 07.58.40 午前.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/bb6210c0-7cd4-744f-cf14-6301ec64e749.png)


わりと一瞬でAccess grantedされました。

![スクリーン ショット 2023-11-14 に 08.00.33 午前.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/ddc163b8-4d3d-1c40-6860-fafdfe77abe6.png)


### マネコンから呼び出してみる

PlaygroundsのChatからLlama 2を試すことができます。

　![スクリーン ショット 2023-11-14 に 08.22.57 午前.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/d9527f96-f054-a659-ef83-e78321397802.png)


`オープンソースの言語モデルって何がすごいの？` と聞いてみました。

![スクリーン ショット 2023-11-14 に 08.25.29 午前.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/b0076807-fca1-4dc3-d0ce-a3f5fe87a7d7.png)


いい感じに答えてくれていますが、英語で返ってきますねｗ 和訳してもらおうとしましたが、そのままだと日本語には対応していないようです。（Amazon Titanと違って、入力は日本語でも受け付けてくれるようです）

![スクリーン ショット 2023-11-14 に 08.27.38 午前.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/ff6d200a-5ff4-76d7-fc66-b0f7fa124571.png)


### APIからPythonで呼び出してみる

PCのローカルに `test.py` というPythonファイルを作って試しに実行してみます。ホームディレクトリ配下の設定ファイルを確認し、AWSの認証設定はLlama 2を有効化したAWSアカウント＆リージョンに向けておきましょう。

![スクリーン ショット 2023-11-14 に 08.40.21 午前.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/ba0d0c66-8f5b-edb2-4d0a-7d3c7fe0d6ad.png)


公式ブログに倣って、まずはBedrockのモデル一覧を取得してみます。

```py:test.py
import boto3

bedrock = boto3.client(service_name='bedrock', region_name='us-east-1')
listModels = bedrock.list_foundation_models(byProvider='meta')
print("\n".join(list(map(lambda x: f"{x['modelName']} : { x['modelId'] }", listModels['modelSummaries']))))
```

AWS SDKのバージョンは特に上げていませんが、ちゃんとLlama 2のモデルIDが返却されてきました。

```
Llama 2 Chat 13B : meta.llama2-13b-chat-v1
```

それでは実際にプロンプトを入れてInvokeしてみましょう。AWS公式ブログのサンプルをベースに、応答が途切れないよう 'max_gen_len' を少し大きくしました。

```py:test.py
import boto3
import json

llamaModelId = 'meta.llama2-13b-chat-v1' 
prompt = "KDDIアジャイル開発センターってどんな会社？"

llamaPayload = json.dumps({ 
	'prompt': prompt,
    'max_gen_len': 1024,
	'top_p': 0.9,
	'temperature': 0.2
})

bedrock_runtime = boto3.client(
    service_name='bedrock-runtime', 
    region_name='us-east-1'
)
response = bedrock_runtime.invoke_model(
    body=llamaPayload, 
    modelId=llamaModelId, 
    accept='application/json', 
    contentType='application/json'
)
body = response.get('body').read().decode('utf-8')
response_body = json.loads(body)
print(response_body['generation'].strip())
```

すると、なんと日本語で応答が返ってきました！

```
KDDIアジャイル開発センターは、KDDIの子会社であり、ソリューション開発やアジャイル開発を行う会社です。

以下は、KDDIアジャイル開発センターの特徴やサービスの一例です。

1. アジャイル開発のエキスパートise
KDDIアジャイル開発センターは、アジャイル開発において多くの成功例を持つエキスパートです。彼らは、クライアントのニーズに応えるために、最新のテクノロジーと方法を適用しています。
2. ソリューション開発
KDDIアジャイル開発センターは、クライアントのニーズに応えるために、各種のソリューションを開発しています。これらのソリューションは、Webアプリケーション、モバイルアプリケーション、クラウドサービスなど、多岐にわたっています。
3. アジャイル開発方法の適用
KDDIアジャイル開発センターは、アジャイル開発方法を適用して、クライアントのニーズに応えるために最適なソリューションを開発しています。これらの方法には、スクラム、ケニー・ロジャース、デザインドリブンなどが含まれます。
4. クラウドサービスの提供
KDDIアジャイル開発センターは、クラウドサービスを提供しています。これらのサービスには、AWS、Google Cloud Platform、Microsoft Azureなどのマjorクラウドプラットフォームが含まれます。
5. インキュベートの支援
KDDIアジャイル開発センターは、スタートアップ企業や新興企業のインキュベートを支援しています。彼らは、創造的なアイデアや新しいビジネスモデルを持つ企業に対して、技術的な支援や経営的な支援を提供しています。

KDDIアジャイル開発センターは、アジャイル開発、ソリューション開発、クラウドサービス、インキュベートなど、多岐にわたるサービスを提供しています。彼らは、クライアントのニーズに応えるために、最新のテクノロジーと方法を適用しています。
```

ちょいちょい謎のアルファベットが混じっていますが、全体として自然な日本語ですね。（内容は一部、正確でないところがありますのでご容赦ください）


# 気になるお値段は…

めちゃくちゃ安いようです！

![スクリーン ショット 2023-11-14 に 09.44.20 午前.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/9546057c-3ec0-89de-500c-df5b3fd4f61a.png)


入力トークンあたりの単価を比べると、Claudeの通常モデルと比べると15分の1ぐらいの激安価格。性能重視のお手軽モデルClaude Instantと比べても半分以下のお値段です。

![スクリーン ショット 2023-11-14 に 09.44.32 午前.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/3ef1e542-70b3-e114-4029-45f7fc9bf060.png)



言語設定を英語にしないとLlama 2など新しいモデルの料金が表示されないのでご注意ください。

https://aws.amazon.com/bedrock/pricing/?nc1=h_ls


# おわりに

みなさんもお手元のAWSアカウントで、ぜひ試してみましょう！
Meta公式のLlama学習ノートブックも公開されているようです。

https://github.com/facebookresearch/llama-recipes/blob/main/examples/Getting_to_know_Llama.ipynb