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:
- Windows: środowisko uruchomieniowe jest wbudowane w Windows w ramach Windows Machine Learning i działa na setkach milionów urządzeń.
- rodzina produktów Azure SQL: uruchom natywne ocenianie danych w usłudze Azure SQL Edge i Azure SQL Managed Instance.
- ML.NET: uruchamianie modeli ONNX na platformie ML.NET.
Pobieranie modeli ONNX
Modele ONNX można uzyskać na kilka sposobów:
- Trenowanie nowego modelu ONNX w Azure Machine Learning (zobacz przykłady w dolnej części tego artykułu) lub przy użyciu funkcji zautomatyzowanego Machine Learning
- Konwertowanie istniejącego modelu z innego formatu na ONNX (zobacz samouczki)
- Uzyskiwanie wstępnie wytrenowanego modelu ONNX z zoo modelu ONNX
- Generowanie dostosowanego modelu ONNX z poziomu usługi Azure Custom Vision
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: