導入
以下の記事でCommand R Plusを試しましたので、それより小パラメータで少し前に公開されたCommand R v01も同様に試してみます。
C4AI CommandR v01はCommand R Plus同様、Cohereが公開したLLMです。
前段を一部邦訳すると、
350億パラメータの高性能ジェネレーティブモデルの研究リリースです。Command-R は、推論、要約、質問応答など、さまざまなユース ケース向けに最適化された大規模な言語モデルです。Command-Rは、10言語で評価された多言語生成機能と、高性能なRAG機能を備えています。
ということで、Plusより小規模ですが、同様の特長を備えたモデルのようです。
ライセンスはCC-by-NC-4.0(+Cohere社の独自ポリシー遵守必要)であり、こちらもPlus同様に商用利用不可のモデルとなります。
Plus同様、簡単にですが単純な推論を実施してみます。
検証はDatabricks on AWSを利用しました。
DBRは14.3ML、クラスタタイプはg5.12xlargeです。
推論エンジンにはExLlamaV2を利用し、4.0bpwで量子化したモデルを使って確認します。
EXL2量子化モデルを利用していますので、本来のモデルより性能劣化していることにご注意ください。
Step1. パッケージインストール
推論に必要なパッケージをインストール。
%pip install torch==2.2.2 --index-url https://download.pytorch.org/whl/cu118
%pip install ninja
%pip install -U flash-attn --no-build-isolation
%pip install https://github.com/turboderp/exllamav2/releases/download/v0.0.18/exllamav2-0.0.18+cu118-cp310-cp310-linux_x86_64.whl
dbutils.library.restartPython()
Step2. モデルのロード
事前に以下のEXL2量子化モデルをダウンロードしておき、そのモデルをロードします。
今回は4.0bpwで量子化されたモデルを利用しました。
from exllamav2 import(
ExLlamaV2,
ExLlamaV2Config,
ExLlamaV2Cache_Q4,
ExLlamaV2Tokenizer,
)
from exllamav2.generator import (
ExLlamaV2BaseGenerator,
ExLlamaV2Sampler
)
batch_size = 1
cache_max_seq_len = 4096
model_directory = "/Volumes/training/llm/model_snapshots/models--turboderp--command-r-v01-35B-exl2--4.0bpw/"
config = ExLlamaV2Config(model_directory)
model = ExLlamaV2(config)
print("Loading model: " + model_directory)
cache = ExLlamaV2Cache_Q4(model, lazy = True, batch_size = batch_size, max_seq_len=cache_max_seq_len,)
model.load_autosplit(cache)
tokenizer = ExLlamaV2Tokenizer(config)
generator = ExLlamaV2BaseGenerator(model, cache, tokenizer)
# サンプリングの設定
settings = ExLlamaV2Sampler.Settings()
settings.temperature = 0.0
settings.top_k = 50
settings.top_p = 0.9
settings.token_repetition_penalty = 1.05
max_new_tokens = 512
Step3. バッチ推論
前回と同様のお題でバッチ推論させます。
# 今回推論する内容
prompts = [
"Hello, what is your name?",
"Databricksとは何ですか?詳細に教えてください。",
"まどか☆マギカでは誰が一番かわいい?",
"ランダムな10個の要素からなるリストを作成してソートするコードをPythonで書いてください。",
"現在の日本の首相は誰?",
"あなたはマラソンをしています。今3位の人を抜きました。あなたの今の順位は何位ですか?",
]
# パディングを最小化するために文字列サイズでソート
s_prompts = sorted(prompts, key=len)
# プロンプトを整形
def format_prompt(sp, p):
return f"<BOS_TOKEN><|START_OF_TURN_TOKEN|><|SYSTEM_TOKEN|>{sp}<|END_OF_TURN_TOKEN|><|START_OF_TURN_TOKEN|><|USER_TOKEN|>{p}<|END_OF_TURN_TOKEN|><|START_OF_TURN_TOKEN|><|CHATBOT_TOKEN|>"
system_prompt = "You are helpful assistant.You must reply in Japanese."
f_prompts = [format_prompt(system_prompt, p) for p in s_prompts]
# 生計済みプロンプトをバッチに分割
batches = [f_prompts[i : i + batch_size] for i in range(0, len(prompts), batch_size)]
collected_outputs = []
for b, batch in enumerate(batches):
print(f"Batch {b + 1} of {len(batches)}...")
outputs = generator.generate_simple(
batch, settings, max_new_tokens, seed=1234, add_bos=True
)
trimmed_outputs = [o.split("<|CHATBOT_TOKEN|>")[1] for o in outputs] # 簡易分割
collected_outputs += trimmed_outputs
# 結果出力
for q, a in zip(s_prompts, collected_outputs):
print("---------------------------------------")
print("Q: " + q)
print("A: " + a.strip())
Batch 1 of 6...
Batch 2 of 6...
Batch 3 of 6...
Batch 4 of 6...
Batch 5 of 6...
Batch 6 of 6...
---------------------------------------
Q: 現在の日本の首相は誰?
A: 現在、日本の首相は岸田文雄です。2021年9月29日に第100代内閣総理大臣に就任しました。
---------------------------------------
Q: まどか☆マギカでは誰が一番かわいい?
A: まどか☆マギカのキャラクターで誰が一番可愛いかは難しい質問ですね!
個人的な意見ですが、鹿目まどかちゃんが可愛いと思います!彼女の純真さ、そして勇気と献身的な性格がとても魅力的です。まどかは、友達思いで、自分のことより他人のことを優先する傾向があります。彼女の優しさと、家族や友人に対する愛は本当に素敵です。また、キュゥべえとのやりとりも見ていて楽しいですよね。
他のキャラクターもそれぞれ個性があって魅力的なので、みんなから人気があるのも納得です!
---------------------------------------
Q: Hello, what is your name?
A: こんにちは、私はココです。よろしくお願いします!
---------------------------------------
Q: Databricksとは何ですか?詳細に教えてください。
A: Databricks は、オープンソースの Apache Spark ベースのアナリティクスと機械学習のためのプラットフォームです。ユーザーがノートブックを介してビッグデータ分析や機械学習モデルを構築し、実行できるように設計されたワークスペースを提供します。 開発者は、Python、Scala、R で書かれたコードや、SQL クエリなどのスクリプトを実行できます。 また、Apache Spark が提供するすべての機能(分散コンピューティング、ストリーミング、機械学習など)にアクセスできます。 さらに、Databricks は、ユーザーが自分のデータセットで作業できるように、AWS や Azure などのクラウドプロバイダーとの統合も提供しています。
Databricks の主要機能の 1 つは、スケーラブルなノートブック環境です。ユーザーは、コードやドキュメントを記述し、実行でき、リアルタイムで結果を視覚化できます。 ノートブックは、データのクリーク、探索、モデルトレーニング、および他のユーザーとの共有に適しています。 また、Databricks は、機械学習モデルを構築するために使用できる Python の人気ライブラリもサポートしています。
もう一つの重要な機能は、他のユーザーとのコラボレーションとワークフロー管理能力です。 複数のユーザーが同じワークスペースで同時に作業でき、コードやノートブックを共有できます。 これは、プロジェクトでの共同作業を容易にし、ワークフローの管理と追跡に役立ちます。
Databricks は、ビッグデータ分析や機械学習に重点を置いており、大規模なデータセットの処理と分析に有用です。 それは、研究、データ分析、生産環境でのモデルデプロイに適しています。 また、Apache Spark のオープンソースコミュニティーによってサポートされており、多くの開発者や組織から使用と貢献を得ています。
---------------------------------------
Q: あなたはマラソンをしています。今3位の人を抜きました。あなたの今の順位は何位ですか?
A: 2位です!
---------------------------------------
Q: ランダムな10個の要素からなるリストを作成してソートするコードをPythonで書いてください。
A: はい、こちらのコードが実行されると、ランダムに選んだ10個の要素からなるリストが作成され、昇順にソートされます:
```python
import random
# ランダムな数値のリスト生成
numbers = random.sample(range(1, 100), 10)
# ソートしたリストを出力
sorted_list = sorted(numbers)
print(sorted_list)
```
このコードでは、randomモジュールを使用して、1から100までの範囲からランダムに10個の要素を選んでいます。そして、sorted関数で昇順にソートしています。実行するたびに、異なるランダムなリストが作成されます。お役に立てれば幸いです!
破綻の無い、綺麗な日本語を出力してくれていますね。
マラソンの順位問題はやはり単純推論だと正当できていませんが、このあたりはCoTやSelf-Discoverといったプロンプトエンジニアリングで解消されると思います。
真価はTool選択やRAG利用なのだと思いますが、単純推論であっても高い性能が伺えます。
まとめ
商用利用不可ではありますが、魅力的なLLMだと思います。
Plus含め、Cohere社と連携して採用していく企業が増えるのではないでしょうか。