ONNX i Azure Machine Learning: tworzenie i przyspieszanie modeli ML

Dowiedz się, jak korzystanie z usługi Open Neural Network Exchange (ONNX) może pomóc w optymalizacji wnioskowania modelu uczenia maszynowego. Wnioskowanie lub ocenianie modelu to faza, w której wdrożony model jest używany do przewidywania, najczęściej na danych produkcyjnych.

Optymalizacja modeli uczenia maszynowego na potrzeby wnioskowania (lub oceniania modelu) jest trudna, ponieważ konieczne jest dostosowanie modelu i biblioteki wnioskowania, aby jak najlepiej wykorzystać możliwości sprzętowe. Problem staje się niezwykle trudny, jeśli chcesz uzyskać optymalną wydajność na różnych platformach (chmura/krawędź, procesor CPU/GPU itp.), ponieważ każda z nich ma różne możliwości i cechy. Złożoność zwiększa się, jeśli masz modele z różnych platform, które muszą być uruchamiane na różnych platformach. Optymalizowanie wszystkich różnych kombinacji struktur i sprzętu jest bardzo czasochłonne. Potrzebne jest rozwiązanie do trenowania raz w preferowanej strukturze i uruchamiania w dowolnym miejscu w chmurze lub brzegu sieci. Jest to miejsce, w którym przychodzi ONNX.

Firma Microsoft i społeczność partnerów stworzyli platformę ONNX jako otwarty standard reprezentujący modele uczenia maszynowego. Modele z wielu platform , w tym TensorFlow, PyTorch, SciKit-Learn, Keras, Chainer, MXNet, MATLAB i SparkML można eksportować lub konwertować na standardowy format ONNX. Gdy modele są w formacie ONNX, można je uruchamiać na różnych platformach i urządzeniach.

Środowisko uruchomieniowe ONNX to aparat wnioskowania o wysokiej wydajności do wdrażania modeli ONNX w środowisku produkcyjnym. Jest ona zoptymalizowana pod kątem chmury i krawędzi oraz działa w systemach Linux, Windows i Mac. Napisany w języku C++, ma również interfejsy API C, Python, C#, Java i JavaScript (Node.js) do użycia w różnych środowiskach. Środowisko uruchomieniowe ONNX obsługuje zarówno modele DNN, jak i tradycyjne ML oraz integruje się z akceleratorami na różnych urządzeniach, takich jak TensorRT na procesorach GPU NVidia, OpenVINO na procesorach Intel, DirectML na Windows i nie tylko. Korzystając ze środowiska uruchomieniowego ONNX, możesz skorzystać z rozbudowanych optymalizacji klasy produkcyjnej, testowania i ciągłych ulepszeń.

Środowisko uruchomieniowe ONNX jest używane w usługi firmy Microsoft na dużą skalę, takich jak Bing, Office i Azure Cognitive Services. Wzrost wydajności zależy od wielu czynników, ale te usługi firmy Microsoft odnotowały średni wzrost wydajności 2x na procesorze CPU. Oprócz usług Azure Machine Learning środowisko uruchomieniowe ONNX działa również w innych produktach, które obsługują Machine Learning obciążenia, w tym:

ONNX flow diagram showing training, converters, and deployment

Pobieranie modeli ONNX

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

Wiele modeli, w tym klasyfikacja obrazów, wykrywanie obiektów i przetwarzanie tekstu, może być reprezentowanych jako modele ONNX. Jeśli wystąpi problem z modelem, którego nie można pomyślnie przekonwertować, zgłoś problem w GitHub odpowiedniego konwertera, którego użyto. Możesz nadal używać istniejącego modelu formatu do momentu rozwiązania problemu.

Wdrażanie modeli ONNX na platformie Azure

Za pomocą Azure Machine Learning można wdrażać modele ONNX i zarządzać nimi oraz monitorować je. Korzystając ze standardowego przepływu pracy wdrażania i środowiska uruchomieniowego ONNX, możesz utworzyć punkt końcowy REST hostowany w chmurze. Zobacz przykładowe notesy Jupyter na końcu tego artykułu, aby wypróbować je samodzielnie.

Instalowanie i używanie środowiska uruchomieniowego ONNX za pomocą języka Python

Pakiety języka Python dla środowiska uruchomieniowego ONNX są dostępne w PyPi.org (procesor CPU, procesor GPU). Przed instalacją przeczytaj 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 skryscie języka Python, użyj:

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

Dokumentacja towarzysząca modelowi 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 również wykonywanie zapytań dotyczących metadanych, danych wejściowych i danych wyjściowych modelu:

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

Aby wnioskować model, użyj run i przekaż listę zwracanych danych wyjściowych (pozostaw puste, jeśli chcesz ich wszystkich) i mapę wartości wejściowych. Wynikiem jest lista 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 języka Python, zobacz dokumentację środowiska uruchomieniowego ONNX.

Przykłady

Zobacz how-to-use-azureml/deployment/onnx , na przykład notesy języka Python, które tworzą i wdrażają modele ONNX.

Instrukcję uruchamiania notesów znajdziesz w artykule Use Jupyter notebooks to explore this service (Eksplorowanie tej usługi za pomocą notesów Jupyter).

Przykłady użycia w innych językach można znaleźć w GitHub środowiska uruchomieniowego ONNX.

Więcej informacji

Dowiedz się więcej o onNX lub współtworzeniu projektu:

Dowiedz się więcej o środowisku uruchomieniowym ONNX lub współtworzeniu projektu: