Rotary position embedding mengodekan posisi token dengan merotasi koordinat query dan key memakai sudut yang ditentukan oleh indeks posisi integer. Indeks tersebut merupakan bagian dari semantik input model meskipun pembentukannya tersembunyi di dalam wrapper framework. Pada batch decoder dengan padding, memakai kolom fisik tensor sebagai posisi dapat mengubah logit untuk sequence yang teksnya sama.

Masalah ini berbeda dari attention masking. Mask dapat mencegah token valid memperhatikan padding, tetapi token valid tetap dapat menerima koordinat rotary yang bergeser. Mask yang benar dan penetapan posisi yang benar menangani dua hal berbeda.

RoPE memakai koordinat, bukan sekadar urutan token

Untuk satu pasangan komponen dua dimensi, RoPE menerapkan rotasi dengan sudut yang bergantung pada posisi p dan frekuensi theta:

R(p*theta) = [[cos(p*theta), -sin(p*theta)],
              [sin(p*theta),  cos(p*theta)]]

Query dan key hasil transformasi bergantung langsung pada p. Offset relatif muncul dari interaksi query dan key yang sudah dirotasi, tetapi implementasi tetap harus memberi koordinat pada setiap token valid.

Ambil sequence token yang sama saat dievaluasi sendiri dan saat berada di batch dengan left padding. Saat sendiri, posisi validnya dapat berupa 0, 1, 2, 3. Jika dua kolom padding ditambahkan di depan, kolom tensor mentah menjadi 2, 3, 4, 5. Memakai kolom mentah tersebut sebagai position_ids mengubah seluruh fase rotary untuk sequence itu.

Attention mask tidak membatalkan rotasi tersebut. Mask hanya mengatur posisi key yang dapat ikut dalam attention.

Peringkat token valid menghasilkan posisi stabil

Untuk batch decoder biasa tanpa packing, sequence posisi yang stabil dapat diturunkan dari jumlah kumulatif token valid. Jika attention mask bernilai satu untuk token valid dan nol untuk padding, pemetaan konseptualnya adalah:

position = cumsum(attention_mask) - 1

Entri padding dapat diberi placeholder aman sesuai kebutuhan implementasi karena entri tersebut bukan token valid secara semantik. Properti pentingnya adalah token valid pertama mendapat posisi nol, berikutnya satu, dan seterusnya tanpa bergantung pada lebar left padding.

Untuk mask seperti

0 0 1 1 1 1

posisi validnya adalah

    0 1 2 3

Dengan demikian, koordinat rotary sequence nyata tetap sama dengan koordinat saat sequence dievaluasi tanpa padding.

Right padding biasanya menyamarkan masalah pada token prompt karena token valid sudah menempati kolom mulai dari nol. Kode yang sama tetap dapat bermasalah ketika strategi batching, layout cache, atau packing sequence berubah.

Cached decoding melanjutkan sequence koordinat yang sama

Decoding autoregresif menambahkan batasan lain: token baru harus melanjutkan sequence posisi yang direpresentasikan cache. Jika prompt memiliki empat token valid, token berikutnya berada pada posisi empat tanpa dipengaruhi jumlah kolom padding pada tensor batch awal.

Panjang KV cache dan posisi token semantik dapat sama pada kasus sederhana tanpa padding, tetapi keduanya bukan konsep yang dapat dipertukarkan. Penyimpanan cache dapat memuat artefak batching atau memakai layout dengan indeks fisik yang tidak mewakili koordinat token untuk RoPE.

Jalur decoding yang kuat menyimpan state yang cukup untuk menurunkan posisi semantik berikutnya dari jumlah token valid atau state posisi per sequence yang ekuivalen. Hal ini penting ketika request dengan panjang prompt berbeda berbagi satu batch decoding.

Invariansi terhadap padding berguna sebagai pemeriksaan inferensi

Decoder dengan eksekusi deterministik seharusnya menghasilkan logit yang sangat dekat untuk prefix valid yang sama, baik prefix dievaluasi sendiri maupun diberi padding bersama request yang lebih panjang, dengan toleransi terhadap variasi floating-point normal akibat kernel atau bentuk batch yang berbeda.

Regression check yang terarah dapat membandingkan logit pada lokasi token valid dalam tiga bentuk: sequence tanpa padding, salinan dengan left padding, dan sequence yang sama di dalam batch dengan panjang campuran. Perbedaan besar yang sistematis mengarah pada konstruksi posisi, konstruksi mask, offset cache, atau gabungan beberapa faktor tersebut.

Perbandingan perlu memakai parameter model, output tokenizer, dtype, dan state decoding yang sama. Lokasi yang dibandingkan juga harus posisi valid yang bersesuaian, bukan seluruh tensor yang mencakup padding.

Sequence packing memerlukan batas eksplisit

Peringkat kumulatif token valid cukup untuk padding konvensional, tetapi sequence packing mengubah kontraknya. Jika beberapa sequence independen berada dalam satu baris fisik, posisi dapat perlu dimulai lagi pada setiap batas sequence, bukan terus bertambah sepanjang baris packed.

Reset tersebut harus konsisten dengan struktur attention. Representasi packed yang memulai ulang posisi RoPE tetapi masih mengizinkan attention lintas sequence memiliki semantik berbeda dari representasi yang mengisolasi setiap segmen. Position ID, visibilitas attention, dan kepemilikan cache harus memakai model segmentasi yang konsisten.

RoPE tidak membuat semantik padding menjadi otomatis. RoPE membuat penetapan posisi memiliki konsekuensi numerik. Menjadikan posisi semantik sebagai state model yang eksplisit menjaga batching, masking, dan cached decoding tetap selaras saat layout fisik tensor berubah.