Udostępnij za pośrednictwem


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.

Diagram przepływu ONNX przedstawiający trenowanie, konwertery i wdrażanie.

Ś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:

Sposoby uzyskiwania modeli ONNX

Modele ONNX można uzyskać na kilka sposobów:

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.