Satu batch dapat memuat dua prompt dengan jumlah token yang sangat berbeda, tetapi keduanya direpresentasikan dalam tensor persegi panjang yang sama. Prompt yang lebih pendek diperpanjang dengan padding agar bentuk tensornya mengikuti sequence terpanjang dalam batch. Attention mask dapat mencegah posisi padding ikut membentuk probabilitas attention, tetapi pengecualian secara semantik itu tidak berarti kernel padat melewati setiap operasi pada baris dan kolom padding.
Perbedaan ini relevan pada model serving karena mask mengatur posisi mana yang boleh berinteraksi, sedangkan bentuk tensor menentukan banyak bagian dari pekerjaan yang diberikan kepada operator padat. Batch dengan padding besar dapat menjalankan lebih banyak aritmetika dan memindahkan lebih banyak data dibanding perkiraan yang hanya memakai jumlah token valid.
Masking mengubah kelayakan relasi attention
Untuk satu attention head, formulasi yang umum dimulai dari matriks query, key, dan value:
Q = XWq
K = XWk
V = XWv
A = softmax(QK^T / sqrt(d) + M)
O = AVM adalah komponen mask. Entri untuk pasangan query-key yang tidak diizinkan diberi nilai yang membuat probabilitasnya efektif menjadi nol setelah softmax. Representasi persisnya bergantung pada implementasi: ada jalur yang memakai nilai negatif berhingga dengan magnitudo besar, ada yang memakai negative infinity, dan kernel terfusi dapat menerapkan aturan yang sama tanpa membentuk matriks mask secara penuh.
Hasil semantiknya terbatas. Posisi key yang terkena mask tidak menyumbang massa probabilitas kepada query yang diizinkan setelah aturan masking diterapkan dengan benar. Pernyataan itu tidak menentukan apakah proyeksi, tile skor, state normalisasi, atau baris output untuk posisi padding sempat dihitung.
Karena itu, mask bukan kontrak umum untuk memangkas komputasi. Mask menetapkan relasi attention yang valid.
Batch persegi panjang tetap membawa dimensi padding
Misalkan satu batch berisi sequence dengan panjang 128 dan 512. Representasi dengan padding konvensional dapat memiliki bentuk:
batch x 512 x hidden_dimensionSequence pertama memiliki 384 posisi padding. Jika implementasi menjalankan operasi proyeksi padat pada seluruh tensor, Q, K, dan V untuk posisi tersebut tetap dihasilkan sebagai bagian dari operasi matriks yang sama dengan token valid.
Kernel attention juga menerima dimensi yang berasal dari panjang sequence hasil padding, kecuali runtime membawa metadata panjang sequence secara terpisah ke kernel yang mampu memanfaatkannya. Mask logis dapat menekan kontribusi skor yang tidak valid sementara program tensor yang diluncurkan tetap mencakup tile pada area padding.
Jumlah pekerjaan yang tidak berguna bergantung pada implementasi. Kernel fusion, tiling, sequence packing, API variable-length, dan dispatch khusus backend dapat mengubah operasi mana yang dilewati. Batas yang dapat dipegang lebih sederhana: keberadaan mask saja tidak membuktikan bahwa posisi padding hilang dari eksekusi.
Causal mask dan padding mask menangani batas yang berbeda
Decoder autoregresif sering menggabungkan dua pembatasan. Causal mask mencegah token mengakses posisi masa depan. Padding mask mencegah attention menuju posisi yang bukan bagian dari sequence.
Keduanya dapat digabung menjadi satu aturan attention, tetapi fungsinya tetap berbeda. Causality menentukan arah dependensi di antara token valid. Padding menandai posisi tensor yang ditambahkan agar bentuk beberapa sequence kompatibel.
Kedua aturan tersebut tidak harus mengubah dimensi fisik tensor. Operasi causal attention yang padat masih dapat memproses domain skor berbentuk persegi sambil mengecualikan segitiga atas secara semantik. Kernel khusus dapat memanfaatkan struktur causal untuk mengurangi sebagian pekerjaan, tetapi optimasi itu berasal dari implementasi kernel, bukan sekadar dari keberadaan causal mask. Pemisahan yang sama berlaku untuk padding.
Hal ini berguna saat membaca API. Parameter bernama attention_mask, key_padding_mask, atau nama serupa terutama mendeskripsikan semantik. Perilaku performa harus ditetapkan dari runtime dan jalur kernel yang benar-benar mengonsumsinya.
Packing mengeluarkan padding dari representasi
Sequence packing memakai pendekatan berbeda. Alih-alih memperpanjang setiap sequence hingga batas maksimum bersama, token valid dari beberapa sequence disimpan secara rapat dengan metadata yang mempertahankan batas tiap sequence.
Kernel attention variable-length dapat memakai cumulative sequence offsets atau metadata setara agar token dari satu sequence tidak mengakses sequence lain. Representasi fisik kemudian memuat lebih sedikit posisi padding, sehingga kernel memiliki kesempatan menghindari pekerjaan yang muncul pada layout persegi panjang dengan padding.
Packing tidak dapat dipertukarkan begitu saja dengan masking. Packing mengubah layout dan pengindeksan. Runtime harus mempertahankan batas sequence, semantik posisi, struktur causal, serta asumsi khusus model yang terkait dengan posisi token. Kernel juga harus mendukung representasi packed atau variable-length secara eksplisit.
Dengan demikian, mengganti batch berpola padding dengan packed batch merupakan perubahan eksekusi, bukan sekadar nilai mask yang berbeda. Correctness perlu diperiksa pada batas tempat posisi, offset, dan rentang attention dibentuk kembali.
Biaya padding bergantung pada komposisi batch
Overhead padding ditentukan oleh selisih antara panjang setiap sequence dan panjang maksimum batch. Mengelompokkan request dengan panjang yang berdekatan dapat mengurangi selisih tersebut walaupun model dan kernel attention tidak berubah.
Untuk batch berisi B sequence yang dipadding hingga panjang Lmax, tensor memuat:
B * Lmaxposisi token, sedangkan jumlah posisi valid adalah:
sum(L_i)Selisihnya memberi ukuran jumlah posisi padding:
padding_positions = B * Lmax - sum(L_i)Nilai ini bukan rumus langsung untuk latency atau FLOP. Operator berbeda memiliki skala yang berbeda terhadap panjang sequence, kernel memproses tile alih-alih posisi skalar terpisah, dan utilisasi hardware dapat meningkat saat bentuk tensor membesar. Meski begitu, hitungan tersebut memperlihatkan komposisi batch yang tidak terlihat jika sistem hanya mencatat token valid.
Untuk attention, matriks skor padat yang naif memiliki dimensi sequence-by-sequence. Karena itu, selisih padding yang besar sangat relevan pada prefill. Implementasi fused attention dapat menghindari materialisasi matriks skor, tetapi biaya eksekusinya tetap dipengaruhi dimensi sequence serta dukungan variable-length yang tersedia.
Generation mengubah bentuk persoalan
Saat generation autoregresif memakai KV cache, setiap langkah decoding umumnya menambah sedikit posisi query baru sambil mengakses key dan value yang tersimpan di cache. Perilaku padding pada fase ini dapat berbeda dari prefill.
Sistem serving dapat membatch sequence aktif dengan panjang cache berbeda. Sebagian runtime memakai layout cache berbasis page atau block, metadata sequence, atau kernel khusus sehingga token cache tidak perlu dibentuk menjadi satu persegi panjang sederhana dengan padding. Jalur lain masih dapat menanggung pekerjaan yang terkait dengan batas bentuk bersama.
Benchmark prefill tidak dapat menetapkan perilaku padding saat decode, dan benchmark decode tidak dapat menetapkan perilaku prefill. Jalur kernel, representasi cache, dan kebijakan batching perlu diidentifikasi secara terpisah.
Ukur jalur eksekusi, bukan nama mask
Pengukuran serving yang berguna mencatat jumlah token valid, panjang hasil padding atau bucketing, komposisi batch, serta backend attention yang benar-benar dipakai. Membandingkan batch dengan jumlah token valid sama tetapi distribusi panjang berbeda dapat memperlihatkan sensitivitas terhadap padding tanpa menuduh satu operator sebagai penyebab seluruh selisih.
Profiler trace memberi batas berikutnya. Trace dapat menunjukkan bentuk kernel, pilihan dispatch, dan apakah jalur variable-length sedang aktif. Source code atau dokumentasi backend kemudian dapat menetapkan dimensi mana yang benar-benar dilewati oleh kernel tertentu.
Implikasinya spesifik: masking dapat membuat posisi padding tidak berpengaruh secara semantik sambil tetap mempertahankannya secara fisik dalam eksekusi padat. Menghapus komputasi padding membutuhkan mekanisme eksekusi yang memahami panjang sequence valid, seperti packing, kernel variable-length, atau bentuk skipping lain yang khusus terhadap backend. Probabilitas attention yang benar dan pengurangan pekerjaan akibat padding adalah dua sasaran yang berkaitan, tetapi bukan operasi yang sama.