「clef」構造化出力に特化した27Bの意思決定モデル:必要VRAM 80GB〜

2026年10月3日

「clef」構造化出力に特化した27Bの意思決定モデル:必要VRAM 80GB〜

基本情報

項目 内容
リポジトリ Cloudflare/clef
まとめページ Qwen3.8 のまとめ(記事9本)
公開元のまとめ Alibaba(Qwen) のモデルとライセンスのまとめ
公開日 2026-10-01
ライセンス apache-2.0
配布形式 safetensors
出典の種類 公開元の一次情報(Cloudflare公式ブログとHF公式リポジトリが出典)

情報を集めた時点で、当サイトのコードが確定させた値です。日付はJSTで表示しています。

当サイトで確かめたこと

  • 全ての意思決定モデルに出している当サイトの判定問題20問を、配布元のコードをクラウドの GPU(NVIDIA A100 80GB PCIe・ネットワーク遮断)で動かして解かせ、日本語で20問・英語で19問正解しました。

詳しい値と条件は、下の「当サイトでの実測」の節にあります。

概要

Cloudflare が、テキスト・JSON・画像・ビデオを入力として受け取り、確率付きの構造化された出力を一括で返すオープンウェイトの決定モデル Clef および高速版の Clef-flash を Hugging Face で公開しました。Qwen3.8-27B を土台にしてポストトレーニングを行い、決定モデル向けに最適化されています。ライセンスは Apache 2.0 で提供されており、ローカル環境で動かして試すことができます。

スペック

  • パラメータ数: 27B
  • アーキテクチャ: Qwen3.8-27B をベースにした Dense モデル(ビジョンエンコーダー搭載、および小規模な transformer ヘッドによる共同スキーマヘッド)
  • コンテキスト長: 64,000 トークン

性能

モデルカードに掲載されている Decision Index(バージョン 0.2.1)および Workflow evals の評価テーブルから、主要なモデルとの比較結果を以下に示します(比較対象は Clef、Clef-flash、Jev、DiffusionGemma Jev、Kev 9B、Laya です)。

→ 横にスクロールできます

Benchmark Clef Clef-flash Jev DiffusionGemma Jev Kev 9B
BFCL (case exact accuracy) 98.5 98.8 95.8 96.5 94.5
ToolRet (nDCG@10) 69.2 66.4 65.3 61.2 64.3
API-Bank (accuracy) 91.9 93.1 88.2 83.7 56.3
BANKING77 (macro-F1) 94.2 90.9 79.7 74.3 84.8
MMLU (accuracy) 90.3 91.8 91.7 79.3 75.3
GSM8K (accuracy) 80.8 67.3 79.9 50.3 48.7
Median latency (ms) 209.3 38.8 524.1 84.4 51.4

また、4つのビジネスワークフローを評価した Workflow evals の結果は以下のとおりです。

→ 横にスクロールできます

Workflow Metric Clef Clef-flash Jev
Invoice processing Exact actions 64.7 57.1 61.8
Invoice processing Primary action 86.2 73.3 83.1
Customer service Exact actions 76.3 77.0 76.0
Security incidents Exact actions 62.9 61.7 61.7
Agent trace observability Primary action 68.5 69.8 71.6

公開元の測定によれば、Clef モデルはツール利用・関数選択の精度を測る BFCL や ToolRet、API-Bank などの指標で Jev などの他モデルを上回る精度を示しており、特にレイテンシ(中央値レイテンシなど)の面で優位性を持っています。一方で、ANLI や BRIGHT、MMLU-Pro、BBH などの一部の推論・常識推論系の指標では Jev が高いスコアを出しており、万能ではなくタスクによって優劣が分かれます。また、Clef-flash は精度を維持しつつレイテンシを大幅に抑えることに成功しています。

得意なこと・想定用途

Clef は、テキスト、JSON、画像、ビデオを入力として受け取り、自由記述のテキスト生成や出力パースを行わずに、指定された質問やスキーマに対する確率付きの構造化された回答を 1 回のフォワードパスで出力する決定モデルです。ウェブドメインの分類、請求書処理、カスタマーサポートのルーティング、セキュリティインシデントのトリアージ、エージェントの決定処理といった用途に向いています。また、ビジョンエンコーダーを搭載しているため、画像や動画に含まれる視覚的なコンテンツの分類も行うことができます。元となった Qwen3.8-27B はコーディング、専門業務、研究、長文のエージェントタスク全般に強みを持っています。

類似モデルとの違い

Qwen3.8-27B をベースにしたモデルとしては、量子化によって軽量化を図った OrcaSAQ-2-27B や、日常文章の執筆に特化した Hemmingway-1 などがあります。これらが通常のテキスト生成や文章作成を主な目的としているのに対し、Clef は分類や意思決定に特化しており、余分なテキスト生成を行わずに高速かつ一貫した確率付きの型付き出力を返す点が大きく異なります。

動作環境

動作環境の目安(Local Model Watch 算出) — パラメータ数 27.4B

手持ちのVRAM 選べる量子化 ファイルサイズ 必要メモリの目安
A100 / H100 80GB クラス BF16 51.0GB 61.1GB

推論エンジンの対応状況(各プロジェクトのソースにあるモデル登録表とアーキテクチャ名を当サイトが機械的に照合。2026-10-03 時点): llama.cpp: 登録あり、vLLM: 登録あり、MLX (mlx-lm): 登録あり。

必要メモリは配布ファイルの実サイズに実行時のオーバーヘッド(KVキャッシュ等)を20%見込んだ概算で、文脈長・バッチサイズ・推論エンジンによって増減します。公開元の公称値ではなく、当サイトがファイルサイズから機械的に算出した値です。 他のモデルとの比較はVRAM別の早見表を参照してください。 量子化の名前の読み方は用語集にあります。

手元で動かせるか

公開元の配布形式は safetensors です。

ライセンス apache-2.0(商用利用可): 商用利用を含めて自由に利用・改変・再配布できます。再配布時にライセンス文と変更点の告知が必要で、特許の許諾条項があります。

配布形式とライセンス表記から当サイトのコードが組み立てた判定です。ライセンスの要約は法的助言ではないため、実際の利用にあたっては公開元の原文を確認してください。

当サイトでの実測

当サイトのサーバー(GPUなし)で、このモデルのファイルを実際に読み込み・動かして確かめた値です。モデルカードの記載ではなく、当サイトが測った結果です。測り方と全モデルの一覧は観測データにまとめています。

意思決定モデルとしての評価(当サイトの判定問題)

全ての意思決定モデルに出しているのと同じ、当サイトが書いた11の状況・20問の判定問題(はい/いいえ・名前付きの選択肢・順序のある段階。日本語と英語)を解かせました。このモデルの判定の部分は llama.cpp で動かせないため、配布元のコード(joint_schema_model.py とその SystemOne 互換の関数)を、クラウドの GPU を借りて、ネットワークを遮断したコンテナの中で動かしました。どの問いも判定の規則を文に書いて答えが1つに決まるようにし、正誤はコードが判定しています(はい/いいえは「はい」の確率が0.5以上なら「はい」、選択肢と段階は確率が最も高いもの)。ベンチマークの問題ではなく、モデルの総合的な性能の順位でもありません。

条件は Modal・NVIDIA A100 80GB PCIe(ピーク時の VRAM 51.4GB)・BF16・transformers 5.18.0・torch 2.14.1+cu130・配布元の版 2f3de3dd85 です。1回の判定の時間は、1つの状況(1〜3問)を配布元の関数に渡してから返るまでをその GPU で測った値で、手元の GPU の速さの目安ではなく、当サイトの CPU で測った時間とも比べられません。

→ 横にスクロールできます

モデル 方式 量子化 正解(日本語) 正解(英語) 正解に付けた確率の平均(日本語 / 英語) 1回の判定の時間の中央値(日本語 / 英語) ピーク時のメモリ
clef joint_schema_model.py BF16 20/20 19/20 0.98 / 0.94 190ms / 189ms (GPU: NVIDIA A100 80GB PCIe) VRAM 51.4GB
Kev-4B(参考) kev Q4_K_M 18/20 19/20 0.87 / 0.87 7,616ms / 7,409ms 6.3GB
clef-flash joint_schema_model.py BF16 18/20 18/20 0.88 / 0.88 170ms / 167ms (GPU: NVIDIA L4) VRAM 17.9GB
lev(参考) lev Q4_K_M 16/20 16/20 0.76 / 0.80 14,061ms / 13,186ms 6.0GB
Laya(参考) laya Q8_0 10/20 15/20 0.47 / 0.68 968ms / 678ms 0.9GB
Julia-1(参考) laya Q8_0 13/20 10/20 0.60 / 0.45 136ms / 107ms 0.5GB

日本語では英語より1問多く正解しました(20問中 日本語20問・英語19問)。

ほかの行は同じ条件で測ったほかの意思決定モデルです(「参考」は比較のために測ったモデル)。方式はモデルごとに違い、量子化もそれぞれの配布のものです。

時間に(GPU)とある行はクラウドの GPU で、それ以外は当サイトの CPU で測ったため、その間で時間は比べられません(正解の数は比べられます)。

問いごとの答え

→ 横にスクロールできます

状況 問い 正解 日本語での答え 英語での答え
問い合わせの振り分け このメッセージはどのチームが担当すべきですか。 billing ✓ billing(正解の確率 0.99) ✓ billing(正解の確率 0.99)
問い合わせの振り分け お客様はお金を返すよう求めていますか。 はい ✓ はい(正解の確率 0.99) ✓ はい(正解の確率 0.99)
問い合わせの振り分け このメッセージは、サービスが止まっていることを伝えていますか。 いいえ ✓ いいえ(正解の確率 0.99) ✓ いいえ(正解の確率 0.99)
返品の可否(期限内) 届いた日から今日までが30日以内ですか。 はい ✓ はい(正解の確率 0.99) ✓ はい(正解の確率 0.98)
返品の可否(期限内) この商品は、規定どおりに返品できますか。 はい ✓ はい(正解の確率 0.99) ✓ はい(正解の確率 0.94)
返品の可否(期限切れ) 届いた日から今日までが30日以内ですか。 いいえ ✓ いいえ(正解の確率 0.99) ✓ いいえ(正解の確率 1.00)
返品の可否(期限切れ) この商品は、規定どおりに返品できますか。 いいえ ✓ いいえ(正解の確率 0.99) ✓ いいえ(正解の確率 0.99)
請求書の処理(取引先) この請求書をどう扱いますか。 reject ✓ reject(正解の確率 0.99) ✓ reject(正解の確率 0.99)
請求書の処理(取引先) 請求額は1,000米ドルを超えていますか。 いいえ ✓ いいえ(正解の確率 0.99) ✓ いいえ(正解の確率 0.99)
請求書の処理(金額) この請求書をどう扱いますか。 manager ✓ manager(正解の確率 0.98) ✓ manager(正解の確率 0.99)
請求書の処理(金額) 請求額は1,000米ドルを超えていますか。 はい ✓ はい(正解の確率 0.99) ✓ はい(正解の確率 0.99)
障害の深刻度 この障害の影響はどの程度ですか。 3: すべての利用者に影響 ✓ 3: すべての利用者に影響(正解の確率 0.94) ✓ 3: すべての利用者に影響(正解の確率 0.95)
障害の深刻度 サービスは止まっていますか。 はい ✓ はい(正解の確率 0.98) ✓ はい(正解の確率 0.99)
配送の遅れの段階 この配送の遅れは、基準のどの段階ですか。 2: 中程度の遅れ ✓ 2: 中程度の遅れ(正解の確率 0.90) ✓ 2: 中程度の遅れ(正解の確率 0.93)
レビューの評価(否定の言い回し) 投稿者の全体としての評価はどれですか。 positive ✓ positive(正解の確率 0.98) ✓ positive(正解の確率 0.99)
レビューの評価(否定の言い回し) 投稿者は、また買うと言っていますか。 はい ✓ はい(正解の確率 0.99) ✓ はい(正解の確率 0.99)
不審なメール(指示の書き込み) このメールはどれに分類すべきですか。 phishing ✓ phishing(正解の確率 0.98) ✓ phishing(正解の確率 0.99)
不審なメール(指示の書き込み) このメールは、読み手にパスワードの入力を求めていますか。 はい ✓ はい(正解の確率 0.99) ✓ はい(正解の確率 0.99)
予定の重なり 会議の依頼は、カレンダーの予定と時間が重なりますか。 はい ✓ はい(正解の確率 0.96) ✗ いいえ(正解の確率 0.21)
問い合わせの意図(6択) 利用者がしたいことはどれですか。 change_address ✓ change_address(正解の確率 0.99) ✓ change_address(正解の確率 0.99)

状況と問いの全文と、正解の根拠は観測データに載せています。

環境構築と実行の手順

ダウンロード(GPU の無い別のコンテナ。配布元のコードは実行しません): Python 3.12・pip install huggingface_hub で、Cloudflare/clef の版 2f3de3dd85f379784083b0814d997ab627200f0c の次のファイルを落としました(pickle の重みは落としません)。

chat_template.jinja
config.json
generation_config.json
joint_head.safetensors
joint_head_config.json
joint_schema_model.py
model-00001-of-00012.safetensors
model-00002-of-00012.safetensors
model-00003-of-00012.safetensors
model-00004-of-00012.safetensors
model-00005-of-00012.safetensors
model-00006-of-00012.safetensors
model-00007-of-00012.safetensors
model-00008-of-00012.safetensors
model-00009-of-00012.safetensors
model-00010-of-00012.safetensors
model-00011-of-00012.safetensors
model-00012-of-00012.safetensors
model.safetensors.index.json
processor_config.json
tokenizer.json
tokenizer_config.json

実行(GPU のコンテナ。ネットワーク遮断・モデルのファイルは読み取り専用): Python 3.12・pip install torch transformers accelerate safetensors pillow torchvision。コンテナで実行したコードの全文(decision_remote.py)です。問いは上と同じ要求の本文を渡しています。

"""
Modal のコンテナの中で動く、意思決定モデルの配布元のコードによる評価(2026-10-02、ユーザーの判断「Clef を Modal で動かす」)。
lmw/lab/gpu_modal.py の decision_run から呼ばれる。**標準ライブラリだけを先頭で読み**、torch・transformers は関数の中で読む。

llama.cpp に判定の方式が無い意思決定モデル(Clef は判定ヘッド joint_head.safetensors を配布元の joint_schema_model.py で
読む)を、配布元の SystemOne 互換の関数(systemone)で動かす。このコンテナは**ネットワーク遮断・Modal の機能なし・
Volume は読み取り専用**で、配布元のコードはここでだけ import する(ダウンロードは remote_code_remote.download が
GPU の無い別のコンテナで行い、そちらでは import しない)。

問題(要求の本文)はホストが組んで渡す(lmw/lab/decision.py の request_body。llama.cpp で測るモデルと同じもの)。
正誤はホストのコード(decision.score)が判定する。ここでは応答をそのまま返し、1回の判定にかかった時間を測るだけ。
"""
import os
import platform
import sys
import time
from datetime import datetime, timezone

MOUNT = "/models"
PYTHON_VERSION = "3.12"
# 実行用のコンテナに入れるパッケージ(記事の手順にも同じ値を載せる)。Clef のカードの記載は torch 2.11・
# transformers 5.10.2 で、画像を読む処理(AutoProcessor)のために pillow・torchvision を入れる
RUN_PACKAGES = ("torch", "transformers", "accelerate", "safetensors", "pillow", "torchvision")

def installed_packages() -> list[str]:
    from importlib import metadata
    seen = {}
    for dist in metadata.distributions():
        name = dist.metadata["Name"]
        if name and name.lower() not in seen:
            seen[name.lower()] = f"{name}=={dist.version}"
    return sorted(seen.values(), key=str.lower)

def _keep(answer: dict) -> dict:
    return {k: answer[k] for k in ("type", "choice", "noul", "score", "probabilities", "confidence") if k in answer}

def _log(t0: float, message: str) -> None:
    print(f"[decision {time.time() - t0:6.0f}s] {message}", flush=True)

def run(job: dict) -> dict:
    """
    job: {"dir", "module", "loader", "answer", "warmup": 要求, "requests": {lang: [[状況の id, 要求], ...]}}。
    戻り値は記録の一部({"results", "gpu", "vram_*", "transformers", "torch", "packages", ...})。
    """
    import torch
    import transformers
    os.environ["HF_HUB_OFFLINE"] = "1"
    os.environ["TRANSFORMERS_OFFLINE"] = "1"
    t0 = time.time()
    path = os.path.join(MOUNT, job["dir"])
    gpu = torch.cuda.get_device_name(0)
    _log(t0, f"GPU: {gpu}・transformers {transformers.__version__}・torch {torch.__version__}")
    # 配布元のコード。このコンテナ(ネットワーク遮断)でだけ読む
    sys.path.insert(0, path)
    module = __import__(job["module"])
    model, processor = getattr(module, job["loader"])(path, device="cuda")
    answer = getattr(module, job["answer"])
    torch.cuda.synchronize()
    load_sec = round(time.time() - t0)
    vram_loaded = torch.cuda.memory_allocated()
    _log(t0, f"読み込み {load_sec}秒・VRAM {vram_loaded / 1024 ** 3:.1f}GB")
    torch.cuda.reset_peak_memory_stats()
    answer(model, processor, job["warmup"])  # 1回目は時間を測らない
    results: dict = {}
    for lang, items in job["requests"].items():
        out = {}
        for task_id, body in items:
            torch.cuda.synchronize()
            started = time.perf_counter()
            resp = answer(model, processor, body)
            torch.cuda.synchronize()
            out[task_id] = {"answers": {qid: _keep(a) for qid, a in (resp.get("answers") or {}).items()},
                            "ms": round((time.perf_counter() - started) * 1000, 1),
                            "input_tokens": (resp.get("usage") or {}).get("input_tokens")}
        results[lang] = out
    _log(t0, "全ての状況を解き終えました")
    return {"results": results, "gpu": gpu, "vram_total": int(torch.cuda.get_device_properties(0).total_memory),
            "vram_loaded": int(vram_loaded), "vram_peak": int(torch.cuda.max_memory_allocated()),
            "load_sec": load_sec, "dtype": "bfloat16", "transformers": str(transformers.__version__),
            "torch": str(torch.__version__), "python": platform.python_version(), "packages": installed_packages(),
            "measured_at": datetime.now(timezone.utc).isoformat()}

実行のコンテナに入っていたパッケージ:

accelerate==1.15.0
aiohappyeyeballs==2.6.1
aiohttp==3.12.7
aiosignal==1.3.2
annotated-doc==0.0.5
anyio==4.15.1
attrs==25.3.0
cbor2==5.7.0
certifi==2026.7.22
click==8.5.0
cuda-bindings==13.4.3
cuda-pathfinder==1.8.3
cuda-toolkit==13.0.3.0
filelock==4.0.9
frozenlist==1.6.0
fsspec==2026.9.0
grpclib==0.4.8
h11==0.16.0
h2==4.2.0
hf-xet==1.6.0
hpack==4.1.0
httpcore==1.0.9
httpx==0.28.1
huggingface_hub==1.33.0
hyperframe==6.1.0
idna==3.20
Jinja2==3.1.6
markdown-it-py==4.2.0
MarkupSafe==3.0.3
mdurl==0.1.2
mpmath==1.3.0
multidict==6.4.4
networkx==3.7
numpy==2.5.3
nvidia-cublas==13.1.1.3
nvidia-cuda-cupti==13.0.85
nvidia-cuda-nvrtc==13.0.88
nvidia-cuda-runtime==13.0.96
nvidia-cudnn-cu13==9.24.0.43
nvidia-cufft==12.0.0.61
nvidia-cufile==1.15.1.6
nvidia-curand==10.4.0.35
nvidia-cusolver==12.0.4.66
nvidia-cusparse==12.6.3.3
nvidia-cusparselt-cu13==0.8.1
nvidia-nccl-cu13==2.30.7
nvidia-nvjitlink==13.4.92
nvidia-nvshmem-cu13==3.4.5
nvidia-nvtx==13.0.85
packaging==26.3
pillow==12.3.0
pip==25.1.1
propcache==0.3.1
protobuf==6.31.1
psutil==7.2.2
Pygments==2.21.0
PyYAML==6.0.3
regex==2026.9.29
rich==15.0.0
safetensors==0.8.0
setuptools==84.0.0
shellingham==1.5.4
sympy==1.14.0
tokenizers==0.23.2
torch==2.14.1
torchvision==0.29.1
tqdm==4.70.1
transformers==5.18.0
triton==3.8.0
typer==0.27.2
typing_extensions==4.16.0
uv==0.7.19
wheel==0.45.1
yarl==1.20.0

入手方法

モデルの重みは Hugging Face のリポジトリから入手できます。ライセンスは Apache 2.0 で提供されており、商用利用やローカル環境での実行が可能です。

huggingface-cli download Cloudflare/clef

リポジトリに含まれる joint_schema_model.py を使用して読み込むことができ、transformers および torch に対応しています。また、Cloudflare Workers AI を通じてホスト版を利用することも可能です。

関連記事

次に読むなら

出典

更新履歴

  • 2026-10-03: 当サイトでの実測(意思決定モデルとしての判定の評価)を追加しました。