ONNX dan Azure Machine Learning: Membuat dan mempercepat model Azure Machine Learning

Pelajari bagaimana menggunakan Pertukaran Jaringan Neural Terbuka (ONNX) dapat membantu mengoptimalkan inferensi model pembelajaran mesin Anda. Inferensi, atau penilaian model, adalah fase di mana model yang disebarkan digunakan untuk prediksi, paling sering pada data produksi.

Mengoptimalkan model pembelajaran mesin untuk inferensi (atau penilaian model) sulit karena Anda perlu menyetel model dan pustaka inferensi untuk memaksimalkan kemampuan perangkat keras. Masalahnya menjadi sangat sulit jika Anda ingin mendapatkan performa optimal pada berbagai jenis platform (cloud/tepi, CPU/GPU, dll.), karena masing-masing memiliki kemampuan dan karakteristik yang berbeda. Kompleksitas meningkat jika Anda memiliki model dari berbagai kerangka kerja yang perlu dijalankan pada berbagai platform. Ini sangat memakan waktu untuk mengoptimalkan semua kombinasi kerangka kerja dan perangkat keras yang berbeda. Solusi untuk melatih sekali dalam kerangka kerja pilihan Anda dan berjalan di mana saja di cloud atau tepi diperlukan. Di sinilah ONNX bekerja.

Microsoft dan komunitas mitra membuat ONNX sebagai standar terbuka untuk mewakili model pembelajaran mesin. Model dari banyak kerangka kerja termasuk TensorFlow, PyTorch, SciKit-Learn, Keras, Chainer, MXNet, MATLAB, dan SparkML dapat diekspor atau dikonversi ke format ONNX standar. Setelah model dalam format ONNX, model dapat dijalankan pada berbagai platform dan perangkat.

Runtime ONNX adalah mesin inferensi dengan performa tinggi untuk menyebarkan model ONNX ke produksi. ONNX dioptimalkan untuk cloud dan tepi serta bekerja di Linux, Windows, dan Mac. Ditulis dalam C++, ONNX juga memiliki API C, Python, C#, Java, dan Javascript (Node.js) untuk penggunaan di berbagai lingkungan. Runtime ONNX mendukung model DNN dan Azure Machine Learning tradisional serta terintegrasi dengan akselerator pada perangkat keras yang berbeda seperti TensorRT pada GPU NVidia, OpenVINO pada prosesor Intel, DirectML pada Windows, dan banyak lagi. Dengan menggunakan Runtime ONNX, Anda dapat memperoleh keuntungan dari pengoptimalan, pengujian, dan peningkatan yang berkelanjutan.

Runtime ONNX digunakan dalam layanan Microsoft berskala tinggi seperti Bing, Office, dan Azure Cognitive Services. Peningkatan performa bergantung pada sejumlah faktor, namun layanan Microsoft ini telah mengalami peningkatan performa rata-rata 2x pada CPU. Selain Azure Machine Learning service, Runtime ONNX juga berjalan di produk lain yang mendukung beban kerja Azure Machine Learning, termasuk:

ONNX flow diagram showing training, converters, and deployment

Dapatkan model ONNX

Anda dapat memperoleh model ONNX dengan beberapa cara:

Banyak model termasuk klasifikasi gambar, deteksi objek, dan pemrosesan teks dapat diwakili sebagai model ONNX. Jika Anda mengalami masalah dengan model yang tidak dapat dikonversi dengan sukses, ajukan masalah di GitHub dari pengonversi masing-masing yang Anda gunakan. Anda bisa terus menggunakan model format yang sudah ada hingga masalah ini diatasi.

Sebarkan model ONNX di Azure

Dengan Azure Machine Learning, Anda dapat menyebarkan, mengelola, dan memantau model ONNX Anda. Dengan menggunakan alur kerja penyebaran standar dan Runtime ONNX, Anda dapat membuat titik akhir REST yang dihosting di cloud. Lihat contoh buku catatan Jupyter di akhir artikel ini untuk mencobanya sendiri.

Memasang dan menggunakan Runtime ONNX dengan Python

Paket Python untuk Runtime ONNX tersedia di PyPi.org (CPU, GPU). Baca persyaratan sistem sebelum penginstalan.

Untuk memasang Runtime ONNX untuk Python, gunakan salah satu perintah berikut:

pip install onnxruntime	      # CPU build
pip install onnxruntime-gpu   # GPU build

Untuk memanggil Runtime ONNX di skrip Python Anda, gunakan:

import onnxruntime
session = onnxruntime.InferenceSession("path to model")

Dokumentasi yang menyertai model biasanya memberi tahu Anda input dan output untuk menggunakan model. Anda juga dapat menggunakan alat visualisasi seperti Netron untuk melihat model. Runtime ONNX juga memungkinkan Anda mengkueri metadata, input, dan output model:

session.get_modelmeta()
first_input_name = session.get_inputs()[0].name
first_output_name = session.get_outputs()[0].name

Untuk menyimpulkan model Anda, gunakan run dan berikan daftar output yang ingin Anda kembalikan (biarkan kosong jika Anda ingin semuanya) dan peta nilai input. Hasilnya adalah daftar output.

results = session.run(["output1", "output2"], {
                      "input1": indata1, "input2": indata2})
results = session.run([], {"input1": indata1, "input2": indata2})

Untuk referensi API Python lengkap, lihat dokumen referensi Runtime ONNX.

Contoh

Lihat how-to-use-azureml/deployment/onnx untuk contoh buku catatan Python yang membuat dan menyebarkan model ONNX.

Pelajari cara menjalankan notebook dengan mengikuti artikel Menggunakan notebook Jupyter untuk menjelajahi layanan ini.

Sampel untuk penggunaan dalam bahasa lain dapat ditemukan di GitHub Runtime ONNX.

Info selengkapnya

Pelajari selengkapnya tentang ONNX atau berkontribusi pada proyek:

Pelajari lebih lanjut tentang Runtime ONNX atau berkontribusi pada proyek: