Cara Mengatasi Nondeterminisme dalam Inferensi LLM
(thinkingmachines.ai)- Dalam inferensi LLM (large language model), muncul masalah nondeterminisme (nondeterminism) di mana hasil dapat berbeda meskipun input dan kondisinya sama
- Selama ini, konkurensi (concurrency) dan non-asosiativitas (non-associativity) dari operasi floating-point dianggap sebagai penyebab utama nondeterminisme
- Penyebab deterministik yang sebenarnya berasal dari perubahan urutan perhitungan di dalam kernel (kode komputasi) akibat perubahan ukuran batch (batch size)
- Jika semua operasi di dalam kernel diimplementasikan agar memiliki invariansi batch (batch invariance), maka reproducibility yang sepenuhnya terjamin dapat dicapai
- Dengan operasi paralel data, split reduction, strategi split berukuran tetap dan sebagainya, kernel yang invariant terhadap batch dapat dibuat untuk operasi utama seperti RMSNorm, matmul, dan attention
Pendahuluan dan ringkasan masalah
- Reproducibility, elemen inti kemajuan ilmiah, tidak terjaga dengan baik dalam inferensi LLM (large language model)
- Bahkan jika pertanyaan yang sama diajukan ke ChatGPT beberapa kali, sering kali dihasilkan jawaban yang berbeda
- Hal ini karena proses sampling hasil pada LLM merupakan pemilihan probabilistik yang didasarkan pada distribusi probabilitas
- Namun, bahkan jika temperature diatur ke 0, pada praktiknya API LLM tidak selalu deterministik (yakni, hasil untuk input yang sama tidak selalu identik)
- Masalah nondeterminisme juga tetap ada saat dijalankan dengan pustaka inferensi open source (vLLM, SGLang, dll.) maupun pada hardware sendiri
Hipotesis lama dan keterbatasannya
- Hipotesis yang dikenal luas: nondeterminisme terjadi karena konkurensi + non-asosiativitas floating-point
- Operasi floating-point di GPU sedikit berbeda hasilnya tergantung urutan operasi dan urutan thread selesai
- Namun, pada kenyataannya, bahkan jika perkalian matriks yang sama diulang pada data yang sama dengan cara yang sama, hasilnya selalu identik secara bitwise (bw=bitwise equal)
- Diperlukan analisis yang lebih mendalam untuk mengidentifikasi penyebab sebenarnya
Analisis mendalam penyebab nondeterminisme pada inferensi LLM
Hakikat non-asosiativitas floating-point
- Operasi floating-point memiliki relasi (a+b)+c ≠ a+(b+c)
- Saat menghitung nilai dengan ukuran berbeda (exponent), terjadi kehilangan presisi dan kehilangan informasi, sehingga hasil berubah tergantung urutan operasi
- Karena urutan operasi dapat berubah, jika penjumlahan dilakukan berkali-kali secara acak maka akan muncul beragam hasil (juga terkonfirmasi secara eksperimen)
Perubahan urutan operasi di kernel dan konkurensi
- Umumnya, masalah konkurensi seperti atomic add sering ditunjuk sebagai penyebab utama nondeterminisme
- Namun, sebagian besar kernel yang digunakan dalam inferensi LLM (terutama forward pass) dapat berjalan tanpa atomic add
- Melalui strategi paralel yang tepat sebelumnya, split (reduction), dan sebagainya, urutan operasi yang sama dapat dipastikan
Penyebab inti yang sesungguhnya: tidak adanya "invariansi batch (batch invariance)"
- Kernel individual selalu mengembalikan hasil yang sama jika inputnya sama (run-to-run deterministic)
- Tetapi karena permintaan serentak dari banyak pengguna (batch size) berubah secara nondeterministik, maka hasil untuk tiap permintaan pada praktiknya tidak konsisten
- Bergantung pada ukuran batch, urutan pembagian atau penggabungan operasi secara internal berubah, sehingga nondeterminisme muncul
- Dengan kata lain, penyebab kuncinya adalah beban server dan paralelisme (ukuran batch) yang bersifat nondeterministik
Desain kernel invariant terhadap batch dan contoh operasi utama
RMSNorm
- Menerapkan strategi data-parallel: tiap elemen batch diproses secara independen oleh satu core
- Saat ukuran batch besar, paralelisme yang cukup tetap terjaga, sehingga strategi paralelnya konsisten dan invariansi batch dapat dipastikan
- Saat ukuran batch sangat kecil, strategi alternatif seperti split reduction digunakan, tetapi dalam kasus ini sebagian invariansi batch dikorbankan
Perkalian matriks (matmul)
- Menggunakan strategi paralel data dengan paralelisasi per tile
- Untuk optimalisasi penggunaan tensor core, perlu dibagi ke tile 2D, dan pada batch yang sangat kecil dibutuhkan strategi khusus seperti split-K
- Saat menggunakan strategi split-K, invariansi batch dapat rusak
- Meski harus mengorbankan sebagian performa, urutan operasi yang konsisten dan dapat direproduksi dapat dipastikan dengan memaksa konfigurasi kernel yang sama
Attention
- Pada FlashAttention2 dan sejenisnya, invariansi batch dipastikan melalui strategi paralelisasi arah query dan reduction simultan Key/Value
- Jika urutan reduction berubah bergantung pada ukuran batch atau pemotongan sekuens (chunked prefill, prefix caching, dll.), invariansi akan rusak
- Pada strategi split-reduction seperti split-KV (FlashDecoding), urutan operasi tetap sama dengan menetapkan ukuran split tetap (fixed split-size)
- Secara internal, key/value cache dan token baru tidak diproses secara terpisah; layout key/value harus dijaga konsisten di semua operasi
Implementasi
- Demo inferensi deterministik yang menerapkan kernel batch-invariant disediakan menggunakan vLLM dan torch.Library
- Kernel pengganti untuk operasi terkait dapat dilihat di repo GitHub (thinking-machines-lab/batch-invariant-ops)
Eksperimen dan performa
Eksperimen pengukuran nondeterminisme
- Menggunakan model Qwen/Qwen3-235B-A22B-Instruct-2507, dilakukan 1000 kali generasi pada prompt yang sama (“Tell me about Richard Feynman”) dengan temperature 0
- Dihasilkan 80 penyelesaian yang berbeda (meskipun prompt sama, nondeterminisme tetap ada)
- Hingga 102 token pertama hasilnya sama, dan percabangan pertama terjadi pada token ke-103 (“Queens, New York” vs “New York City”)
- Saat menggunakan kernel batch-invariant, semua 1000 hasil identik, sehingga reproducibility penuh tercapai
Evaluasi performa
- Menjalankan Qwen-3-8B pada 1 GPU, dengan 1000 permintaan sekuens masing-masing sepanjang 90~110
- vLLM bawaan: 26 detik
- deterministic vLLM yang belum dioptimalkan: 55 detik
- setelah menerapkan kernel attention yang diperbaiki: 42 detik
- Optimisasinya masih kurang, tetapi tingkat performanya tetap layak digunakan secara praktis
Nilai bagi on-policy RL
- Sebelumnya, karena perbedaan numerik kecil antara training dan inference, on-policy RL tidak dapat diimplementasikan secara tepat
- Jika inferensi deterministik dimungkinkan, maka sampling dan training dapat dibuat identik secara bitwise, sehingga on-policy RL yang sesungguhnya dapat diimplementasikan
- Hasil pada metrik utama seperti KL-divergence dan reward juga dipastikan sepenuhnya identik
Kesimpulan
- Dalam sistem inferensi LLM, nondeterminisme dan galat numerik mudah diabaikan, tetapi jika akar masalahnya (ketiadaan invariansi batch) dipahami dan diperbaiki, maka reproducibility dan determinisme yang sepenuhnya dapat diperoleh
- Penelitian ini menjelaskan cara mengatasi masalah nondeterminisme pada inferensi LLM dan membantu pengembang mendapatkan reproducibility penuh dalam sistem mereka sendiri
Informasi sitasi
- Saat mengutip penelitian ini, gunakan informasi berikut
He, Horace and Thinking Machines Lab, "Defeating Nondeterminism in LLM Inference",
Thinking Machines Lab: Connectionism, Sep 2025.
atau
@article{he2025nondeterminism,
author = {Horace He and Thinking Machines Lab},
title = {Defeating Nondeterminism in LLM Inference},
journal = {Thinking Machines Lab: Connectionism},
year = {2025},
note = {https://thinkingmachines.ai/blog/…},
doi = {10.64434/tml.20250910}
}
Belum ada komentar.