Ling-3.0-flash Ant Group 2.1x Lebih Cepat di 4 GPU Blackwell

Tim SGLang dan tim Ling Infra milik Ant Group merilis catatan tuning bersama pada 21 Agustus: dengan menjalankan Ling-3.0-flash di empat GPU Blackwell, mereka memangkas waktu output per token (TPOT) pada concurrency 1 dari 3.33 ms menjadi 1.53 ms—turun 54%—sekaligus mendorong throughput dari 288 token per detik menjadi 606 token per detik. Setelah beralih ke DSpark, model draft yang mereka latih sendiri untuk decoding spekulatif, rata-rata TPOT turun lagi jadi 0.78 ms dengan throughput mencapai 1120 token per detik, dan rata-rata 9.95 token draft diterima di setiap langkah.

Ling-3.0-flash adalah model MoE dengan atensi linear hibrida: dari 42 layer-nya, 35 layer memakai atensi linear KDA dan 7 layer memakai atensi penuh MLA, dengan 512 expert yang di-routing, lebar hidden layer 2560, kosakata sekitar 157 ribu token, dan sekitar 63GB bobot per GPU dalam presisi bf16. Pengujian ini membagi model jadi 4 bagian dengan paralelisme tensor, dijalankan dalam presisi bf16.

Yang Sebenarnya Menganggur Itu GPU-nya

Optimisasi ini secara khusus menyasar skenario batch size 1. Sebagian besar hasil optimasi inferensi yang dipublikasikan mengejar throughput total yang lebih tinggi pada concurrency tinggi, karena itulah yang membentuk struktur tagihan penyedia cloud. Ada beban kerja lain yang lebih langsung terasa: concurrency 1—menjalankan model secara lokal, code completion, atau agent yang menjalankan satu rangkaian tugas panjang secara berurutan. Hanya ada satu permintaan yang berjalan di satu waktu, dan penggunanya menatap layar menunggu teks muncul kata demi kata.

Begitu concurrency turun, GPU jadi menganggur. Komputasi di setiap langkah decoding begitu kecil sehingga GPU selesai bekerja lalu menunggu batch instruksi berikutnya—dan yang mengeluarkan instruksi itu adalah CPU. Begitu ada satu titik di sisi host yang perlu membaca kembali nilai dari memori GPU sebelum menentukan langkah berikutnya, seluruh pipeline harus berhenti menunggu sinkronisasi itu selesai.

"at batch 1, look for blocking reads of device values on the host path before anything else, because each one converts the entire host loop from hidden work into a GPU bubble."

Pada concurrency 1, hal pertama yang harus dicari adalah pembacaan blocking terhadap nilai di memori GPU pada jalur host—setiap satu titik mengubah beban kerja host yang seharusnya tersembunyi menjadi gelembung kekosongan (bubble) di GPU yang terlihat jelas.

Membongkar Waktu Tunggu Satu per Satu

Kategori pertama adalah host yang menganggur. Solusinya adalah menghilangkan titik sinkronisasi GPU di setiap langkah: backend atensi KDA diberi tahu bahwa panjang sequence tidak perlu dibaca kembali ke CPU, sehingga indeks terkait tetap berada di memori GPU sepanjang waktu. Dengan begitu, instruksi untuk langkah k+1 bisa dikirim lebih dulu bahkan sebelum host tahu berapa token draft yang diterima di langkah k—host tidak perlu lagi antre menunggu hasil.

Kategori kedua adalah memperpendek pekerjaan yang berada di jalur kritis GPU. Programmatic Dependent Launch (PDL) dipakai untuk mengirim lebih awal pemuatan bobot yang tidak bergantung pada output kernel sebelumnya. Komputasi routing dan MoE, yang sebelumnya butuh dua kali peluncuran kernel terpisah, digabung jadi satu—untuk skala 512 expert, overhead peluncuran saja sudah cukup besar. Presisi komputasi router gate dan lm_head diubah dari fp32 ke bf16, dan langkah ini saja sudah memberi peningkatan sekitar 10%. Status loop KDA pada decoding spekulatif diubah menjadi pembaruan bertahap yang baru dikomit setelah verifikasi berhasil.

Semua perubahan ini sudah digabungkan ke SGLang: penangkapan graph metadata yang disatukan, kernel verifikasi KDA yang digabung, rencana eksekusi FlashInfer yang dikirim langsung oleh host (menghilangkan pembacaan blocking dari memori GPU), serta urutan penjadwalan yang menggabungkan tiga langkah draft, verifikasi, dan ekstensi jadi satu.

Diterjemahkan ke Waktu yang Bisa Dirasakan Manusia

Coba hitung kasar untuk respons sepanjang 5000 token. Pada 3.33 ms per token, butuh 16.6 detik untuk selesai; pada 1.53 ms, 7.7 detik; pada 0.78 ms, 3.9 detik. Mesin yang sama, model yang sama, orang yang sama menunggu—bedanya berubah dari "cukup waktu untuk menyeduh teh" jadi "sudah selesai sebelum kalimat selesai diucapkan". Selisih ini bukan hasil ganti GPU, melainkan hasil membersihkan tuntas waktu tunggu di sisi host.

Angka kunci untuk tahap DSpark adalah rata-rata panjang penerimaan (acceptance length) 9.95. Logika decoding spekulatif adalah membiarkan model kecil menebak deretan token lebih dulu, lalu model besar memverifikasinya sekaligus—berapa pun yang tertebak benar, itu untung gratis. Panjang penerimaan yang mendekati 10 berarti model besar bisa menyamai hampir sepuluh kali decoding biasa untuk setiap satu kali verifikasi. Angka ini berkaitan langsung dengan cara model draft dilatih—model draft DSpark didistilasi dari distribusi output Ling-3.0-flash pascapelatihan, dengan fungsi loss yang secara khusus menambahkan suku optimasi untuk panjang penerimaan. Kemampuan menebak dengan akurat ini hasil pelatihan, bukan keberuntungan.

Kolaborasi dengan Upstream

Catatan ini mencantumkan tiga pihak: RadixArk di sisi SGLang, tim Ling Infra milik Ant, dan inclusionAI milik Ant. Bobot model dan perintah reproduksi dirilis bersamaan, termasuk varian DSpark.

Model open source asal Tiongkok menempati posisi bagus di leaderboard sudah bukan hal baru dalam beberapa tahun terakhir. Yang jarang terjadi adalah punya suara di lapisan inference stack—optimasi kali ini tidak menunggu framework upstream menyesuaikan diri, melainkan langsung membawa biaya hardware dan beban kerja nyata untuk mengubah kode upstream, lalu digabungkan kembali. Bagi siapa pun di hilir yang men-deploy dengan framework yang sama, switch ini tinggal dinyalakan dan langsung bisa dipakai, terlepas dari model siapa yang dijalankan.

Sumber: blog teknis resmi SGLang, CocoLoop, model card publik Ant inclusionAI; TPOT, throughput, dan panjang penerimaan diverifikasi terhadap perintah reproduksi dan hasil benchmark di blog tersebut, semuanya diukur pada concurrency 1, paralelisme tensor 4 GPU, presisi bf16.