Hugging Face でトレンドトップに出てきた、Command R+についてまとめてみました。

ネットを調べる中で、noteでnpaka氏がMLXでCommand R+を試すという記事を見つけ、MLXて何だ?ということも調べました。

4月4日にXにリリースのアナウンスが出ています。

C4AI Command R+ オープンウェイト、RAG を備えた最先端の 104B LLM、ツール、10 か国語の多言語対応を発表します。

このリリースは 35B を基盤としており、AI のブレークスルーを研究コミュニティが利用できるようにするための当社の取り組みの一環です。

基盤としているという35Bのモデルは、先月リリースされている、Command Rを指しており、そこから3倍に拡張されているということになります。

特徴

  • 1040億パラメーター
  • RAGと生成手順の自動化のためのツールを含んでいる
  • 日本語を含む、10カ国語をサポート
  • 多くの用途で使用できるが、特に推論、要約、Q&Aに最適化されている。
  • コンテキストの長さは128Kをサポート

1040億パラメーターということは、GPT-3の1250憶に迫るものですが、4bitモデルだとハイスペックなPCなら動きます。LLMの進化は驚くべきものですね。

性能的には、132BのDBRX-instructを超えているようです。

利用方法

 Hugging Faceにホストされているので、お試しであればそこを利用することが可能。

https://huggingface.co/spaces/CohereForAI/c4ai-command-r-plus


 ローカルでの使用も可能だが、DRAMやVRAMがかなり必要なので、普通の家庭では無理。

ローカルで動かすために

 4ビットで動かせるquantized versionがある。

 https://huggingface.co/CohereForAI/c4ai-command-r-plus-4bit
 これなら、以下の条件で動作可能と思われる。

 GPUメモリが46GB以上
 システムの空きメモリが64GB以上
 モデルファイルは、13ファイルで約64GBの容量

自分の環境では動作させることが出来ないが、手順としては、

transformersモジュールのインストール

pip install 'git+https://github.com/huggingface/transformers.git' bitsandbytes accelerate

サンプルコードは以下のようなものになる。
以下のコードを実行すると、モデルファイルのダウンロードが始まる。

from transformers import AutoTokenizer, AutoModelForCausalLM

model_id = "CohereForAI/c4ai-command-r-plus-4bit"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id)

# Format message with the command-r-plus chat template
messages = [{"role": "user", "content": "Hello, how are you?"}]
input_ids = tokenizer.apply_chat_template(messages, tokenize=True, add_generation_prompt=True, return_tensors="pt")
## <BOS_TOKEN><|START_OF_TURN_TOKEN|><|USER_TOKEN|>Hello, how are you?<|END_OF_TURN_TOKEN|><|START_OF_TURN_TOKEN|><|CHATBOT_TOKEN|>

gen_tokens = model.generate(
    input_ids, 
    max_new_tokens=100, 
    do_sample=True, 
    temperature=0.3,
    )

gen_text = tokenizer.decode(gen_tokens[0])
print(gen_text)

Hugging Face上で同じ質問(Hello, How are you?)をしたら、以下の回答が返ってきた。

Hello! I’m an AI chatbot, so I don’t have feelings or emotions, but I’m here to assist you in any way I can. How can I help you today?

どう思う、どう感じる、という質問に関しては、I’m an AI chatbot, so I don’t have feelings or emotions,(私はAIアシスタントなので、個人的な意見や感情はありません。)と必ず答えるようだ。

Apple MLXでの動作

noteの記事で、MLXで動作させている例があった。

https://note.com/npaka/n/n9635d55773ef

MLXはAppleのM1/M2/M3で動くので、DRAMの空きが64GBあれば動作すると思われる。

MLXについて
 Apple版NumPyと考えていいが、Apple siliconでのみ動作するフレームワークである。
 unified memory modelというのが他のフレームワークとの違いで、CPUメモリからGPUメモリに転送しなくても動作する。
 動作が遅い(自分で言ってます)。配列を実体化させるのは必要があるときということなので、メモリの使用効率はいいが、動作が遅延するということらしい。

MLXについては、詳しい情報はほとんどない。GitHub上のドキュメント
https://ml-explore.github.io/mlx

が一番詳しい情報源だった。