Menyebarkan model AI kinerja tinggi dalam aplikasi Windows di PC NVIDIA RTX AI


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.

Diagram yang menunjukkan tumpukan arsitektur Windows ML, menggambarkan langkah -langkah dari aplikasi ke penyedia eksekusiDiagram yang menunjukkan tumpukan arsitektur Windows ML, menggambarkan langkah -langkah dari aplikasi ke penyedia eksekusi
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.

Bagan batang menunjukkan speedup throughput generasi untuk beberapa model, diukur menggunakan GPU NVIDIA RTX 5090Bagan batang menunjukkan speedup throughput generasi untuk beberapa model, diukur menggunakan GPU NVIDIA RTX 5090
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.

Bagan batang yang membandingkan waktu pemuatan untuk model Deepseek-R1-Distill-Qwen-7b hanya menggunakan model ONNX, ONNX dengan file konteks EP, dan dengan kedua file konteks EP dan cache runtimeBagan batang yang membandingkan waktu pemuatan untuk model Deepseek-R1-Distill-Qwen-7b hanya menggunakan model ONNX, ONNX dengan file konteks EP, dan dengan kedua file konteks EP dan cache runtime
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.

Tabel Membandingkan Difusi Stabil 3.5 Kinerja Model Medium dengan dan tanpa Binding Perangkat.Tabel Membandingkan Difusi Stabil 3.5 Kinerja Model Medium dengan dan tanpa Binding Perangkat.
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:

Timeline Sistem NSight Menyoroti peningkatan overhead yang disebabkan oleh lalu lintas PCI sinkron tambahanTimeline Sistem NSight Menyoroti peningkatan overhead yang disebabkan oleh lalu lintas PCI sinkron tambahan
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.
Bagan batang menunjukkan speedup throughput yang dicapai dengan menggunakan grafik CUDA di ONNX Runtime API, diukur pada GPU NVIDIA RTX 5090 dengan beberapa LLM.Bagan batang menunjukkan speedup throughput yang dicapai dengan menggunakan grafik CUDA di ONNX Runtime API, diukur pada GPU NVIDIA RTX 5090 dengan beberapa LLM.
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.



Menyebarkan model AI kinerja tinggi dalam aplikasi Windows di PC NVIDIA RTX AI

Leave a Reply

Your email address will not be published. Required fields are marked *