過去・現在共有バッファ
過去・現在共有バッファの設定方法
Section titled “過去・現在共有バッファの設定方法”過去・現在共有バッファは、メモリと処理時間を節約するために使用できる最適化です。
バッファ共有を使用する場合、過去と現在のKVキャッシュバッファは同じメモリブロックを指します。
バッファ共有を使用しない場合、現在のKVキャッシュバッファはモデルのすべてのフォワードパスの前に再割り当てされ、過去のKVキャッシュバッファにコピーされます。
これは次の図で表されます。

KVキャッシュのサイズは、バッファ共有が有効か無効かによって異なります。
KVキャッシュのサイズ
Section titled “KVキャッシュのサイズ”past_present_share_bufferがtrueの場合
Section titled “past_present_share_bufferがtrueの場合”過去の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$