Sequence packing mengurangi padding dengan menempatkan beberapa contoh berpanjang variabel ke dalam satu buffer token. Layout penyimpanannya dapat terlihat seperti satu sequence panjang, tetapi setiap contoh tetap independen secara semantik. Causal mask standar tidak menjaga independensi tersebut dengan sendirinya.
Pada Transformer decoder-only, causal masking mencegah attention menuju posisi masa depan. Mekanisme ini biasanya tidak mencegah attention menuju posisi sebelumnya yang berasal dari contoh lain dalam buffer yang sama. Jika batas diabaikan, token pada contoh berikutnya dapat mengakses key dan value dari contoh sebelumnya. Model akhirnya menerima konteks yang semestinya dipisahkan oleh data pipeline.
Kausalitas dan isolasi contoh adalah dua batasan berbeda
Anggap dua contoh tokenized dikemas ke satu buffer:
A0 A1 A2 B0 B1 B2 B3Causal mask konvensional mengizinkan posisi i melakukan attention ke posisi j <= i. Dengan aturan tersebut, B0 dapat mengakses A0, A1, dan A2 karena semua posisi itu berada di masa lalunya.
Perilaku tersebut valid secara kausal, tetapi melanggar isolasi contoh. Mask yang dibutuhkan harus memenuhi dua kondisi:
allowed(i, j) =
(j <= i)
AND
(segment_id[i] == segment_id[j])Dengan segment identifier
0 0 0 1 1 1 1pola attention menjadi block-diagonal di dalam struktur kausal lower-triangular. Token dari contoh B dapat mengakses token B yang lebih awal, tetapi tidak token dari A.
Perbedaannya berasal dari dua sumber aturan. Urutan kausal adalah properti posisi token, sedangkan keanggotaan contoh berasal dari skema batching dan packing. Salah satunya tidak dapat menggantikan yang lain.
Loss mask tidak memperbaiki kebocoran attention
Data pipeline sering menonaktifkan label tertentu agar padding, token prompt, atau separator tidak menghasilkan loss term secara langsung. Mekanisme tersebut menentukan posisi mana yang ikut membentuk objective. Mekanisme itu tidak menentukan key dan value mana yang dapat diakses sebuah query.
Misalnya, label pada separator diberi ignore index. Token setelah separator tetap dapat melakukan attention melewati separator menuju representasi dari contoh sebelumnya jika attention mask tidak memblokir jalurnya. Menghapus suatu posisi dari perhitungan loss tidak membuat hidden state atau konteks sebelumnya menjadi tidak terlihat.
Pemisahan ini berguna saat meninjau implementasi packing. Label mask menentukan prediksi yang memengaruhi objective. Attention mask menentukan state token yang dapat memengaruhi setiap prediksi. Packed batch yang benar dapat memerlukan keduanya.
Position ID adalah keputusan desain yang terpisah
Packing juga memunculkan persoalan indeks posisi. Pipeline dapat mempertahankan posisi yang terus meningkat sepanjang buffer:
0 1 2 3 4 5 6atau mereset posisi pada setiap batas contoh:
0 1 2 0 1 2 3Kedua representasi tersebut tidak menegakkan isolasi attention dengan sendirinya. Position ID memengaruhi informasi posisi yang diberikan kepada model; metadata ini bukan access-control mask untuk key dan value.
Skema posisi yang sesuai bergantung pada arsitektur model dan konfigurasi training. Absolute position embedding, rotary position mechanism, metode posisi relatif, dan custom attention kernel dapat menafsirkan metadata posisi secara berbeda. Karena itu, implementasi packing tidak semestinya menganggap reset position ID setara dengan pemblokiran cross-example attention.
Hal sebaliknya juga berlaku. Attention mask yang sadar batas dapat mengisolasi contoh meskipun position ID terus meningkat sepanjang buffer, tetapi konvensi posisi tersebut masih dapat berbeda dari distribusi posisi yang digunakan pada bagian training atau inference lain.
Separator token bukan batas struktural
Token end-of-sequence atau separator dapat menandai batas di dalam aliran token. Token tersebut tidak menciptakan penghalang attention secara struktural kecuali model atau attention mask memang memberinya perilaku itu.
Jika hanya causal mask yang digunakan, token setelah separator masih dapat melakukan attention ke token sebelum separator. Model dapat menggunakan separator sebagai sinyal semantik, tetapi kondisi itu berbeda dari membuat cross-boundary attention mustahil terjadi.
Perbedaan ini semakin relevan ketika contoh yang dikemas tidak saling berhubungan. Separator dapat memberi sinyal bahwa satu dokumen sudah berakhir, sementara attention graph yang tidak dibatasi masih membuka hidden state dokumen sebelumnya bagi dokumen berikutnya. Jika independensi merupakan bagian dari definisi contoh training, structural mask adalah mekanisme langsung untuk menegakkannya.
Packed mask tidak harus berupa matriks dense
Secara konseptual, mask mudah dinyatakan sebagai matriks boolean N x N, tetapi semantiknya tidak mewajibkan materialisasi matriks tersebut. Implementasi attention dapat merepresentasikan batas melalui panjang sequence, cumulative offset, block metadata, atau struktur khusus kernel.
Sebagai contoh, packed batch dapat menyatakan panjang sequence yang kontigu:
lengths = [3, 4, 2]Attention kernel yang secara eksplisit mendukung packed sequence berpanjang variabel dapat memakai metadata tersebut untuk membatasi attention di dalam setiap rentang tanpa menyimpan dense block-diagonal mask.
Ini adalah properti implementasi, bukan jaminan API universal. Tensor bernama attention_mask dapat berarti padding mask pada satu library, additive score mask pada library lain, atau metadata untuk specialized kernel pada implementasi berbeda. Correctness bergantung pada kontrak model dan implementasi attention yang benar-benar digunakan.
Invariant-nya lebih stabil daripada bentuk representasinya: ketika isolasi memang diperlukan, query milik satu contoh independen tidak boleh menerima kontribusi key/value dari contoh independen lain.
Kesalahan batas dapat lolos dari validasi permukaan
Packed batch dapat memiliki shape tensor, jumlah token, jumlah label, dan nilai loss yang tampak wajar meskipun attention graph-nya salah. Visibilitas cross-example tidak harus memicu exception atau menghasilkan scalar yang jelas tidak valid.
Karena itu, validasi struktural lebih berguna daripada hanya memeriksa shape. Pada packed batch sintetis berukuran kecil, pola izin attention dapat dibandingkan dengan batas segment yang diharapkan. Jika implementasi hanya mengekspos metadata batas yang ringkas, pengujian dapat memeriksa offset atau panjang sequence yang dikirim ke kernel.
Assertion yang relevan berfokus pada konektivitas. Untuk setiap pasangan query-key dari segment independen yang berbeda, jalur attention efektif harus diblokir. Untuk pasangan dalam segment yang sama, batasan kausal biasa tetap berlaku.
Packing mengubah representasi, bukan semantik sampel
Packing sering dipakai sebagai optimasi batching agar lebih sedikit token padding mengisi compute dan memory. Optimasi tersebut valid hanya jika representasi terkemas tetap mempertahankan semantik yang dibutuhkan objective training.
Sebagian workload memang sengaja mengizinkan konteks melewati batas dokumen. Workload lain menggabungkan record yang saling terkait menjadi satu training sequence. Dalam kondisi tersebut, memblokir setiap batas justru akan membentuk objective yang berbeda. Aturan sadar batas berlaku ketika unit yang dikemas dimaksudkan tetap menjadi contoh independen.
Kondisi itu merupakan implementation boundary yang perlu dibuat eksplisit. Mengemas beberapa contoh ke satu tensor tidak otomatis menjadikannya satu konteks, dan causal masking tidak otomatis memisahkannya. Attention graph harus sesuai dengan semantik sampel yang dipilih data pipeline.