ホームへ戻る

GitHub Repo

TransformersでキャッシュのオフロードによりQwen3.8の出力が変化するとの報告、異常は初回の再利用から

最小再現コードを添えた報告によると、ハイブリッドアテンションモデルではプリフィルが正常でも、次のステップの出力がずれる可能性がある。メンテナーによる確認はまだなく、GPUメモリ使用量の最適化においても、複数ステップにわたる数値的一致性の検証が必要であることを示している。

Andrew Wippler from Lancaster, USA · CC BY 2.0 · Image source
zh-Hant

9月19日、Hugging Face Transformersにハイブリッドモデルのキャッシュ異常が報告された。Qwen3.8-27BでCPUへのオフロードを有効にすると、キャッシュを初めて再利用した時点で、次のトークンが異なるという。報告には最小再現コードが添付されており、実行環境はTransformers 5.17.0、PyTorch 2.14.0、RTX PRO 6000 Blackwell 1枚で、BF16とSDPAを使用している。[問題報告](https://github.com/huggingface/transformers/issues/48947)

キャッシュのオフロードは、転送時間と引き換えにGPUメモリ使用量を削減する仕組みだ。大部分の層の過去の状態をCPUに置き、計算中に次の層の状態をプリフェッチし、使い終えた状態をCPUに戻す。公式ドキュメントではGPUメモリが不足する場合の選択肢として紹介されており、`DynamicCache(offloading=True)`を手動で作成することもできる。実装上の検証では、スループットに加えて、デバイス間の転送後も出力が一致するかを確認する必要がある。[キャッシュのドキュメント](https://huggingface.co/docs/transformers/v5.17.0/en/kv_cache)

報告で使われた2組の入力は、それぞれ4,096個のランダムなトークンで構成される。最初のプリフィルの出力は完全に一致したが、次の順伝播ではlogitsの最大絶対差が2.117に達し、スコアが最も高いトークンも異なった。これは、プリフィルだけを確認するテストの盲点を示している。モデルが正常に起動し、GPUメモリ使用量も減っていても、生成結果はすでに変化している可能性がある。これらの数値は報告者によるもので、独立した再検証の結果ではない。[テストコードと出力](https://github.com/huggingface/transformers/issues/48947)

ハイブリッドアーキテクチャでは、検証すべき範囲も広がる。モデル設定には線形アテンション層が48層、フルアテンション層が16層と記載されている。同バージョンのソースコードと照合すると、線形アテンション層は畳み込み状態と再帰状態を保持し、フルアテンション層はキーとバリューのテンソルを保持する。そのため、従来のKVテンソルの転送だけを検証しても、すべての状態を網羅できない。ただし、現時点ではこれを根拠に、どの種類の状態に問題があるかを断定することはできない。[モデル設定](https://huggingface.co/Qwen/Qwen3.8-27B/blob/main/config.json)、[キャッシュの実装](https://raw.githubusercontent.com/huggingface/transformers/v5.17.0/src/transformers/cache_utils.py)

再現コードでは、その後の生成に貪欲デコードを使用している。最初のトークンに違いが生じると、2つの実行経路には異なる入力が渡されるため、それ以降に拡大する差をすべてオフロードの影響に帰すことはできない。この設計を踏まえると、さらに原因を絞り込むには、各ステップの入力を固定したうえで、層ごとに状態と出力を比較し、キャッシュの誤差と生成経路の分岐による影響を切り分けるのがよい。受け入れ検証でも、モデルのリビジョン、数値精度、アテンションのバックエンド、入力長を固定し、オフロードなしのベースラインを保持する必要がある。最終的なテキストだけを比較すると、数値誤差と生成内容の変化を混同しやすい。各ステップのスコアを保存することで、調査範囲を絞り込みやすくなる。これらは再現コードに基づく検証上の提案だ。

確認時点で、この問題は引き続きオープンであり、メンテナーによる確認や修正へのリンクは見当たらない。導入する側は、まず複数ステップにわたる出力の一致性をオフロードの受け入れ検証に加え、今後の再現報告や修正の検証を追跡できる。現時点の証拠が対象とするのは上記の組み合わせに限られ、すべてのモデルやオフロード方式が影響を受けると一般化することはできない。[対応状況](https://github.com/huggingface/transformers/issues/48947)

出典

  1. Transformers Issue #48947:混合模型首次重用卸載快取後的 logits 異常
  2. Transformers 5.17.0:Cache strategies
  3. Qwen3.8-27B 模型設定
  4. Transformers v5.17.0 cache_utils.py