frontier AI
transformersがGGUFをggmlカーネルごと読み込む理由
目次
オープンなLLMを手元のノートパソコンで動かすときは、多くの場合、量子化したモデルを使う。量子化は、モデルの重みを元より少ないビット数で表し、ファイルとメモリを小さくする処理である。量子化したモデルを配る形式として広く使われているのがGGUFで、ggml-orgの推論エンジンであるllama.cppの開発チームが作った1。推論エンジンは、学習済みのモデルに文章を生成させる処理を速く行うためのソフトウェアである。
量子化したモデルを使う人は、文章を生成させるだけでなく、モデルの内部を調べたいこともある。途中の層の出力を見る、手元の課題で精度を評価する、といった作業である。こうした作業には、Hugging Faceのtransformersが使われる。transformersは、モデルの各層の計算をPyTorchのコードとして書いたライブラリである。
困るのは、transformersでGGUFを読むと、量子化で減らしたメモリの使用量が増えることだった。transformersは2024年からGGUFを読めたが、当初は、読み込むときに重みを32ビットの浮動小数点数(fp32)の形式へ書き直していた2。本稿ではこの書き直しを展開と呼ぶ(英語ではdequantize)。展開した重みは、量子化したままの重みより多くのメモリを使う1。そのため、量子化したままの大きさで動かすにはllama.cppを、内部を調べるにはtransformersを使い、同じモデルを二つの形で扱うことになる。
2026年9月22日、Hugging Faceは、transformersがGGUFの重みを展開せずに計算する経路を加えたと発表した。この経路は、llama.cppが下層で使うggmlのカーネルを取り込んで使う1。カーネルは、GPUの上で一つの演算を行う小さなプログラムである。
transformersは2024年からGGUFのファイルを読めたのに、なぜggmlのカーネルまで取り込んだのか。
ファイルを読めるだけでは重みを展開することになり、量子化したままの重みで計算するには、GGUFの保存形式を直接読むカーネルが要るからである1。 そのカーネルは、GGUFを作ったllama.cppが下層で使うggmlにあり、作り手はllama.cppに性能を近づけるためにこれを再利用したと書く1。置き換わるのは個々の演算なので、各層を定義するコードはtransformersのまま残り、途中の層の出力を取り出す仕組みや評価の道具がそのまま使える。代償は、使える環境がApple SiliconのGPUとQwen3.5系のモデルに限られること、量子化による精度の低下を自分の課題で確かめる手間が残ること、ggmlのCUDA向けのカーネルを複写して使うvLLMでは、GGUF対応がまだ実験的な扱いにとどまっていることである。
重み40億個のモデルで、メモリと展開の量を数える
この節に出る重みの個数とビット数は、原典の測定値ではない。仕組みを数で確かめるために、本稿が決めた値である。
重みが40億個あるモデルを考える。重みは、学習で決まった数値で、モデルは各層でこの数値を行列演算に使う。量子化する前は、重み1個を16ビットで表すとする。16ビットは2バイトなので、重み全体は 40億 × 2 = 80億バイト、つまり8 GBになる(1 GBを10億バイトとして数える)。
このモデルを量子化する。量子化は、重みを元より少ないビット数で表し直す処理で、ここでは重み1個を4ビットにする。4ビットは0.5バイトなので、重み全体は 40億 × 0.5 = 20億バイト、つまり2 GBになる。量子化したモデルはGGUFという形式のファイルで配られ、ファイルにはこの2 GBの重みが入っている。実際のGGUFは、重みを小さな区画に分け、重みのほかに区画ごとの倍率なども持つので、4ビットの型でも重み1個あたりは4ビットを少し超える(Q4_Kという型では4.5ビット)3。例ではこの分を数えない。
モデルは、文章をトークン(単語やその一部に当たる単位)に分けて扱い、トークンを1個ずつ生成する。例では、トークンを1個生成するたびに、40億個の重みをすべて演算に使うとする。
2 GBのファイルを読んで計算する方法は、三つある。
| 重みの扱い方 | 重みが使うメモリと、展開する重みの数 |
|---|---|
| ① 読み込むときに展開する | 8 GB。展開は読み込むときに40億個 |
| ② 4ビットのまま置き、演算の直前に展開する | 2 GBと、展開した値を置く領域。展開はトークン1個ごとに40億個 |
| ③ 4ビットのまま置き、演算が4ビットの値を直接読む | 2 GB。展開は0個 |
①は、読み込むときに40億個の重みをすべて16ビットの形式へ書き直す。この書き直しを展開と呼ぶ。その後の演算は16ビットの値を読むので、PyTorchが備える汎用の演算をそのまま使える。重みが使うメモリは8 GBで、量子化する前と同じである。
②は、重みを4ビットのままメモリに置く。汎用の演算は4ビットの保存形式を読めないので、演算の直前に、使う重みを16ビットへ展開する。常に置いておく重みは2 GBで済むが、トークンを1個生成するたびに、40億個分の展開が入る。
③は、重みを4ビットのまま置き、演算が保存形式を直接読む。展開は起きない。その代わり、保存形式を読める専用の演算が要る。GPUの上で一つの演算を行う小さなプログラムをカーネルと呼ぶので、③に要るのは専用のカーネルである。
三つの方法で、各層をどの順に計算するかは変わらない。変わるのは、重みをメモリにどう置くかと、個々の演算をどのプログラムが行うかである。
計算に使う値も、三つの方法で変わらない。展開はビット数を戻す処理で、量子化で丸めた値は元に戻らない。どの方法でも、計算に使うのは4ビットに量子化した後の値である。
①から③を比べると、重みの扱い方について三つの性質が言える。
- ①で重みが使うメモリは、重みの個数と展開後のビット数で決まる。量子化を4ビットから2ビットへ強めても、①のメモリは8 GBのままである。
- メモリを2 GBに保ち、展開も0個にできるのは③だけである。③は、保存形式を直接読む演算がある環境でしか使えない。その演算が無ければ、①か②になる。
- 三つの方法で変わるのは、重みの置き方と個々の演算だけである。各層の計算を定義するコードは、どの方法でも同じものを使える。
2024年からのtransformersは①である。ただし2024年5月の版は書き直す先を32ビットとしていたので、例の重みなら16 GBを使う2。いまの展開の経路では、書き直す先の精度を使う人が指定する4。今回加わった経路は③で、保存形式を直接読む演算としてggmlのカーネルを使う。
2024年の読み込みは展開し、今回の経路はggmlのカーネルが直接読む
transformersはHugging Faceのライブラリで、作り手は自らを「モデル定義の土台」と位置づける1。llama.cppはggml-orgの推論エンジンで、READMEは主な目的を、LLMの推論を、最小限のセットアップと最先端の性能で、幅広いハードウェアの上で行えるようにすることだと書く。対象はローカルとクラウドの両方である5。GGUFを作ったのはllama.cppのチームで、GGMLとllama.cppはHugging Faceに加わっている1。
作り手は対応の背景として、手元の機械で行う推論(ローカル推論)にGGUFが広く使われていることを挙げる。llama.cppの推論エンジンは「Ollama、LM Studio、JanといったローカルAIの道具を動かして」おり、「GGUFモデルは何百万回もダウンロードされてきた」1。
性質1に当たるのは、2024年からの読み込みである。2024年5月のv4.41.0から、transformersはGGUFの重みを読み込み、通常のPyTorchのモデルへ変換していた2。これは例の①である。展開して読む経路は、今回の対応の後も別の選択肢として残る1。
量子化でファイルがどれだけ小さくなるかは、作り手の記事に実例がある。UnslothのQwen3.5-4Bは、量子化しない版のファイルが8.42 GBで、大半の重みを4ビットにした版(Q4_K_M)が2.74 GBである1。この版は、量子化に敏感な一部の重みを高い精度で残す1。すべての重みを4ビットにした例との差には、この点のほか、区画ごとの倍率の分も入る。量子化を強めれば、より大きなモデルもメモリに収めやすくなるが、品質との引き換えはモデルと課題で変わる1。
性質2に当たるのは、ggml-quantizationというカーネルである。このカーネルは、量子化したままの重みを行列演算の中で直接読み、トークンを一つ生成するたびに重み行列全体を展開することはしない1。直接読むのが例の③で、作り手が避けたと書く動作が例の②である。
ggmlのカーネルをtransformersから呼べるようにするのが、kernelsライブラリである。kernelsは、Apple SiliconのGPU向けのggmlのカーネルを、互換のビルドにしてHugging Face Hubで配り、transformersがそれを呼び出す1。使い方は2024年からの読み込みと同じで、from_pretrainedにgguf_fileを渡す。重みがApple SiliconのGPUの上に量子化したまま置かれると、transformersは互換のカーネルを自動で読み込む1。互換のカーネルが無いとき、ローダーは展開に切り替わり、より多くのメモリを使う1。これは例の①へ戻る動作である。
作り手がggmlのカーネルを再利用した目的は、性能をllama.cppに近づけることである1。測定の結果について、作り手は、三つのGGUFチェックポイントのいずれでもtransformersがllama.cppに近かったと書く1。ただし作り手が明記するとおり、測り方は揃っていない。llama.cpp側は、プロンプトの処理を除いて128トークンを生成する速さを3回測り、平均した値である。transformers側は、12トークンのプロンプトの処理を含めて同じ128トークンを生成する速さを3回測り、最良を取った値である1。この比較を、そのまま推論エンジンどうしの優劣としては読めない。
速さに効いている変更は、重みを読むカーネルだけではない。作り手は、重みを読む演算のほかにもggmlのカーネルを使い、生成の処理でCPUがGPUの結果を待つ回数も減らした1。生成の処理の変更は、GGUFに限らず、transformersで生成するすべてのモデルに効く1。
各層を定義するコードが残るので、内部を調べる道具が使える
性質3に当たるのは、kernelsライブラリの効果についての作り手の説明である。作り手は、モデルを別の推論エンジンで置き換えることなく、ggmlの成果をPyTorchのモデルに持ち込めると書く1。transformersが取り込んだのはカーネルで、llama.cppの推論エンジン全体は取り込んでいない。各層の計算を定義するコードは、transformersのものがそのまま動く。ただし、どのモデルでもそのまま③になるわけではない。置き換える演算はアーキテクチャごとに統合と検証が要り、いま済んでいるのはQwen3.5系だけである1。
そのため、transformersの上で動く道具を、量子化したままのモデルに使える。作り手は用途を五つ挙げる。途中の層の出力を取り出す仕組み(hook)を使った実験、GGUFモデルの評価、GGUFへの変換の検証、生成の手順を変える試行、微調整である1。五つのうち微調整は、重みを展開してから行う1。例で言えば、微調整は①で行うので、重みが使うメモリは8 GBになる。
作り手は、二つの道具の役割を分けている。「llama.cppはローカル推論の土台を、transformersはモデル定義の土台を提供する」とし、「効率的なローカル推論が優先なら、llama.cppが引き続き推奨するエンジンである」と明記する1。
性質3は、GGUFのファイルの外にも及ぶ可能性がある。作り手は、カーネルが作用する相手は個々のテンソル(数値の配列)で、モデル全体がGGUFのファイルから来ている必要はないと書く1。llama.cppに専用の実装が無いアーキテクチャ(モデルの層の組み方)でも、transformersのモデル定義の上でggmlの演算を使えることになる。ただしその場合も、アーキテクチャごとの統合と検証は要る。
代償は対応範囲、量子化の損失、推論エンジンごとの差
例の③が使える範囲は、デバイスでも、アーキテクチャでも、量子化の型でも狭い4。作り手によると、量子化したまま計算する経路は、当面Apple SiliconのGPUの上でしか動かない1。対応するアーキテクチャは、Qwen3.5の二つの型と、互換のQwen3.8のチェックポイントである1。複数の入力をまとめて生成する処理にも、まだ改善が要ると作り手は書く1。作り手の記事の時点では、この経路を使うにはtransformersをmainブランチから入れる必要があり、次のリリースまでの措置とされている1。
範囲の外では、性質2のとおり①に戻る。Apple Silicon以外の環境や、Qwen3.5系以外のモデルでは、transformersの従来のローダーが対応するアーキテクチャなら重みを展開して読み、そうでなければllama.cppを使う4。例で言えば、展開して読むと、重みが使うメモリは2 GBから8 GBになる。内部は調べられるが、量子化で減らしたメモリは増える。
デバイスとアーキテクチャの二つの制約は、見通しが違う。作り手が広げると書いているのは、対応するアーキテクチャと、Apple SiliconのGPUの上で複数の入力をまとめて生成する処理である。ほかのデバイスについては「当面」と書くだけで、予定は示していない1。本稿は、アーキテクチャの狭さは一時的だが、デバイスの制約はいつ解けるか見通せないと判定する。
量子化による精度の低下は、①でも③でも残る。例で確かめたとおり、どの方法でも、計算に使うのは量子化した後の値だからである。llama.cppのquantizeのREADMEは、量子化が「いくらかの精度低下を招きうる」と書く。量子化のときに適切な補助のファイルを使えば、低下を最小化できるとも書く6。
低下が出るか、どれだけ出るかは課題とモデルで変わり、Hugging Faceの記事も「実際にモデルにさせたい作業で評価せよ」と書く1。本稿はこの手間を恒久的な代償と判定する。形式や推論エンジンを替えても、量子化した重みを使う限りこの確認は要る。
性質2が決めるのは、メモリと展開の量までである。速さと安定は、性質2からは決まらない。比較のため、同じGGUFを受け入れたもう一つの推論エンジンとしてvLLMを見る。vLLMも、GGUFの計算にllama.cppのggmlカーネルを使っている。ただし使うのは、2024年5月のllama.cppのビルドからCUDA向けのカーネルを複写して自前で持つもので7、transformersがHubから受け取るApple SiliconのGPU(Metal)向けのカーネルとは別物である1。そのため、vLLMとtransformersの速さと安定の違いが推論エンジンの差なのかカーネルの差なのかは、この比較からは分けられない。
vLLMのドキュメントは、現時点ではGGUFをメモリ使用量を減らす手段として使えると書く。速さと安定については、GGUF対応を「非常に実験的で最適化が不十分であり、他の機能と両立しないことがある」と書く8。
vLLMは、GGUFの対応を本体から外し、別のプラグインへ移した8。元の提案は対応の廃止で、利用が保守の負担に比べて非常に少ないこと、手元のGPUではllama.cppで動かすほうが速いという利用者の声を理由に挙げていた。利用の少なさは、提案者自身の見立てによる見積もりである。プラグインへ移す形は議論の中で出て、提案の題が改められた9。本稿は、vLLMとtransformersの速さと安定の差を、恒久とも一時的とも判定できないと見る。
速さか、内部の調査か、メモリかで道具を選ぶ
使い分けは、何を優先するかで決まる。手元で速く動かすことが最優先なら、作り手が推奨するとおりllama.cppを使う。内部を調べる、手元の課題で評価する、GGUFへの変換を検証する、といった作業ならtransformersで読む。Apple SiliconのGPUとQwen3.5系のモデルなら例の③で動き、それ以外は①になる。GGUFから微調整するときも、transformersで①を使う。
vLLMでGGUFを使うなら、ドキュメントが挙げる用途はメモリを減らすことで、別のプラグインの導入が要る。そのうえで、対応が現時点で非常に実験的で最適化が不十分であり、他の機能と両立しないことがある点を前提にする8。
ほかの道具の説明に「GGUFに対応」とあるときも、同じ例で読める。確かめるのは、その道具がファイルを読んだあと、重みを展開するのか、保存形式のまま計算するのかである。展開するなら、重みが使うメモリは例の8 GBの側になる。保存形式のまま計算するなら、その形式を読むカーネルがどのデバイスとアーキテクチャで動くかが、使える範囲を決める。内部を調べられるかどうかは、各層の計算を定義するコードがどの道具のものかで決まる。同じ設計がほかのモデル定義のライブラリへ広がるかどうかは、この一件からは言えない。
出典9件
-
Hugging Face, “Transformers now runs llama.cpp quants”, Hugging Face Blog, 2026年9月22日公開。「transformersでGGUFモデルを効率よく動かす対応を加える。これにより、ノートPCのメモリに合う大きさのチェックポイントを、使い慣れたtransformersのAPIで使える」(“We’re adding support for running GGUF models efficiently in transformers, so you can use checkpoints sized for your laptop’s memory through the familiar transformers APIs.”)、「その推論エンジンは、Ollama、LM Studio、JanといったローカルAIの道具を動かしている」(“Its inference engine powers local AI tools such as Ollama, LM Studio, and Jan.”)、「llama.cppチームが開発したGGUFは、ローカル推論で広く使われる形式である」(“GGUF, developed by the llama.cpp team, is a widely used format for local inference.”)。MLX については「MLX のようなプロジェクトとともに、ローカル推論を日常の実用的な選択肢にしてきた」(“Alongside projects like MLX, it has helped make local inference a practical option for everyday use.”)と書く、「GGUFモデルは何百万回もダウンロードされてきた」(“GGUF models have been downloaded millions of times.”)、「llama.cppに性能を近づけるため、kernelsライブラリを通して下層のggmlカーネルを再利用し、generateのオーバーヘッドを減らしている」(“To bring performance close to llama.cpp, we’re reusing its underlying ggml kernels through the kernels library, and reducing overhead in generate.”)、「GGUFは、トークナイザの情報と任意のチャットテンプレートを含むメタデータと、モデルの重みを一つのファイルにまとめる」(“GGUF packages model weights and metadata, including tokenizer information and an optional chat template, in one file.”)、「llama.cppはローカル推論の土台を、transformersはモデル定義の土台を提供する」(“llama.cpp provides a foundation for local inference, while transformers provides a foundation for model definition.”)、「効率的なローカル推論が優先なら、llama.cppが引き続き推奨するエンジンである」(“llama.cpp remains our recommended engine when your priority is efficient local inference.”)、「別の推論ランタイムでモデルを置き換えずに、ggmlの成果をPyTorchのモデルに持ち込む」(“That brings ggml’s work into the PyTorch model without replacing the model with a separate inference runtime.”)、「カーネルはテンソルに作用する。モデル全体がGGUFファイルから来る必要はない」(“A kernel operates on tensors; it does not require the whole model to come from a GGUF file.”)、「packedの推論経路は当面MPSのみである」(“The packed inference path is MPS-only for now.”)、「パディングとバッチ処理はまだ手を入れる必要がある」(“Padding and batching still need work.”)、「packedのローダーが現在扱うのは、互換のQwen3.8チェックポイントを含む、Qwen3.5のdenseとMoEのアーキテクチャである」(“The packed loader currently covers the Qwen3.5 dense and MoE architectures, including compatible Qwen3.8 checkpoints.”)、「実際にモデルにさせたい作業で評価せよ」(“Evaluate it on the work you actually want the model to do.”)、「展開によるGGUFの読み込みは、別の選択肢として残る」(“GGUF import through dequantization remains a separate option”)、「transformersは三つのチェックポイントのいずれでもllama.cppに近い」(“Transformers is close to llama.cpp across all three checkpoints.”)、「MPS上のgenerate_batchへ広げたい」(“We want to extend the work to generate_batch on MPS.”)、「他のアーキテクチャへの対応は比較的素直で、少しずつ広げていく」(“Adding support for other architectures is relatively straightforward, and we’ll expand coverage gradually.”)、「各アーキテクチャにはまだ統合と検証が要る」(“Each architecture still needs integration and validation”)、「互換の量子化カーネルが無ければ、ローダーはモデルの展開に切り替え、より多くのメモリを使う」(“Without a compatible quantization kernel, the loader falls back to dequantizing the model and uses more memory.”)、必要なものとして「最新版のtransformers(次のリリースまでは当面main)」(“The latest version of transformers (main for now, until the next release)”)、「量子化を強めると大きなモデルを収めやすくなるが、品質との引き換えはモデルと課題による」(“More aggressive quantization can help larger models fit, but the quality tradeoff depends on the model and the task.”)と書く。ファイルの大きさはUnslothのQwen3.5-4BでBF16が8.42 GB、Q4_K_Mが2.74 GB。測定条件について、llama.cpp側は「tg128を報告する。デコードした128トークンにわたるトークン生成速度を3回の繰り返しで平均し、プロンプト処理は除く」(“which reports tg128: the token-generation rate over 128 decoded tokens, averaged across three repetitions, with prompt processing excluded”)、transformers側は「transformersの列は、12トークンのプロンプトから同じ128トークンを生成するgenerateで、ウォームアップ後の3回のうち最良を取り、prefillを含む」(“The transformers column is generate producing the same 128 tokens from a 12-token prompt, best of three warmed runs, and it includes prefill.”)と書く。立ち位置: GitHubのhuggingface/transformersは2018年10月29日作成、スター166,594(GitHub API、2026年9月25日時点)。https://huggingface.co/blog/transformers-llama-cpp-quants ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9 ↩10 ↩11 ↩12 ↩13 ↩14 ↩15 ↩16 ↩17 ↩18 ↩19 ↩20 ↩21 ↩22 ↩23 ↩24 ↩25 ↩26 ↩27 ↩28 ↩29 ↩30 ↩31 ↩32 ↩33 ↩34
-
Hugging Face, transformers v4.41.0 リリースノート(GitHub Releases、2024年5月17日公開)。「GGUFの量子化の大半を、transformersのfrom_pretrainedで直接読み込み、通常のPyTorchのモデルへ変換できるようになった」(“You can now load most of the GGUF quants directly with transformers’
from_pretrainedto convert it to a classic pytorch model.”)と書く。リリースノートは変換先の精度を書かないが、同じ版に同梱のドキュメント(docs/source/en/gguf.md)は「モデルを読み込むとき、まずfp32へ展開し、それからPyTorchで使う重みを読み込む」(“When loading a model, we first dequantize it to fp32, before loading the weights to be used in PyTorch.”)と書く。https://github.com/huggingface/transformers/releases/tag/v4.41.0 https://raw.githubusercontent.com/huggingface/transformers/v4.41.0/docs/source/en/gguf.md ↩ ↩2 ↩3 -
Hugging Face Hub docs, “GGUF”(2026年9月30日取得)。量子化の型の表で、Q4_Kを「4ビット量子化。8個のブロックからなるスーパーブロックで、各ブロックは32個の重みを持つ。(中略)結果として重み1個あたり4.5ビット」(“Super-blocks with 8 blocks, each block has 32 weights.” / “resulting in 4.5 bits-per-weight”)と書く。重みの式にはブロックごとの倍率(block_scale)と最小値(block_min)が入る。Hugging Faceの発表記事は、量子化の型の説明としてこの頁を指す。https://huggingface.co/docs/hub/gguf ↩
-
Hugging Face, transformers docs, “GGUF”(mainの版、2026年9月30日取得)。「別のデバイスや量子化の型では、モデルは読み込み時に展開され、まだ対応していないアーキテクチャは従来のローダーを通る」(“On another device or quantization type, the model is dequantized at load time, and an architecture that isn’t supported yet goes through the legacy loader.”)、「従来のローダーが対応するのは、Llama、Mistral、Qwen2、Qwen2Moe、Phi3、Bloom、Falcon、StableLM、GPT2、Starcoder2などである」(“The legacy loader supports Llama, Mistral, Qwen2, Qwen2Moe, Phi3, Bloom, Falcon, StableLM, GPT2, Starcoder2”)、展開して得たモデルについて「出てくるのは通常のdenseなモデルで、GGUFのチェックポイントを渡したdtypeへ持ち込む方法でもある」(“The model that comes out is a regular dense model, so this is also how you take a GGUF checkpoint into the dtype you passed.”)と書く。https://huggingface.co/docs/transformers/gguf ↩ ↩2 ↩3
-
ggml-org, llama.cpp README(2026年9月25日取得)。「llama.cppの主な目的は、最小限のセットアップと最先端の性能で、幅広いハードウェア上で、ローカルでもクラウドでも、LLM(およびVLM)の推論を可能にすることである」(“The main goal of
llama.cppis to enable LLM (and VLM) inference with minimal setup and state-of-the-art performance on a wide range of hardware - locally and in the cloud.”)と書く。立ち位置: GitHubのggml-org/llama.cppは2023年3月10日作成、スター129,419(GitHub API、2026年9月25日時点)。https://github.com/ggml-org/llama.cpp ↩ -
llama.cpp, “quantize” README(2026年9月25日取得)。「ただしこの処理は、いくらかの精度低下を招きうる。その低下は通常、次の指標で測られる」(“This process however, may introduce some accuracy loss which is usually measured in”)、「これは適切なimatrixファイルを使うことで最小化できる」(“This can be minimized by using a suitable imatrix file.”)と書く。測る指標としてperplexityとKLダイバージェンスを挙げる。https://github.com/ggml-org/llama.cpp/blob/master/tools/quantize/README.md ↩
-
vLLM project, vllm-gguf-plugin(2026年9月26日取得)。GGUFの行列演算カーネルmmq.cuhは、冒頭のコメントでllama.cppのビルドb2899のggml-cuda/mmq.cuからの複写(“copied from”)と記す。b2899は2024年5月16日のコミットである(GitHub API)。READMEは導入の前提に「CUDA toolkit or ROCm toolkit」を挙げる。https://github.com/vllm-project/vllm-gguf-plugin ↩
-
vLLM docs, “GGUF”(2026年9月25日取得)。「vLLMのGGUF対応は現時点で非常に実験的で最適化が不十分であり、他の機能と両立しないことがある点に注意してほしい」(“Please note that GGUF support in vLLM is highly experimental and under-optimized at the moment, it might be incompatible with other features.”)、「現在のところ、GGUFはメモリ使用量を減らす手段として使える」(“Currently, you can use GGUF as a way to reduce memory footprint.”)、「GGUF対応は本体外のvllm-gguf-pluginへ移った。GGUFモデルを動かす前にプラグインを入れておくこと」(“GGUF support has migrated to OOT vllm-gguf-plugin” / “Make sure you have GGUF plugin installed before serving a GGUF model.”)、「GGUFモデルではなく元のモデルのトークナイザを使うことを勧める。GGUFからのトークナイザ変換は時間がかかり不安定で、語彙の大きいモデルでは特にそうだからだ」(“We recommend using the tokenizer from base model instead of GGUF model. Because the tokenizer conversion from GGUF is time-consuming and unstable, especially for some models with large vocab size.”)と書く。https://docs.vllm.ai/en/latest/features/quantization/gguf.html ↩ ↩2 ↩3
-
vLLM, “[RFC]: Migrate bitsandbytes and GGUF quantization support to OOT plugin”, GitHub issue #39583(2026年4月11日起票)。起票時の題は「[RFC]: Deprecate bitsandbytes and GGUF quantization support」で、2026年5月20日に現在の題へ改められた(GitHub APIのtimeline)。本文は「このRFCは、両方のバックエンドを非推奨にし、いずれ取り除くことを提案する」(“This RFC proposes deprecating both backends and eventually removing them, to simplify the core weight loading infrastructure and unblock further cleanup.”)と書く。「bitsandbytesとGGUFは、課す保守の負担に比べて利用が非常に少ない(私の見る限り、それぞれおよそ0.5%と0.1%)」(“bitsandbytes and GGUF are two quantization/format backends in vLLM that see very low usage relative to the maintenance burden they impose (roughly 0.5% and 0.1% respectively from what I can tell).”)、「性能も芳しくなく、利用者からは、手元のGPUでのバッチサイズ1の性能を重んじる違いから、GGUFモデルはllamacppで動かすほうが速いという声がよく出る」(“In addition, performance is not great when using these methods, with users often citing running GGUF models with llamacpp to be faster due to different priorities wrt bs=1 performance on consumer GPUs.”)と書く。https://github.com/vllm-project/vllm/issues/39583 ↩
この記事はAIが執筆しています。内容には誤りが含まれる可能性があります。ご注意ください。