ホームへ戻る

GitHub Repo

Transformersコミュニティがプロンプト検索デコードの異常を報告、CFGとSynthIDの設定で出力が変わる可能性

10月28日のTransformersコミュニティからの報告によると、状態を持つスコア処理器とプロンプト検索デコードを組み合わせると、貪欲デコードの結果が変わる可能性があります。CPUでの最小再現コードが添えられていますが、確認時点ではメンテナーによる確認も公開修正もありません。

Marcus Qwertyus · Public domain · Image source
zh-Hant

Transformersで、推論の正確性に関する報告が1件ありました。生成を高速化するためのプロンプト検索デコードを有効にし、分類器なしガイダンス(CFG)またはSynthIDテキスト透かしと組み合わせると、生成されるトークン列が変わる可能性があるというものです。報告者によると、この問題は5.21.0および指定されたmainブランチのコミットで再現できました。現在もIssueはオープンで、修正PRへのリンクはありません。コミュニティからの報告

プロンプト検索デコードは、入力内で繰り返されるn-gramから候補トークンを提示し、モデルがそれを検証する方式です。要約など、出力と入力が大きく重なるタスクに適しています。公式ドキュメントでは推測的デコードの一種として紹介されており、貪欲デコードとサンプリングの両方で使用できます。この種の最適化の主な価値は、生成の意味を保ちながら逐次推論のコストを抑えることです。そのため、決定的な設定で出力が変わるなら、調査が必要です。公式の推論ドキュメント

報告では、小型のランダムなLlamaモデルをCPUで実行し、do_sample=Falseとして、プロンプト検索を無効にした場合とprompt_lookup_num_tokens=3に設定した場合を比較しています。通常の貪欲デコードと反復ペナルティを適用した2つの対照条件では、結果は同じでした。一方、guidance_scale=1.5を加えると2つ目の新規トークンから分岐し、SynthIDの条件では最初の新規トークンから異なりました。これは特定の設定での再現結果であり、すべてのモデルや生成モードに当てはまるとは限りません。テストコードと出力

報告者の根本原因の分析では、処理器の状態が問題の中心として挙げられています。候補の選別と検証の際にlogits処理器が追加で呼び出され、却下されたドラフト位置でも内部状態が進む可能性があるという指摘です。公式ドキュメントによると、CFG処理器は無条件分岐のKVキャッシュを使い、SynthIDはトークンのコンテキストと透かし関連の状態を保持します。これらの仕組みから、両者について追加の確認が必要な理由はわかりますが、今回の根本原因が公式に確認されたことを意味するわけではありません。処理器のドキュメント

エンジニアリングチームにとって、この報告は高速化のテストで出力の一貫性も確認すべきことを示しています。上記の組み合わせを使っている場合は、まず自社のモデルで機能の有効・無効を切り替えたときのトークンを比較し、今後、互換性の制限や状態復元の仕組みが導入されるかを追うとよいでしょう。透かしの検出率、正式なモデルの品質、性能への影響を示すデータは現時点でなく、この報告だけを根拠にSynthIDが機能しなくなったと結論づけることはできません。

出典

  1. Prompt-lookup decoding advances stateful logits processors on draft tokens
  2. Transformers:Optimizing inference
  3. Transformers:Utilities for generation