AI・信頼性・評価
vLLMはモデル定義を機種別と機種非依存の二本に分け始めた
- vLLM
- 推論エンジン
- LLM推論
- torch.compile
- transformers
- PyTorch
- Helion
- Triton
- CUDA Graph
- IBM Spyre
- DeepSeek V4
- CustomOp
- H100
- カーネル
- 演算の融合
- モデル定義
- 移植性
- コンパイラ
- アクセラレータ
- コーディングエージェント
- OOTプラグイン
- JITコンパイル
- NVIDIA
- AMD
- Meta
- Red Hat
- Hugging Face
目次
言語モデルを自前のサーバーで提供する組織は、推論エンジンを使う。推論エンジンは、学習済みのモデルを読み込み、要求に応じて文章を生成するソフトウェアである。その中では、モデルの計算の手順を書いたコード(モデル定義)が、GPU や、推論に特化した専用のチップ(アクセラレータ)の上で動く。
推論エンジンの中には、一つのモデル定義を全機種で共有し、機種ごとの速さをコンパイラに任せる設計がある。コンパイラは、モデル定義を機種に合った速い計算の手順へ自動で変換するソフトウェアを指す。この形なら古い GPU の利用者も同じ定義で新しいモデルを動かせるが、最新の GPU で最速を求める作り手には、自動の変換で足りない場面が増えた。
本稿が例に選んだのは、推論エンジン vLLM の開発者が出した二つの RFC(設計の変更を提案する文書)と、PyTorch のブログ記事一本である。同じプロジェクトで機種ごとの定義へ移る提案と移植性を保つ提案が並行し、両方の作り手が理由と代償を書いているからである。機種への対応の仕方には、推論エンジンが機種ごとに別の製品へ分かれる形や、コンパイラで一つの定義を各機種に落とす形もある。
vLLM のモデル定義は何から何へ変わり始めており、古い GPU や独自のアクセラレータの利用者は何を確かめればよいのか。
vLLM のモデル実装は、一つの共通の定義をコンパイラで各機種に最適化する形から、最先端の GPU 向けに機種ごとに手で最適化する定義と、移植性を保つ機種非依存の定義の二本立てへ移り始めている。 作り手は、コンパイラに頼る形では最新の GPU での速さと開発の速さが足りなかったと書く。機種ごとの定義は最新の GPU を対象にし、機種非依存の層を作る開発者は、その定義が古い GPU などに対応する見込みは無いと書く。また、古いモデルは汎用の経路へ移されて遅くなるおそれがある。機種非依存の定義はこの問題を補う目的で作られているが、作業の途中にあり、対応する層とモデルはまだ限られる。
一世代前の GPU で、古いモデルと新しいモデルを提供している組織
※ この節の数値は説明のための仮定で、測定値ではありません。
ある組織が、一世代前の GPU 4 台の上で、二つのモデルを提供しているとする。一つは二年前に公開された中規模のモデル A で、もう一つは先月公開された大規模なモデル B である。組織は、推論エンジンの次の版で、次の二つの変更が入ると知る。
- モデル B は、最新の GPU 向けに機種ごとに書かれた定義で実装される。その定義は、一世代前の GPU を対象にしない。
- モデル A は、推論エンジンの中の専用の実装が削除される。以後は、外部のモデル変換ライブラリを経由する汎用の実装で動く。
組織が版を上げる前に確かめることは三つある。
- どの定義で動いているか: 二つのモデルのそれぞれについて、新しい版が専用の定義、汎用の実装、移植用の定義のどれを使うかを、起動時の記録で確かめる。モデル B が一世代前の GPU で起動しないなら、版を上げるとモデル B の提供が止まる。
- コンパイルの有無で速さがどう変わるか: モデル A を汎用の実装で動かし、コンパイルを有効にした場合と無効にした場合の処理量を測る。仮に、旧版の専用の実装で 1 秒あたり 1,000 トークン、新版の汎用の実装でコンパイル無しなら 600 トークンだとする。この組織は、同じ負荷を処理するのに GPU を 4 台から約 7 台へ増やすことになる(4 × 1,000 ÷ 600 ≒ 6.7)。
- 移植用の定義が使えるか: 推論エンジンが、どの機種でも動く移植用の定義を別に持つなら、二つのモデルがその定義で動くか、どの層が対応済みかを試験環境で確かめる。
三つを確かめると、版を上げたときの影響は、モデルごとに「動かない」「遅くなる」「移植用の定義で保てる」のどれかに分かれる。組織は、この区分をモデルごとに書き出してから、版を上げる日程を決められる。
vLLM の作り手は、共通の定義とコンパイラに頼る形を改めると書く
vLLM は、LLM 推論のための推論エンジンをオープンソースで開発するプロジェクトである。LLM 推論は、大規模な言語モデル(LLM)で文章を生成する処理を指す。vLLM の開発者の Woosuk Kwon は、2026年5月に RFC #42770 を起票し、モデル定義の作り方を変えると提案した1。この RFC は 2026年10月5日の時点で open であり、計画の一部はまだ実装されていない。
PyTorch のブログによれば、vLLM のモデル定義には現在、flat、legacy、transformers バックエンドの三種類がある2。legacy は、従来どおり全機種で一つの定義を共有する形を指す。transformers バックエンドは、Hugging Face が開発するモデル実装のライブラリ transformers のモデルを、vLLM から呼び出して動かす経路である。三種類の定義は、行列の掛け算を複数の GPU に分けて行う RowParallelLinear のような共通の層を使う2。CustomOp は、共通の層の中の演算を機種ごとに別の実装へ差し替える仕組みであり、PluggableLayer は層を外から差し替える仕組みである2。
これまでの vLLM は、モデルのコードを PyTorch の基本の演算だけで書き、速くする作業をコンパイラと CustomOp に任せてきた。PyTorch は、Meta を中心に開発される、深層学習の計算を書くためのライブラリである。torch.compile は PyTorch に組み込まれたコンパイラで、PyTorch のコードを機種向けの速いコードへ変換する。full-graph のコンパイルは、モデル全体の計算を一つのまとまりとして torch.compile にかけることを指す。この形では、演算の融合とカーネルの選択を、コンパイラと CustomOp が機種ごとに行っていた。カーネルは GPU の上で動く一つの計算のプログラムで、演算の融合は連続する複数の演算を一つのカーネルにまとめてメモリの読み書きを減らすことである。
RFC #42770 は、この形から三つの教訓を引き出している1。
- 作り手は演算の融合とカーネルの選択のためにモデルのコードを直接変えることをためらい、抽象とコンパイラの処理を積み重ねた。その結果、コードは中身が読み取りにくく、最適化しにくくなった。
- 作り手は、どの機種でもよく動く一つのモデル定義を追ったが、機種ごとに適した融合の方法が違うので、各機種は自分用の実装から利益を得る。
- AI のコーディングエージェント(言語モデルがコードを読み、書き、試験するまでを自動で進める道具)が手での融合とカーネルを書く作業を容易にし、エージェントは抽象の少ない生のモデルのコードで最もよく働く。
作り手は、性能と開発体験の二つの面から変更の理由を書く1。性能の面では、最新の機種で最速を出すには手での最適化が要り、コンパイラによる最適化だけでは足りなかった。開発体験の面では、torch.compile は起動の時間を延ばし、コンパイラに固有の制約と読み取りにくさを開発者に課す。そのうえで作り手は、隣り合う演算を局所的に融合する用途には、効果があれば torch.compile を使い続けると書く1。やめる対象は full-graph のコンパイルであり、torch.compile そのものは残る。
最新の GPU 向けには、機種ごとのディレクトリに手で融合を書いた定義を置く
RFC #42770 の新しい形では、モデルのコードを GPU の作り手ごとに分ける1。RFC は例として、DeepSeek V4 の NVIDIA 向けの定義を models/deepseek_v4/nvidia/model.py に置く構成を示す1。同じ場所には、その機種用のカーネルを置く kernels/ と、試験を置く tests/ が並ぶ1。DeepSeek V4 は、DeepSeek が公開した大規模な言語モデルである。AMD の GPU 向けには、別の定義を別のディレクトリに置く。PyTorch のブログは、機種ごとに別に持ち、演算の融合をモデルのコードに直接書いた定義を「flat」モデルと呼ぶ2。
機種ごとに分けたことの利点として、作り手は三つを挙げる1。各機種の定義は、ほかの機種の定義を壊すおそれなしに、それぞれの機種に合わせて変更できる。コードが生の形で書かれるので、AI のコーディングエージェントで最適化しやすい。モデルごと、機種ごとにファイルが分かれるので、使われなくなった古いモデルを削除しやすい。
この形は、すでに新しいモデルの標準になっている。PyTorch のブログは、最近の数か月に vLLM へ加わった新しいフロンティアのモデルは、すべて flat の定義を使うと書く2。フロンティアのモデルは、各社が公開する最先端の大規模な言語モデルを指す。新しいモデルを最新の GPU で使う利用者は、この変更から直接に速さの利益を受ける。
移植の側は、全機種で動く機種非依存の層を別に組む
機種ごとの定義に対して、同じプロジェクトの中から移植性を補う提案が出ている。Meta の Richard Zou は RFC #44219 を起票し、機種ごとの定義だけでは利用者全体に応えられないと述べた3。RFC #44219 は、別の機種への関心が利用者の間で大きいことを理由に、全モデルに機種非依存の定義を用意し、vLLM の中核のリポジトリでコミュニティが保守するよう求める3。2026年9月22日には、IBM、Meta、Hugging Face の開発者が、この方針の進み具合を PyTorch のブログで報告した2。著者は、IBM の Thomas Parnell と Thomas Ortner、Meta の Richard Zou、Hugging Face の Harry Mellor である。
PyTorch のブログは、機種非依存の層に四つの原則を置く2。
- コンパイル可能: 層は full-graph の torch.compile でコンパイルできる。
- 拡張可能: 各機種は、CustomOp と PluggableLayer で層の中身を自分の実装へ差し替えられる。
- 分離: 機種非依存の層は、機種ごとの経路の層と分ける。複数のモデルで共有する層は model_executor/hw_agnostic に、モデル固有の層は各モデルの場所に置く。
- 移植可能: 層は PyTorch の演算か、Triton や Helion で書くことを目指す。これらに対応しない機種は、拡張可能の項の差し替えに頼る。
Triton は、GPU のカーネルを Python に近い書き方で記述するための言語とコンパイラである。Helion は、PyTorch の開発者と Meta が開発する、機種非依存のカーネルを書くための DSL である4。DSL は、特定の用途に絞って作られた小さなプログラミング言語を指す。
作り手は、transformers バックエンドが使う層を、機種非依存の層へつなぎ替えた2。この対応は、一部の層について vLLM の main ブランチにすでに入っている2。利用者は、環境変数 USE_HW_AGNOSTIC=1 を設定し、—model-impl=transformers を付けて vLLM を起動すると、この経路を有効にできる2。作り手は、IBM のアクセラレータ IBM Spyre の上で、Gemma 4、Qwen3、Granite 4.2 のモデルが動くことを確かめたと報告する2。IBM Spyre の対応は OOT プラグインとして提供される。OOT プラグインは、vLLM の本体のリポジトリの外(out of tree)で開発し、特定の機種への対応を vLLM に足すプラグインである。
速さについて、作り手は自分の測定を一つ示す。NVIDIA の H100 で、transformers バックエンドの層を機種非依存の層に替えても、total token throughput は替える前のネイティブの実装との差が 3.4% 以内だった(最近の三つのモデルの幾何平均、作り手の測定)2。total token throughput は、入力と出力を合わせて 1 秒あたりに処理したトークンの数である。ネイティブの実装は、FlashAttention や CUTLASS のような CUDA 向けのライブラリを使う層を指す。この比較は transformers バックエンドの中で層だけを替えたもので、flat の定義との比較ではない。RFC #44219 は、transformers バックエンドそのものと通常の vLLM の間にも性能の差があると書く3。ただし作り手は、Blackwell や CDNA 4 のような最先端の GPU で最高の性能を出すことは、機種非依存の定義の目標ではないと明記する2。
カーネルの書き方の面でも、移植性と速さの両立が試されている。Red Hat と Meta の開発者は、2026年10月2日の PyTorch のブログで、Helion で vLLM の線形層を書いた試みを報告した4。作り手によれば、移植可能な Helion の書き方でも、NVIDIA の Hopper 世代の GPU で、評価した密なモデルと量子化の形式について vLLM の既定のバックエンドを一貫して上回った4。この結果は、トークン数 32 以下の形状だけを Helion で動かし、それより大きい形状は既定のカーネルに戻す振り分けで、形状ごとに調整した設定を使い、H100 の上で得られた4。同じ記事は、この書き方の代償も具体的に挙げている4。
二つの RFC と二つのブログ記事を並べると、vLLM は一つの定義で全機種の速さを狙う形をやめ、速さの経路と移植の経路を分けて持つ形へ移っている。flat の定義は最新の GPU での速さを受け持ち、機種非依存の層は古い GPU や独自のアクセラレータでモデルが動き続けることを受け持つ。本稿は、ここに挙げた数値と動作を作り手の報告に基づいて書いており、何も実行していない。
二本立てに残る代償
独自のアクセラレータの利用者には、モデル定義と層を自前で保守する負担がかかるおそれがある。PyTorch のブログによれば、機種ごとの定義が本流になると、OOT プラグインは自前のモデル定義と層を保守する負担に直面する見通しである2。同じ記事は、新しいモデルに対応するたびに、transformers と vLLM、場合によっては各プラグインへの変更の提案が要ると書く2。本稿は、機種ごとの定義を本流にする限りこの負担は恒久と判定し、機種非依存の層がその軽減を狙っていると見る。
古いモデルや利用の少ないモデルは、GPU の上で遅くなるおそれがある。PyTorch のブログによれば、古いモデルの定義は vLLM から削除されつつあり、transformers バックエンドへ移されている。コンパイルできる層が無いと、こうしたモデルの GPU での性能は大きく落ちる2。機種非依存の層がコンパイルできる層を用意すれば、この落ち込みは一時的に終わる。現時点で対応するのは一部の層だけであり、有効にするには USE_HW_AGNOSTIC=1 と —model-impl=transformers の指定が要る2。ブログとは別に、RFC #42770 は、移行で性能の後退を入れないと書き、古いモデルには CustomOp などの仕組みを残すと本文を改めた1。
古い GPU と、消費者向けやプロシューマー向けの GPU は、flat の定義の対象に入らない見通しである。PyTorch のブログは、flat のモデルと層が最先端の GPU 向けに最適化され、こうした GPU への対応は見込んでいないと書く2。同じ記事は、vLLM の利用統計で、その種の機材を使う利用者がかなりの割合を占めるとも書く2。作り手が示したのは現在の見通しで、変える予定は書かれていない。本稿は、これを現時点の制約と判定する。
機種非依存の層は、まだ作業の途中にある。PyTorch のブログによれば、対応する層は限られ、flat のモデルごとに機種非依存の model.py を用意する作業は計画の段階で、まだ main に入っていない2。DeepSeek V4 の機種非依存の定義を足す変更は審査中で、継続的な自動試験(CI)への組み込みもこれからである2。作り手自身が作業中と書いており、進めば変わる性質なので、本稿は一時的と判定する。
Helion のような移植可能な DSL にも、調整と起動と保守の手間が残る。Helion の作り手は、細かな調整には数時間かかりうると書く4。vLLM の起動時に CUDA Graph を記録すると Helion の JIT コンパイルが走り、最初の起動が遅くなる4。CUDA Graph は、GPU に送る一連のカーネルの起動を記録し、まとめて再生する仕組みである。JIT コンパイルは、プログラムを実行する直前にコンパイルすることを指す。作り手によれば、この遅れは暖機後の起動ではキャッシュで大部分を取り除ける一方、CUDA Graph の外で動かすとカーネルの起動に CPU の負荷がかかる4。作り手は、線形層では Helion を CUDA Graph の再生の中だけで動かし、この負荷を避けている4。事前に調整した設定の保守も残り、作り手は現在、その設定を自分たちの vLLM のフォークで配っている4。作り手は、性能・使いやすさ・保守性の三つのうち二つを取ると三つ目が損なわれることが多い関係を、作業負荷ごとにカーネルを最適化すること自体に内在すると書く4。本稿は、作り手の記述に従い、この関係を恒久的なものとして扱う。
出典4件
-
Woosuk Kwon「[RFC]: Changes in vLLM Model Development」vLLM GitHub Issue #42770, 2026. https://github.com/vllm-project/vllm/issues/42770 — 機種別の定義へ移す案。2026-05-15 起票、10-05 時点で open。 ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9
-
Thomas Parnell ほか「Hardware-Agnostic Models in vLLM」PyTorch Blog, 2026. https://pytorch.org/blog/hardware-agnostic-models-in-vllm/ — IBM・Meta・Hugging Face の著者による 2026-09-22 の記事。三種類の定義、機種非依存の層の原則と現状、H100 での測定。 ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9 ↩10 ↩11 ↩12 ↩13 ↩14 ↩15 ↩16 ↩17 ↩18 ↩19 ↩20 ↩21
-
Richard Zou「[RFC]: hardware agnostic model definitions in vLLM」vLLM GitHub Issue #44219, 2026. https://github.com/vllm-project/vllm/issues/44219 — 機種ごとの定義だけでは利用者全体に応えないとして、全モデルに機種非依存の定義を求める提案。 ↩ ↩2 ↩3
-
Sean Chen, Shangdi Yu「Building a High-Performance and Portable vLLM Linear Backend with Helion」PyTorch Blog, 2026. https://pytorch.org/blog/building-a-high-performance-and-portable-vllm-linear-backend-with-helion/ — Red Hat と Meta、2026-10-02。Helion で線形層を書く試みと代償。 ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9 ↩10 ↩11
この記事はAIが執筆しています。内容には誤りが含まれる可能性があります。ご注意ください。