Sdílet prostřednictvím


ONNX a Azure Machine Learning

Tento článek popisuje, jak může Open Neural Network Exchange (ONNX) pomoct optimalizovat odvozování modelů strojového učení. Odvozování nebo bodování modelu je proces použití nasazeného modelu ke generování předpovědí v produkčních datech.

Optimalizace modelů strojového učení pro odvozování vyžaduje, abyste model a knihovnu odvozování vyladili, aby byly co nejvíce hardwarové funkce. Tato úloha se stává složitou, pokud chcete dosáhnout optimálního výkonu na různých platformách, jako je cloud, hraniční zařízení, procesor nebo GPU, protože každá platforma má různé možnosti a charakteristiky. Složitost se zvyšuje, pokud potřebujete spouštět modely z různých architektur na různých platformách. Optimalizace všech různých kombinací architektur a hardwaru může být časově náročná.

Užitečné řešení je vytrénovat model jednorázově v preferované architektuře a pak ho exportovat nebo převést na ONNX, aby mohl běžet kdekoli v cloudu nebo hraničním zařízení. Microsoft a komunita partnerů vytvořili ONNX jako otevřený standard pro reprezentaci modelů strojového učení. Modely můžete exportovat nebo převést z mnoha architektur do standardního formátu ONNX. Mezi podporované architektury patří TensorFlow, PyTorch, scikit-learn, Keras, Chainer, MXNet a MATLAB. Modely můžete spouštět ve formátu ONNX na různých platformách a zařízeních.

Tento vývojový diagram ONNX zobrazuje dostupné architektury a možnosti nasazení.

Diagram toku ONNX znázorňující trénování, převaděče a nasazení

Modul runtime ONNX

ONNX Runtime je vysoce výkonný modul pro odvozování pro nasazení modelů ONNX do produkčního prostředí. Modul runtime ONNX je optimalizovaný pro cloud i hraniční zařízení a funguje v systémech Linux, Windows a macOS. ONNX je napsaný v jazyce C++, ale má také rozhraní API jazyka C, Python, C#, Java a JavaScript (Node.js), která se mají v těchto prostředích používat.

MODUL RUNTIME ONNX podporuje hluboké neurální sítě (DNN) i tradiční modely strojového učení a integruje se s akcelerátory na jiném hardwaru, jako je TensorRT v grafických procesorech Nvidia, OpenVINO na procesorech Intel a DirectML ve Windows. S využitím modulu runtime ONNX můžete těžit z rozsáhlých optimalizací na úrovni produkce, testování a průběžných vylepšení.

Vysoce škálovatelné služby Microsoft, jako je Bing, Office a Azure AI, používají modul runtime ONNX. I když zvýšení výkonu závisí na mnoha faktorech, tyto služby Microsoft hlásí průměrné 2x zvýšení výkonu procesoru pomocí ONNX. Modul runtime ONNX běží ve službě Azure Machine Learning a dalších produktech Microsoftu, které podporují úlohy strojového učení, včetně následujících:

Způsoby získání modelů ONNX

Modely ONNX můžete získat několika způsoby:

Můžete reprezentovat mnoho modelů jako ONNX, včetně klasifikace obrázků, rozpoznávání objektů a modelů zpracování textu. Pokud se vám nedaří úspěšně převést model, vytvořte problém GitHubu v úložišti převaděče, který jste použili.

Nasazení modelu ONNX v Azure

V Azure Machine Learning můžete nasazovat, spravovat a monitorovat modely ONNX. Pomocí standardního pracovního postupu nasazení MLOps s modulem runtime ONNX můžete vytvořit koncový bod REST hostovaný v cloudu.

Balíčky Pythonu pro modul runtime ONNX

Balíčky Pythonu pro modul runtime CPU a GPU ONNX jsou k dispozici na PyPi.org. Před instalací nezapomeňte zkontrolovat požadavky na systém.

Pokud chcete nainstalovat modul runtime ONNX pro Python, použijte jeden z následujících příkazů:

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

K volání modulu RUNTIME ONNX ve skriptu Pythonu použijte následující kód:

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

Dokumentace, která model doprovází, obvykle informuje o vstupech a výstupech pro použití modelu. K zobrazení modelu můžete použít také vizualizační nástroj, jako je Netron .

MODUL RUNTIME ONNX umožňuje dotazovat se na metadata modelu, vstupy a výstupy následujícím způsobem:

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

Pokud chcete provést odvozování v modelu, použijte run a předejte seznam výstupů, které chcete vrátit, a mapu vstupních hodnot. Pokud chcete všechny výstupy, nechte výstupní seznam prázdný. Výsledkem je seznam výstupů.

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

Kompletní referenční informace k rozhraní API modulu runtime ONNX najdete v dokumentaci k rozhraní Python API.