ホームへ戻る

GitHub Repo

TransformersコミュニティがQwen4-Expのキャッシュリセット時の欠落を報告、再利用後にスパースアテンションの結果が変わる可能性

10月19日のTransformersコミュニティからの報告によると、リセット済みキャッシュをQwen4-Expで再利用すると、残存する位置情報によってスパースアテンションの選択が変わる可能性があります。報告には再現コードとローカルでの修正案が含まれますが、メンテナーによる確認はなく、事前学習済みモデルでの評価も完了していません。

Sarang · Public domain · Image source
zh-Hant

Transformersコミュニティは10月19日、Qwen4-Expのキャッシュライフサイクルに関する問題を報告しました。DynamicCacheまたはStaticCacheにreset()を呼び出した後、同じオブジェクトを新しいリクエストに渡すと、前の実行で使われたposition_idsが残る場合があります。QSAが実際に注意キーのブロックを切り詰める際、この位置情報によってブロックの選択や出力logitsが変わる可能性があります。報告でテストされたのは5.21.0.dev0のソースコードであり、すべての本番環境に影響すると推定することはできません。問題報告

この問題は、推論サービスにおけるキャッシュ管理に関係します。公式ドキュメントによると、KV cacheはトークンを逐次生成する際の重複計算を避けるために使われます。DynamicCacheはシーケンスに応じて拡張され、StaticCacheは容量をあらかじめ確保してコンパイル最適化をしやすくします。開発者はキャッシュを自分で作成し、past_key_valuesを通じてモデルに渡すこともできます。そのため、手動で管理するオブジェクトを使う実行経路では、キャッシュが完全にリセットされるかどうかが重要になります。公式キャッシュドキュメント

報告者はCPU、FP32、ランダム初期化した小型モデルを使い、まず3トークンを入力してからリセットし、続けて12トークンを入力しました。この時点でキャッシュ内のトークン数は12でしたが、位置数は15でした。テストではスパース選択の予算を意図的に小さく設定し、短いシーケンスでも切り詰めが発生するようにしています。ある条件では、logitsの最大絶対差は約0.031でした。残存する位置属性を取り除くと、新規作成したキャッシュと同じ結果になりました。ただし、この差を回答品質の低下に直結させることはできません。また、この実行での貪欲生成では、生成された単一トークンに変化はありませんでした。再現と比較

報告された修正案では、各層の状態をリセットした後に位置属性も削除します。投稿者によると、ローカルでの確認は通過していますが、CUDA、コンパイル実行、事前学習済み重みではテストされていません。通常の独立したgenerate()呼び出しでは新しいキャッシュが作成され、テストで問題は再現しませんでした。キャッシュを独自に再利用するエンジニアリングチームは、メンテナーがメタデータのクリーンアップ責任をどう定めるかを確認し、実際のモデルでリセットしたキャッシュと新規作成したキャッシュの結果を比較するとよいでしょう。現時点で正式な修正版はありません。修正案と制約

出典

  1. Qwen4-Exp: cache.reset() leaves stale position_ids when reusing DynamicCache or StaticCache
  2. Transformers — Cache strategies