ONNX i Azure Machine Learning
W tym artykule opisano, w jaki sposób program Open Neural Network Exchange (ONNX) może pomóc w optymalizacji wnioskowania modeli uczenia maszynowego. Wnioskowanie lub ocenianie modelu to proces używania wdrożonego modelu do generowania przewidywań na danych produkcyjnych.
Optymalizacja modeli uczenia maszynowego na potrzeby wnioskowania wymaga dostosowania modelu i biblioteki wnioskowania, aby jak najlepiej wykorzystać możliwości sprzętowe. To zadanie staje się złożone, jeśli chcesz uzyskać optymalną wydajność na różnych platformach, takich jak chmura, brzeg, procesor CPU lub procesor GPU, ponieważ każda platforma ma różne możliwości i cechy. Złożoność zwiększa się, jeśli trzeba uruchamiać modele z różnych platform na różnych platformach. Może to być czasochłonne, aby zoptymalizować wszystkie różne kombinacje struktur i sprzętu.
Przydatne rozwiązanie polega na jednorazowym wytrenowaniu modelu w preferowanej strukturze, a następnie wyeksportowaniu lub przekonwertowaniu go na onNX, aby mógł działać w dowolnym miejscu w chmurze lub na brzegu sieci. Firma Microsoft i społeczność partnerów stworzyły program ONNX jako otwarty standard reprezentujący modele uczenia maszynowego. Modele można eksportować lub konwertować z wielu platform na standardowy format ONNX. Obsługiwane platformy to TensorFlow, PyTorch, scikit-learn, Keras, Chainer, MXNet i MATLAB. Modele można uruchamiać w formacie ONNX na różnych platformach i urządzeniach.
Ten diagram przepływu ONNX przedstawia dostępne struktury i opcje wdrażania.
Środowisko uruchomieniowe ONNX
Środowisko uruchomieniowe ONNX to aparat wnioskowania o wysokiej wydajności do wdrażania modeli ONNX w środowisku produkcyjnym. Środowisko uruchomieniowe ONNX jest zoptymalizowane pod kątem chmury i krawędzi oraz działa w systemach Linux, Windows i macOS. Język ONNX jest napisany w języku C++, ale ma również interfejsy API języka C, Python, C#, Java i JavaScript (Node.js) do użycia w tych środowiskach.
Środowisko uruchomieniowe ONNX obsługuje zarówno głębokie sieci neuronowe (DNN) jak i tradycyjne modele uczenia maszynowego, a także integruje się z akceleratorami na innym sprzęcie, takim jak TensorRT w procesorach Nvidia GPU, OpenVINO na procesorach Intel i DirectML w systemie Windows. Korzystając ze środowiska uruchomieniowego ONNX, możesz skorzystać z rozbudowanych optymalizacji klasy produkcyjnej, testowania i ciągłych ulepszeń.
Usługi firmy Microsoft o dużej skali, takie jak Bing, Office i Azure AI, używają środowiska uruchomieniowego ONNX. Mimo że wzrost wydajności zależy od wielu czynników, te usługi firmy Microsoft zgłosić średni 2-krotny wzrost wydajności procesora PRZY użyciu onNX. Środowisko uruchomieniowe ONNX działa w usłudze Azure Machine Learning i innych produktach firmy Microsoft, które obsługują obciążenia uczenia maszynowego, w tym:
- Windows. Środowisko uruchomieniowe ONNX jest wbudowane w system Windows w ramach usługi Windows Machine Learning i działa na setkach milionów urządzeń.
- Azure SQL. Usługi Azure SQL Edge i Azure SQL Managed Instance używają języka ONNX do uruchamiania natywnego oceniania danych.
- ML.NET. Przykład można znaleźć w temacie Tutorial: Detect objects using ONNX in ML.NET (Samouczek: wykrywanie obiektów przy użyciu języka ONNX w ML.NET).
Sposoby uzyskiwania modeli ONNX
Modele ONNX można uzyskać na kilka sposobów:
- Trenowanie nowego modelu ONNX w usłudze Azure Machine Learning lub korzystanie z funkcji zautomatyzowanego uczenia maszynowego.
- Przekonwertuj istniejący model z innego formatu na ONNX. Aby uzyskać więcej informacji, zobacz ONNX Tutorials (Samouczki dotyczące języka ONNX).
- Uzyskaj wstępnie wytrenowany model ONNX z zoo modelu ONNX.
- Wygeneruj dostosowany model ONNX z usługi Azure AI Custom Vision.
Można reprezentować wiele modeli jako ONNX, w tym klasyfikację obrazów, wykrywanie obiektów i modele przetwarzania tekstu. Jeśli nie możesz pomyślnie przekonwertować modelu, utwórz problem z usługą GitHub w repozytorium użytego konwertera.
Wdrażanie modelu ONNX na platformie Azure
Modele ONNX można wdrażać i monitorować oraz zarządzać nimi w usłudze Azure Machine Learning. Korzystając ze standardowego przepływu pracy wdrażania metodyki MLOps w środowisku uruchomieniowym ONNX, możesz utworzyć punkt końcowy REST hostowany w chmurze.
Pakiety języka Python dla środowiska uruchomieniowego ONNX
Pakiety języka Python dla procesora CPU i środowiska uruchomieniowego ONNX procesora GPU są dostępne w PyPi.org. Przed instalacją należy przejrzeć wymagania systemowe.
Aby zainstalować środowisko uruchomieniowe ONNX dla języka Python, użyj jednego z następujących poleceń:
pip install onnxruntime # CPU build
pip install onnxruntime-gpu # GPU build
Aby wywołać środowisko uruchomieniowe ONNX w skry skryptie języka Python, użyj następującego kodu:
import onnxruntime
session = onnxruntime.InferenceSession("path to model")
Dokumentacja dołączona do modelu zwykle informuje o danych wejściowych i wyjściowych dotyczących korzystania z modelu. Możesz również użyć narzędzia do wizualizacji, takiego jak Netron , aby wyświetlić model.
Środowisko uruchomieniowe ONNX umożliwia wykonywanie zapytań dotyczących metadanych, danych wejściowych i wyjściowych modelu w następujący sposób:
session.get_modelmeta()
first_input_name = session.get_inputs()[0].name
first_output_name = session.get_outputs()[0].name
Aby przeprowadzić wnioskowanie w modelu, użyj run
i przekaż listę danych wyjściowych, które mają zostać zwrócone, oraz mapę wartości wejściowych. Pozostaw pustą listę danych wyjściowych, jeśli chcesz uzyskać wszystkie dane wyjściowe. Wynik jest listą danych wyjściowych.
results = session.run(["output1", "output2"], {
"input1": indata1, "input2": indata2})
results = session.run([], {"input1": indata1, "input2": indata2})
Aby uzyskać pełną dokumentację interfejsu API środowiska uruchomieniowego ONNX, zobacz dokumentację interfejsu API języka Python.