Android 16 QPR2 telah merilis stabilitas platform hari ini dengan Beta 2! Itu berarti bahwa permukaan API terkunci, dan perilaku yang menghadap aplikasi bersifat final, sehingga Anda dapat memasukkannya ke dalam aplikasi Anda dan memanfaatkan inovasi platform terbaru kami.
Baru di beta QPR2
Pada tahap selanjutnya dalam siklus pengembangan, kami fokus pada pekerjaan kritis mempersiapkan platform untuk rilis. Berikut adalah beberapa perubahan berdampak yang ingin kami soroti:
Menguji verifikasi pengembang
Untuk lebih melindungi pengguna Android dari pelanggar berulang, Android memperkenalkan verifikasi pengembang, persyaratan baru untuk membuat instalasi aplikasi lebih aman dengan mencegah penyebaran malware dan penipuan. Mulai bulan September 2026 dan di wilayah tertentu, Android akan mengharuskan aplikasi untuk didaftarkan oleh pengembang yang diverifikasi untuk diinstal pada perangkat Android bersertifikat, dengan pengecualian yang dibuat untuk pemasangan yang dibuat melalui Android Debug Bridge (ADB).
Sebagai pengembang, Anda bebas menginstal aplikasi tanpa verifikasi dengan menggunakan ADB, sehingga Anda dapat terus menguji aplikasi yang belum dimaksudkan atau belum siap untuk didistribusikan ke populasi konsumen yang lebih luas.
Untuk aplikasi yang memungkinkan pemasangan paket aplikasi yang diprakarsai pengguna, Android 16 QPR2 Beta 2 berisi API baru yang mendukung verifikasi pengembang selama instalasi, bersama dengan perintah ADB baru untuk memungkinkan Anda memaksa hasil verifikasi untuk tujuan pengujian.
adb shell pm set-developer-verification-result
Dengan menggunakan perintah ini, (lihat ADB Shell pm Bantuan untuk detail lengkap) Anda sekarang dapat mensimulasikan kegagalan verifikasi. Ini memungkinkan Anda untuk memahami pengalaman pengguna ujung ke ujung untuk verifikasi yang sukses dan tidak berhasil, sehingga Anda dapat mempersiapkannya sebelum penegakan dimulai.
Kami mendorong semua pengembang yang mendistribusikan aplikasi pada perangkat Android bersertifikat untuk mendaftar untuk akses awal untuk bersiap -siap dan tetap diperbarui.
Perlindungan SMS OTP
Pengiriman pesan yang berisi hash SMS Retriever akan ditunda untuk sebagian besar aplikasi selama tiga jam untuk membantu mencegah pembajakan OTP. Siaran penerimaan_sms akan ditahan dan kueri basis data penyedia SMS akan difilter. SMS akan tersedia untuk aplikasi ini setelah penundaan tiga jam.
Aplikasi tertentu seperti SMS default, asisten, dan aplikasi dialer, bersama dengan pendamping perangkat yang terhubung, aplikasi sistem, dll akan dikecualikan dari keterlambatan ini, dan aplikasi dapat terus menggunakan API SMS Retriever untuk mengakses pesan yang ditujukan untuk mereka secara tepat waktu.
Bentuk Ikon Aplikasi Kustom
Android 16 QPR2 memungkinkan pengguna untuk memilih dari daftar bentuk ikon yang berlaku untuk semua ikon aplikasi dan pratinjau folder. Periksa untuk memastikan bahwa ikon adaptif Anda bekerja dengan baik dengan bentuk apa pun yang dipilih pengguna.
Koleksi sampah yang lebih efisien
Android Runtime (ART) sekarang mencakup pengumpul sampah mark-compact (CMC) generasional di Android 16 QPR2 yang memfokuskan upaya pengumpulan pada objek yang baru dialokasikan, yang lebih mungkin menjadi sampah. Anda dapat mengharapkan pengurangan penggunaan CPU dari pengumpulan sampah, pengalaman pengguna yang lebih halus dengan lebih sedikit jank, dan efisiensi baterai yang lebih baik.
Pelacakan Langkah Asli dan Data Latihan yang Diperluas di Koneksi Kesehatan
Health Connect sekarang secara otomatis melacak langkah menggunakan sensor perangkat. Jika aplikasi Anda memiliki Read_steps Izin, data ini akan tersedia dari paket “Android”. Ini tidak hanya menyederhanakan kode yang diperlukan untuk melakukan pelacakan langkah, tetapi juga lebih hemat daya.
Juga, Latihan Dan Latihan Jenis data telah diperbarui. Anda sekarang dapat merekam dan membaca berat badan, menetapkan indeks, dan laju pengerahan tenaga (RPE) untuk segmen olahraga. Karena Health Connect diperbarui secara independen dari platform, memeriksa ketersediaan fitur sebelum menulis data akan memastikan kompatibilitas dengan versi lokal Health Connect saat ini.
// Check if the expanded exercise features are availablevalnewFieldsAvailable=healthConnectClient.features.getFeatureStatus(
HealthConnectFeatures.FEATURE_EXPANDED_EXERCISE_RECORD
)==HealthConnectFeatures.FEATURE_STATUS_AVAILABLEvalsegment=ExerciseSegment(
//...// Conditionally add the new data fieldsweight=if(newFieldsAvailable)Mass.fromKilograms(50.0)elsenull,
setIndex=if(newFieldsAvailable)1elsenull,
rateOfPerceivedExertion=if(newFieldsAvailable)7.0felsenull
)
Versi SDK minor
QPR2 menandai rilis Android pertama dengan versi SDK kecil yang memungkinkan kami untuk lebih cepat berinovasi dengan API platform baru yang disediakan di luar timeline kami yang biasa setiap tahun. Berbeda dengan rilis platform utama (Android 16) pada tahun 2025-Q2 yang mencakup perubahan perilaku yang memengaruhi kompatibilitas aplikasi, perubahan dalam rilis ini sebagian besar aditif dan dirancang untuk meminimalkan kebutuhan untuk pengujian aplikasi tambahan.
Aplikasi Anda dapat dengan aman menghubungi API baru di perangkat di mana mereka tersedia dengan menggunakan Sdk_int_full dan nilai masing -masing dari Version_codes_full enumerasi.
if(Build.VERSION.SDK_INT_FULL>=Build.VERSION_CODES_FULL.BAKLAVA_1){
// Call new APIs from the Android 16 QPR2 release
}
Anda juga dapat menggunakan Build.getMinorsDkversion () Metode untuk hanya mendapatkan nomor versi SDK minor.
Yang asli Versi_codes Pencacahan masih dapat digunakan untuk membandingkan dengan SDK_INT Pencacahan untuk API yang dinyatakan dalam rilis non kecil.
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.BAKLAVA){
// Call new APIs from the Android 16 release
}
Karena rilis kecil tidak dimaksudkan untuk mengalami perubahan perilaku, mereka tidak dapat digunakan di Atribut manifes menggunakan-SDK.
Mulailah dengan Android 16 QPR2 Beta
Anda dapat mendaftarkan perangkat piksel yang didukung untuk mendapatkan pembaruan Android Beta ini di masa depan. Jika Anda tidak memiliki perangkat piksel, Anda dapat menggunakan gambar sistem 64-bit dengan emulator Android di Android Studio. Jika Anda sudah berada di program Beta Android, Anda akan ditawari pembaruan over-the-air untuk Beta 2. Kami akan memperbarui gambar sistem dan SDK secara teratur di seluruh siklus rilis Android 16 QPR2.
Jika Anda berada di program CANARY dan ingin memasuki program beta, Anda perlu menyeka perangkat Anda dan secara manual mem -flashnya ke rilis beta.
Untuk pengalaman pengembangan terbaik dengan Android 16 QPR2, kami sarankan Anda menggunakan versi canary terbaru dari Studio Narwhal Feature Drop.
Kami mencari umpan balik Anda, jadi silakan laporkan masalah dan kirimkan permintaan fitur di halaman umpan balik. Semakin awal kami mendapatkan umpan balik Anda, semakin banyak yang bisa kami sertakan dalam pekerjaan kami pada rilis akhir. Terima kasih telah membantu membentuk masa depan platform Android.
Dalam kisah #WeAreplay terbaru kami, kami bertemu orang -orang yang mengubah tantangan pribadi menjadi aplikasi dan permainan yang sukses di Google Play – dari anak anjing baru yang menginspirasi asisten perawatan hewan peliharaan digital, hingga kehilangan kontak dengan keluarga selama gempa bumi yang mengarah ke aplikasi yang memberikan peringatan bencana waktu nyata hingga jutaan.
Berikut adalah beberapa favorit kami:
Daiki Ishimori, pendiri Gehirn
Tokyo, Jepang
Aplikasi Daiki, pencegahan bencana saraf, memberikan peringatan bencana berbasis waktu, lokasi.
Seorang programmer otodidak sejak usia muda, Daiki Ishimori terinspirasi oleh posting media sosial populernya yang berbagi peringatan gempa bumi untuk membuat aplikasi pencegahan bencana saraf. Sekarang alat Keselamatan Harian Tepercaya, aplikasi ini menyediakan peringatan berbasis lokasi real-time dan baru-baru ini meluncurkan alat pemetaan krisis untuk informasi bantuan multibahasa yang bersumber dari kerumunan. Daiki sekarang bersiap untuk meluncurkan fitur komunitas baru untuk membuat orang terhubung dan dilindungi selama keadaan darurat.
Jaimes Almeida Neto, Rafael Rojas dan Rodrigo Gomes, salah satu pendiri Budz
Sao Paulo, Brasil
Aplikasi bertenaga AI, Rafael, dan Rodrigo, Budz, membantu pemilik anjing dan kucing dengan pelatihan, kesehatan, dan nutrisi.
Terinspirasi oleh anak anjing baru co-founder, Jaimes, Rafael, dan Rodrigo menciptakan Budz untuk mendukung sesama pecinta hewan. Aplikasi ini membantu dengan pelatihan hewan peliharaan, kesehatan, dan nutrisi melalui fitur-fitur seperti pengingat vaksin, telekonsultasi 24/7, dan tutor AI yang menjawab pertanyaan real-time. Dengan membantu orang -orang di Brasil lebih merawat hewan peliharaan mereka, Budz bertujuan untuk mengurangi pengabaian hewan peliharaan dan sekarang bersiap untuk berkembang di seluruh Amerika Latin.
Khaldon Evans, Perrine Chapot dan Victor Dequid, Co-Founders of Ochy
Rennes, Prancis
Aplikasi Khaldon, Perrine dan Victor, Ochy, menganalisis formulir berlari untuk mencegah cedera.
Setelah cedera mengesampingkan karirnya yang berlari cepat, Khaldon Evans terinspirasi oleh pemulihannya sendiri untuk membuat analisis gerakan tingkat laboratorium dapat diakses. Dia bekerja sama dengan pakar biomekanik Perrine Chapot dan pengembang Victor Dequid untuk menciptakan Ochy. Dengan hanya menggunakan kamera ponsel cerdas, aplikasi ini menganalisis formulir yang berjalan pengguna untuk membantu pelari, pelatih, dan dokter mencegah cedera, dan baru-baru ini menambahkan fitur analisis punggung baru. Selanjutnya, tim berencana untuk memperkenalkan rekomendasi sepatu yang dipersonalisasi dan memperluas ke olahraga baru.
Temukan Pendiri Aplikasi dan Game Inspiring lainnya yang ditampilkan di #WeAreplay.
Dengan memanfaatkan model bahasa dan ucapan besar, AI generatif membuat avatar 3D cerdas yang dapat melibatkan pengguna dalam percakapan alami, dari video game hingga layanan pelanggan. Untuk membuat karakter-karakter ini benar-benar seperti hidup, mereka membutuhkan ekspresi seperti manusia. Nvidia Audio2face mempercepat penciptaan karakter digital yang realistis dengan memberikan animasi wajah real-time dan sinkronisasi bibir yang digerakkan oleh AI generatif.
Saat ini, NVIDIA membuka sumber teknologi Audio2face kami untuk mempercepat adopsi avatar bertenaga AI dalam permainan dan aplikasi 3D.
Video 1. Demo model difusi NVIDIA AUDIO2FACE 3.0 dalam aksi
Audio2Face menggunakan AI untuk menghasilkan animasi wajah yang realistis dari input audio. Ini bekerja dengan menganalisis fitur akustik seperti fonem dan intonasi untuk membuat aliran data animasi, yang kemudian dipetakan ke pose wajah karakter. Data ini dapat diberikan offline untuk konten yang telah ditulis sebelumnya atau dialirkan secara real-time untuk karakter dinamis, yang digerakkan AI, memberikan sinkronisasi bibir yang akurat dan ekspresi emosional.
Gambar 1. Audio wicara dan pemicu emosional menghasilkan animasi wajah dan sinkronisasi bibir.
NVIDIA membuka sumber model Audio2face dan SDK sehingga setiap game dan pengembang aplikasi 3D dapat membangun dan menggunakan karakter kesetiaan tinggi dengan animasi canggih. Kami juga membuka sumber kerangka pelatihan Audio2face, sehingga siapa pun dapat menyempurnakan dan menyesuaikan model kami yang sudah ada sebelumnya untuk kasus penggunaan tertentu.
Lihat tabel di bawah ini untuk daftar lengkap alat sumber terbuka dan pelajari lebih lanjut di NVIDIA Developer.
Kemasan
Menggunakan
AUDIO2FACE SDK
Perpustakaan dan Dokumentasi untuk Penulisan dan Runtime Facial Animations on-device atau di cloud
Plugin Autodesk Maya
Plugin Referensi (V2.0) dengan eksekusi lokal yang memungkinkan pengguna untuk mengirim input audio dan menerima animasi wajah untuk karakter di Maya
Plugin Engine 5 Unreal
UE5 Plugin (v2.5) untuk UE 5.5 dan 5.6 yang memungkinkan pengguna untuk mengirim input audio dan menerima animasi wajah untuk karakter di Unreal Engine 5
Kerangka Pelatihan Audio2face
Kerangka kerja (v1.0) untuk membuat model audio2face dengan data Anda
Tabel 1. Audio2face SDK dan plugin
Kemasan
Menggunakan
Data sampel pelatihan audio2face
Contoh data untuk memulai dengan kerangka kerja pelatihan
Model Audio2face
Model regresi (v2.2) dan difusi (v3.0) untuk menghasilkan lip-sinkronisasi
Model Audio2emotion
Model produksi (v2.2) dan eksperimental (v3.0) untuk menyimpulkan keadaan emosi dari audio
Tabel 2. Model Audio2face dan Data Pelatihan
Teknologi sumber terbuka memungkinkan pengembang, siswa, dan peneliti untuk belajar dari dan membangun kode canggih. Ini menciptakan loop umpan balik di mana komunitas dapat menambahkan fitur baru dan mengoptimalkan teknologi untuk beragam kasus penggunaan. Kami senang membuat animasi wajah berkualitas tinggi lebih mudah diakses dan tidak sabar untuk melihat apa yang diciptakan masyarakat dengannya. Bergabunglah dengan komunitas pengembang NVIDIA Audio2face kami di Discord dan bagikan karya terbaru Anda.
Model Audio2face yang terkemuka di industri digunakan secara luas di seluruh industri game, media dan hiburan, dan layanan pelanggan. Sejumlah pengembang ISV dan game, termasuk Convai, Codemasters, GSC Games World, Inworld AI, Netease, Reallusion, Perfect World Games, StreamLabs, dan UNEEQ Digital Humans telah mengintegrasikan Audio2face dalam aplikasi mereka.
Video 2. Teknologi Nvidia Audio2face di F1 25
Reallusion, yang menawarkan platform bagi pencipta untuk membangun karakter 3D, Audio2face terintegrasi dalam rangkaian alatnya. “Audio2Face uses AI to create expressive, multilingual facial animation from audio,” said Elvis Huang, head of innovation at Reallusion, Inc. “Its seamless integration with Reallusion's iClone, Character Creator, and iClone AI Assistant, plus advanced editing tools like face-key editing, face puppeteering, and AccuLip make it easier than ever to produce high-quality character animation.”
Survios, pengembang Alien: Rogue Incursion Evolved EditionMelaju proses animasi mereka, memungkinkan untuk memberikan pengalaman karakter berkualitas tinggi lebih cepat. “Dengan mengintegrasikan Audio2face ke dalam edisi yang berevolusi, kami merampingkan pipa untuk penangkapan lip-sinkronisasi dan penangkapan wajah sambil memastikan pengalaman karakter yang lebih mendalam dan otentik untuk para pemain kami,” kata Eugene Elkin, direktur permainan dan insinyur utama di Survios.
Pertanian 51, pencipta Chernobylite Seri game, Audio2face terintegrasi dalam game terbaru mereka. “Integrasi Teknologi Nvidia Audio2face di Chernobylite 2: zona eksklusi telah menjadi game-changer bagi kami, “kata Wojciech Pazdur, Direktur Kreatif di Farm 51.” Ini memungkinkan kami untuk menghasilkan animasi wajah yang sangat rinci langsung dari audio, menghemat banyak jam kerja animasi. Ide yang tidak mungkin dalam aslinya Chernobylite sekarang dimungkinkan yang membawa tingkat realisme dan pencelupan baru ke karakter, membuat penampilan mereka terasa lebih otentik dari sebelumnya. ”
Di bawah ini adalah pengumuman lain untuk pengembang game yang dirilis bulan ini.
Pembaruan terbaru untuk RTX Kit
RTX Kit adalah rangkaian teknologi rendering saraf kami ke Ray Trace Games dengan AI, membuat adegan dengan geometri yang sangat besar, dan membuat karakter game dengan visual foto-realistis.
Kompresi Tekstur Saraf RTX SDK secara dramatis mengurangi penggunaan memori tekstur berkualitas tinggi tanpa mengorbankan kualitas dan telah menerima sejumlah perbaikan termasuk:
Optimalisasi perpustakaan untuk set tekstur yang sangat besar dan peningkatan kinerja dengan vektor koperasi di DX12
Set fitur yang diperluas untuk sampel rendering, peningkatan kinerja dan dukungan DLSS
Peningkatan alat baris perintah saat mengompresi dan mendekompresi set tekstur yang sangat besar
Adegan intel sponza baru, bagus untuk pembandingan
RTX Global Illumination SDK memberikan solusi pencahayaan tidak langsung yang dilacak dengan ray dan juga telah menerima perbaikan:
Penambahan opsi VSYNC ke sampel Pathtracer
Penambahan visualisasi cache dengan sakelar demodulasi material.
Algoritma Hashed Radiance Cache (SHARC) secara spasial menghapus opsi pemadatan, memperkenalkan demodulasi material opsional, pass debug tambahan dan pembaruan dokumentasi
NVIDIA VGPU meningkatkan lingkungan pengembangan game
Teknologi NVIDIA Virtual GPU (VGPU) memungkinkan berbagi GPU di antara banyak pengguna di lingkungan tervirtualisasi, memungkinkan sumber daya GPU yang dapat diskalakan untuk mendukung pengembang game di seluruh organisasi. Activision merombak pipa integrasi, pengiriman, dan penyebaran globalnya dengan NVIDIA VGPU, mengganti 100 server warisan dengan hanya enam unit bertenaga GPU RTX. Hasilnya:
82% pengurangan jejak kaki
72% penurunan penggunaan daya
Lebih dari 250.000 tugas berjalan setiap hari di 3.000 pengembang dan 500+ sistem
Video 3. Activision menciptakan platform pengujian dan penyebaran global dengan NVIDIA VGPU
Dengan mengkonsolidasikan infrastruktur dan memungkinkan alokasi GPU dinamis, Activision membangun platform pengujian otomatis yang dapat diskalakan yang mendukung segala sesuatu mulai dari validasi multipemain hingga regresi visual dan pengujian kinerja, mempercepat kecepatan iterasi dan meningkatkan kualitas kode di seluruh papan.
Jelajahi kisah Activision untuk melihat bagaimana penjadwalan GPU terpusat mendefinisikan ulang pipa pengembangan AAA.
Sesi pengembangan grafis dan penyetelan kinerja dari Siggraph 2025
NVIDIA menjadi tuan rumah berbagai sesi pelatihan dan presentasi teknis. Yang menarik bagi pengembang game adalah laboratorium langsung yang menampilkan kemajuan terbaru dalam rangkaian alat pengembang grafis. Rekaman sesi ini sekarang tersedia untuk streaming di NVIDIA On-Demand.
Nsight Graphics in Action: Mengembangkan dan men-debug aplikasi penelusuran ray modern berfokus pada inspeksi dan debugging frame untuk mengidentifikasi dan mendiagnosis bug rendering umum dan pemblokir kinerja, termasuk penggunaan alat penangkapan grafis baru yang menyediakan alur kerja yang diperluas dan dimodernisasi.
Nsight Graphics in Action: Mengoptimalkan shader dalam aplikasi ray-tracing modern adalah penyelaman mendalam ke GPU Trace Profiler, yang memungkinkan Anda menelusuri ke dalam baris kode shader individual untuk menemukan hambatan eksekusi runtime.
Mengoptimalkan manajemen VRAM dengan sistem NVIDIA NSIGHT menunjukkan cara mencapai pandangan holistik tentang kinerja aplikasi dan pemanfaatan sumber daya di seluruh CPU dan GPU menggunakan jejak yang bisa berdurasi beberapa menit. Penekanan khusus diberikan pada alat analisis hotspot grafis baru yang mengubah data timeline mentah menjadi antarmuka berbasis web dengan ringkasan analisis konkurensi yang mudah dibaca, keributan bingkai, dan banyak lagi.
Unduh Nsight Graphics dan Nsight Systems untuk mulai mengoptimalkan game dan aplikasi grafik Anda sendiri.
Apa selanjutnya
Jika Anda tidak dapat menangkap episode webinar “Level Up With Nvidia” kami pagi ini di RTX Mega Geometry di Unreal Engine 5.6, pastikan untuk menangkapnya sesuai permintaan di sini.
Lihat daftar lengkap sumber daya pengembang game kami di sini dan ikuti kami untuk tetap up to date dengan berita pengembangan game nvidia terbaru:
Fitur Pembuatan Gambar AI Gratitude, dibangun dalam waktu rekaman dengan bantuan Gemini di Android Studio
Membuka Efisiensi Baru dengan Gemini di Android Studio
Tim terima kasih memutuskan untuk mencoba Gemini di Android Studio, seorang asisten AI yang mendukung pengembang di semua tahap pengembangan, membantu mereka menjadi lebih produktif. Pengembang dapat mengajukan pertanyaan Gemini dan menerima solusi sadar-konteks berdasarkan kode mereka. Divij Gupta, pengembang senior Android dengan rasa terima kasih, berbagi bahwa tim terima kasih perlu mengetahui apakah mungkin untuk menyuntikkan objek apa pun ke dalam kelas objek Kotlin menggunakan Hilt. Gemini menyarankan menggunakan titik masuk untuk mengakses dependensi di kelas di mana injeksi standar tidak mungkin, yang membantu menyelesaikan “masalah rumit mereka,” menurut Divij.
Gemini menghilangkan kebutuhan untuk mencari dokumentasi Android juga, memungkinkan tim terima kasih untuk belajar dan menerapkan pengetahuan mereka tanpa harus meninggalkan Android Studio. “Gemini menunjukkan kepada saya cara menggunakan CPU Android Studio dan profiler memori secara lebih efektif,” kenang Divij. “Saya juga belajar cara mengatur profil awal untuk mempercepat awal yang dingin.”
Mengidentifikasi hambatan kinerja menjadi lebih mudah. Saat menganalisis kode tim terima kasih, Gemini menyarankan untuk menggunakan CollectAstateWithLifeCycle alih-alih collectasstate Untuk mengumpulkan aliran di komposable, yang membantu aplikasi menangani peristiwa siklus hidup lebih efektif dan meningkatkan kinerja secara keseluruhan. Gemini juga menganalisis laporan crash aplikasi di Wawasan kualitas aplikasi Panel dan memberikan panduan tentang cara mengatasi setiap masalah, yang memungkinkan tim terima kasih untuk “mengidentifikasi akar penyebab lebih cepat, menangkap kasus tepi yang mungkin kami lewatkan, dan meningkatkan stabilitas aplikasi secara keseluruhan,” menurut Divij.
Bereksperimen dengan fitur baru menggunakan Gemini di Android Studio
Gemini di Android Studio membantu tim terima kasih secara signifikan meningkatkan kecepatan dan moral pengembangan mereka. “Siklus yang lebih cepat ini telah membuat tim merasa lebih produktif, termotivasi, dan bersemangat untuk terus berinovasi,” kata Divij. Pengembang dapat menghabiskan lebih banyak waktu untuk mengidentifikasi dan bereksperimen pada fitur -fitur baru, yang mengarah pada pengalaman baru yang inovatif.
Salah satu fitur yang dibangun pengembang dengan waktu ditemukan baru adalah fungsi pembuatan gambar untuk fitur papan visi aplikasi. Pengguna sekarang dapat mengunggah foto dengan prompt, dan kemudian menerima gambar yang dihasilkan AI yang mereka dapat langsung menjepit papan mereka. Tim dapat membangun UI menggunakan Gemini di Android Studio Menyusun pembuatan pratinjau -memungkinkan mereka untuk dengan cepat memvisualisasikan kode jetpack mereka dan membuat piksel-perfect ui yang dimaksudkan oleh desainer mereka.
Ke depan, tim terima kasih berharap untuk menggunakan Gemini untuk menerapkan lebih banyak peningkatan pada kodenya, termasuk mengoreksi gangguan, kebocoran memori, dan meningkatkan kinerja berdasarkan lebih banyak wawasan dari Gemini, yang selanjutnya akan meningkatkan pengalaman pengguna.
Posted by Mayuri Khinvasara Khabya – Developer Relations Engineer (LinkedIn and X)
Welcome to the second installment of our three-part series on media preloading with Media3. This series is designed to guide you through the process of building highly responsive, low-latency media experiences in your Android apps.
Part 1: Introducing Preloading with Media3 covered the fundamentals. We explored the distinction between PreloadConfiguration for simple playlists and the more powerful DefaultPreloadManager for dynamic user interfaces. You learned how to implement the basic API lifecycle: adding media with add(), retrieving a prepared MediaSource with getMediaSource(), managing priorities with setCurrentPlayingIndex() and invalidate(), and releasing resources with remove() and release().
Part 2 (This post): In this blog, we explore the advanced capabilities of the DefaultPreloadManager. We cover how to gain insights with PreloadManagerListener, implement production-ready best practices like sharing core components with ExoPlayer, and master the sliding window pattern to effectively manage memory.
Part 3: The final part of this series will dive into integrating PreloadManager with a persistent disk cache, enabling you to reduce data consumption with resource management and provide a seamless experience.
If you are new to preloading in Media3, we highly recommend reading Part 1 before proceeding. For those ready to move beyond the basics, let’s explore how to elevate your media playback implementation.
Listening in: Fetch analytics with PreloadManagerListener
When you want to launch a feature in production, as an app developer you also want to understand and capture the analytics behind it. How can you be certain that your preloading strategy is effective in a real-world environment? Answering this requires data on success rates, failures, and performance. The PreloadManagerListener interface is the primary mechanism for gathering this data.
The PreloadManagerListener provides two essential callbacks that offer critical insights into the preloading process and status.
onCompleted(MediaItem mediaItem): This callback is invoked upon the successful completion of a preload request, as defined by your TargetPreloadStatusControl.
onError(PreloadException error): This callback could be useful for debugging and monitoring. It is invoked when a preload fails, providing the associated exception.
You can register a listener with a single method call as shown in the following example code:
valpreloadManagerListener=object:PreloadManagerListener{
overridefunonCompleted(mediaItem:MediaItem){
// Log success for analytics. Log.d("PreloadAnalytics","Preload completed for $mediaItem")
}
overridefunonError(preloadError:PreloadException){
// Log the specific error for debugging and monitoring.Log.e("PreloadAnalytics","Preload error ",preloadError)
}
}
preloadManager.addListener(preloadManagerListener)
Extracting insights from the listener
These listener callbacks can be hooked to your analytics pipeline. By forwarding these events to your analytics engine, you can answer key questions like:
What is our preload success rate? (ratio of onCompleted events to total preload attempts)
Which CDNs or video formats exhibit the highest error rates? (By parsing the exceptions from onError)
What is our preload error rate? (ratio of onError events to total preload attempts)
This data could give you quantitative feedback on your preloading strategy, enabling A/B testing and data-driven improvements to your user experience. This data can further help you to intelligently finetune your preload durations and number of videos you want to preload as well as the buffers you allocate.
Beyond debugging: Using onError for graceful UI fallback
A failed preload is a strong indicator of an upcoming buffering event for the user. The onError callback allows you to respond reactively. Instead of merely logging the error, you can adapt the UI. For instance, if the upcoming video fails to preload, your application could disable autoplay for the next swipe, requiring a user tap to begin playback.
Additionally, by inspecting the PreloadException type you can define a more intelligent retry strategy. An app can choose to immediately remove a failing source from the manager based on the error message or HTTP status code. The item would need to be removed from the UI stream accordingly to not make loading issues leak into the user experience. You could also get more granular data from PreloadException like the HttpDataSourceException to probe further into the errors. Read more about ExoPlayer troubleshooting.
The buddy system: Why is sharing components with ExoPlayer necessary?
The DefaultPreloadManager and ExoPlayer are designed to work together. To ensure stability and efficiency, they must share several core components. If they operate with separate, uncoordinated components, it could impact thread safety and usability of preloaded tracks on the player since we need to ensure that preloaded tracks should be played on the correct player. The separate components could also compete for limited resources like network bandwidth and memory, which could lead to performance degradation. An important part of the lifecycle is handling appropriate disposal, the recommended order of disposal is to release the PreloadManager first, followed by the ExoPlayer.
The DefaultPreloadManager.Builder is designed to facilitate this sharing and has APIs to instantiate both your PreloadManager and a linked player instance. Let’s see why components like BandwidthMeter, LoadControl, TrackSelector, Looper must be shared. Check the visual representation of how these components interact with ExoPlayer Playback.
Preventing bandwidth conflicts with a shared BandwidthMeter
The BandwidthMeter provides an estimate of available network bandwidth based on historical transfer rates. If the PreloadManager and the player use separate instances, they are unaware of each other’s network activity, which can lead to failure scenarios. For example, consider the scenario where a user is watching a video, their network connection degrades, and the preloading MediaSource simultaneously initiates an aggressive download for a future video. The preloading MediaSource’s activity would consume bandwidth needed by the active player, causing the current video to stall. A stall during playback is a significant user experience failure.
By sharing a single BandwidthMeter, the TrackSelector is able to select tracks of highest quality given the current network conditions and the state of the buffer, during preloading or playback. It can then make intelligent decisions to protect the active playback session and ensure a smooth experience.
Ensuring consistency with shared LoadControl, TrackSelector, Renderer components of ExoPlayer
LoadControl: This component dictates buffering policy, such as how much data to buffer before starting playback and when to start or stop loading more data. Sharing LoadControl ensures that the memory consumption of player and PreloadManager is guided by a single, coordinated buffering strategy across both preloaded and actively playing media, preventing resource contention. You will have to smartly allocate buffer size coordinating with how many items you are preloading and with what duration, to ensure consistency. In times of contention, the player will prioritize playback of the current item displayed on the screen. With a shared LoadControl, the preload manager will continue preloading as long as the target buffer bytes allocated for preloading hasn’t reached the upper limit, it doesn’t wait until the loading for playback is done.
Note : The sharing of LoadControl in the latest version of Media3 (1.8) ensures that its Allocator can be shared correctly with PreloadManager and player. Using the LoadControl to effectively control the preloading is a feature that will be available in the upcoming Media3 1.9 release.
TrackSelector: This component is responsible for selecting which tracks (for example, video of a certain resolution, audio in a specific language) to load and play. Sharing ensures that the tracks selected during preloading are the same ones the player will use. This avoids a wasteful scenario where a 480p video track is preloaded, only for the player to immediately discard it and fetch a 720p track upon playback.< br />
The preload manager should NOT share the same instance of TrackSelector with the player. Instead, they should use the different TrackSelector instance but of the same implementation. That’s why we set the TrackSelectorFactory rather than a TrackSelector in the DefaultPreloadManager.Builder.
Renderer: This component is responsible for understanding the player’s capabilities without creating the full renderers. It checks this blueprint to see which video, audio, and text formats the final player will support. This allows it to intelligently select and download only the compatible media track and prevents wasting bandwidth on content the player can’t actually play.
The golden rule: A common Playback Looper to rule them all
The thread on which an ExoPlayer instance can be accessed can be explicitly specified by passing a Looper when creating the player. The Looper of the thread from which the player must be accessed can be queried using Player.getApplicationLooper. By maintaining a shared Looper between the player and PreloadManager, it is guaranteed that all operations on these shared media objects are serialized onto a single thread’s message queue. This can reduce the concurrency bugs.
All interactions between the PreloadManager and the player with media sources to be loaded or preloaded need to happen on the same playback thread. Sharing the Looper is a must for thread safety and hence we must share the PlaybackLooper between the PreloadManager and player.
The PreloadManager prepares a stateful MediaSource object in the background. When your UI code calls player.setMediaSource(mediaSource), you are performing a handoff of this complex, stateful object from the preloading MediaSource to the player. In this scenario, the entire PreloadMediaSource is moved from the manager to the player. All these interactions and handoffs should occur on the same PlaybackLooper.
If the PreloadManager and ExoPlayer were operating on different threads, a race condition could occur. The PreloadManager’s thread could be modifying the MediaSource’s internal state (e.g, writing new data into a buffer) at the exact moment the player’s thread is attempting to read from it. This leads to unpredictable behavior, IllegalStateException that is difficult to debug.
Lets see how you can share all the above components between ExoPlayer and DefaultPreloadManager in the setup itself.
valpreloadManagerBuilder=
DefaultPreloadManager.Builder(context,targetPreloadStatusControl)
// Optional - Share components between ExoPlayer and DefaultPreloadManager
preloadManagerBuilder
.setBandwidthMeter(customBandwidthMeter)
.setLoadControl(customLoadControl)
.setMediaSourceFactory(customMediaSourceFactory)
.setTrackSelectorFactory(customTrackSelectorFactory)
.setRenderersFactory(customRenderersFactory)
.setPreloadLooper(playbackLooper)
valpreloadManager=valpreloadManagerBuilder.build()
Tip: If you use the Default components in ExoPlayer like the DefaultLoadControl, etc, you don’t need to explicitly share them with DefaultPreloadManager. When you build your ExoPlayer instance via the buildExoPlayer of the DefaultPreloadManager.Builder these components are automatically referenced with each other, if you use the default implementations with default configurations. But if you use custom components or custom configurations, you should explicitly notify the DefaultPreloadManager about them via the above APIs.
Production-ready preloading: The sliding window pattern
In a dynamic feed, a user can scroll through a virtually infinite amount of content. If you continuously add videos to the DefaultPreloadManager without a corresponding removal strategy, you will inevitably cause an OutOfMemoryError. Each preloaded MediaSource holds onto a SampleQueue, which allocates memory buffers. As these accumulate, they can exhaust the application’s heap space. The solution is an algorithm you may already be familiar with, called the sliding window.
The sliding window pattern maintains a small, manageable set of items in memory that are logically adjacent to the user’s current position in the feed. As the user scrolls, this “window” of managed items slides with them, adding new items that come into view, and also removing items that are now distant.
Implementing the sliding window pattern
It is essential to understand that PreloadManager does not provide a built-in setWindowSize() method. The sliding window is a design pattern that you, the developer, are responsible for implementing using the primitive add() and remove() methods. Your application logic must connect UI events, such as a scroll or page change, to these API calls. If you want a code reference for this, we have this sliding window pattern implemented in socialite sample which also includes a PreloadManagerWrapper which imitates a sliding window.
Don’t forget to add preloadManager.remove(mediaItem) in your implementation when the item is no longer likely to come up soon in the user’s viewing. Failing to remove items that are no longer proximate to the user is the primary cause of memory issues in preloading implementations. The remove() call ensures resources are released that help you keep your app’s memory usage bound and stable.
Fine-Tuning a categorized preloading strategy with TargetPreloadStatusControl
Now that we have defined what to preload (the items in our window), we can apply a well defined strategy for how much to preload for each item. We already saw how to achieve this granularity with the TargetPreloadStatusControl setup in Part 1.
To recall, an item at position +/- 1 could have a higher probability of being played than an item at position +/- 4. You could allocate more resources (network, CPU, memory) to items the user is most likely to view next. This creates a “preloading” strategy based on proximity, which is the key to balancing immediate playback with efficient resource usage.
You could use analytics data via PreloadManagerListener as discussed in the earlier sections to decide your preload duration strategy.
Conclusion and next steps
You are now equipped with the advanced knowledge to build fast, stable, and resource-efficient media feeds using Media3’s DefaultPreloadManager.
Let’s recap the key takeaways:
Use PreloadManagerListener to gather analytics insights and implement robust error handling.
Always use a single DefaultPreloadManager.Builder to create both your manager and player instances to ensure important components are shared.
Implement the sliding window pattern by actively managing add() and remove() calls to prevent OutOfMemoryError.
Use TargetPreloadStatusControl to create a smart, tiered preloading strategy that balances performance and resource consumption.
What’s next in Part 3: Caching with preloaded media
Preloading data into memory provides an immediate performance benefit, but it can come with tradeoffs. Once the application is closed or the preloaded media is removed from the manager, the data is gone. To achieve a more persistent level of optimization, we can combine preloading with disk caching. This feature is in active development and will come soon in a few months.
Do you have any feedback to share? We are eager to hear from you.
Stay tuned, and go make your video playback faster! ð
Kami mengembangkan game Google Play menjadi pengalaman terintegrasi yang berpusat pada perjalanan pemain. Saat ini, pemain harus melompat antara platform yang berbeda untuk menemukan, bermain, dan bersosialisasi. Tujuan kami adalah menghubungkan perjalanan ini untuk menciptakan pengalaman bermain game terbaik bagi para pemain dan mengembangkan bisnis Anda. Game yang menawarkan pengalaman yang mulus dan bermanfaat mencapai keterlibatan dan pertumbuhan yang lebih tinggi saat bermain. Itu sebabnya kami memperkenalkan Google Play Games Level UpCara baru kami naik level pengalaman pemain dan membuka kesuksesan yang lebih besar untuk bisnis Anda.
Program Level Up terbuka untuk semua game¹, termasuk akses ke alat yang kuat dan peluang promosi. Permainan dapat tetap terdaftar dalam program dan memaksimalkan manfaat dengan memenuhi pedoman pengalaman pengguna oleh setiap tonggak program, tanggal tonggak pertama adalah Juli 2026. Mari kita lihat lebih dekat manfaat dan pedoman dari Google Play Games Level Up.
Manfaat program untuk mempercepat pertumbuhan Anda
Game yang merupakan bagian dari program Level Up dapat mengakses serangkaian manfaat untuk mempercepat pertumbuhan bisnis. Ini termasuk ruang baru untuk terlibat dengan pemain, akses ke alat konten di Play Console, dan peningkatan peluang penemuan melalui permukaan editorial di Play Store.
Tab ulang pemain pada tab Anda. You Tab² adalah tujuan pribadi baru di Play Store di mana pemain dapat melihat konten dan hadiah dari game yang baru -baru ini mereka mainkan, semuanya di satu tempat khusus. Ini dirancang untuk membantu Anda melibatkan kembali dan mempertahankan pemain dengan menampilkan acara terbaru, penawaran, dan pembaruan Anda.
Game dapat menampilkan konten mereka di tab Anda menggunakan alat pertunangan di Play Console. Anda dapat mendorong keterlibatan pemain melalui kehadiran toko yang kaya menggunakan konten promosi, kupon poin, video YouTube, dan pencapaian, yang semuanya muncul di halaman detail game Anda dan tab Anda.
Clash of Clans sedang melibatkan kembali pemain melalui tab Anda
Maksimalkan jangkauan permainan Anda. Untuk memudahkan pemain untuk menemukan permainan hebat, kami memasukkan pedoman pengalaman pengguna ke dalam kriteria editorial kami. Game yang merupakan bagian dari program ini akan memiliki kesempatan untuk meningkatkan menonjol di seluruh toko termasuk menampilkan peluang dan bermain poin dan pencarian. Judul yang merupakan bagian dari program ini akan memiliki lebih banyak peluang untuk direkomendasikan melalui permukaan editorial di seluruh toko termasuk rumah permainan dan poin bermain di rumah.
Dapatkan lebih banyak kesempatan untuk ditampilkan di permukaan editorial
Buka wawasan kinerja yang lebih dalam. Membuat keputusan yang tepat untuk menumbuhkan permainan Anda membutuhkan gambaran yang jelas tentang seluruh bisnis Anda. Tahun depan, kami memperkenalkan pelaporan yang lebih maju di Play Console. Anda akan dapat menghubungkan titik-titik dari akuisisi pemain ke keterlibatan jangka panjang dan monetisasi, memberi Anda wawasan holistik yang diperlukan untuk mengoptimalkan strategi pertumbuhan Anda dengan percaya diri.
Pedoman yang dibangun di atas pengalaman pengguna yang hebat
Game dapat tetap terdaftar dalam program dan mengakses manfaat dengan memenuhi pedoman pengalaman pengguna. Pedoman ini didasarkan pada apa yang diinginkan pemain: pengalaman yang mulus dan bermanfaat di mana pun mereka bermain. Untuk memenuhi ini, kami telah menetapkan tiga pedoman pengalaman pengguna inti:
Kontinuitas Pemain: Pemain hari ini menikmati permainan mereka di beberapa perangkat. Mereka ingin terus bermain tanpa kehilangan ketukan. Cloud Save memungkinkan ini, Cloud Save memungkinkan hal ini, sementara Layanan Play Games secara otomatis menyinkronkan kredensial masuk mereka untuk pengalaman yang mulus.
Kami membuat pengalaman ini lebih baik dengan Sidekick Play Games. Overlay dalam game baru memberi pemain akses instan ke hadiah, penawaran, dan pencapaian mereka, mendorong keterlibatan yang lebih tinggi untuk permainan Anda. Dengan tips dan saran yang digerakkan AI, Sidekick membantu pemain tetap tenggelam dalam permainan yang mereka sukai. Mulai awal tahun depan, Anda dapat mengaktifkan pengalaman ini dengan menggunakan sakelar sederhana di Play Console dengan proses pengujian yang ramping.
Mainkan Games Sidekick membuat pemain terbenam dalam permainan Anda
Perjalanan Pemain yang Menghargai: Pemain senang melihat waktu dan upaya yang mereka investasikan dalam permainan diakui dan dihargai. Dengan merancang pencapaian yang menjangkau masa hidup permainan – meresap perkembangan untuk menemukan kejutan tersembunyi atau bahkan mengakui upaya gagal – Anda dapat membuat seluruh pengalaman pemain merasa lebih menarik dan dihargai. Dengan menerapkan pencapaian berkualitas tinggi, Anda akan memenuhi syarat untuk pencarian poin bermain yang memberi penghargaan kepada pemain untuk menyelesaikan setiap pencapaian dan meningkatkan retensi untuk permainan Anda.
Perkembangan Pemain Penghargaan Pengerukan Melalui Prestasi
Gameplay Perangkat Cross: Pemain menginginkan fleksibilitas untuk menikmati game favorit mereka di perangkat apa pun. Kami telah melihat game yang dioptimalkan untuk beberapa jenis perangkat – dari seluler hingga tablet hingga PC – membuat keterlibatan dan pengeluaran pemain yang lebih tinggi. Untuk membuat game-game ini lebih mudah ditemukan pemain, kami meluncurkan fitur penemuan baru di dalam toko akhir tahun ini untuk menampilkan judul-judul dengan perangkat silang yang bagus dan dukungan input.
Anda dapat memberi pemain Anda fleksibilitas untuk memainkan apa yang mereka inginkan dengan menambahkan dukungan keyboard dan mouse, serta dukungan pengontrol – yang juga membuka kunci permainan yang lebih baik dengan pengontrol seluler yang dapat dilampirkan dan Android XR. Game Google Play di PC memudahkan membawa game seluler Anda ke audiens baru dengan distribusi yang ramping menggunakan Play Console.
Pedoman Pengalaman Pengguna oleh setiap tonggak program
Mulailah menjelajahi Google Play Games level hari ini
Program Level Up diluncurkan di Play Console mulai hari ini. Harapan pemain dan kebutuhan pengembang selalu berkembang. Program Level Up dirancang untuk berevolusi dengan mereka, itulah sebabnya pedoman pengalaman pengguna dan manfaat dapat diperbarui dari waktu ke waktu. Kami berkomitmen untuk memberikan pembaruan lebih awal sehingga Anda dapat membuat keputusan berdasarkan informasi tentang program ini.
Level Google Play Level adalah bagaimana kami berinvestasi dalam kesuksesan Anda dan menciptakan pengalaman terbaik bagi para pemain. Kami percaya bahwa dengan bermitra untuk membangun pengalaman luar biasa, kami dapat membangun ekosistem yang lebih kuat untuk semua orang.
¹ Game dalam kategori kasino, termasuk kasino sosial dan judul taruhan uang nyata, mungkin memiliki akses terbatas ke manfaat program tertentu. ² Tab Anda tersedia di negara -negara tempat Google Play Points ditawarkan. Lihat Pusat Bantuan Poin Play untuk detailnya.
Saat ini, Microsoft membuat Windows ML tersedia untuk pengembang. Windows ML memungkinkan pengembang C#, C ++ dan Python untuk menjalankan model AI secara optimal di seluruh perangkat keras PC dari CPU, NPU dan GPU. Pada NVIDIA RTX GPU, ini menggunakan NVIDIA TensorRT untuk penyedia eksekusi RTX (EP) yang memanfaatkan inti tensor GPU dan kemajuan arsitektur seperti FP8 dan FP4, untuk memberikan kinerja inferensi AI tercepat pada RTX AI PCS berbasis Windows.
“Windows ML membuka akselerasi Tensorrt penuh untuk GeForce RTX dan RTX Pro GPU, memberikan kinerja AI yang luar biasa di Windows 11,” kata Logan Iyer, VP, Insinyur Terhormat, Platform Windows dan Pengembang. “Kami senang umumnya tersedia untuk pengembang hari ini untuk membangun dan menggunakan pengalaman AI yang kuat pada skala.”
Tinjauan Windows ML dan TensorRT untuk RTX EP
Video 1. Menyebarkan model AI kinerja tinggi di aplikasi Windows di NVIDIA RTX AI PCS
Windows ML dibangun di atas API runtime ONNX untuk menyimpulkan. Ini memperluas API runtime ONNX untuk menangani inisialisasi dinamis dan manajemen ketergantungan dari penyedia eksekusi di CPU, NPU, dan perangkat keras GPU pada PC. Selain itu, Windows ML juga secara otomatis mengunduh penyedia eksekusi yang diperlukan sesuai permintaan, mengurangi kebutuhan pengembang aplikasi untuk mengelola dependensi dan paket di beberapa vendor perangkat keras yang berbeda.
Gambar 1. Diagram tumpukan Windows ML
NVIDIA TensorRT untuk Penyedia Eksekusi RTX (EP) memberikan beberapa manfaat bagi pengembang ML Windows menggunakan Onnx Runtime termasuk:
Jalankan model ONNX dengan inferensi latensi rendah dan 50% throughput lebih cepat dibandingkan dengan implementasi DirectML sebelumnya pada GPU NVIDIA RTX, seperti yang ditunjukkan pada gambar di bawah ini.
Terintegrasi secara langsung dengan WindowsML dengan arsitektur EP yang fleksibel dan integrasi dengan ORT.
Kompilasi tepat waktu untuk penyebaran ramping pada perangkat pengguna akhir. Pelajari lebih lanjut tentang proses kompilasi dalam Tensorrt untuk RTX. Proses kompilasi ini didukung dalam runtime ONNX sebagai model konteks EP.
Kemajuan Arsitektur Leverage seperti FP8 dan FP4 pada inti tensor
Paket ringan di bawah 200 MB.
Dukungan untuk berbagai arsitektur model dari LLMS (dengan ekstensi Onnx Runtime Genai SDK), difusi, CNN, dan banyak lagi.
Pelajari lebih lanjut tentang TensorRT untuk RTX.
Gambar 2. Generasi Throughput Speedup dari berbagai model pada Windows ML versus ML langsung. Data diukur pada GPU NVIDIA RTX 5090.
Memilih penyedia eksekusi
Rilis 1.23.0 ONNX Runtime, disertakan dengan WindowsML, menyediakan vendor dan penyedia eksekusi API independen untuk pemilihan perangkat. Ini secara dramatis mengurangi jumlah logika aplikasi yang diperlukan untuk memanfaatkan penyedia eksekusi optimal untuk setiap platform vendor perangkat keras. Lihat di bawah untuk kutipan kode tentang cara melakukan ini secara efektif dan memperoleh kinerja maksimum pada GPU NVIDIA.
// Register desired execution provider libraries of various vendors
auto env = Ort::Env(ORT_LOGGING_LEVEL_WARNING);
env.RegisterExecutionProviderLibrary("nv_tensorrt_rtx", L"onnxruntime_providers_nv_tensorrt_rtx.dll");
// Option 1: Rely on ONNX Runtime Execution policy
Ort::SessionOptions sessions_options;
sessions_options.SetEpSelectionPolicy(OrtExecutionProviderDevicePolicy_PREFER_GPU);
// Option 2: Interate over EpDevices to perform manual device selection
std::vector<Ort::ConstEpDevice> ep_devices = env.GetEpDevices();
std::vector<Ort::ConstEpDevice> selected_devices = select_ep_devices(ep_devices);
Ort::SessionOptions session_options;
Ort::KeyValuePairs ep_options;
session_options.AppendExecutionProvider_V2(env, selected_devices, ep_options);
# Register desired execution provider libraries of various vendors
ort.register_execution_provider_library("NvTensorRTRTXExecutionProvider", "onnxruntime_providers_nv_tensorrt_rtx.dll")
# Option 1: Rely on ONNX Runtime Execution policy
session_options = ort.SessionOptions()
session_options.set_provider_selection_policy(ort.OrtExecutionProviderDevicePolicy.PREFER_GPU)
# Option 2: Interate over EpDevices to perform manual device selection
ep_devices = ort.get_ep_devices()
ep_device = select_ep_devices(ep_devices)
provider_options = {}
sess_options.add_provider_for_devices([ep_device], provider_options)
Runtime yang dikompilasi menawarkan waktu pemuatan cepat
Model RunTimes sekarang dapat dikompilasi menggunakan file konteks EP ONNX dalam ONNX Runtime. Setiap penyedia eksekusi dapat menggunakan ini untuk mengoptimalkan seluruh subgraph dari model ONNX, dan memberikan implementasi spesifik EP. Proses ini dapat diserialisasi ke disk untuk mengaktifkan waktu pemuatan cepat dengan windowsml, seringkali ini lebih cepat daripada metode berbasis operator tradisional sebelumnya dalam ML langsung.
Bagan di bawah ini menunjukkan bahwa TensorRT untuk RTX EP membutuhkan waktu untuk dikompilasi, tetapi lebih cepat memuat dan melakukan inferensi pada model karena optimasi sudah diserialisasi. Selain itu, fitur cache runtime dalam TensorRT untuk RTX EP memastikan bahwa kernel yang dihasilkan selama fase kompilasi diserialisasi dan disimpan ke direktori, sehingga mereka tidak harus dikompilasi ulang untuk inferensi berikutnya.
Gambar 3. Waktu pemuatan yang berbeda dari deepseek-r1-distill-qwen-7b model runtimes termasuk model ONNX, file konteks EP, dan dengan konteks EP dan cache runtime. Lebih rendah lebih baik.
Overhead transfer data minimal dengan ONNX Runtime Device API dan Windows ML
ONNX Runtime Device API baru, juga tersedia di Windows ML, menyebutkan perangkat yang tersedia untuk setiap penyedia eksekusi. Dengan menggunakan gagasan baru ini, pengembang sekarang dapat mengalokasikan tensor khusus perangkat, tanpa spesifikasi tipe EP-dependen tambahan.
Dengan memanfaatkan copytensors dan iobinding, API ini memungkinkan pengembang untuk melakukan inferensi EP-agnostik, GPU-dipercepat dengan overhead transfer data runtime minimal-memberikan peningkatan kinerja dan desain kode yang lebih bersih.
Gambar 5 menampilkan model medium difusi 3.5 stabil yang memanfaatkan API perangkat runtime ONNX. Gambar 4 di bawah ini mewakili waktu yang diperlukan untuk satu iterasi tunggal dalam loop difusi untuk model yang sama, baik dengan dan tanpa binding perangkat IO.
Gambar 4. Difusi stabil 3.5 sedang berjalan dengan dan tanpa binding perangkat pada AMD Ryzen 7 7800x3D CPU + RTX 5090 GPU yang terhubung melalui PCI 5. Waktu yang lebih rendah lebih baik.
Menggunakan sistem NSIGHT, kami memvisualisasikan overhead kinerja karena salinan berulang antara host dan perangkat saat tidak menggunakan IO Binding:
Gambar 5. Timeline sistem NSIGHT yang menunjukkan overhead yang dibuat oleh lalu lintas PCI sinkron tambahan.
Sebelum setiap run inferensi, operasi salinan input tensor selesai, yang disorot sebagai hijau di profil kami dan perangkat untuk meng -host salinan output membutuhkan waktu yang bersamaan. Selain itu, Onnx Runtime secara default menggunakan memori yang dapat di -pagable yang perangkat untuk meng -host salinan adalah sinkronisasi implisit, meskipun API Cudamemcpyasync digunakan oleh ONNX Runtime.
Di sisi lain, ketika input dan output tensor terikat IO, salinan input host-ke-perangkat terjadi hanya sekali sebelum pipa inferensi multi-model. Hal yang sama berlaku untuk salinan output perangkat-ke-host, setelah itu kami menyinkronkan CPU dengan GPU lagi. Jejak async nsight di atas menggambarkan beberapa inferensi berjalan di loop tanpa operasi salinan atau operasi sinkronisasi di antaranya, bahkan membebaskan sumber daya CPU sementara itu. Ini menghasilkan waktu salinan perangkat 4,2 milidetik dan waktu salinan host satu kali 1,3 milidetik, membuat total waktu salinan 5,5 milidetik, terlepas dari jumlah iterasi dalam loop inferensi. Untuk referensi, pendekatan ini menghasilkan pengurangan ~ 75x dalam waktu salin untuk loop 30 iterasi!
TensorRT untuk optimasi spesifik RTX
TensorRT untuk eksekusi RTX menawarkan opsi khusus untuk mengoptimalkan kinerja lebih lanjut. Optimalisasi terpenting tercantum di bawah ini.
Grafik CUDA: Diaktifkan dengan pengaturan enable_cuda_graph Untuk menangkap semua kernel CUDA yang diluncurkan dari Tensorrt di dalam grafik, sehingga mengurangi overhead peluncuran di CPU. Ini penting jika grafik Tensorrt meluncurkan banyak kernel kecil sehingga GPU dapat mengeksekusi ini lebih cepat daripada CPU dapat mengirimkannya. Metode ini menghasilkan sekitar 30% kenaikan kinerja dengan LLM, dan berguna untuk banyak jenis model, termasuk model AI tradisional dan arsitektur CNN.
Gambar 6. Menampilkan speedup throughput grafik CUDA diaktifkan dibandingkan dengan grafik CUDA yang dinonaktifkan di ONNX Runtime API. Data diukur pada GPU NVIDIA RTX 5090 dengan beberapa LLM.
Cache runtime: nv_runtime_cache_path Poin ke direktori di mana kernel yang dikompilasi dapat di -cache untuk waktu beban cepat dalam kombinasi dengan menggunakan node konteks EP.
Bentuk dinamis: Timpa rentang bentuk dinamis yang diketahui dengan mengatur 3 opsi profile_{min|max|opt]_shapes atau dengan menentukan bentuk statis menggunakan AddFreedimensionOverrideByName untuk memperbaiki bentuk input model. Saat ini, fitur ini dalam mode eksperimental.
Ringkasan
Kami senang berkolaborasi dengan Microsoft untuk membawa Windows ML dan TensorRT untuk RTX EP ke pengembang aplikasi Windows untuk kinerja maksimum di NVIDIA RTX GPU. Pengembang aplikasi Windows Top termasuk Topaz Labs, dan Wondershare Filmora saat ini sedang berupaya mengintegrasikan Windows ML dan TensorRT untuk RTX EP ke dalam aplikasi mereka.
Mulailah dengan Windows ML, ONNX Runtime API, dan TensorRT untuk RTX EP menggunakan sumber daya di bawah ini:
Tetap disini untuk perbaikan di masa mendatang dan mempercepat dengan API baru yang ditunjukkan sampel kami. Jika ada permintaan fitur dari pihak Anda, jangan ragu untuk membuka masalah di GitHub dan beri tahu kami!
Ucapan Terima Kasih
Kami ingin mengucapkan terima kasih kepada Gaurav Garg, Kumar Anshuman, Umang Bhatt, dan Vishal Agarawal atas kontribusi mereka ke blog.
Algoritma deteksi masyarakat memainkan peran penting dalam memahami data dengan mengidentifikasi kelompok tersembunyi dari entitas terkait dalam jaringan. Analisis Jaringan Sosial, Sistem Rekomendasi, Graphrag, Genomik, dan lebih banyak tergantung pada deteksi masyarakat. Tetapi bagi para ilmuwan data yang bekerja di Python, kemampuan untuk menganalisis data grafik secara efisien saat tumbuh dalam ukuran dan kompleksitas dapat menimbulkan masalah ketika membangun sistem deteksi komunitas yang responsif dan dapat diskalakan.
Meskipun ada beberapa algoritma deteksi komunitas yang digunakan saat ini, algoritma Leiden telah menjadi solusi utama bagi para ilmuwan data. Dan untuk grafik skala besar di Python, tugas yang dulu mahal ini sekarang secara dramatis lebih cepat berkat Cugraph dan implementasi Leiden yang dipercepat GPU. Leiden dari Cugraph memberikan hasil hingga 47x lebih cepat dari alternatif CPU yang sebanding. Kinerja ini mudah diakses dalam alur kerja Python Anda melalui Perpustakaan Cugraph Python atau Perpustakaan NetworkX yang populer melalui backend NX-Cugraph.
Posting ini menunjukkan di mana algoritma Leiden dapat digunakan dan bagaimana mempercepatnya untuk ukuran data dunia nyata menggunakan Cugraph. Baca terus untuk tinjauan singkat Leiden dan banyak aplikasinya, tolok ukur kinerja Cugraph Leiden terhadap orang lain yang tersedia dalam Python, dan contoh Leiden yang dipercepat GPU pada data genomik skala yang lebih besar.
Apa itu Leiden?
Leiden dikembangkan sebagai modifikasi pada algoritma Louvain yang populer, dan seperti Louvain, ini bertujuan untuk mempartisi jaringan ke komunitas dengan mengoptimalkan fungsi kualitas yang disebut modularity. Namun, Leiden juga membahas kelemahan yang signifikan dari Louvain: komunitas yang dihasilkan yang dikembalikan oleh Louvain dapat terhubung dengan buruk, kadang -kadang bahkan terputus. Dengan menambahkan fase penyempurnaan menengah, Leiden menjamin semua komunitas yang dihasilkan terhubung dengan baik, menjadikannya pilihan populer untuk berbagai pilihan aplikasi. Leiden dengan cepat menjadi alternatif standar untuk Louvain.
Dimana Leiden digunakan?
Berikut ini hanyalah sampel bidang yang menggunakan teknik deteksi komunitas seperti Leiden, yang semuanya tunduk pada dampak dari ukuran data dunia nyata yang terus tumbuh:
Analisis Jaringan Sosial: Mengidentifikasi komunitas dapat mengungkapkan kelompok pengguna dengan minat bersama, memfasilitasi iklan yang ditargetkan, rekomendasi, dan studi tentang difusi informasi.
Sistem Rekomendasi: Clustering pengguna atau item ke komunitas berdasarkan interaksi mereka memungkinkan sistem rekomendasi untuk memberikan saran yang lebih akurat dan dipersonalisasi.
Deteksi Penipuan: Dengan mengidentifikasi komunitas akun penipuan atau transaksi yang mencurigakan dalam jaringan keuangan, lembaga dapat dengan cepat menandai dan menyelidiki aktivitas penipuan.
Generasi Pengambilan Berbasis Grafik (GraphRag): Graphrag mengambil informasi yang relevan dari grafik pengetahuan – jaringan fakta yang saling berhubungan – untuk memberikan konteks LLM yang lebih baik. Leiden sering digunakan untuk membuat kategori pengetahuan untuk membantu mencocokkan node yang paling berlaku dalam grafik pengetahuan dengan prompt pengguna.
Genomik: Leiden digunakan saat menganalisis data genomik sel tunggal untuk mengidentifikasi kelompok sel dengan profil ekspresi gen yang sama.
Bagaimana Leiden bertenaga GPU dari Cugraph membandingkan?
Beberapa implementasi Leiden yang tersedia untuk pengembang Python dibandingkan menggunakan grafik kutipan paten yang terdiri dari 3,8 juta node dan 16,5 juta tepi, di mana masyarakat yang diidentifikasi oleh Leiden mewakili teknologi terkait. Gambar 1 menunjukkan runtime dalam hitungan detik, bersama dengan jumlah komunitas unik yang diidentifikasi.
Gambar 1. Leiden Runtimes dan jumlah komunitas untuk grafik kutipan besar seperti yang dikembalikan oleh banyak perpustakaan
Perhatikan bahwa karena implementasi Leiden menggunakan generator bilangan acak, masyarakat yang dikembalikan adalah non-deterministik dan sedikit berbeda di antara berjalan. Jumlah komunitas terbukti menunjukkan bahwa semua hasil kira -kira sama. Sebagian besar implementasi, termasuk Cugraph, memberikan parameter untuk menyesuaikan ukuran komunitas yang lebih besar atau lebih kecil, antara lain. Setiap implementasi dipanggil dengan nilai parameter default bila memungkinkan. Kode sumber untuk tolok ukur ini dapat ditemukan di repo Rapidsai/Cugraph Github.
Seperti yang ditunjukkan pada Gambar 1, implementasi Leiden yang dipercepat GPU CUGRAPH berjalan 8,8x lebih cepat dari iGraph dan 47,5x lebih cepat daripada Graspologic's pada grafik kutipan yang sama. Selain kinerja tinggi, Cugraph juga memberikan kemudahan penggunaan, fleksibilitas, dan kompatibilitas dengan alur kerja sains data python yang ada melalui beberapa antarmuka Python. Untuk membantu Anda memilih yang tepat untuk proyek Anda, Tabel 1 mencantumkan fitur utama dari setiap perpustakaan. Leiden dan banyak algoritma grafik lainnya tersedia di masing -masing.
Kecepatan
Kemudahan penggunaan
Dependensi
Manfaat NetworkX: Fallback CPU, Objek Grafik Fleksibel, API Populer, Ratusan Algo, Visualisasi Grafik, Lainnya
Dukungan Multi-GPU
Dukungan CUDF dan DASK
NetworkX Plus NX-Cugraph
Cepat
Termudah
Sedikit
✔
Cugraph
Lebih cepat
Mudah
Lebih banyak, termasuk cudf dan dask
✔
✔
Tabel 1. Tabel Perbandingan Fitur untuk Perpustakaan Cugraph Python
Untuk instruksi instalasi terperinci, lihat Panduan Instalasi Rapids. Untuk memulai segera dengan Pip atau Conda, gunakan pemilih rilis Rapids.
Cara menggunakan networkx dan nx-cugraph dengan data genomik
Kumpulan data genomik sangat besar, dan tumbuh pada kecepatan eksplosif, sebagian besar karena penurunan baru dan dramatis dalam biaya sekuensing DNA. Sementara NetworkX memiliki pengikut yang sangat besar di antara para ilmuwan data dari semua bidang, implementasinya yang murni-Python berarti bahwa sebagian besar set data genomik terlalu besar untuk itu, memaksa para ilmuwan untuk belajar dan mengintegrasikan perpustakaan yang terpisah untuk analitik. Untungnya, NetworkX dapat dipercepat GPU dengan mengaktifkan backend NX-Cugraph untuk memungkinkan para ilmuwan data untuk terus menggunakan NetworkX bahkan dengan data besar.
Untuk menunjukkan manfaat GPU Accelerated NetworkX pada data genomik skala yang lebih besar, contoh sederhana dibuat yang membaca data ekspresi gen, membangun grafik gen dengan tepi yang menghubungkan gen berdasarkan nilai korelasi ekspresi, menjalankan Leiden untuk mengidentifikasi kelompok gen yang terkait secara fungsional, dan memplot komunitas untuk inspeksi visual. Kode sumber lengkap tersedia di repo Rapidsai/NX-Cugraph Github. Perhatikan bahwa contoh tersebut merupakan operasi umum dalam genomik – deteksi komunitas menggunakan Leiden atau Louvain – pada data genomik yang sebenarnya, tetapi tidak dimaksudkan untuk mewakili alur kerja genomik yang khas.
Data analisis ekspresi gen menggunakan hasil dalam grafik 14,7k node dan 83,8 juta tepi. Kode berikut akan menjalankan Leiden menggunakan NX-Cugraph tetapi akan kembali ke implementasi NetworkX dari Louvain ketika NX-Cugraph tidak tersedia.
Leiden saat ini adalah satu-satunya algoritma yang disediakan oleh NX-Cugraph yang tidak memiliki implementasi alternatif yang tersedia melalui NetworkX. Ini berarti bahwa Leiden tersedia untuk pengguna NetworkX hanya melalui NX-Cugraph. Untuk alasan ini, alur kerja ini menggunakan Louvain dari NetworkX di CPU, karena memberikan perbandingan yang masuk akal untuk pengguna yang ingin terus menggunakan NetworkX ketika GPU tidak ada.
Dengan NX-Cugraph diaktifkan, NetworkX mengidentifikasi empat komunitas dalam waktu kurang dari 4 detik. Namun, kembali ke implementasi NetworkX dari Louvain menunjukkan bahwa hasilnya hampir identik (dalam toleransi non-determinisme Leiden dan Louvain), tetapi kinerja secara dramatis lebih lambat, membutuhkan waktu hampir 21 menit. Selain itu, karena Louvain digunakan, komunitas yang dihasilkan tidak dijamin akan terhubung dengan baik.
Ini membuat NetworkX dengan NX-Cugraph 315x lebih cepat dalam memberikan hasil kualitas yang lebih tinggi daripada NetworkX Louvain pada CPU.
Untuk menjalankan Leiden atau Louvain berdasarkan keberadaan implementasi Leiden (saat ini hanya tersedia melalui NX-Cugraph) Gunakan kode berikut:
%%time
try:
communities = nx.community.leiden_communities(G)
except NotImplementedError:
print("leiden not available (is the cugraph backend enabled?), using louvain.")
communities = nx.community.louvain_communities(G)
num_communities = len(communities)
print(f"Number of communities: {num_communities}")
Gambar 2. Output dari menjalankan NX-Cugraph Leiden di GPU (kiri) dan NetworkX Louvain di CPU (kanan)
Node grafik mewarnai oleh komunitas dan plot sepele di NetworkX (Gambar 3).
Gambar 3. Plot grafik dengan node diwarnai oleh komunitas, seperti yang dihitung oleh NX-Cugraph Leiden di GPU (kiri) dan Networkx Louvain di CPU (kanan)
Ketika NetworkX menambahkan dukungan CPU untuk Leiden, baik sebagai implementasi python asli atau sebagai backend CPU terpisah, pengguna dapat memanfaatkan fungsionalitas nol-kode-perubahan dengan memiliki satu panggilan fungsi “portabel” tunggal yang berfungsi, meskipun mungkin lebih lambat, pada platform tanpa GPU.
Contoh sebelumnya dimaksudkan untuk hanya menunjukkan bagaimana NX-Cugraph dapat GPU mempercepat algoritma NetworkX yang biasa digunakan dalam genomik pada data genomik dunia nyata. Untuk mengeksplorasi contoh yang lebih realistis dan dibangun khusus, lihat proyek Rapids-Singlecell, yang menawarkan perpustakaan yang dirancang khusus untuk masalah genomik.
Rapids-Singlecell adalah paket inti Scverse berdasarkan pustaka scanpy populer, mendukung API yang kompatibel dengan Anndata, dan dioptimalkan untuk analisis sel tunggal pada dataset besar. Kecepatan yang mengesankan dari skala rapids-singlecell pada skala berasal dari Cugraph dan perpustakaan Cuda-X DS lainnya yang menyediakan akselerasi GPU untuk panggilannya ke Leiden dan banyak algoritma lainnya. Untuk mempelajari lebih lanjut, lihat mengemudi menuju analisis sel miliar dan terobosan biologis dengan rapids-singlecell.
Mulai menjalankan alur kerja Leiden bertenaga GPU
Cugraph menyediakan kinerja deteksi komunitas terbaik di kelasnya melalui implementasi Leiden yang dipercepat GPU, tersedia untuk para ilmuwan data di Python dari Cugraph Python Library atau perpustakaan NetworkX yang populer dan fleksibel melalui backend NX-Cugraph. Kinerja hingga 47x lebih cepat, mungkin lebih, lebih dari implementasi CPU yang sebanding berarti genomik dan banyak aplikasi lain yang mengandalkan deteksi masyarakat dapat meningkatkan data mereka dan memecahkan masalah yang lebih besar dalam waktu yang jauh lebih sedikit.
Untuk memulai, lihat Panduan Instalasi Rapids atau kunjungi repo Rapidsai/Cugraph atau Rapidsai/NX-Cugraph untuk menjalankan alur kerja Leiden bertenaga GPU Anda.
In previous posts on FP8 training, we explored the fundamentals of FP8 precision and took a deep dive into the various scaling recipes for practical large-scale deep learning. If you haven’t read those yet, we recommend starting there for a solid foundation.
This post focuses on what matters most in production: speed. FP8 training promises faster computation, but how much real-world acceleration does it actually deliver? And what are the hidden overhead penalties that might diminish these theoretical gains?
We’ll compare the leading FP8 scaling recipes side by side, using real benchmarks on NVIDIA H100 and NVIDIA DGX B200 GPUs. We rigorously evaluate each FP8 recipe using NVIDIA NeMo Framework—from delayed and current scaling to MXFP8 and generic block scaling—in terms of training efficiency, numerical stability, hardware compatibility, and scalability as model sizes increase.
By examining both convergence behavior and throughput across diverse LLMs, this post provides clear, actionable insights into how each approach performs in practical, demanding scenarios.
Why does speedup matter in FP8 training?
Training LLMs and other state-of-the-art neural networks is an increasingly resource-intensive process, demanding vast computational power, memory, and time. As both model and dataset scales continue to grow, the associated costs—financial, environmental, and temporal—have become a central concern for researchers and practitioners.
FP8 precision directly addresses these challenges by fundamentally improving computational efficiency. By reducing numerical precision from 16 or 32 bits down to just 8 bits, FP8 enables significantly faster computation, which translates directly into accelerated research cycles, reduced infrastructure expenditures, and the unprecedented ability to train larger, more ambitious models on existing hardware.
Beyond raw computational speed, FP8 also critically reduces communication overhead in distributed training environments, as lower-precision activations and gradients mean less data needs to be transferred between GPUs, directly alleviating communication bottlenecks and helping maintain high throughput at scale, an advantage that becomes increasingly vital as model and cluster sizes expand.
What are the strengths and trade-offs of FP8 scaling recipes?
This section briefly recaps the four primary FP8 scaling approaches evaluated in this work, highlighting their unique characteristics. For a deeper dive into the mechanics and implementation details of each recipe, see Per-Tensor and Per-Block Scaling Strategies for Effective FP8 Training.
Per-tensor delayed scaling: Offers good FP8 computation performance by using a stable, history-derived scaling factor, but its robustness can be impacted by outlier values in the amax history, potentially leading to instabilities and hindering overall training.
Per-tensor current scaling: Provides high responsiveness and instant adaptation to tensor ranges, leading to improved model convergence and maintaining minimal computational and memory overhead due to its real-time amax calculation and lack of historical tracking.
Sub-channel (generic block) scaling: Enhances precision and can unlock full FP8 efficiency by allowing configurable block dimensions and finer-grained scaling, though smaller blocks increase scaling factor storage overhead and transpose operations may involve re-computation.
MXFP8: As a hardware-native solution, this recipe delivers highly efficient block scaling with fixed 32-value blocks for both activations and weights and E8M0 power-of-2 scales, resulting in significant performance gains (up to 2x GEMM throughput) and minimized quantization error through NVIDIA Blackwell accelerated operations.
Scaling recipe
Speedup
Numerical stability
Granularity
Recommended models
Recommended hardware
Delayed scaling
High
Moderate
Per tensor
Small dense models
NVIDIA Hopper
Current scaling
High
Good
Per tensor
Medium-sized dense and hybrid models
NVIDIA Hopper
Sub-channel scaling
Medium
High
Custom 2D block of 128×128
MoE models
NVIDIA Hopper and Blackwell
MXFP8
Medium
High
Per 32-value block
All
NVIDIA Blackwell and Grace-Blackwell
Table 1. Overview of model training scaling strategies
Scaling recipe granularity
Figure 1 shows measured FP8 higher-precision matrix multiplications (GEMM) throughput speedup over BF16 for various scaling approaches on NVIDIA H100. Hardware-native scaling (channel-wise, subchannel-wise, tensor-wise) achieves up to 2x acceleration, underscoring why FP8 is so effective at the hardware level.
While FP8 offers significant speedups over BF16, the choice of scaling granularity; that is, how finely scaling factors are applied within a tensor introduces nuanced trade-offs in actual performance, particularly for GEMM operations. Finer granularity, while beneficial for numerical stability and accuracy by better accommodating intra-tensor variability, can introduce additional overhead that impacts raw throughput.
Figure 1. Higher-precision matrix multiplications (GEMM) speedups over BF16
A clear hierarchy in performance is observed when varying scaling granularities for GEMM operations. Tensor-wise scalinggenerally demonstrates the highest speedup. With only a single scaling factor per entire tensor involved in the GEMM, the overhead associated with scale management is minimized.
Channel-wise scalingrepresents an intermediate level of granularity, typically applying a scaling factor per channel or a row/column. As seen in the figure, its speedup falls between tensor-wise and 2D block-wise methods.
Sub-channel-wise 2D2D Scaling (for example, with 1×128 for activations and 128×128 blocks for weights)method, representing a finer granularity, generally exhibits slightly lower speedups compared to tensor-wise scaling. The management of multiple scaling factors for the many smaller blocks within a tensor introduces a computational cost that, while crucial for accuracy, can reduce peak raw throughput. This holds true for other configurable block dimensions like 1D1D or 1D2D, where finer block divisions mean more scales to process per GEMM.
Crucially, the x-axis in Figure 1 highlights the impact of GEMM size. As K increases (meaning larger GEMM operations), the overall speedup of FP8 over BF16 generally improves across all scaling methods. This is because for larger GEMMs, the computational savings from using 8-bit precision become more dominant, outweighing the relative overhead of managing scaling factors. In essence, larger GEMMs allow the inherent benefits of FP8 compute to shine through more effectively, even with the added complexity of finer-grained scaling.
While hardware-native solutions like MXFP8 are designed to mitigate the overhead of block scaling through dedicated Tensor Core acceleration, for general FP8 block scaling implementations, the trade-off between granularity (for accuracy) and raw performance remains a key consideration.
Beyond raw speedup, a critical aspect of low-precision training is convergence—how well the model learns and reduces its loss, and ultimately, how it performs on specific downstream tasks. While training loss provides valuable insight into the learning process, it’s important to remember that it’s not the sole metric for FP8 efficacy; robust FP8 downstream evaluation metrics are the ultimate arbiters of a model’s quality.
Figure 2. Training loss curves for FP8 techniques and BF16 on Llama 3.1
When adopting FP8, the expectation is that the training loss trajectory should closely mirror that of a higher-precision baseline, such as BF16, to ensure that the model is learning effectively without significant degradation. As shown in Figure 2, the training loss trajectories for different scaling strategies relative to BF16. The pink line represents the BF16 baseline. Notably, the dark purple line, representing FP8-blockwise scaling, consistently follows a trajectory very similar to BF16. This close alignment indicates that with finer granularity, block-wise scaling can preserve numerical fidelity more effectively, leading to a convergence behavior that closely matches the higher-precision BF16 training.
Conversely, the light green line, representing FP8-per-tensor scaling, occasionally shows slight deviations or higher fluctuations in loss. This subtle difference in convergence trajectory highlights the trade-off inherent in granularity: while coarser-grained per-tensor scaling might offer higher raw GEMM throughput as discussed previously, finer-grained block-wise scaling tends to yield less accuracy loss and a more stable learning path that closely mirrors BF16.
This illustrates the crucial balance between speedup and numerical stability in FP8 training. More granular scaling methods, by better accommodating the diverse dynamic ranges within tensors, can lead to convergence trajectories that more faithfully track higher-precision baselines, though this might come with a corresponding difference in speed compared to less granular approaches. The optimal choice often involves weighing the demands of downstream evaluation against available computational resources and desired training speed.
Experimental setup
All experiments in this post were conducted using NVIDIA NeMo Framework 25.04, the latest release of the NeMo framework at the time of writing. NeMo Framework 25.04 provides robust, production-grade support for FP8 training through the NVIDIA Transformer Engine (TE), and includes out-of-the-box recipes for dense architectures.
We evaluated two leading FP8 approaches: the current scaling recipe on H100 GPUs and the MXFP8 recipe on the newer NVIDIA DGX B200 architecture. For both, we tested a range of state-of-the-art models, including Llama 3 8B, Llama 3 70B, Llama 3.1 405B, Nemotron 15B, and Nemotron 340B. Each setup was compared directly against a BF16 baseline to measure the practical speedup delivered by FP8 in real-world training scenarios.
Current scaling recipe
As illustrated in Figure 3, the current scaling FP8 recipe on H100 GPUs demonstrates a pronounced, model-size-dependent speedup when compared to the BF16 baseline. For smaller models such as Llama3 8B, the speedup is approximately 1.30x.
This advantage becomes even more significant with larger architectures. For example, the Llama 3 70B model achieves a speedup of 1.43x, and the largest model in our benchmark suite, Llama 3.1 405B, reaches an impressive 1.53x acceleration.
Figure 3. Model-size-dependent speedup with the current scaling FP8 recipe on H100 GPUs
This upward trend is not just a statistical curiosity—it underscores a fundamental advantage of FP8 training for large-scale language models. As model size and computational complexity increase, the efficiency gains from reduced-precision arithmetic become more pronounced.
The reason is twofold: First, larger models naturally involve more matrix multiplications and data movement, both of which benefit substantially from the reduced memory footprint and higher throughput of FP8 on modern hardware. Second, the overheads associated with scaling and dynamic range adjustments become relatively less significant as the total computation grows, allowing the raw performance benefits of FP8 to dominate.
MXFP8 recipe
Figure 4 shows the performance of the MXFP8 recipe on DGX B200 GPUs, revealing a consistent speedup over BF16 across different model sizes, with observed gains ranging from 1.28x to 1.37x. While these absolute speedup values are slightly lower than those achieved by the current scaling recipe, they are notable for their stability and reliability across a diverse set of models.
Figure 4. Performance of the MXFP8 recipe on NVIDIA DGX B200 GPUs across model sizes
The relative flatness in speedup from 8B to 70B parameters—contrasted with the higher jump at 340B—reflects how block-based scaling interacts with model and hardware characteristics. MXFP8 assigns a shared scaling factor to each 32-element block, which can introduce additional memory access overhead for mid-sized models. However, as model size increases and computation becomes the dominant bottleneck (as seen with Nemotron 340B), the efficiency benefits of block-wise FP8 become more pronounced, leading to the observed peak speedup.
These results highlight the architectural strengths of the Blackwell (B200) platform, whose Tensor Cores and memory hierarchy are optimized for microscaling formats like MXFP8. This enables high throughput and stable convergence, even as models scale into the hundreds of billions of parameters. The block-level scaling approach of MXFP8 effectively balances dynamic range and computational efficiency, delivering reliable acceleration while mitigating risks of numerical instability.
This consistency reflects the architectural advancements of NVIDIA Blackwell architecture, which was purpose-built to maximize efficiency for lower-precision formats like FP8 and, specifically, for block-based scaling approaches such as MXFP8. The B200 Tensor Cores and advanced memory hierarchy are optimized for these microscaling formats, enabling high throughput and efficient memory utilization even as model sizes continue to increase. With MXFP8, each block of 32 values shares a scaling factor, striking a balance between dynamic range and computational efficiency. This approach allows for robust acceleration while minimizing the risk of numerical instability—a key consideration when pushing models to ever-larger scales.
How does NVIDIA GB200 Grace Blackwell Superchip compare to NVIDIA Blackwell architecture?
The comparison between GB200 and B200 highlights how architectural integration and system design can translate into tangible performance gains for large-scale AI workloads. Both are built on NVIDIA Blackwell architecture, but the GB200 superchip combines two B200 GPUs with a Grace CPU, interconnected through NVIDIA NVLink, resulting in a unified memory domain and exceptionally high memory bandwidth.
Figure 5. Speedup of GB200 over B200 for different model sizes and FP8 recipes. Note that the numbers shown here are computed with NeMo FW 25.04 and may change as further validation is performed
Get started with practical FP8 training
A clear pattern emerges from these benchmarks: for dense models, the bigger the model, the bigger the speedup with FP8. This is because as model size increases, the number of matrix multiplications (GEMMs) grows rapidly, and these operations benefit most from the reduced precision and higher throughput of FP8. In large dense models, FP8 enables dramatic efficiency gains, making it possible to train and fine-tune ever-larger language models with less time and compute.
These empirical results reinforce the specific strengths and tradeoffs of each FP8 scaling recipe detailed in this post and demonstrate that both per-tensor and MXFP8 approaches deliver significant speedup and convergence benefits over BF16.
Ready to try these techniques yourself? Explore the FP8 recipes to get started with practical FP8 training configurations and code.
Building a robust visual inspection pipeline for defect detection and quality control is not easy. Manufacturers and developers often face challenges such as customizing general-purpose vision AI models for specialized domains, optimizing the model size on compute‑constrained edge devices, and deploying in real time for maximum inference throughput.
NVIDIA Metropolis is a development platform for vision AI agents and applications that helps to solve these challenges. Metropolis provides the models and tools to build visual inspection workflows spanning multiple stages, including:
Customizing vision foundation models through fine-tuning
Optimizing the models for real‑time inference
Deploying the models into production pipelines
NVIDIA Metropolis provides a unified framework and includes NVIDIA TAO 6 for training and optimizing vision AI foundation models, and NVIDIA DeepStream 8, an end-to-end streaming analytics toolkit. NVIDIA TAO 6 and NVIDIA DeepStream 8 are now available for download. Learn more about the latest feature updates in the NVIDIA TAO documentation and NVIDIA DeepStream documentation.
This post walks you through how to build an end-to-end real-time visual inspection pipeline using NVIDIA TAO and NVIDIA DeepStream. The steps include:
Performing self-supervised fine-tuning with TAO to leverage domain-specific unlabeled data.
Optimizing foundation models using TAO knowledge distillation for better throughput and efficiency.
Deploying using DeepStream Inference Builder, a low‑code tool that turns model ideas into production-ready , standalone applications or deployable microservices.
How to scale custom model development with vision foundation models using NVIDIA TAO
NVIDIA TAO supports the end-to-end workflow for training, adapting, and optimizing large vision foundation models for domain specific use cases. It’s a framework for customizing vision foundation models to achieve high accuracy and performance with fine-tuning microservices.
Figure 1. Use NVIDIA TAO to create highly accurate, customized, and enterprise-ready AI models to power your vision AI applications
Vision foundation models (VFMs) are large-scale neural networks trained on massively diverse datasets to capture generalized and powerful visual feature representations. This generalization makes them a flexible model backbone for a wide variety of AI perception tasks such as image classification, object detection, and semantic segmentation.
TAO provides a collection of these powerful foundation backbones and task heads to fine-tune models for your key workloads like industrial visual inspection. The two key foundation backbones in TAO 6 are C-RADIOv2 (highest out-of-the-box accuracy) and NV-DINOv2. TAO also supports third-party models, provided their vision backbone and task head architectures are compatible with TAO.
Figure 2. Scale custom vision model development with NVIDIA TAO fine-tuning framework, foundation model backbones, and task heads
To boost model accuracy, TAO supports multiple model customization techniques such as supervised fine-tuning (SFT) and self-supervised learning (SSL). SFT requires collecting annotated datasets that are curated for the specific computer vision downstream tasks. Collecting high-quality labeled data is a complex, manual process that is time-consuming and expensive.
Second, NVIDIA TAO 6 empowers you to leverage self-supervised learning to tap into the vast potential of unlabeled images to accelerate the model customization process where labeled data is scarce or expensive to acquire.
This approach, also called domain adaption, enables you to build a robust foundation model backbone such as NV-DINOv2 with unlabeled data. This can then be combined with a task head and fine-tuned for various downstream inspection tasks with a smaller annotated dataset.
In practical scenarios, this workflow means a model can learn the nuanced characteristics of defects from plentiful unlabeled images, then sharpen its decision-making with targeted supervised fine-tuning, delivering state-of-the-art performance even on customized, real-world datasets.
Figure 3. End-to-end workflow to adapt a foundation model for a specific downstream use case
Boosting PCB defect detection accuracy with foundation model fine-tuning
To provide an example, we applied the TAO foundation model adaptation workflow using large-scale unlabeled printed circuit board (PCB) images to fine-tune a vision foundation model for defect detection. Starting with NV-DINOv2, a general-purpose model trained on 700 million general images, we customized it with SSL for PCB applications with a dataset of ~700,000 unlabeled PCB images. This helped transition the model from broad generalization, to sharp domain-specific proficiency.
Once domain adaptation is complete, we leveraged an annotated PCB dataset, using linear probing to refine the task-specific head for accuracy, and full fine-tuning to further adjust both backbone and a classification head. This first dataset consisted of around 600 training and 400 testing samples, categorizing images as OK or Defect (including patterns such as missing, shifts, upside-down, poor soldering, and foreign objects).
Feature maps show that the adapted NV-DINOv2 can sharply distinguish components and foreground-background (Figures 4 and 5) even before downstream fine-tuning. It excels in separating complex items like integrated circuit (IC) pins from the background—a task that’s not possible with a general model.
Figure 4. A comparison of feature maps for the OK class using the domain-adapted NV-DINOv2 (left) and the general NV-DINOv2 (right)Figure 5. A comparison of feature maps for the Defect class using the domain-adapted NV-DINOv2 (left) and the general NV-DINOv2 (right)
This results in substantial classification accuracy improvements of 4.7% from 93.8% to 98.5%.
Figure 6. Accuracy comparison between the domain-adapted and generic NV-DINOv2
The domain-adapted NV-DINOv2 also shows strong visual understanding and extracting relevant image features within the same domain. This indicates that similar or better accuracy can be achieved using less labeled data with downstream supervised fine-tuning.
In certain scenarios, gathering such a substantial amount of data with 0.7 million unlabeled images could still be challenging. However, you could still benefit from NV-DINOv2 domain adaptation even with a smaller dataset.
Figure 7 shows the results of running an experiment adapting NV-DINOv2 with just 100K images, which also outperforms the general NV-DINOv2 model.
Figure 7. Accuracy comparison between different NV-DINOv2 models for classification
This example illustrates how leveraging self-supervised learning on unlabeled domain data using NVIDIA TAO with NV-DINOv2 can yield robust, accurate PCB defect inspection while reducing reliance on large amounts of labeled samples.
How to optimize vision foundation models for better throughput
Optimization is an important step in deploying deep learning models. Many generative AI and vision foundation models could have hundred million parameters which make them compute hungry and too big for most edge devices that are used in real-time applications such as industrial visual inspection or real-time traffic monitoring systems.
NVIDIA TAO leverages knowledge from these larger foundation models and optimizes them into smaller model sizes using a technique called knowledge distillation. Knowledge distillation compresses large, highly-accurate teacher models into smaller, faster student models, often without losing accuracy. This process works by having the student mimic not just the final predictions, but also the internal feature representations and decision boundaries of the teacher, making deployment practical on resource-constrained hardware and enabling scalable model optimization.
NVIDIA TAO takes knowledge distillation further with its robust support for different forms, including backbone, logit, and spatial/feature distillation. A standout feature in TAO is its single-stage distillation approach, designed specifically for object detection. With this streamlined process, a student model—often much smaller and faster—learns both backbone representations and task-specific predictions directly from the teacher in one unified training phase. This enables dramatic reductions in inference latency and model size, without sacrificing accuracy.
Applying single-stage distillation for a real-time PCB defect detection model
The effectiveness of distillation using TAO was evaluated on a PCB defect detection dataset comprising 9,602 training images and 1,066 test images, covering six challenging defect classes: missing hole, mouse bite, open circuit, short, spur, and spurious copper. Two distinct teacher model candidates were used to evaluate the distiller. The experiments were performed with backbones that were initialized from the ImageNet-1K pretrained weights, and results were measured based on the standard COCO mean Average Precision (mAP) for object detection.
Figure 8. Use NVIDIA TAO to distill knowledge from a larger teacher model into a smaller student model
In our first set of experiments, we ran the same distillation experiments using the ResNet series of backbones in the teacher-student combination, where the accuracy of student models not only matches but can even exceed their teacher model’s accuracy.
The baseline experiments are run as train actions associated with the RT-DETR model in TAO. The following snippet shows a minimum viable experiment spec file that you can use to run a training experiment.
tao model rtdetr train -e /path/to/experiment/spec.yaml results_dir=/path/to/results/dir model.backbone=backbone_name model.pretrained_backbone_path=/path/to/the/pretrained/model.pth
You can change the backbone by overriding the model.backbone parameter to the name of the backbone and model.pretrained_backbone_path to the path to the pretrained checkpoint file for the backbone.
A distillation experiment is run as a distill action associated with the RT-DETR model in TAO. To configure the distill experiment, you can add the following config element to the original train experiment spec file.
Run distillation using the following sample command:
tao model rtdetr distill -e /path/to/experiment/spec/yaml results_dir=/path/to/results/dir model.backbone=backbone_namemodel.pretrained_backbone_path=/path/to/pretrained/backbone/checkpoint.pth distill.teacher.backbone=teacher_backbone_name distill.pretrained_teacher_model_path=/path/to/the/teacher/model.pth
Figure 9. Distilling a ResNet50 model into a lighter ResNet18 model yields a 5% accuracy gain
While deploying a model on edge, both inference acceleration and memory limit could be of significant consideration. TAO enables distilling detection features not just within the same family of backbones, but also across backbone families.
Figure 10. Distilling a ConvNeXt model into a lighter ResNet34-based model yields a 3% accuracy gain
In this example, we used a ConvNeXt based RT-DETR model as the teacher and distilled it to a lighter ResNet34-based model. Through single-stage distillation, TAO improved accuracy by 3%, reducing the model size by 81% for higher throughput, low-latency inference.
How to package and deploy models with DeepStream 8 Inference Builder
Now with a trained and distilled RT-DETR model from TAO, the next step is to deploy it as an inference microservice. The new NVIDIA DeepStream 8 Inference Builder is a low‑code tool that turns model ideas into standalone applications or deployable microservices.
To use the Inference Builder, provide a YAML configuration, a Dockerfile and an optional OpenAPI definition. The Inference Builder then generates Python code that connects the data loading, GPU‑accelerated preprocessing, inference, and post‑processing stages, and can expose REST endpoints for microservice deployments.
It is designed to automate the generation of inference service code, API layers, and deployment artifacts from a user-provided model and configuration files. This eliminates the need for manual development of boilerplate code pertaining to servers, request handling, and data flow, as a simple configuration suffices for Inference Builder to manage these complexities.
Video 1. Learn how to deploy AI models using the NVIDIA DeepStream Inference Builder
Step 1: Define the configuration
Create a config.yaml file to delineate your model and inference pipeline
(Optional) Incorporate an openapi.yaml file if explicit API schema definition is desired
Step 2: Execute the DeepStream Inference Builder
Submit the configuration to Inference Builder
This utility leverages inference templates, server templates, and utilities (codec, for example) to autonomously generate project code
The output constitutes a comprehensive package, encompassing inference logic, server code, and auxiliary utilities
Output infer.tgz, a packaged inference service
Step 3: Examine the generated code
The package expands into a meticulously organized project, featuring:
Configuration: config/
Server logic: server/
Inference library: lib/
Utilities: asset manager, codec, responders, and so on
Step 4: Construct a Docker image
Use the reference Dockerfile to containerize the service
Execute docker build -t my-infer-service
Step 5: Deploy with Docker Compose
Initiate the service using Docker Compose: docker-compose up
The service will subsequently load your models within the container
Step 6: Serve to users
Your inference microservice is now operational
End users or applications can dispatch requests to the exposed API endpoints and receive predictions directly from your model
To learn more about the NVIDIA DeepStream Inference Builder, visit NVIDIA-AI-IOT/deepstream_tools on GitHub.
Additional applications for real-time visual inspection
In addition to identifying PCB defects you can also apply TAO and DeepStream to spot anomalies in industries such as automotive and logistics. To read about a specific use case, see Slash Manufacturing AI Deployment Time with Synthetic Data and NVIDIA TAO.
Get started building a real-time visual inspection pipeline
With NVIDIA DeepStream and NVIDIA TAO, developers are pushing the boundaries of what’s possible in vision AI—from rapid prototyping to large-scale deployment.
DeepStream 8.0 equips developers with powerful tools like the Inference Builder to streamline pipeline creation and improve tracking accuracy across complex environments. TAO 6 unlocks the potential of foundation models through domain adaptation, self-supervised fine-tuning, and knowledge distillation.
This translates into faster iteration cycles, better use of unlabeled data, and production-ready inference services.
Ready to get started?
Download NVIDIA TAO 6 and explore the latest features. Ask questions and join the conversation in the NVIDIA TAO Developer Forum.
Download NVIDIA DeepStream 8 and explore the latest features. Ask questions and join the conversation in the NVIDIA DeepStream Developer Forum.