CyberAgentLM3-22B-Chat(cyberagent/calm3-22b-chat) 試してみた

# calm3-22b-chat

サイバーエージェントさんが先日リリースした、オープンソース LLM ["calm3-22b-chat"](https://huggingface.co/cyberagent/calm3-22b-chat) を試してみました。すごいじゃないですか、これは！

本日、[プレスリリース](https://www.cyberagent.co.jp/news/detail/id=30463)がありました

本稿では、22B を 4bit 量子化して、エントリーレベルのGPUで試してみたいとおもいます。

# ためした環境

GPU: RTX A5000

# calm3-22b-chat を試せるチャットを公開しました

以下で、 calm3-22b-chat とチャットできるようにしました

GPT3.5と比較できます！

https://chatstream.net/?ws_name=chat_app&mult=1&ontp=1&isync=1&model_id=calm3_22b_chat&model_id=openai_gpt_3_5_175b

# 動画にまとめました

calm3-22b-chatとチャットしてみて試してみたこと、気づいたこと、GPU環境などを動画としてまとめています（後半は当社宣伝含み）

<iframe width="1172" height="659" src="https://www.youtube.com/embed/aNV2fEecuMc" title="CyberAgentLM3-22B-Chat(cyberagent/calm3-22b-chat) を試してみました" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>



# ソースコード

いま手元にあるA5000はメモリが 24GB ですので、4bit に量子化して、試してみました。


```python

from transformers import AutoModelForCausalLM, AutoTokenizer, TextStreamer, BitsAndBytesConfig
import torch

def cout_memory_availability(label):
    """
    GPUのメモリ利用状況を表示する
    :return:
    """
    total_memory = torch.cuda.get_device_properties(0).total_memory / (1024 ** 2)  # 総メモリをMB単位で取得
    reserved_memory = torch.cuda.memory_reserved(0) / (1024 ** 2)  # 予約済みメモリをMB単位で取得
    available_memory = total_memory - reserved_memory  # 利用可能なメモリを計算

    print(f"{label}: GPUの総メモリ: {total_memory} MB")
    print(f"{label}: 予約済みメモリ: {reserved_memory} MB")
    print(f"{label}: 利用可能なメモリ: {available_memory} MB")


quantization_config = BitsAndBytesConfig(load_in_4bit=True)
model = AutoModelForCausalLM.from_pretrained("cyberagent/calm3-22b-chat",quantization_config=quantization_config)
                                             #device_map="auto", torch_dtype="auto")
tokenizer = AutoTokenizer.from_pretrained("cyberagent/calm3-22b-chat")

cout_memory_availability('モデル読み込み後')
streamer = TextStreamer(tokenizer, skip_prompt=True, skip_special_tokens=True)

messages = [
    {"role": "system", "content": "あなたは親切なAIアシスタントです。"},
    {"role": "user", "content": "AIによって私たちの暮らしはどのように変わりますか？"}
]

input_ids = tokenizer.apply_chat_template(messages, add_generation_prompt=True, return_tensors="pt").to(model.device)
output_ids = model.generate(input_ids,
                            max_new_tokens=1024,
                            temperature=0.5,
                            streamer=streamer)

```

## 実行結果

まず、GPUのメモリですが、量子化4bit にしたので、13GB 消費程度になりました。

16GB のGPUでもギリギリ動きそう。

```
モデル読み込み後: GPUの総メモリ: 24563.5 MB
モデル読み込み後: 予約済みメモリ: 13354.0 MB
モデル読み込み後: 利用可能なメモリ: 11209.5 MB

```

出力

```
AI（人工知能）の進化は私たちの生活に多岐にわたる影響を与え、さまざまな分野で変革をもたらしています。以下にいくつかの主要な変化の例を挙げます：

1. 日常生活の効率化:
    - スマートホーム: AIを搭載したスマートデバイス（スマートスピーカー、スマート照明、スマートサーモスタットなど）が家庭内の操作を自動化し、エネルギー効率を向上させます。
    - パーソナルアシスタント: Siri、Alexa、Google AssistantなどのAIアシスタントが日常のタスクを効率化し、スケジュール管理や情報検索を容易にします。

2. ヘルスケアの向上:
    - 診断と治療: AIが医療画像を解析し、早期診断や治療計画の策定を支援します。また、個別化医療の進展により、患者ごとに最適化された治療法が提供されます。
    - 健康管理: ウェアラブルデバイスとAIが健康データをリアルタイムでモニタリングし、生活習慣病の予防や管理を支援します。

3. 交通と物流:
    - 自動運転車: AIを活用した自動運転技術により、交通事故の減少や交通渋滞の緩和が期待されます。また、配送ドローンやロボットによる効率的な物流が実現します。
    - 公共交通機関: AIが交通データを分析し、最適な運行スケジュールやルートを提供することで、移動の利便性が向上します。

4. 教育と学習:
    - 個別化学習: AIが生徒の学習スタイルや進捗を分析し、個々に最適化された教材や学習プランを提供します。
    - 遠隔教育: オンライン教育プラットフォームにおいて、AIが学習者の進捗をリアルタイムで評価し、適切なフィードバックを提供します。

5. 労働市場と仕事:
    - 自動化: 一部の単純作業やルーチンワークがAIによって自動化されることで、人間の労働が創造的な業務や対人関係を必要とする業務に集中できるようになります。
    - 新しい職種: AI技術の開発・管理・運用に関する新しい職種が生まれ、それに伴って労働市場も変化します。

6. エンターテインメント:
    - コンテンツ生成: AIが映画や音楽、ゲームなどのコンテンツを生成し、個々のユーザーの好みに応じたエンターテインメントを提供します。
    - インタラクティブな体験: AIがユーザーの行動を分析し、よりインタラクティブで没入感のある体験を提供します。

これらの変化は、私たちの日常生活をより便利で効率的なものにする一方で、新たな倫理的・社会的課題も生じさせます。AI技術の適切な利用と管理が求められます。

```

## まとめ

試してみてわかったことを、順次追記していこうとおもいます。