1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

LLM-jp-4 33B Dense/32B-A3B MoEとQwen3.8-27BをBF16・vLLMで比較した

1
Posted at

注意: 本記事の約9割は、gpt-5.6-solによって執筆されています。

結果概要

結局日本語LLMって何がいいの?という疑問が生じたため、次の3モデルを同一GPUクラス上で比較した。

  • LLM-jp-4 33B Dense Thinking
  • LLM-jp-4 32B-A3B MoE Thinking
  • Qwen3.8-27B

@h-nabata氏によるLLM-jp-4 33BとQwen3.8-27Bの比較のChallenge問題の再実験と、うちの研究室的に重要な日本語の医学・臨床問題と、個人的な趣味による歴史知識論述を加えた。
各問題はThinking LowとMediumの両方で実行している。

まず、LowとMediumを合わせた結果を示す。スコアは各track内で0〜100に正規化した値である。

モデル 臨床 医学的異常検知 歴史論述 Challenge
LLM-jp-4 33B Dense 58.2 59.7 37.5 80.3
LLM-jp-4 32B-A3B 55.7 51.4 38.3 81.1
Qwen3.8-27B 73.1 75.0 43.3 98.1

今回の範囲では、品質はQwenが全track合算で最も高かった。一方、A3BはDenseに近い品質を維持しながら、出力速度の中央値が158.5 token/sに達した。Denseは20.9 token/s、Qwenは71.2 token/sだった。

ただし、4つのtrackは問題数も採点法も異なる上、Thinkingモデルであるが、複数回の実験をおこなっているわけではないので参考程度に。

目的

出発点は、@h-nabata氏によるLLM-jp-4 33BとQwen3.8-27Bの比較だった。同記事は、量子化モデルをllama.cppで比較している。

この設計は非常に参考になる一方、こちらの環境では中規模モデルをBF16のまま単一GPUへ載せられる。そこで、次の点を変えて評価することにした。

  • GGUF量子化ではなくBF16で実行する
  • バックエンドをvLLMへ統一する
  • 比較コンテキスト上限を65,536 tokenへ広げる
  • QwenのMTPを有効にする
  • temperature=0の制御実験ではなく、通常利用に近いモデル別設定を使う
  • 汎用問題に加え、研究室で関心のある臨床長文と歴史論述を測る
  • 品質だけでなく、問題種別ごとのwall time、TTFT、出力token/sも記録する

タスク

今回使用した問題、モデル出力、採点結果はGitHubのinsidebenchmarkで公開している。

引用したタスク:h-nabata Challenge

challenge_v1.1.0の80問を使用した。問題文・metadataはCC BY 4.0、元データのSHA-256は次のとおりである。

0c18e8ae51d88a441ecdff33df4e071fee3bdb817481ec1694365239d3da9546

10カテゴリ各8問で構成される。

カテゴリ 問題数
高度日本語読解 8
分析的推論 8
数学・統計 8
コーディング 8
物理・工学 8
化学・材料 8
生命科学・情報科学 8
人文・社会・経済 8
Hallucination耐性 8
指示追従 8

採点はnumeric 35問、choice 21問、JSON完全一致16問、Python unit test 8問である。元プロジェクトのMITライセンスのgraderと互換になるよう採点処理を実装した。

新たに用意したもの

臨床長文

J-ClinicalBenchの、要約用に加工されたデータではなく、raw Progress Note(PN)と対応するraw Discharge Summary(DS)を使用した。J-ClinicalBenchの概要と原論文はACL Anthologyから確認できる。

5入院エピソードを選び、次のタスクを作成した。

  1. 構造化抽出:10問
  2. PN–DS根拠監査:10問
  3. 医学的異常検知:12問

構造化抽出では、指定された単一PNから以下を統一schemaで抽出する。

  • 病名と確実性
  • 薬剤名、投与量、単位、頻度、経路、開始・中止などのaction
  • 体温、脈拍、血圧、呼吸数、SpO2、酸素投与
  • 処置・手術名と実施状況
  • 根拠となる文書・行番号

主スコアは、対象文書ID、病名F1、薬剤F1、バイタル精度、処置F1の平均である。文書にない値を医学知識で補うのではなく、nullとして扱わせた。

例えばSTR-005では、次のPNを入力する。実際の問題では文書全体を渡しているが、ここでは採点対象の箇所だけを抜粋する。

L4:  O 体温38.1℃。脈拍128/分、整。血圧124/86mmHg。呼吸数18/分。
L10: ...総胆管結石性胆管炎が疑われる。早急にドレナージ治療をすることが望ましい。
L11: 本日入院後にERCPを行う。ABPC/SBTも開始する。

問題は「指定文書PN p1から、明示された病名、薬剤・輸液、バイタルサイン、処置を統一schemaで抽出してください」とした。この例の正解は次のようになる。

{
  "document_id": "PN p1",
  "diagnoses": [
    {"name": "総胆管結石性胆管炎", "certainty": "suspected"}
  ],
  "medications": [
    {"name": "ABPC/SBT", "dose_value": null, "dose_unit": null,
     "frequency": null, "route": null, "action": "start"}
  ],
  "vital_signs": {
    "temperature_c": 38.1,
    "heart_rate_per_min": 128,
    "blood_pressure_systolic_mmhg": 124,
    "blood_pressure_diastolic_mmhg": 86,
    "respiratory_rate_per_min": 18,
    "spo2_percent": null,
    "oxygen_support": null
  },
  "procedures": [
    {"name": "ERCP", "status": "planned"}
  ]
}

PN–DS監査では、DS中の主張が複数のPNによって支持されるかを、次の5ラベルから選ばせた。各ラベル2問、計10問である。

  • SUPPORTED
  • PARTIALLY_SUPPORTED
  • CONTRADICTED
  • NOT_DOCUMENTED
  • TEMPORALLY_MISLEADING

このタスクは医学知識よりも、長文中の根拠照合と時間関係を測る。

例えばAUD-001の問題文は次の通りである。

DSの「入院4日目にはCa 9.6mg/dLへ改善し退院可能と判断」という記載はPNに支持されますか。

対応するPNにはCa9.6点滴終了明日退院と連続して記録されているため、正解はSUPPORTEDとなる。モデルには結論だけでなく、p4:L15からp4:L17までの根拠行も出力させた。

一方、異常検知は医学知識を要求する。raw PNの一部を一箇所だけ合成的に変更し、モデルには変更後のPNだけを提示した。元のDSや置換前文字列は見せていない。

  • 抗菌薬が必要な箇所を抗ウイルス薬へ変更する
  • 疾患と治療クラスを不整合にする
  • 外傷部位と損傷臓器を入れ替える
  • 診断と検査所見を不整合にする
  • 投与量・頻度・経路を不自然にする
  • 有害事象後の対応を不整合にする

例えばANOM-INF-001では、細菌性尿路感染症のPNにある投薬部分だけを次のように変更した。モデルには置換前の薬剤名を見せていない。

PN p1:L7  尿沈渣に白血球100以上/HPF
PN p1:L12 尿路感染症が疑われる
PN p1:L14 尿培養と血液培養採取後にアシクロビルを開始する
PN p3:L9  尿培養からは、大腸菌が検出された

期待する回答は、PN p1:L14を異常行、pathogen_treatment_mismatchを異常カテゴリとして検出し、「大腸菌を対象とする抗菌薬」が必要だと指摘することである。単に不審な記述を挙げるだけでなく、所見、培養結果、薬剤クラスを結びつけられるかを見る。

合成異常6問に加え、無改変のnegative controlを6問入れた。主スコアは、異常の有無、異常行F1、異常カテゴリの正解率の平均である。

問題作成の再現性を残すため、症例ごとにPN・DSと共通instructionをサブエージェントへ渡して候補を作成し、採否を別に記録した。使用したPrompt、担当症例、採用候補、棄却候補、raw行のhashも保存している。ただし、今回のgoldはCodexで作成したものであり、臨床専門家による再annotation前のpilotである。

当初はDisease NERも作成したが、構造化抽出と測る能力が重なるため、今回の標準suiteからは外した。

歴史知識論述

資料を提示せず、学習済みの歴史知識を論述させる6問を作成した。推論パズルではなく、背景、制度、因果関係、地域差、史料批判をどこまで具体的に説明できるかを見る。

  1. 中世日本の訴訟・自力救済と喧嘩両成敗法
  2. 大和川の旧流路、1704年の付替えと河内・和泉への影響
  3. 2010–11年アラブ蜂起とリビア・シリアの帰結
  4. 欠・缺と芸・藝――新字体による別字の合流
  5. 奈良・熊野の寺社景観――神仏習合から神仏分離へ
  6. 後藤新平、台湾阿片専売、星製薬と大陸政策の史料批判

例えば新字体の問題HIST-KNOW-004は次のようにした。

現代日本語では「欠陥」「芸術」と書くが、戦前の標準的な印刷字体では「缺陷」「藝術」と書かれた。一方、簡略化以前から「欠」と「芸」という字そのものも存在し、「缺」「藝」とは別の字義・字音を持っていた。缺→欠、藝→芸という字体整理によって、なぜ現代の「欠」にケツ、「芸」にゲイという用法が生じたように見えるのか。四字それぞれの本来の読みと意味、戦後の当用漢字・字体整理の経緯と目的を説明し、この二例が単なる画数削減ではなく情報の合流を伴うこと、その利点と歴史資料・固有名詞・辞書・検索等で生じる注意点を論じなさい。

この問題では、次の10点をそれぞれ0/1で採点する。

  1. はケツで、欠ける・不足するという意味
  2. は本来ケンで、口を開く・あくびという意味
  3. はゲイで、わざ・技能という意味
  4. は本来ウンで、香草または草を刈るという意味
  5. 缺→欠藝→芸で本来の別字が同じ字形へ合流したこと
  6. 1946年の当用漢字表と1949年の当用漢字字体表の区別
  7. 読み書きの平易化や字体標準化という目的
  8. ケツ・ゲイは新造された読みではなく、元の字音が新字体へ移ったこと
  9. 新字体から旧来の字種へ一意に戻せないという情報損失
  10. 学習・印刷上の利点と、歴史資料・人名・検索などでの不利益

各問には、その問題専用の内容基準を10個用意した。採点は各基準を独立に0/1判定し、候補回答に正確かつ明示的に書かれている場合だけ1点とした。文章の巧拙や基準外の知識は加点しない。

採点にはgpt-5.4-2026-03-05のreasoning effort Highを使用した。候補モデル名と候補側のLow/MediumはJudgeへ知らせず、Structured Outputsで10項目を採点した。APIではstore=falseとしている。

問題数

Track ユニーク問題数 Low/Medium込み・1モデル当たり
臨床構造化+PN–DS監査 20 40
医学的異常検知 12 24
歴史知識論述 6 12
Challenge 80 160
合計 118 236

3モデルで708回の候補推論を行い、歴史についてはさらに36回のJudge評価を行った。

実験設定

モデル

モデル 構造 総parameter active parameter native context BF16 weight
LLM-jp-4 33B Thinking Dense 33.22B 約33B 65,536 61.88 GiB
LLM-jp-4 32B-A3B Thinking MoE 32.14B 3.83B 65,536 59.87 GiB
Qwen3.8-27B Dense hybrid 27B 約27B 262,144 51.75 GiB

LLM-jp公式model cardでは、33B Denseは64層、32B-A3Bは128 routed experts中8 expertsをactivateする構成とされている。Qwen3.8-27BはGated DeltaNetとGated Attentionを組み合わせた64層のhybrid構成で、MTPも学習されている。

実行環境

項目 設定
GPU NVIDIA RTX PRO 6000 Blackwell Max-Q 96GB
利用GPU 各モデル1GPU、tensor parallel=1
NVIDIA driver 580.95.05
Python 3.12.12
vLLM 0.26.1rc1.dev1231+g7a9993878
Transformers 5.15.1
PyTorch 2.13.0+cu130
weights / KV cache BF16 / BF16
common context上限 65,536 token
max concurrent sequences 1
prefix cache ON
warmup 1 request
seed / repeat 42 / 各条件1回

DenseとQwenは別々の同型GPU上で並行実行した。A3Bも同型GPUで実行している。同一GPU上で複数モデルを同時実行してはいない。

推論設定

今回はモデルの挙動だけを切り分けるtemperature=0の実験ではなく、「通常利用する設定」で比較した。

モデル temperature top_p top_k MTP
LLM-jp-4 33B 1.0 1.0 0 なし
LLM-jp-4 32B-A3B 1.0 1.0 0 なし
Qwen3.8-27B 1.0 0.95 20 3 speculative tokens

LLM-jp-4にはmodel card/cookbook上で固有の推奨sampling値が示されていないため、vLLM API既定値を明示した。Qwenはmodel cardのThinking推奨値を使った。全モデルでmin_p=0.0、presence/frequency penalty=0.0、repetition penalty=1.0である。

LLM-jp-4のHarmony出力は公式cookbookに沿ったvLLM reasoning parser pluginで分離し、QwenにはvLLMのqwen3 parserを使った。

ThinkingはLowとMediumを全問で比較した。Highは予備実験で生成長と形式遵守の影響を分離しにくかったため、今回の主比較には含めていない。

出力長

タスク別のmax_output_tokensは設定していない。chat template適用後の実測prompt長から、次のように毎回決めた。

max_output_tokens = 65,536 - prompt_tokens

reasoningとfinal answerはこの残り枠を共有する。今回の全708推論はfinish_reason=stopで終了し、length停止はなかった。

なお、「65K contextで実行した」とは上限を65,536へ揃えたという意味であり、すべての問題が65K近い入力長だったわけではない。Qwenのnative 262K性能も今回は測っていない。

結果

Thinking LowとMedium

モデル 臨床 Low→Medium 異常検知 Low→Medium 歴史 Low→Medium Challenge Low→Medium
LLM-jp-4 33B 62.5 → 54.0 61.1 → 58.3 38.3 → 36.7 76.3 → 84.4
LLM-jp-4 A3B 50.4 → 61.1 44.4 → 58.3 41.7 → 35.0 79.4 → 82.8
Qwen3.8 74.1 → 72.1 69.4 → 80.6 38.3 → 48.3 98.8 → 97.5
  • DenseではChallengeが8.1 point改善したが、臨床監査の成績が下がった
  • A3Bでは臨床と異常検知が大きく改善したが、歴史は下がった
  • Qwenでは異常検知と歴史が改善した
  • QwenのChallengeはLowの時点でほぼ飽和しており、Mediumの効果を評価できない

reasoning effortはモデル単体の固定ランキングではなく、タスクとの組み合わせで選ぶ必要がありそうだ。

臨床長文

モデル 構造化 Low 構造化 Medium PN–DS監査 Low PN–DS監査 Medium
LLM-jp-4 33B 65.0 68.0 60.0 40.0
LLM-jp-4 A3B 60.7 62.1 40.0 60.0
Qwen3.8 78.2 74.2 70.0 70.0

Qwenが構造化抽出、根拠監査とも最も高かった。

臨床trackでは、推論自体は終了していても、最終回答が期待するJSONにならない例があった。これを0点としている。

モデル JSON形式不正
LLM-jp-4 33B 3
LLM-jp-4 A3B 2
Qwen3.8 0

実際には、フォーマットエラーが起きれば差し戻しすればいいだけの話ではあるが、今回はそのようなミスがどのくらい起きているか記録することにした。

医学的異常検知

モデル・設定 異常症例感度 正常対照特異度 異常行F1 異常分類精度
Dense Low 66.7 83.3 58.3 50.0
Dense Medium 83.3 66.7 50.0 50.0
A3B Low 16.7 83.3 41.7 41.7
A3B Medium 66.7 66.7 50.0 58.3
Qwen Low 100.0 50.0 66.7 66.7
Qwen Medium 83.3 83.3 83.3 75.0

Qwen Lowは合成異常6件をすべて検出した一方、正常記録にも異常を見つけすぎた。Mediumでは感度と特異度のバランスが改善している。

A3B Lowは正常対照には強いが、異常症例の感度が16.7%しかなかった。Mediumにすると66.7%まで上がっており、このタスクではthinking量の効果が比較的大きい。

ただし、各設定は陽性6件・陰性6件だけである。1件の差が8.3 pointに相当するため、傾向を見るpilot以上の解釈はできない。

歴史知識論述

各問10点、各設定6問なのでLow/Mediumそれぞれ60点満点である。

モデル Low / 60 Medium / 60 合計 / 120
LLM-jp-4 33B 23 22 45
LLM-jp-4 A3B 25 21 46
Qwen3.8 23 29 52

問題別にLow/Mediumの平均点を見ると、得意分野がかなり異なった。

問題 Dense A3B Qwen
自力救済と喧嘩両成敗 3.5 4.0 4.0
大和川付替え 3.5 1.5 4.0
アラブ蜂起・リビア・シリア 5.0 4.5 6.5
欠・缺と芸・藝 3.0 4.5 4.0
神仏習合と神仏分離 3.0 5.5 5.0
台湾阿片・星製薬 4.5 3.0 2.5

単純なモデル序列というより、学習済み知識の分布が見えている。

スコアが全体に低いのは、論述試験のような形式で、各問10個の論点を明示的に満たしたかだけを数えているためでもある。
少しマニアックな知識問題は持っていない可能性が高い。

Challenge

モデル Low Medium Low+Medium
LLM-jp-4 33B 76.3 84.4 80.3
LLM-jp-4 A3B 79.4 82.8 81.1
Qwen3.8 98.8 97.5 98.1

QwenはLowで79/80、Mediumで78/80相当だった。LLM-jp同士の差を見るには使えるが、Qwen以上のモデルを比較するtrackとしては難度が不足している。
オリジナルもGPTに作らせた問題のようなので、サチってしまっている可能性がある。

DenseではMediumにより、分析的推論、コーディング、Hallucination耐性、人文社会系が改善した。A3BはDenseと総合的に近いが、化学・材料とMediumのコーディングが弱点だった。

実行時間

236件すべてを合わせたclient計測値である。wall time合計は、各リクエストを逐次実行した場合の合計で、server起動時間は含まない。

モデル 出力token/s中央値 wall time中央値 wall time合計 出力token合計
LLM-jp-4 33B 20.9 21.9秒 2時間21分 172,626
LLM-jp-4 A3B 158.5 3.0秒 17分6秒 158,433
Qwen3.8 71.2 9.7秒 1時間48分 427,360

問題種別ごとのラップも示す。各セルは「wall time合計 / 1件の中央値」で、LowとMediumは分けて集計した。nは各モデル・各設定の問題数である。

問題種別 Thinking n Dense(秒) A3B(秒) Qwen(秒)
構造化抽出 Low 10 689.2 / 65.4 65.1 / 6.5 422.0 / 38.1
構造化抽出 Medium 10 1,133.0 / 114.9 138.3 / 13.6 627.0 / 68.3
PN–DS監査 Low 10 147.2 / 13.7 19.3 / 1.8 122.7 / 9.4
PN–DS監査 Medium 10 334.3 / 34.2 39.9 / 4.3 173.7 / 16.5
医学的異常検知 Low 12 246.9 / 21.5 20.7 / 1.4 637.5 / 58.2
医学的異常検知 Medium 12 926.8 / 68.8 89.4 / 7.0 967.1 / 68.6
歴史知識論述 Low 6 577.1 / 97.4 79.8 / 13.0 451.1 / 73.7
歴史知識論述 Medium 6 528.3 / 93.4 60.3 / 10.8 521.7 / 88.8
Challenge Low 80 1,143.6 / 10.8 169.8 / 1.7 1,437.4 / 6.0
Challenge Medium 80 2,716.7 / 24.7 343.9 / 3.3 1,091.0 / 7.1

A3BはDenseの約7.6倍、Qwenの約2.2倍の出力throughputだった。active parameterが約3.8Bであることの効果が大きい。

QwenはDenseの約3.4倍のtoken/sだが、出力token数がDenseの約2.5倍に達した。そのため、suite全体のwall timeはDenseより約24%短い程度に留まった。モデルの速度を見るときはtoken/sだけでなく、「回答を終えるまでに何token出すか」も同時に見る必要がある。

なお、この速度差にはアーキテクチャだけでなく、QwenのMTP有効化やモデル別samplingも含まれる。
ただ、Denseモデルであっても生成戦略による改善の値が大きいことを考えると、すごいなと思う(小学生並みの感想)

まとめ

今回の結果から、次のことが分かった。

  1. 巷で言われているようにQwen3.8-27Bは十分賢いし最も安定。
  2. LLM-jp-4 モデルも、普段実験で使っている限りはそこまで問題を感じなかったが、フロンティアモデルと比較すると少し差が見えた。
  3. Thinkingコストはかければ良いというものでもなさそう。
  4. h-nabata Challengeは大いに参考にさせていただきました、ただ、サチりだしているので、もう少し難しい問題の作り方を考える必要がありそう。
  5. その意味で、手元のデータより、少し難しそうな問題を追加させていただいた、こちらもCodex(GPT5-sol xhigh)で作ったので正しい問題とは言えない可能性は十分あるので注意

一方で、各条件はseed 42の1回だけであり、臨床・歴史の問題数も少ない。医療goldはCodex作成で、臨床専門家による再検証も必要である。現段階の値はランキングの確定値ではなく、モデルと推論設定の性格をつかむpilotと考えるべきだろう。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?