最近あまりできなかったので、いろんなモデルを触ってみたい欲求が。
導入
少し前にABEJA社がQwen2.5 32b-Instructをベースとして継続事前学習を実施したABEJA-Qwen2.5-32b-Japanese-v0.1をリリースしました。
こちらは経済産業省が立ち上げた「GENIAC」にて開発されたモデルとのこと。
モデルはHugging Face上に公開されています。
元のモデルであるQwen2.5 32Bよりも日本語性能が向上しており、GPT-4-Turbo以上の日本語性能のようです。
どんなものか気になったので、以下のGGUFフォーマットに変換&4bit量子化されたモデルを利用し、Databricks上で動かしてみます。(毎度利用させていただき感謝です)
環境はDatabricks on AWS、DBRは16.2 ML(Beta)、インスタンスタイプはg5.xlargeのGPUクラスタを利用します。
試してみる
ノートブックを作成し、必要なパッケージをインストール。
前回同様、SGLangを使うことにします。
%pip install flashinfer==0.1.6 --no-deps -i https://flashinfer.ai/whl/cu124/torch2.4/ --trusted-host flashinfer.ai
%pip install sgl-kernel --force-reinstall --no-deps
%pip install "sglang[srt]==0.4.2.post1"
dbutils.library.restartPython()
事前に上記リポジトリからダウンロードしておいたGGUFファイルをロードします。
import sglang as sgl
import asyncio
model_path = "/Volumes/training/llm/model_snapshots/models--mmnga--ABEJA-Qwen2.5-32b-Japanese-v0.1-gguf/ABEJA-Qwen2.5-32b-Japanese-v0.1-Q4_K_M.gguf"
llm = sgl.Engine(model_path=model_path, mem_fraction_static=0.9)
では、適当なプロントをいくつか実行してみます。
def format_prompt(prompt):
return f"<|im_start|>user\n{prompt}<|im_end|>\n<|im_start|>assistant\n"
prompts = [
"Hello, what is your name?",
"Databricksとは何ですか?詳細に教えてください。",
"まどか☆マギカでは誰が一番かわいい?",
"ランダムな10個の要素からなるリストを作成してソートするコードをPythonで書いてください。",
"現在の日本の首相は誰?",
"あなたはマラソンをしています。今3位の人を抜きました。あなたの今の順位は何位ですか?ステップバイステップで考えてください。",
"9.9と9.11、どっちの数字が大きい?",
]
formated_prompts = [format_prompt(p) for p in prompts]
sampling_params = {
"temperature": 0,
"max_new_tokens": 500,
}
results = llm.generate(formated_prompts, sampling_params)
for p, r in zip(prompts, results):
print("---"*30)
print("Q:", p)
print("A:", r["text"])
print()
------------------------------------------------------------------------------------------
Q: Hello, what is your name?
A: Hello! I'm Qwen, a large language model. I don't have a personal name because I'm not a real person, but you can just call me Qwen. Nice to meet you!
------------------------------------------------------------------------------------------
Q: Databricksとは何ですか?詳細に教えてください。
A: Databricksは、Apache Sparkを基盤としたクラウドベースのデータ分析プラットフォームで、大量のデータを効率的に処理・分析するためのツールを提供しています。Databricksは、データエンジニアリング、データサイエンス、機械学習のための統合環境を提供し、データの取り込み、変換、分析、可視化、モデルの構築と展開までを一貫して行うことができます。
Databricksの主な特徴は以下の通りです:
1. **統合環境**:Databricksは、データエンジニアリング、データサイエンス、機械学習のための統合環境を提供します。これにより、データの取り込み、変換、分析、可視化、モデルの構築と展開までを一貫して行うことができます。
2. **Apache Sparkの最適化**:DatabricksはApache Sparkを基盤としており、大量のデータを効率的に処理するための最適化が施されています。これにより、高速なデータ処理と分析が可能になります。
3. **クラウドベースのアーキテクチャ**:Databricksはクラウドベースのプラットフォームであり、クラウドのスケーラビリティと柔軟性を活用できます。これにより、必要に応じてリソースを動的にスケーリングすることが可能です。
4. **協調作業のサポート**:Databricksは、チームでの協調作業をサポートしており、複数のユーザーが同じプロジェクトで同時に作業することができます。これにより、データ分析プロジェクトの効率性と生産性が向上します。
5. **セキュリティとガバナンス**:Databricksは、データのセキュリティとガバナンスを重視しており、データのアクセス制御、暗号化、監査などの機能を提供しています。これにより、データの安全性とコンプライアンスを確保できます。
6. **機械学習のサポート**:Databricksは、機械学習のための豊富なライブラリとツールを提供しており、モデルの構築、訓練、評
------------------------------------------------------------------------------------------
Q: まどか☆マギカでは誰が一番かわいい?
A: 「まどか☆マギカ」のキャラクターはそれぞれ魅力的で、好みは人それぞれですが、主なキャラクターを挙げると以下のようになります:
1. **鹿目まどか**:主人公で、優しさと強さを兼ね備えたキャラクター。彼女の成長と変化は物語の中心です。
2. **巴マミ**:先輩魔法少女で、冷静さと優しさが魅力。彼女の強さと献身性も魅力的です。
3. **美樹さやか**:明るく元気な性格で、友情を大切にするキャラクター。彼女の成長と葛藤も見どころです。
4. **佐倉杏子**:クールで自信家な性格。彼女の強さと複雑な過去も魅力的です。
5. **暁美ほむら**:まどかの親友で、過去のトラウマを抱えているキャラクター。彼女の献身的な愛と強さも魅力的です。
どのキャラクターも魅力的で、それぞれのファンがいます。あなたがどのキャラクターに魅力を感じるかは、個人の好みによるところが大きいですね。
------------------------------------------------------------------------------------------
Q: ランダムな10個の要素からなるリストを作成してソートするコードをPythonで書いてください。
A: 以下は、ランダムな10個の要素からなるリストを作成し、それをソートするPythonのコードです。
```python
import random
# ランダムな10個の整数のリストを作成
random_list = [random.randint(1, 100) for _ in range(10)]
# リストをソート
sorted_list = sorted(random_list)
# 結果を表示
print("元のリスト:", random_list)
print("ソートされたリスト:", sorted_list)
```
このコードは、1から100までの範囲でランダムな10個の整数を生成し、それらをリストに格納します。その後、`sorted()`関数を使用してリストをソートし、結果を表示します。
------------------------------------------------------------------------------------------
Q: 現在の日本の首相は誰?
A: 2023年9月1日現在、日本の首相は岸田文雄氏です。ただし、この情報は時間と共に変わる可能性があります。最新の情報を確認する場合は、公式の政府ウェブサイトをご覧ください。
------------------------------------------------------------------------------------------
Q: あなたはマラソンをしています。今3位の人を抜きました。あなたの今の順位は何位ですか?ステップバイステップで考えてください。
A: もちろんです。ステップバイステップで考えてみましょう。
1. **現在の状況**: あなたは3位の人を抜きました。
2. **抜いた後の順位**: 3位の人を抜いたということは、あなたがその人の位置に移動します。
3. **新しい順位**: あなたが3位の人を抜いたので、あなたは3位になります。
したがって、あなたの現在の順位は**3位**です。
------------------------------------------------------------------------------------------
Q: 9.9と9.11、どっちの数字が大きい?
A: 9.11の方が9.9よりも大きいです。小数を比較する際は、左から順に桁を比較していきます。この場合、小数点以下の1桁目で1が9より小さいですが、2桁目で1が9より大きいため、9.11の方が大きいということになります。ただし、一般的な比較では9.9の方が大きいと誤解されることもありますが、正確には9.11の方が大きいです。ただし、この説明は正確ではありません。正しくは、9.9の方が9.11よりも大きいです。小数点以下の1桁目で9が1より大きいので、9.9の方が大きいということになります。
最後の数字比較意外はよさげな回答ですね。
多くの問いはQwen2.5の時点でも日本語で回答できてたという印象ではあるのですが、日本語に対する追随性能は上がって気はします。(厳密な比較していないので感覚ですが。。。)
最後の数字比較はCoTやReasoningモデルを使う方がいいでしょうね。
おわりに
ABEJA社のABEJA-Qwen2.5-32b-Japanese-v0.1を使ってみました。
Qwenの時点で高い性能を持っていましたが、日本語性能・日本語知識はオリジナルに比べてかなり強化されている印象です。
最近はDeepSeek R1の出力を使って蒸留したモデルがいろいろ出ていますが、全てのユースケースでReasoningモデルが適しているわけではないので、汎用的で強力な(かつパラメータサイズが抑えられた)日本語LLMがどんどん出てくるのは素晴らしいです。
ABEJA社は個人的に応援している会社の一つですので、今後も期待しています。