コンテンツにスキップ

過去・現在共有バッファ

過去・現在共有バッファの設定方法

Section titled “過去・現在共有バッファの設定方法”

過去・現在共有バッファは、メモリと処理時間を節約するために使用できる最適化です。

バッファ共有を使用する場合、過去と現在のKVキャッシュバッファは同じメモリブロックを指します。

バッファ共有を使用しない場合、現在のKVキャッシュバッファはモデルのすべてのフォワードパスの前に再割り当てされ、過去のKVキャッシュバッファにコピーされます。

これは次の図で表されます。

代替テキスト

KVキャッシュのサイズは、バッファ共有が有効か無効かによって異なります。

過去のKVキャッシュのサイズ = 現在のKVキャッシュのサイズ(バイト)

$バッチサイズ * num_key_value_heads * max_length * head_size $

たとえば、4ビット量子化Phi-4-mini-instructモデルで、バッチサイズが1、最大長が4kの場合、キャッシュのサイズは次のようになります:$1 * 8 * 4096 * 128 = 4GB$

キャッシュのサイズは、主にmax_lengthパラメータの値によって決定されることに注意してください。

past_present_share_bufferがfalseの場合

Section titled “past_present_share_bufferがfalseの場合”

過去のKVキャッシュのサイズ(バイト)= $バッチサイズ * num_key_value_heads * past_sequence_length * head_size$

現在のKVキャッシュのサイズ(バイト)= $バッチサイズ * num_key_value_heads * (past_sequence_length + 1) * head_size$

たとえば、4ビット量子化DeepSeek R1 Qwen 1.5Bモデルで、バッチサイズが1、過去のシーケンス長が1kの場合、過去のキャッシュのサイズは次のようになります:$1 * 2 * 1024 * 128 = 256M$、現在のキャッシュのサイズは次のようになります:$1 * 2 * 1025 * 128 = 257M$