Gambaran Umum DirectML
Direct Pembelajaran Mesin (DirectML) adalah API tingkat rendah untuk pembelajaran mesin (ML). API memiliki antarmuka pemrograman dan alur kerja C++, nano-COM) yang familier dengan gaya DirectX 12. Anda dapat mengintegrasikan beban kerja inferensi pembelajaran mesin ke dalam game, mesin, middleware, backend, atau aplikasi lainnya. DirectML didukung oleh semua perangkat keras yang kompatibel dengan DirectX 12.
Primitif pembelajaran mesin yang dipercepat perangkat keras (disebut operator) adalah blok penyusun DirectML. Dari blok bangunan tersebut, Anda dapat mengembangkan teknik pembelajaran mesin seperti peningkatan skala, anti-aliasing, dan transfer gaya, ke nama tetapi beberapa. Denoising dan resolusi super, misalnya, memungkinkan Anda untuk mencapai efek raytraced yang mengesankan dengan lebih sedikit sinar per piksel.
Anda dapat mengintegrasikan beban kerja inferensi pembelajaran mesin ke dalam game, mesin, middleware, backend, atau aplikasi lainnya. DirectML memiliki antarmuka dan alur kerja pemrograman gaya DirectX 12 yang familier (asli C++, nano-COM), dan didukung oleh semua perangkat keras yang kompatibel dengan DirectX 12. Untuk aplikasi sampel DirectML, termasuk sampel aplikasi DirectML minimal, lihat Aplikasi sampel DirectML.
DirectML diperkenalkan di Windows 10, versi 1903, dan dalam versi Windows SDK yang sesuai.
DirectML adalah lapisan abstraksi perangkat keras tingkat rendah yang memungkinkan Anda menjalankan beban kerja pembelajaran mesin pada GPU yang kompatibel dengan DirectX 12.
Jika Anda perlu mengoptimalkan performa pembelajaran mesin untuk skenario real time, performa tinggi, latensi rendah, atau sumber daya yang dibatasi, DirectML memberi Anda kontrol dan fleksibilitas terbanyak. Anda dapat menggunakan DirectML untuk mengintegrasikan pembelajaran mesin langsung ke dalam mesin atau alur penyajian yang ada, atau untuk membangun kerangka kerja pembelajaran mesin kustom dan middleware Anda sendiri di Windows.
Anda juga dapat menggunakan DirectML secara tidak langsung melalui ONNX Runtime, yang merupakan pustaka lintas platform yang mendukung format ONNX standar terbuka untuk model pembelajaran mesin. Runtime ONNX dapat menggunakan DirectML sebagai salah satu penyedia eksekusinya, bersama dengan backend lainnya seperti CPU, CUDA, atau TensorRT. Dengan cara ini, Anda dapat memanfaatkan performa dan kompatibilitas DirectML tanpa menulis sendiri kode DirectML apa pun.
Atau, Anda dapat menggunakan API WinML, yang merupakan API berfokus pada model tingkat lebih tinggi yang menyederhanakan alur kerja pembelajaran mesin dengan pola load-bind-evaluate-nya. WinML juga menggunakan format ONNX untuk model, dan dapat menggunakan DirectML sebagai backend-nya. WinML dirancang untuk skenario di mana Anda perlu mengintegrasikan pembelajaran mesin dengan cepat dan mudah ke dalam aplikasi Windows Anda, tanpa khawatir tentang detail perangkat keras atau kerangka kerja yang mendasarinya.
Pekerjaan apa yang dilakukan DirectML; dan pekerjaan apa yang harus saya lakukan sebagai pengembang?
DirectML secara efisien menjalankan lapisan individual model inferensi Anda pada GPU (atau pada inti akselerasi AI, jika ada). Setiap lapisan adalah operator, dan DirectML memberi Anda pustaka operator primitif pembelajaran mesin tingkat rendah yang dipercepat perangkat keras. Anda dapat menjalankan operasi DirectML dalam isolasi atau sebagai grafik (lihat bagian Alur kerja berbasis lapisan demi lapisan dan grafik di DirectML).
Operator dan grafik menerapkan pengoptimalan khusus perangkat keras dan khusus arsitektur. Pada saat yang sama, Anda sebagai pengembang melihat satu antarmuka vendor-agnostik untuk mengeksekusi operator tersebut.
Pustaka operator di DirectML menyediakan semua operasi biasa yang anda harapkan untuk dapat digunakan dalam beban kerja pembelajaran mesin.
- Operator aktivasi, seperti linear, ReLU, sigmoid, tanh, dan banyak lagi.
- Operator yang bijaksana elemen, seperti menambahkan, exp, log, maks, min, sub, dan banyak lagi.
- Operator konvolusi, seperti konvolusi 2D dan 3D, dan banyak lagi.
- Operator pengurangan, seperti argmin, rata-rata, l2, jumlah, dan banyak lagi.
- Operator pengumpulan, seperti rata-rata, IP, dan maks.
- Operator jaringan neural (NN), seperti gemm, gru, lstm, dan rnn.
- Dan banyak lagi.
Untuk performa maksimal, dan agar Anda tidak membayar apa yang tidak Anda gunakan, DirectML menempatkan kontrol ke tangan Anda sebagai pengembang tentang bagaimana beban kerja pembelajaran mesin Anda dijalankan pada perangkat keras. Mencari tahu operator mana yang akan dieksekusi, dan kapan, adalah tanggung jawab Anda sebagai pengembang. Tugas yang diserahkan pada kebijaksanaan Anda meliputi: menerjemahkan model; menyederhanakan dan mengoptimalkan lapisan Anda; memuat bobot; alokasi sumber daya, pengikatan, manajemen memori (sama seperti Direct3D 12); dan eksekusi grafik.
Anda mempertahankan pengetahuan tingkat tinggi tentang grafik Anda (Anda dapat mengkodekan model Anda secara langsung, atau Anda dapat menulis pemuat model Anda sendiri). Anda dapat merancang model peningkatan, misalnya, menggunakan beberapa lapisan masing-masing upsample, konvolusi, normalisasi, dan operator aktivasi. Dengan keakraban, penjadwalan yang cermat, dan manajemen hambatan, Anda dapat mengekstrak paralelisme dan performa paling banyak dari perangkat keras. Jika Anda mengembangkan game, manajemen sumber daya dan kontrol yang cermat atas penjadwalan memungkinkan Anda untuk menjalin beban kerja pembelajaran mesin dan pekerjaan penyajian tradisional untuk menjenuhkan GPU.
Berikut adalah resep tingkat tinggi untuk bagaimana kita mengharapkan DirectML digunakan. Dalam dua fase utama inisialisasi dan eksekusi, Anda merekam pekerjaan ke dalam daftar perintah dan kemudian Anda menjalankannya pada antrean.
- Buat sumber daya Direct3D 12 Anda—perangkat Direct3D 12, antrean perintah, daftar perintah, dan sumber daya seperti tumpukan deskriptor.
- Karena Anda melakukan inferensi pembelajaran mesin serta beban kerja penyajian Anda, buat sumber daya DirectML—perangkat DirectML dan instans operator. Jika Anda memiliki model pembelajaran mesin di mana Anda perlu melakukan jenis konvolusi tertentu dengan ukuran tensor filter tertentu dengan jenis data tertentu, maka itu semua parameter ke operator konvolusi DirectML.
- Rekaman DirectML berfungsi ke daftar perintah Direct3D 12. Jadi, setelah inisialisasi selesai, Anda merekam pengikatan dan inisialisasi (misalnya) operator konvolusi Anda ke dalam daftar perintah Anda. Kemudian, tutup dan jalankan daftar perintah Anda pada antrean Anda seperti biasa.
- Unggah tensor berat Anda ke sumber daya. Tensor di DirectML diwakili menggunakan sumber daya Direct3D 12 biasa. Misalnya, jika Anda ingin mengunggah data bobot ke GPU, maka Anda melakukannya dengan cara yang sama seperti yang Anda lakukan dengan sumber daya Direct3D 12 lainnya (gunakan tumpukan unggahan, atau antrean salin).
- Selanjutnya, Anda perlu mengikat sumber daya Direct3D 12 tersebut sebagai tensor input dan output Anda. Rekam ke dalam perintah Anda mencantumkan pengikatan dan eksekusi operator Anda.
- Tutup dan jalankan daftar perintah Anda.
Sama seperti Direct3D 12, masa pakai dan sinkronisasi sumber daya adalah tanggung jawab Anda. Misalnya, jangan merilis objek DirectML Anda setidaknya sampai mereka menyelesaikan eksekusi pada GPU.
DirectML mendukung pendekatan berbasis lapisan demi lapisan dan grafik untuk memodelkan eksekusi. Saat menjalankan lapisan demi lapisan, Anda bertanggung jawab untuk membuat dan menginisialisasi setiap operator DirectML, dan merekamnya satu per satu untuk dieksekusi pada daftar perintah. Sebaliknya, saat menjalankan grafik, Anda malah membuat sekumpulan simpul dan tepi—di mana setiap simpul mewakili operator DirectML, dan tepi mewakili data tensor yang mengalir di antara simpul. Seluruh grafik kemudian dikirimkan untuk inisialisasi atau eksekusi sekaligus, dan DirectML menangani penjadwalan dan perekaman masing-masing operator atas nama Anda.
Kedua pola berguna dalam situasi yang berbeda. Pendekatan lapisan demi lapisan memberi Anda kontrol maksimal atas pengurutan dan penjadwalan pekerjaan komputasi. Misalnya, tingkat kontrol ini memungkinkan Anda untuk menjalin beban kerja penyajian Direct3D 12 dengan pengiriman komputasi DirectML Anda. Ini dapat berguna untuk memanfaatkan unit komputasi atau shader asinkron pada GPU Anda yang jika tidak aktif. Menjalankan lapisan demi lapisan secara manual juga memberikan kontrol pengembang eksplisit atas tata letak tensor dan penggunaan memori.
Namun, model pembelajaran mesin sering diekspresikan dalam hal grafik lapisan. Sebagai alternatif untuk pendekatan lapisan demi lapisan, DirectML memungkinkan Anda untuk mengekspresikan model Anda sebagai grafik simpul simpul terarah (operator DirectML) dan tepi di antaranya (deskripsi tensor). Setelah membangun deskripsi grafik, Anda dapat mengkompilasi dan mengirimkan semuanya sekaligus ke DirectML untuk inisialisasi dan eksekusi. Dalam pendekatan ini, DirectML memutuskan urutan traversal, dan menangani setiap operator individu dan aliran data di antara mereka atas nama Anda. Ini sering kali merupakan cara yang lebih sederhana dan lebih alami untuk mengekspresikan model pembelajaran mesin, dan memungkinkan pengoptimalan khusus achitecture diterapkan secara otomatis. Selain itu, pustaka pembantu DirectMLX menyediakan sintaks yang bersih dan nyaman untuk membangun grafik operator DirectML yang kompleks.
Pendekatan apa pun yang Anda sukai, Anda akan selalu memiliki akses ke rangkaian operator DirectML yang luas yang sama. Ini berarti Bahwa Anda tidak perlu mengorbankan fungsionalitas apakah Anda lebih suka kontrol halus dari pendekatan lapisan demi lapisan, atau kenyamanan pendekatan grafik.
Topik | Deskripsi |
---|---|
Panduan Mulai Cepat | Mulai menggunakan DirectML. |
Alat Pengembang | Alat untuk membuat profil, mengoptimalkan, dan men-debug DirectML. |
Panduan Pemrograman | Topik tentang pengikatan data, penghalang, slide, fusi, penanganan kesalahan, penghapusan perangkat, dan fungsi pembantu. |
Pemecahan Masalah | Menangani kondisi kesalahan dan menggunakan lapisan debug. |
Riwayat versi DirectML | DirectML adalah komponen sistem Windows 10, dan juga tersedia sebagai paket yang dapat didistribusikan ulang mandiri. |
Riwayat tingkat fitur DirectML | Manifes jenis yang diperkenalkan di setiap tingkat fitur. |
Aplikasi sampel DirectML | Tautan ke aplikasi sampel DirectML, termasuk sampel aplikasi DirectML minimal. |
Pelatihan ML yang dipercepat GPU | Mencakup apa yang saat ini didukung oleh pelatihan pembelajaran mesin (ML) yang dipercepat GPU untuk Subsistem Windows untuk Linux (WSL) dan Windows asli. |
Referensi API DirectML | Bagian ini mencakup API Direct Pembelajaran Mesin (DirectML) yang dideklarasikan dalam DirectML.h . |