Teknologi

GPU-unlock 1.0.0: Buka Laju BF16 Penuh di RTX 3000 Lewat Modul Kernel

GPU-unlock 1.0.0: Buka Laju BF16 Penuh di RTX 3000 Lewat Modul Kernel

GPU-unlock 1.0.0 adalah modul kernel Linux yang membuka laju penerbitan instruksi FP dan BF16 pada kartu NVIDIA generasi Ampere GA102, GA103, GA104, dan GA106. Pada RTX 3090 Ti dengan GEMM dense 8192 kubik dan batas daya 450 watt, median BF16 naik dari 87,50 menjadi 157,41 TFLOPS, FP16 dari 87,46 menjadi 118,39 TFLOPS, dan TF32 dari 42,58 menjadi 82,61 TFLOPS. Semua angka itu diukur sebelum dan sesudah modul dipasang pada perangkat yang sama.

TL;DR

  • Modul ini menulis ulang register SS0 dan SS1 kartu sehingga laju BF16 dan IMLA4 terbuka penuh, bukan setengah seperti bawaan.
  • Karena bekerja sebagai modul kernel dan bukan driver yang dipatch, modul ini tidak perlu diperbarui setiap kali driver NVIDIA merilis versi baru.
  • Tanpa parameter kernel gpu_unlock.targets=all, modul terpasang tapi tidak melakukan apa pun.
  • Keuntungan terbesar ada di prefill LLM dan GEMM BF16, sedangkan decode dan INT8 tidak berubah karena terikat bandwidth memori, bukan laju instruksi.
  • Hasilnya dilaporkan bit-identik, tapi ini tetap modifikasi di luar dukungan resmi NVIDIA, jadi risikonya nyata dan perlu dipahami sebelum dipasang.

Apa sebenarnya yang dibuka oleh GPU-unlock?

Yang dibuka adalah laju penerbitan instruksi, bukan jumlah inti. Kartu GeForce Ampere mengirim instruksi FP dan BF16 lebih lambat daripada kartu kelas data center meski silikonnya sama, dan modul ini menghapus pembatasan itu dengan menulis nilai tertentu ke register kartu.

Secara teknis, modul menulis SS0 sebesar 0x88888888 yang berarti laju BF16 penuh, dan SS1 4-bit sebesar 0x8 untuk IMLA4. Pendekatan ini menggabungkan dua teknik yang sebelumnya terpisah: unlocker CMP versi V67 dan PLM, dengan penentuan waktu di fase pre-driver UEFI. Hasilnya, pembatasan dibuka sebelum driver NVIDIA yang tidak dimodifikasi mengambil alih perangkat.

Perbedaan itu penting untuk perawatan. Modul kernel yang memakai antarmuka publik tidak perlu dirombak setiap kali driver berganti, sedangkan driver yang dipatch harus diperbarui pada setiap rilis. Pada praktiknya, inilah yang membuat proyek semacam ini bisa bertahan melewati beberapa siklus rilis driver tanpa intervensi.

Berapa besar peningkatan yang bisa diharapkan?

Bergantung pada kartu dan beban kerjanya. Angka paling lengkap ada pada RTX 3090 Ti, sedangkan kartu lain dilaporkan sebagai rentang karena hasilnya berasal dari laporan pengguna, bukan dari satu pengukuran terkontrol.

KartuDevice IDKenaikan BF16 GEMM yang dilaporkan
RTX 309010de:220425 sampai 67 persen
RTX 3080 10 GB10de:220670 sampai 73 persen
RTX 307010de:248473 sampai 81 persen
RTX 3060 12 GB10de:2504sekitar 80 persen
RTX 3080 Ti 20 GB10de:2206unlock selesai, laju BF16 tetap setengah
GA10310de:2414belum ada laporan

Pada RTX 3090 Ti, angka median sebelum dan sesudah terukur pada GEMM dense 8192 kubik dengan batas daya 450 watt: BF16 dari 87,50 ke 157,41 TFLOPS, FP16 dari 87,46 ke 118,39 TFLOPS, dan TF32 dari 42,58 ke 82,61 TFLOPS. Kenaikan terbesar ada di BF16, sesuai dengan apa yang ditulis modul ke register kartu.

Untuk beban kerja LLM, prefill dilaporkan naik 14 sampai 36 persen, sedangkan decode hampir tidak berubah karena tahap itu terikat bandwidth memori, bukan laju instruksi. INT8 juga tidak berubah. Ini pembeda penting: kalau beban kerja Anda didominasi decode token per token, modul ini tidak akan menolong banyak.

Kenapa decode dan INT8 tidak ikut naik?

Karena keduanya bukan bottleneck di laju instruksi. Decode pada LLM menghabiskan waktunya untuk membaca bobot model dari memori, jadi secepat apa pun instruksi dieksekusi, waktunya tetap ditentukan oleh kecepatan pengiriman data dari HBM ke unit komputasi.

Pola yang sama menjelaskan mengapa prefill naik cukup jauh. Prefill memproses seluruh prompt sekaligus, sehingga komputasinya padat dan laju instruksi menjadi penentu. Semakin panjang prompt relatif terhadap keluaran, semakin besar bagian pekerjaan yang mendapat manfaat.

Untuk INT8, alasan tidak berubahnya berbeda: jalur itu memakai instruksi berbeda yang tidak terdampak oleh nilai yang ditulis modul. Jadi kalau pipeline Anda sudah terkuantisasi penuh ke INT8, keuntungan dari modul ini praktis nol, dan itu perlu diketahui sebelum menghabiskan waktu memasangnya.

Bagaimana cara memasangnya dan apa yang mudah salah?

Pasang sebagai modul kernel, lalu tambahkan parameter kernel gpu_unlock.targets=all pada baris perintah kernel. Tanpa langkah kedua itu, modul berhasil dimuat tetapi tidak mengubah apa pun, dan itulah kesalahan pertama yang paling sering dilaporkan.

Alurnya: klon repositori, jalankan make install, atau make install-arch, make install-deb, make install-rpm sesuai distribusi. Modul kemudian berada di initramfs dan dimuat sebelum driver nvidia, sehingga pembatasan dibuka lebih dulu. Untuk menambahkan parameter kernel, pada GRUB tambahkan ke GRUB_CMDLINE_LINUX_DEFAULT lalu jalankan update-grub, pada Fedora pakai grubby dengan argumen update-kernel=ALL, dan pada sistem yang memakai UKI tambahkan ke berkas /etc/kernel/cmdline.

Setelah reboot, verifikasi bahwa parameternya benar-benar aktif sebelum menyimpulkan modul gagal. Periksa isi /proc/cmdline, pastikan gpu_unlock.targets muncul di sana, lalu jalankan ulang pengukuran yang sama seperti sebelumnya. Tanpa baseline sebelum pemasangan, Anda tidak akan punya pembanding, dan peningkatan yang diklaim tidak bisa dipastikan terjadi di mesin Anda.

Repositori dan instruksi lengkapnya ada di GPU-unlock di GitHub, sedangkan laporan hasil pengguna, termasuk kasus RTX 3080 Ti yang unlock-nya selesai tapi laju BF16 tetap setengah, terkumpul di utas issue hasil pengujian.

Apa risikonya dan untuk siapa ini masuk akal?

Risikonya nyata dan tidak kecil: ini modifikasi di luar dukungan resmi, dilakukan pada register kartu yang tidak didokumentasikan untuk tujuan itu. Modul berjalan di ruang kernel, jadi kesalahan di situ bisa membuat sistem gagal boot, dan perubahan pada register kartu bisa memicu perilaku yang tidak terduga pada beban kerja tertentu.

Yang membuatnya layak dipertimbangkan adalah sifatnya yang reversibel. Modul bisa dilepas dan parameternya dihapus, sehingga kartu kembali ke perilaku bawaan. Karena itu, masuk akal untuk mesin eksperimen, workstation riset, atau node pelatihan milik sendiri yang tidak menanggung SLA.

Untuk produksi, pertimbangkan biaya sebenarnya lebih dulu. Selisih harga antara kartu konsumen dan kartu kelas data center membeli hal-hal yang tidak diberikan modul ini: dukungan resmi, jaminan, memori dengan ECC, dan kapasitas HBM yang lebih besar. Kalau kebutuhan Anda adalah kapasitas memori untuk model besar, modul ini tidak menjawabnya sama sekali.

Untuk konteks perangkat kerasnya, spesifikasi resmi seri RTX 30 ada di halaman produk NVIDIA. Untuk memastikan bahwa peningkatan yang Anda ukur memang berasal dari laju instruksi dan bukan dari hal lain, panduan pemrograman CUDA di dokumentasi CUDA menjelaskan cara menghitung batas teoretis FP16 dan BF16 pada perangkat Anda, sehingga hasil pengukuran bisa dibandingkan dengan plafon yang seharusnya.

Bagaimana mengukur dampaknya dengan benar?

Ukur beban kerja Anda sendiri, dua kali, pada kondisi daya dan suhu yang sama. Modul ini mengubah plafon laju instruksi, jadi pengukuran yang adil memerlukan baseline sebelum pemasangan dan pengukuran sesudahnya dengan kartu yang tidak sedang throttling.

Kunci tiga variabel: batas daya, suhu, dan clock. Kenaikan TFLOPS yang dilaporkan di atas diambil pada batas daya 450 watt, dan pada batas daya lebih rendah peningkatan bisa terpotong karena kartu menabrak dinding daya lebih dulu. Kalau pengukuran dilakukan tanpa mengunci ketiga variabel itu, selisih yang terlihat bisa berasal dari kondisi termal, bukan dari modul.

Kedua, pakai ukuran matriks yang sama dengan beban kerja nyata. GEMM 8192 kubik mewakili komputasi padat, sedangkan beban inferensi dengan batch kecil berperilaku lebih seperti decode dan tidak akan menunjukkan kenaikan besar. Ketiga, verifikasi keluaran. Laporan menyebut hasilnya bit-identik, dan itu justru hal pertama yang harus Anda pastikan sendiri, karena modul yang mengubah hasil komputasi tidak layak dipakai untuk apa pun.

Keempat, jalankan pengukuran lebih dari sekali. Satu kali pengukuran pada GPU hampir selalu menipu, karena clock bisa naik-turun mengikuti suhu. Ambil median dari beberapa iterasi setelah kartu stabil, bukan hasil satu iterasi pertama yang masih dipengaruhi kondisi awal.

Kelima, catat juga biaya daya. Modul ini membuka laju instruksi, dan laju instruksi yang lebih tinggi berarti daya yang lebih besar ditarik pada beban puncak. Pada catu daya yang sudah mendekati batas, kenaikan performa bisa datang bersama shutdown tak terduga saat beban kerja memuncak, dan itu masalah yang jauh lebih mahal daripada keuntungan TFLOPS-nya.

Keenam, simpan catatan hasil pengukuran beserta versi modul, versi driver, dan versi kernel yang dipakai. Ketiga hal itu menentukan apakah hasilnya bisa direproduksi, dan tanpa catatan tersebut, peningkatan yang Anda amati akan sulit dipertanggungjawabkan ketika mesinnya di-upgrade enam bulan kemudian. Catatan sederhana di satu berkas teks sudah cukup, asalkan diisi konsisten setiap kali modul atau driver berubah.

FAQ

Apakah modul ini bekerja di kartu RTX 40 dan 50 series?

Belum ada dukungan yang dilaporkan. Cakupan yang disebut adalah GA102, GA103, GA104, dan GA106, yaitu silikon generasi Ampere pada seri RTX 30. Mencobanya di arsitektur lain tidak dijamin gagal dengan aman, jadi jangan dipasang di mesin yang Anda butuhkan.

Apakah driver NVIDIA perlu dipatch ulang setiap update?

Tidak, dan itu keunggulan utama pendekatan ini. Modul bekerja di level kernel dan membuka pembatasan sebelum driver yang tidak dimodifikasi mengambil alih, sehingga pembaruan driver tidak memaksa Anda mempatch ulang apa pun. Modulnya sendiri tetap perlu dibangun ulang bila terjadi perubahan antarmuka kernel yang tidak kompatibel.

Kenapa laju BF16 di RTX 3080 Ti tetap setengah setelah unlock?

Karena unlock-nya selesai tetapi hasilnya tidak berubah pada kartu itu, dan itu dilaporkan sebagai keterbatasan perangkat, bukan kegagalan pemasangan. Sebelum menyimpulkan modulnya gagal, pastikan parameter kernel sudah aktif di /proc/cmdline dan baseline sudah diukur pada mesin yang sama.

Apakah aman dipakai di server produksi?

Tidak disarankan. Ini modifikasi register kartu di luar dukungan resmi, berjalan di ruang kernel, dan bisa membuat sistem gagal boot. Yang wajar adalah memakainya di mesin eksperimen yang bisa di-reboot tanpa dampak, dengan baseline pengukuran yang jelas sebelum dan sesudahnya.

Rekomendasi Tools & Layanan

Beberapa layanan yang dipake di panduan ini: free trial Alibaba Cloud (coba gratis, sesuaikan kebutuhan), dan halaman promo terbaru buat cek diskon yang lagi jalan bulan ini.

💬 Komentar (0)

Belum ada komentar. Jadilah yang pertama! 💬

Komentar akan muncul setelah moderasi.