Qwen3.5 – ローカル実行ガイド

Qwen3.5 – ローカル実行ガイド(日本語詳細まとめ)

  1. 概要
    1. モデルサイズ
    2. 主な特徴
  2. 2026 年 3 月 5 日更新情報
    1. 重要な更新事項
  3. ハードウェア要件表
    1. モデル選択のアドバイス
  4. 推奨設定
    1. 基本設定
  5. 思考モードと非思考モードの設定
    1. Thinking Mode(思考モード)
      1. 一般タスク
      2. 精密コーディングタスク(例:WebDev)
    2. Instruct Mode(非思考モード)
      1. 一般タスク
      2. 推論タスク
  6. 思考/推論のオン・オフ切り替え
    1. 思考モードを無効化(disable)
    2. 思考モードを有効化(enable)
  7. Unsloth Dynamic GGUF アップロード
  8. llama.cpp ガイド
    1. llama.cpp の取得とビルド
  9. モデル別の詳細ガイド
    1. Qwen3.5-35B-A3B
      1. モデルのダウンロード
      2. Thinking Mode – 精密コーディングタスク
      3. Thinking Mode – 一般タスク
      4. Non-thinking Mode – 一般タスク
      5. 会話モードでの実行
    2. Qwen3.5 Small シリーズ(0.8B・2B・4B・9B)
      1. 思考モードを有効化(デフォルトは無効)
      2. 一般タスク(思考モード有効)
      3. Non-thinking Mode – 一般タスク
      4. Non-thinking Mode – 推論タスク
    3. Qwen3.5-27B
      1. モデルのダウンロード
      2. Thinking Mode – 精密コーディングタスク
      3. Thinking Mode – 一般タスク
      4. Non-thinking Mode – 一般タスク
      5. 会話モードでの実行
    4. Qwen3.5-122B-A10B
      1. モデルのダウンロード
      2. Thinking Mode – 精密コーディングタスク
      3. Thinking Mode – 一般タスク
      4. Non-thinking Mode – 一般タスク
      5. 会話モードでの実行
    5. Qwen3.5-397B-A17B
      1. モデルのダウンロード
      2. Thinking Mode
      3. Non-thinking Mode
      4. 会話モードでの実行
  10. LM Studio ガイド
    1. ステップ 1: LM Studio のダウンロード
    2. ステップ 2: Thinking Toggle の設定
    3. ステップ 3: LM Studio の再起動
  11. llama-server サービング & OpenAI 完了ライブラリ
    1. llama-server でのデプロイ
    2. Python での利用(OpenAI ライブラリ)
    3. 思考/推論のオン・オフ切り替えの具体例
  12. OpenAI Codex & Claude Code での利用
  13. ツール呼び出し(Tool Calling)
    1. ツール呼び出しのセットアップ
    2. 自動ツール呼び出し関数
  14. ベンチマーク
    1. Unsloth GGUF ベンチマーク
      1. 更新内容
    2. Qwen3.5-397B-A17B ベンチマーク
      1. 主要な結果(精度;オリジナルとの変化;相対誤差増加)
      2. 選択のアドバイス
  15. 公式 Qwen ベンチマーク
  16. 重要な注意点
  17. リソースリンク

概要

Qwen3.5 はアリババの新しいモデルファミリーで、以下のモデルが含まれます:

モデルサイズ

  • Qwen3.5-35B-A3B
  • Qwen3.5-27B
  • Qwen3.5-122B-A10B
  • Qwen3.5-397B-A17B
  • Small シリーズ: 0.8B, 2B, 4B, 9B

主な特徴

  • マルチモーダルハイブリッド推論 LLM
  • 256K コンテキストをサポート(201 言語対応)
  • Thinking(思考)モードNon-thinking(非思考)モードの両方に対応
  • アージェントコーディング、ビジョン、チャット、ロングコンテキストタスクに優れる
  • 27B と 35B モデルは 22GB の Mac/RAM デバイスで動作

2026 年 3 月 5 日更新情報

重要な更新事項

  1. Qwen3.5-35B, 27B, 122B, 397B の再ダウンロード推奨
  2. 全ての GGUF が改良された量子化アルゴリズムで更新
  3. 新しい imatrix データを使用
  4. チャット、コーディング、ロングコンテキスト、ツール呼び出しの使用例で改善

  5. ツール呼び出しの改善

  6. チャットテンプレートの修正に追随
  7. 修正は全ての Qwen3.5 フォーマットとアップローダーに適用

  8. MXFP4 レイヤーの廃止

  9. Q2_K_XL, Q3_K_XL, Q4_K_XL の 3 つの Qwen3.5 GGUF から MXFP4 レイヤーを廃止

ハードウェア要件表

モデル 3-bit 4-bit 6-bit 8-bit BF16
0.8B & 2B 3 GB 3.5 GB 5 GB 7.5 GB 9 GB
4B 4.5 GB 5.5 GB 7 GB 10 GB 14 GB
9B 5.5 GB 6.5 GB 9 GB 13 GB 19 GB
27B 14 GB 17 GB 24 GB 30 GB 54 GB
35B-A3B 17 GB 22 GB 30 GB 38 GB 70 GB
122B-A10B 60 GB 70 GB 106 GB 132 GB 245 GB
397B-A17B 180 GB 214 GB 340 GB 512 GB 810 GB

注記: 総利用可能メモリ(VRAM + システム RAM)がダウンロードする量子化モデルファイルのサイズを超えることを確認してください。そうでない場合、llama.cpp は SSD/HDD オフローディングを通じて実行できますが、推論は遅くなります。

モデル選択のアドバイス

  • 27B と 35B-A3B の間: 27B はより正確な結果、35B-A3B はより高速な推論を提供
  • デバイスに収まらない場合:27B を選択
  • 速度を重視する場合:35B-A3B を選択

推奨設定

基本設定

  • 最大コンテキストウィンドウ: 262,144(YaRN を通じて 1M まで拡張可能)
  • presence_penalty: 0.0 to 2.0(デフォルトはオフ。反復を減らすために使用可能だが、パフォーマンスがわずかに低下する可能性)
  • 適切な出力長: 32,768 トークン(ほとんどのクエリ用)

トラブルシューティング: ギブシャージ(意味不明な出力)が表示される場合、コンテキスト長が短すぎる可能性があります。または --cache-type-k bf16 --cache-type-v bf16 を使用してみてください。


思考モードと非思考モードの設定

Thinking Mode(思考モード)

一般タスク

temperature=1.0, top_p=0.95, top_k=20, min_p=0.0, presence_penalty=1.5, repetition_penalty=1.0

精密コーディングタスク(例:WebDev)

temperature=0.6, top_p=0.95, top_k=20, min_p=0.0, presence_penalty=0.0, repetition_penalty=1.0

Instruct Mode(非思考モード)

一般タスク

temperature=0.7, top_p=0.8, top_k=20, min_p=0.0, presence_penalty=1.5, repetition_penalty=1.0

推論タスク

temperature=1.0, top_p=0.95, top_k=20, min_p=0.0, presence_penalty=1.5, repetition_penalty=1.0


思考/推論のオン・オフ切り替え

思考モードを無効化(disable)

--chat-template-kwargs '{"enable_thinking":false}'

Windows PowerShell の場合:

--chat-template-kwargs "{\"enable_thinking\":false}"

思考モードを有効化(enable)

--chat-template-kwargs '{"enable_thinking":true}'

Windows PowerShell の場合:

--chat-template-kwargs "{\"enable_thinking\":true}"

重要: Qwen3.5 0.8B, 2B, 4B, 9B はデフォルトで推論が無効化されています。有効化するには --chat-template-kwargs '{"enable_thinking":true}' を使用してください。


Unsloth Dynamic GGUF アップロード

モデル Hugging Face リポジトリ
Qwen3.5-35B-A3B unsloth/Qwen3.5-35B-A3B-GGUF
Qwen3.5-27B unsloth/Qwen3.5-27B-GGUF
Qwen3.5-122B-A10B unsloth/Qwen3.5-122B-A10B-GGUF
Qwen3.5-397B-A17B unsloth/Qwen3.5-397B-A17B-GGUF
Qwen3.5-0.8B unsloth/Qwen3.5-0.8B-GGUF
Qwen3.5-2B unsloth/Qwen3.5-2B-GGUF
Qwen3.5-4B unsloth/Qwen3.5-4B-GGUF
Qwen3.5-9B unsloth/Qwen3.5-9B-GGUF

警告: 現在のところ、Ollama では個別の mmproj ビジョンファイルのため Qwen3.5 GGUF は動作しません。llama.cpp 互換のバックエンドを使用してください。


llama.cpp ガイド

llama.cpp の取得とビルド

apt-get update
apt-get install pciutils build-essential cmake curl libcurl4-openssl-dev -y
git clone https://github.com/ggml-org/llama.cpp
cmake llama.cpp -B llama.cpp/build \
    -DBUILD_SHARED_LIBS=OFF -DGGML_CUDA=ON
cmake --build llama.cpp/build --config Release -j --clean-first --target llama-cli llama-mtmd-cli llama-server llama-gguf-split
cp llama.cpp/build/bin/llama-* llama.cpp

Apple Mac / Metal デバイスの場合: -DGGML_CUDA=OFF に設定してください。Metal サポートはデフォルトで有効です。

GPU がない場合: -DGGML_CUDA=OFF に設定して CPU 推論のみを使用できます。


モデル別の詳細ガイド

Qwen3.5-35B-A3B

特徴:
– Dynamic 4-bit で 24GB RAM/Mac デバイスで高速推論可能
– 完全な F16 精度で約 72GB
– GGUF: Qwen3.5-35B-A3B-GGUF

モデルのダウンロード

hf download unsloth/Qwen3.5-35B-A3B-GGUF \
    --local-dir unsloth/Qwen3.5-35B-A3B-GGUF \
    --include "*UD-Q4_K_XL*"  # Dynamic 2 ビットの場合は "*UD-Q2_K_XL*"

Thinking Mode – 精密コーディングタスク

export LLAMA_CACHE="unsloth/Qwen3.5-35B-A3B-GGUF"
./llama.cpp/llama-cli \
    -hf unsloth/Qwen3.5-35B-A3B-GGUF:UD-Q4_K_XL \
    --ctx-size 16384 \
    --temp 0.6 \
    --top-p 0.95 \
    --top-k 20 \
    --min-p 0.00

Thinking Mode – 一般タスク

export LLAMA_CACHE="unsloth/Qwen3.5-35B-A3B-GGUF"
./llama.cpp/llama-cli \
    -hf unsloth/Qwen3.5-35B-A3B-GGUF:UD-Q4_K_XL \
    --ctx-size 16384 \
    --temp 1.0 \
    --top-p 0.95 \
    --top-k 20 \
    --min-p 0.00

Non-thinking Mode – 一般タスク

export LLAMA_CACHE="unsloth/Qwen3.5-35B-A3B-GGUF"
./llama.cpp/llama-server \
    -hf unsloth/Qwen3.5-35B-A3B-GGUF:UD-Q4_K_XL \
    --ctx-size 16384 \
    --temp 0.7 \
    --top-p 0.8 \
    --top-k 20 \
    --min-p 0.00 \
    --chat-template-kwargs '{"enable_thinking":false}'

会話モードでの実行

./llama.cpp/llama-cli \
    --model unsloth/Qwen3.5-35B-A3B-GGUF/Qwen3.5-35B-A3B-UD-Q4_K_XL.gguf \
    --mmproj unsloth/Qwen3.5-35B-A3B-GGUF/mmproj-F16.gguf \
    --temp 1.0 \
    --top-p 0.95 \
    --min-p 0.00 \
    --top-k 20


Qwen3.5 Small シリーズ(0.8B・2B・4B・9B)

特徴:
– 非常に軽量で、ほぼ完全精度でも 12GB の RAM/VRAM/ユニファイドメモリで動作
推論はデフォルトで無効化されています
– GGUFs: 0.8B, 2B, 4B, 9B

思考モードを有効化(デフォルトは無効)

export LLAMA_CACHE="unsloth/Qwen3.5-9B-GGUF"
./llama.cpp/llama-server \
    -hf unsloth/Qwen3.5-9B-GGUF:UD-Q4_K_XL \
    --ctx-size 16384 \
    --temp 0.6 \
    --top-p 0.95 \
    --top-k 20 \
    --min-p 0.00 \
    --alias "unsloth/Qwen3.5-9B-GGUF" \
    --port 8001 \
    --chat-template-kwargs '{"enable_thinking":true}'

一般タスク(思考モード有効)

export LLAMA_CACHE="unsloth/Qwen3.5-9B-GGUF"
./llama.cpp/llama-server \
    -hf unsloth/Qwen3.5-9B-GGUF:UD-Q4_K_XL \
    --ctx-size 16384 \
    --temp 1.0 \
    --top-p 0.95 \
    --top-k 20 \
    --min-p 0.00 \
    --alias "unsloth/Qwen3.5-9B-GGUF" \
    --port 8001 \
    --chat-template-kwargs '{"enable_thinking":true}'

Non-thinking Mode – 一般タスク

export LLAMA_CACHE="unsloth/Qwen3.5-9B-GGUF"
./llama.cpp/llama-cli \
    -hf unsloth/Qwen3.5-9B-GGUF:UD-Q4_K_XL \
    --ctx-size 16384 \
    --temp 0.7 \
    --top-p 0.8 \
    --top-k 20 \
    --min-p 0.00

Non-thinking Mode – 推論タスク

export LLAMA_CACHE="unsloth/Qwen3.5-9B-GGUF"
./llama.cpp/llama-cli \
    -hf unsloth/Qwen3.5-9B-GGUF:UD-Q4_K_XL \
    --ctx-size 16384 \
    --temp 1.0 \
    --top-p 0.95 \
    --top-k 20 \
    --min-p 0.00


Qwen3.5-27B

特徴:
– Dynamic 4-bit で 18GB RAM/Mac デバイスで高速推論可能
– GGUF: Qwen3.5-27B-GGUF

モデルのダウンロード

hf download unsloth/Qwen3.5-27B-GGUF \
    --local-dir unsloth/Qwen3.5-27B-GGUF \
    --include "*UD-Q4_K_XL*"  # Dynamic 2 ビットの場合は "*UD-Q2_K_XL*"

Thinking Mode – 精密コーディングタスク

export LLAMA_CACHE="unsloth/Qwen3.5-27B-GGUF"
./llama.cpp/llama-cli \
    -hf unsloth/Qwen3.5-27B-GGUF:UD-Q4_K_XL \
    --ctx-size 16384 \
    --temp 0.6 \
    --top-p 0.95 \
    --top-k 20 \
    --min-p 0.00

Thinking Mode – 一般タスク

export LLAMA_CACHE="unsloth/Qwen3.5-27B-GGUF"
./llama.cpp/llama-cli \
    -hf unsloth/Qwen3.5-27B-GGUF:UD-Q4_K_XL \
    --ctx-size 16384 \
    --temp 1.0 \
    --top-p 0.95 \
    --top-k 20 \
    --min-p 0.00

Non-thinking Mode – 一般タスク

export LLAMA_CACHE="unsloth/Qwen3.5-27B-GGUF"
./llama.cpp/llama-server \
    -hf unsloth/Qwen3.5-27B-GGUF:UD-Q4_K_XL \
    --ctx-size 16384 \
    --temp 0.7 \
    --top-p 0.8 \
    --top-k 20 \
    --min-p 0.00 \
    --chat-template-kwargs '{"enable_thinking":false}'

会話モードでの実行

./llama.cpp/llama-cli \
    --model unsloth/Qwen3.5-27B-GGUF/Qwen3.5-27B-UD-Q4_K_XL.gguf \
    --mmproj unsloth/Qwen3.5-27B-GGUF/mmproj-F16.gguf \
    --temp 1.0 \
    --top-p 0.95 \
    --min-p 0.00 \
    --top-k 20


Qwen3.5-122B-A10B

特徴:
– Dynamic 4-bit で 70GB RAM/Mac デバイスで高速推論可能
– GGUF: Qwen3.5-122B-A10B-GGUF

モデルのダウンロード

hf download unsloth/Qwen3.5-122B-A10B-GGUF \
    --local-dir unsloth/Qwen3.5-122B-A10B-GGUF \
    --include "*UD-Q4_K_XL*"  # Dynamic 2 ビットの場合は "*UD-Q2_K_XL*"

Thinking Mode – 精密コーディングタスク

export LLAMA_CACHE="unsloth/Qwen3.5-122B-A10B-GGUF"
./llama.cpp/llama-cli \
    -hf unsloth/Qwen3.5-122B-A10B-GGUF:UD-Q4_K_XL \
    --ctx-size 16384 \
    --temp 0.6 \
    --top-p 0.95 \
    --top-k 20 \
    --min-p 0.00

Thinking Mode – 一般タスク

export LLAMA_CACHE="unsloth/Qwen3.5-122B-A10B-GGUF"
./llama.cpp/llama-cli \
    -hf unsloth/Qwen3.5-122B-A10B-GGUF:UD-Q4_K_XL \
    --ctx-size 16384 \
    --temp 1.0 \
    --top-p 0.95 \
    --top-k 20 \
    --min-p 0.00

Non-thinking Mode – 一般タスク

export LLAMA_CACHE="unsloth/Qwen3.5-122B-A10B-GGUF"
./llama.cpp/llama-server \
    -hf unsloth/Qwen3.5-122B-A10B-GGUF:UD-Q4_K_XL \
    --ctx-size 16384 \
    --temp 0.7 \
    --top-p 0.8 \
    --top-k 20 \
    --min-p 0.00 \
    --chat-template-kwargs '{"enable_thinking":false}'

会話モードでの実行

./llama.cpp/llama-cli \
    --model unsloth/Qwen3.5-122B-A10B-GGUF/UD-Q4_K_XL/Qwen3.5-122B-A10B-UD-Q4_K_XL-00001-of-00003.gguf \
    --mmproj unsloth/Qwen3.5-122B-A10B-GGUF/mmproj-F16.gguf \
    --ctx-size 16384 \
    --temp 0.6 \
    --top-p 0.95 \
    --top-k 20 \
    --min-p 0.00


Qwen3.5-397B-A17B

特徴:
– Gemini 3 Pro、Claude Opus 4.5、GPT-5.2 と同等のパフォーマンスクラス
– 完全な 397B チェックポイントはディスク上で約 807GB
– Unsloth の GGUF を使用して実行可能:
3-bit: 192GB RAM システム(例:192GB Mac)
4-bit (MXFP4): 256GB RAM(Unsloth 4-bit dynamic UD-Q4_K_XL はディスク上で約 214GB、256GB M3 Ultra で直接読み込み可能)
単一 24GB GPU + 256GB システム RAMで MoE オフローディングにより 25+ トークン/秒
8-bit: 約 512GB RAM/VRAM が必要

モデルのダウンロード

hf download unsloth/Qwen3.5-397B-A17B-GGUF \
    --local-dir unsloth/Qwen3.5-397B-A17B-GGUF \
    --include "*UD-Q4_K_XL"  # Dynamic 2 ビットの場合は "*UD-Q2_K_XL*"

Thinking Mode

export LLAMA_CACHE="unsloth/Qwen3.5-397B-A17B-GGUF"
./llama.cpp/llama-cli \
    -hf unsloth/Qwen3.5-397B-A17B-GGUF:UD-Q4_K_XL \
    --ctx-size 16384 \
    --temp 0.6 \
    --top-p 0.95 \
    --top-k 20 \
    --min-p 0.00

Non-thinking Mode

export LLAMA_CACHE="unsloth/Qwen3.5-397B-A17B-GGUF"
./llama.cpp/llama-server \
    -hf unsloth/Qwen3.5-397B-A17B-GGUF:UD-Q4_K_XL \
    --ctx-size 16384 \
    --temp 0.7 \
    --top-p 0.8 \
    --top-k 20 \
    --min-p 0.00 \
    --chat-template-kwargs '{"enable_thinking":false}'

会話モードでの実行

./llama.cpp/llama-cli \
    --model unsloth/Qwen3.5-397B-A17B-GGUF/UD-Q4_K_XL/Qwen3.5-397B-A17B-UD-Q4_K_XL-00001-of-00006.gguf \
    --mmproj unsloth/Qwen3.5-397B-A17B-GGUF/mmproj-F16.gguf \
    --ctx-size 16384 \
    --temp 0.6 \
    --top-p 0.95 \
    --top-k 20 \
    --min-p 0.00

調整項目:
--threads 32: CPU スレッド数
--ctx-size 16384: コンテキスト長
--n-gpu-layers 2: GPU オフローディングのレイヤー数

GPU メモリ不足の場合は調整してください。CPU のみの推論の場合は削除してください。


LM Studio ガイド

LM Studio は LLM を実行するための統一 UI インターフェースです。’💡Thinking’と’Non-thinking’のトグルがデフォルトで表示されない場合があるため、追加のステップが必要です。

ステップ 1: LM Studio のダウンロード

LM Studio をデバイス用にダウンロードし、Model Search で’unsloth/qwen3.5’を検索して希望の GGUF(量子化版)をダウンロードします。

ステップ 2: Thinking Toggle の設定

ダウンロード後、Terminal/PowerShell を開き lms --help を実行します。LM Studio が多くのコマンドと共に正常に表示されたら、以下を実行します:

lms get unsloth/qwen3.5-4b

これにより YAML ファイルが取得され、GGUF に’💡Thinking’と’Non-thinking’のトグルが表示されるようになります。4b を希望の量子化版に変更できます。

または、Unsloth の LM Studio ページから特定の YAML ファイルをダウンロードすることもできます。

ステップ 3: LM Studio の再起動

LM Studio を再起動し、ダウンロードしたモデル(特定の思考トグル付き)を読み込みます。これで Thinking トグルが有効になっているはずです。正しいパラメータを設定することを忘れないでください。


llama-server サービング & OpenAI 完了ライブラリ

llama-server でのデプロイ

./llama.cpp/llama-server \
    --model unsloth/Qwen3.5-35B-A3B-GGUF/Qwen3.5-35B-A3B-UD-Q4_K_XL.gguf \
    --mmproj unsloth/Qwen3.5-35B-A3B-GGUF/mmproj-F16.gguf \
    --alias "unsloth/Qwen3.5-35B-A3B" \
    --temp 0.6 \
    --top-p 0.95 \
    --ctx-size 16384 \
    --top-k 20 \
    --min-p 0.00 \
    --port 8001

Python での利用(OpenAI ライブラリ)

from openai import OpenAI
import json

openai_client = OpenAI(
    base_url = "http://127.0.0.1:8001/v1",
    api_key = "sk-no-key-required",
)

completion = openai_client.chat.completions.create(
    model = "unsloth/Qwen3.5-397B-A17B",
    messages = [{"role": "user", "content": "Create a Snake game."}],
)

print(completion.choices[0].message.content)


思考/推論のオン・オフ切り替えの具体例

Qwen3.5-9B で思考を有効化する場合(デフォルトは無効):

./llama.cpp/llama-server \
    --model unsloth/Qwen3.5-9B-GGUF/Qwen3.5-9B-BF16.gguf \
    --alias "unsloth/Qwen3.5-9B-GGUF" \
    --temp 0.6 \
    --top-p 0.95 \
    --ctx-size 16384 \
    --top-k 20 \
    --min-p 0.00 \
    --port 8001 \
    --chat-template-kwargs '{"enable_thinking":true}'

Python での利用:

from openai import OpenAI
import json

openai_client = OpenAI(
    base_url = "http://127.0.0.1:8001/v1",
    api_key = "sk-no-key-required",
)

completion = openai_client.chat.completions.create(
    model = "unsloth/Qwen3.5-9B-GGUF",
    messages = [{"role": "user", "content": "What is 2+2?"}],
)

print(completion.choices[0].message.content)
print(completion.choices[0].message.reasoning_content)


OpenAI Codex & Claude Code での利用

ローカルでのエージェントコーディングワークロードを実行するには、ガイドに従ってください。モデル名を希望の’Qwen3.5’バリアントに変更し、正しい Qwen3.5 パラメータと使用方法の指示に従ってください。


ツール呼び出し(Tool Calling)

ツール呼び出しのセットアップ

import json, subprocess, random
from typing import Any

def add_number(a: float | str, b: float | str) -> float:
    return float(a) + float(b)

def multiply_number(a: float | str, b: float | str) -> float:
    return float(a) * float(b)

def substract_number(a: float | str, b: float | str) -> float:
    return float(a) - float(b)

def write_a_story() -> str:
    return random.choice([
        "A long time ago in a galaxy far far away...",
        "There were 2 friends who loved sloths and code...",
        "The world was ending because every sloth evolved to have superhuman intelligence...",
        "Unbeknownst to one friend, the other accidentally coded a program to evolve sloths...",
    ])

def terminal(command: str) -> str:
    if "rm" in command or "sudo" in command or "dd" in command or "chmod" in command:
        msg = "Cannot execute 'rm, sudo, dd, chmod' commands since they are dangerous"
        print(msg); return msg
    print(f"Executing terminal command `{command}`")
    try:
        return str(subprocess.run(command, capture_output=True, text=True, shell=True, check=True).stdout)
    except subprocess.CalledProcessError as e:
        return f"Command failed: {e.stderr}"

def python(code: str) -> str:
    data = {}
    exec(code, data)
    del data["__builtins__"]
    return str(data)

MAP_FN = {
    "add_number": add_number,
    "multiply_number": multiply_number,
    "substract_number": substract_number,
    "write_a_story": write_a_story,
    "terminal": terminal,
    "python": python,
}

tools = [
    {
        "type": "function",
        "function": {
            "name": "add_number",
            "description": "Add two numbers.",
            "parameters": {
                "type": "object",
                "properties": {
                    "a": {"type": "string", "description": "The first number."},
                    "b": {"type": "string", "description": "The second number."},
                },
                "required": ["a", "b"],
            },
        },
    },
    {
        "type": "function",
        "function": {
            "name": "multiply_number",
            "description": "Multiply two numbers.",
            "parameters": {
                "type": "object",
                "properties": {
                    "a": {"type": "string", "description": "The first number."},
                    "b": {"type": "string", "description": "The second number."},
                },
                "required": ["a", "b"],
            },
        },
    },
    {
        "type": "function",
        "function": {
            "name": "substract_number",
            "description": "Substract two numbers.",
            "parameters": {
                "type": "object",
                "properties": {
                    "a": {"type": "string", "description": "The first number."},
                    "b": {"type": "string", "description": "The second number."},
                },
                "required": ["a", "b"],
            },
        },
    },
    {
        "type": "function",
        "function": {
            "name": "write_a_story",
            "description": "Writes a random story.",
            "parameters": {
                "type": "object",
                "properties": {},
                "required": [],
            },
        },
    },
    {
        "type": "function",
        "function": {
            "name": "terminal",
            "description": "Perform operations from the terminal.",
            "parameters": {
                "type": "object",
                "properties": {
                    "command": {"type": "string", "description": "The command you wish to launch, e.g `ls`, `rm`, ..."},
                },
                "required": ["command"],
            },
        },
    },
    {
        "type": "function",
        "function": {
            "name": "python",
            "description": "Call a Python interpreter with some Python code that will be ran.",
            "parameters": {
                "type": "object",
                "properties": {
                    "code": {"type": "string", "description": "The Python code to run"},
                },
                "required": ["code"],
            },
        },
    },
]

自動ツール呼び出し関数

from openai import OpenAI

def unsloth_inference(
    messages,
    temperature=0.6,
    top_p=0.95,
    top_k=20,
    min_p=0.00,
    repetition_penalty=1.0,
):
    messages = messages.copy()
    openai_client = OpenAI(
        base_url="http://127.0.0.1:8001/v1",
        api_key="sk-no-key-required",
    )
    model_name = next(iter(openai_client.models.list())).id
    print(f"Using model = {model_name}")
    has_tool_calls = True
    original_messages_len = len(messages)

    while has_tool_calls:
        print(f"Current messages = {messages}")
        response = openai_client.chat.completions.create(
            model=model_name,
            messages=messages,
            temperature=temperature,
            top_p=top_p,
            tools=tools if tools else None,
            tool_choice="auto" if tools else None,
            extra_body={"top_k": top_k, "min_p": min_p, "repetition_penalty": repetition_penalty}
        )
        tool_calls = response.choices[0].message.tool_calls or []
        content = response.choices[0].message.content or ""
        tool_calls_dict = [tc.to_dict() for tc in tool_calls] if tool_calls else tool_calls
        messages.append({"role": "assistant", "tool_calls": tool_calls_dict, "content": content})

        for tool_call in tool_calls:
            fx, args, _id = tool_call.function.name, tool_call.function.arguments, tool_call.id
            out = MAP_FN[fx](**json.loads(args))
            messages.append({"role": "tool", "tool_call_id": _id, "name": fx, "content": str(out)})
        else:
            has_tool_calls = False

    return messages


ベンチマーク

Unsloth GGUF ベンチマーク

Qwen3.5-35B Unsloth Dynamic 量子化がほぼ全てのビットで SOTA に更新されました。150 以上の KL 発散ベンチマークを行い、合計 9TB の GGUF を作成しました。すべての研究アーティファクトをアップロードしました。また、ツール呼び出しチャットテンプレートバグを修正しました(全ての量子化アップローダーに影響)。

更新内容

  • 全ての GGUF が改良された量子化アルゴリズムで更新
  • 新しい imatrix データを使用(チャット、コーディング、ロングコンテキスト、ツール呼び出しの使用例で改善)
  • Qwen3.5-35B-A3B GGUF が新しい修正で更新(112B、27B は変換中、更新され次第再ダウンロード)
  • 99.9% KL 発散が UD-Q4_K_XL、IQ3_XXS などで Pareto Frontier で SOTA を示す
  • MXFP4 を全ての GGUF 量子化(Q2_K_XL、Q3_K_XL、Q4_K_XL)から廃止(純粋な MXFP4_MOE を除く)

Qwen3.5-397B-A17B ベンチマーク

Benjamin Marie(第三者)が Unsloth GGUF を使用して、750 プロンプトの混合スイート(LiveCodeBench v6、MMLU Pro、GPQA、Math500)で Qwen3.5-397B-A17B をベンチマークし、全体の精度と相対誤差増加(量子化モデルがオリジナルと比較してどれだけ頻繁に誤りをするか)を報告しました。

主要な結果(精度;オリジナルとの変化;相対誤差増加)

モデル 精度 変化 相対誤差増加
Original weights 81.3%
UD-Q4_K_XL 80.5% -0.8 ポイント +4.3%
UD-Q3_K_XL 80.7% -0.6 ポイント +3.5%

UD-Q4_K_XLUD-Q3_K_XLはオリジナルに非常に近く、このスイートで1 ポイント未満の精度低下を維持しています。Ben は、テストされたタスクで実質的な損失なくメモリフットプリントを大幅に削減約 500 GB 未満)できることを示唆しています。

選択のアドバイス

  • Q3が Q4 よりもわずかに高いスコア:この規模での通常のラン・トゥ・ラン分散として完全に可能
  • Q3 と Q4 は実質的に同様の品質として扱う
  • Q3を選択:最小のフットプリント/最良のメモリ節約を希望する場合
  • Q4を選択:保守的なオプションで同様の結果を希望する場合

全ての量子化は動的メソドロジーを利用しています。UD-IQ2_Mも動的と同じメソドロジーを使用していますが、UD-Q2_K_XL とは変換プロセスが異なります。K-XL は通常 UD-IQ2_M よりも高速ですが、サイズは大きいため、UD-IQ2_MUD-Q2_K_XL よりも良いパフォーマンスを発揮する可能性があります。


公式 Qwen ベンチマーク

詳細なベンチマーク結果は以下の画像で確認できます:

  • Qwen3.5-35B-A3B, 27B, 122B-A10B: 中間サイズモデルのスコア
  • Qwen3.5-4B, 9B: 小規模モデルのスコア
  • Qwen3.5-397B-A17B: 大規模モデルのスコア

詳細なベンチマークについては、 Unsloth GGUF ベンチマークページを参照してください。


重要な注意点

  1. Ollama 互換性: 現在、Ollama では個別の mmproj ビジョンファイルのため Qwen3.5 GGUF は動作しません。llama.cpp 互換のバックエンドを使用してください。

  2. presence_penalty: デフォルトはオフですが、反復を減らすために 0.0〜2.0 の範囲で使用できます。ただし、高い値を使用するとパフォーマンスがわずかに低下する可能性があります。

  3. コンテキスト長: ギブシャージ(意味不明な出力)が表示される場合、コンテキスト長が短すぎる可能性があります。

  4. キャッシュタイプ: --cache-type-k bf16 --cache-type-v bf16を使用すると問題が解決する場合があります。

  5. Small モデルの思考モード: Qwen3.5 0.8B、2B、4B、9B はデフォルトで推論が無効化されています。有効化するには明示的に設定してください。


リソースリンク

コメント

タイトルとURLをコピーしました