技術 約10分で読めます

Qwen3.6-35B-A3BがGated DeltaNetとMoEを組み合わせてエージェントコーディングを底上げした

いけさん目次

Alibaba Qwenチームが2026年4月14日、Qwen3.6-35B-A3BをApache 2.0ライセンスのオープンウェイトとして公開した。
総パラメータ35Bながら推論時のアクティブパラメータは3Bという従来のMoE設計を踏襲しつつ、注意機構をGated DeltaNetとGated Attentionのハイブリッドに変更している。

アーキテクチャの変更点

Qwen3.5-35B-A3Bは、前回のllama-serverベンチマーク記事でも触れた通り、SSMとAttentionのハイブリッドで、40層中10層だけがAttentionだった。
Qwen3.6では、SSM部分が線形注意機構の一種である Gated DeltaNet に置き換えられている。

40層の構成はこうなっている。

10×(3×(Gated DeltaNetMoE)    1×(Gated AttentionMoE))10 \times \bigl(\,3 \times (\text{Gated DeltaNet} \to \text{MoE}) \;\to\; 1 \times (\text{Gated Attention} \to \text{MoE})\,\bigr)

4層ブロックが10セット繰り返される構造で、3層がGated DeltaNet、1層がGated Attention(通常のトランスフォーマー型の注意機構)になっている。

各コンポーネントのスペックは以下の通り。

コンポーネントパラメータ
Gated DeltaNet ヘッド数Q/K: 16、V: 32(ヘッド次元128)
Gated Attention ヘッド数Q: 16、KV: 2(GQA、ヘッド次元256)
MoE エキスパート数256(ルーテッド8 + 共有1)
エキスパート中間次元512
隠れ層次元2048

MoEのエキスパート数は256で変わらないが、ルーテッドエキスパート8つに加えて 共有エキスパート1つ が常時使われる構造になった。
これにより全トークンが共通の知識にアクセスしつつ、8つのルーテッドエキスパートへルーティングされる。

注意機構の基本

注意機構(attention mechanism)は、あるトークンが文中のどのトークンをどれだけ参照するべきかを動的に決める仕組みだ。現在のトークンから作る QQ(query)と、各トークンに対応する KK(key)の一致度を見て関連度を計算し、その重みで VV(value)を混ぜ合わせて次の表現を作る。日本語訳の「注意」だと身構えた感じに聞こえるが、英語の attention はどこに目を向けるかを指す語で、「どこに注目するか」の仕組みと読んだほうが近い。

標準的なトランスフォーマーでは、この仕組みをSoftmax注意機構(softmax attention)で実装する。各トークンがほかの全トークンをどれだけ参照するかを細かく計算するので精度は高いが、コンテキスト長が伸びると計算量とメモリ消費が急激に増える。

線形注意機構(linear attention)は、この参照のしかたを近似と状態更新の形に組み替えて、長い文脈でも計算量とメモリ消費が増えすぎないようにしたものだ。Softmax注意機構ほど精密ではない代わりに、長文脈での効率を優先した設計になる。

ただし、単純な線形注意機構は状態に情報を足し込むだけなので、何を保持し、何を忘れるかの制御が弱い。この弱点を埋めたのがDeltaNet系だ。

Gated DeltaNetとは

Gated DeltaNetは、DeltaNetにゲーティング機構を加えた線形注意機構の一種だ。単純な線形注意機構が状態に情報を加算し続けるのに対し、DeltaNet系は「現在の予測と新しい値の差分」を書き込む形で状態を更新する。

さらにGated DeltaNetは、過去の状態をどれだけ残すか、新しい情報をどれだけ書き込むかをゲートで調整できる。これにより、文脈が切り替わったときには古い情報を薄めつつ、まだ必要な情報は保持しやすくなる。

ただし、全コンテキストに対して精密な注意計算が必要な場面では、Gated Attentionが補完に入る。Qwen3.6はこの2種を4:1の比率で組み合わせ、長文脈での計算効率と局所的な注意精度を両立している。

Qwen3.5のSSM(Mamba系)と同様に、KVキャッシュの節約という恩恵はGated DeltaNetでも変わらない。
Qwen3.5では40層中10層しかKVキャッシュを使わず、ctx-size4096 から 65536 にしてもVRAM増加が800MBで済んでいた。
Qwen3.6もGated Attention層は40層中10層のみで、KVキャッシュの負担は同じ規模に収まる。

ベンチマーク

まずはQwen3.5-35B-A3Bとの比較から。

ベンチマークQwen3.5-35B-A3BQwen3.6-35B-A3B
SWE-bench Verified70.073.4
SWE-bench Multilingual60.367.2
SWE-bench Pro44.649.5
Terminal-Bench 2.040.551.5
QwenClawBench47.752.6
NL2Repo20.529.4
QwenWebBench9781397

Terminal-Bench 2.0は+27%、QwenWebBenchは+43%と、エージェントコーディング寄りのベンチマークで大幅な改善が出ている。

Gemma 4-31Bとの比較では、MCPMark(ツール利用)で37.0 vs 18.1と倍以上の差がついた。
SWE-bench Verifiedも73.4 vs 52.0で、31Bを常時動かすdenseモデルに対して、アクティブ3BのMoEがここまで差をつけている。
MCPを前提にしたエージェント設計の差がそのまま出ている格好だ。

知識・推論系のスコアも参考として載せておく。

ベンチマークスコア
MMLU-Pro85.2
GPQA Diamond86.0
AIME 202692.7
MMMU81.7

マルチモーダルにも対応しており、画像・動画・ドキュメント処理のベンチマーク(OmniDocBench 1.5: 89.9、VideoMMU: 83.7)も計測されている。

Thinking Preservation

Qwen3.6で新たに追加されたのが Thinking Preservation だ。
マルチターン会話でモデルの思考トークンを次のターンに持ち越せる。

通常のLLMは会話のたびに一から推論し直す。
Qwen3.6はアシスタントターンの思考過程を次のターンのコンテキストとして保持し、再利用できる。
長いコーディングセッションやリポジトリ全体を対象にしたリファクタリングで、途中の思考を捨てずに続きから作業できる。

from openai import OpenAI

client = OpenAI()

chat_response = client.chat.completions.create(
    model="Qwen/Qwen3.6-35B-A3B",
    messages=messages,
    max_tokens=32768,
    temperature=0.7,
    top_p=0.8,
    extra_body={
        "top_k": 20,
        "chat_template_kwargs": {"preserve_thinking": True},
    },
)

preserve_thinking: True を渡すだけで有効化できる。エージェントフレームワーク(Qwen-Agent)経由でMCPサーバーと組み合わせる場合も同じパラメータが使える。

サービング

推奨フレームワークはSGLang(≥0.5.10)とvLLM(≥0.19.0)だ。以下はSGLangでのデプロイ例。

python -m sglang.launch_server \
  --model-path Qwen/Qwen3.6-35B-A3B \
  --port 8000 \
  --tp-size 8 \
  --mem-fraction-static 0.8 \
  --context-length 262144 \
  --reasoning-parser qwen3 \
  --tool-call-parser qwen3_coder

--tool-call-parser qwen3_coder でMCPツール呼び出しのパースに対応する。
ネイティブコンテキスト長は262,144トークンで、YaRNスケーリングを有効にすれば最大約100万トークンまで拡張できる。

Multi-Token Prediction(MTP)も利用できる。以下はSGLangでの投機的デコード設定例。

python -m sglang.launch_server \
  --model-path Qwen/Qwen3.6-35B-A3B \
  --port 8000 \
  --tp-size 8 \
  --context-length 262144 \
  --reasoning-parser qwen3 \
  --speculative-algo NEXTN \
  --speculative-num-steps 3 \
  --speculative-eagle-topk 1 \
  --speculative-num-draft-tokens 4

ハードウェア要件の目安は以下の通り。

精度VRAM
FP16/BF16~70GB
INT8量子化~35GB
INT4 GPTQ~18GB
GGUF(CPU推論)~20GB RAM

AMD ROCm環境でのGGUF実行や、Flash-MoEのようなSSDストリーミング推論を使ったメモリ節約手法は、Qwen3.6でも同じ方向性で適用できる。
ただしGated DeltaNetのカーネルは新規なので、既存バックエンドのサポート状況は個別確認が必要だ。

Qwen-AgentとMCP統合

エージェント用途向けに公式のQwen-Agentライブラリとの統合例が提供されている。
MCPサーバーを function_list に渡すだけでツール呼び出しが機能する。

import os
from qwen_agent.agents import Assistant

llm_cfg = {
    'model': 'Qwen3.6-35B-A3B',
    'model_type': 'qwenvl_oai',
    'model_server': 'https://dashscope.aliyuncs.com/compatible-mode/v1',
    'api_key': os.getenv('DASHSCOPE_API_KEY'),
    'generate_cfg': {
        'use_raw_api': True,
        'extra_body': {
            'enable_thinking': True,
            'preserve_thinking': True,
        },
    },
}

tools = [
    {'mcpServers': {
        "filesystem": {
            "command": "npx",
            "args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/workspace"]
        }
    }}
]

bot = Assistant(llm=llm_cfg, function_list=tools)

enable_thinking: Truepreserve_thinking: True を両方渡すのが公式推奨の設定だ。

サンプリングパラメータ

推論精度が要求されるコーディングタスクと一般タスクでは推奨値が異なる。

モードtemperaturetop_ptop_kpresence_penalty
思考モード(一般)1.00.95201.5
思考モード(精密コーディング)0.60.95200.0
非思考モード(一般)0.70.8201.5

精密なコーディングや競技プログラミングでは temperature=0.6presence_penalty=0.0 で決定的な出力を引き出す設定が推奨されている。

線形注意機構の数式

ここからは数式を使って線形注意機構(linear attention)の中身を追う。Qwen3.6の効率性がどこから来ているかは、この仕組みから説明できる。

Softmax注意機構のO(n²)問題

標準的なトランスフォーマーのSoftmax注意機構は、コンテキスト長 LL に対して O(L2)O(L^2) の計算量とメモリを使う。
ここで QQ は参照したい側、KK は参照される側、VV は実際に取り出す情報だ。
Q,K,VQ, K, V をそれぞれ L×dL \times d の行列として Softmax(QK)V\mathrm{Softmax}(QK^\top)V を計算するため、内部で L×LL \times L の注意行列が生まれるからだ。
コンテキストが延びるほど二乗オーダーで重くなるので、長文脈では速度もメモリも詰まる。

線形注意機構によるO(n)化

線形注意機構は、Softmaxをカーネル特徴写像 ϕ\phi で近似し、行列積の順序を入れ替える手法だ。

元の式

Softmax(QK)V\mathrm{Softmax}(Q K^\top)\, V

近似後

ϕ(Q)(ϕ(K)V)\phi(Q) \bigl(\phi(K)^\top V\bigr)

ϕ(K)V\phi(K)^\top V を先に計算すれば d×dd \times d の状態行列になり、あとはクエリごとにこれを掛けるだけで済む。
L×LL \times L の注意行列を作らずに済むので、計算量が O(Ld2)O(L d^2) に落ちる。長いコンテキストほど差が大きくなる。
代償としてSoftmaxの正規化が外れるぶん精度は落ちるが、系列長が延びても計算量の増加を線形に抑えられるのが利点だ。

同じ式を時系列の再帰形式で書くと、線形注意機構がRNN的な挙動をしていることが見えてくる。

St=St1+vtktot=Stqt\begin{aligned} S_t &= S_{t-1} + v_t\, k_t^\top \\ o_t &= S_t\, q_t \end{aligned}

トークンごとに ktk_tvtv_t のアウタープロダクトを足し込みながら状態を更新し、クエリをかけて出力を取り出す。
構造的には、線形注意機構はランク1更新で状態を書き加え続ける線形RNNと等価だ。
ここが「KVキャッシュを持たなくてもよい」理由にもつながっている。状態行列 StS_td×dd \times d で固定サイズだからだ。

DeltaNetが加えた上書き機構

単純な線形注意機構には欠点がある。状態行列に情報を「足す」だけなので、古い情報を忘れる手段がない。
トークンが増えるほど状態が埋まっていき、最終的に過去の記憶が新しい記憶に潰される。

DeltaNetはこの足し算を、パーセプトロンの学習で使われるdelta ruleに置き換えた。

St=St1+βt(vtSt1kt)ktS_t = S_{t-1} + \beta_t\, (v_t - S_{t-1}\, k_t)\, k_t^\top

新しい値 vtv_t と、現在の状態から推測した値 St1ktS_{t-1}\, k_t との差分だけを書き込むので、既存の情報と整合性を取りながら状態を更新できる。
線形注意機構の O(n)O(n) 計算量を保ったまま、連想記憶として機能するようになるのがDeltaNetの貢献だ。

忘却ゲートを加えたGated DeltaNet

Gated DeltaNetは、DeltaNetに忘却ゲート αt\alpha_t を加えた拡張版だ。更新式はおおまかに次のようになる。

St=αtSt1+βt(vtαtSt1kt)ktS_t = \alpha_t\, S_{t-1} + \beta_t\, (v_t - \alpha_t\, S_{t-1}\, k_t)\, k_t^\top
  • αt\alpha_t が小さければ過去の状態を薄めて、大きければ保持する
  • βt\beta_t は新しい情報の書き込み強度を決める

これで「文脈が切り替わったら過去を忘れる」「まだ使う情報は保持する」をトークン単位で制御できる。
Qwen3.6がGated Attentionと4:1で組み合わせているのは、線形近似では失われやすい精密な長距離依存をSoftmax注意機構で補うためだ。
コーディングのように局所的な構文参照と広いリポジトリ文脈の両方を扱うタスクで、この組み合わせの意味が出てくる。

Mamba系SSMとの違い

Qwen3.5までのMamba系SSMも、状態空間を再帰で更新する点ではGated DeltaNetと似ている。
ただしSSMは連続時間の線形システムを離散化したもので、状態遷移は行列Aによる線形変換が中心だった。
Gated DeltaNetはdelta ruleでアウタープロダクトを使って状態をランク1更新する点が違い、連想記憶の書き込み・書き換えが明示的に表現される。

どちらもKVキャッシュを持たずに長文脈を処理できる点は共通している。Qwen3.6がSSMから乗り換えた理由は、エージェントコーディングで重要な「過去の指示や中間結果を正しく参照する」能力が、delta ruleベースのほうが書きやすいからだろう。