ONNX a Azure Machine Učení

Zjistěte, jak vám může pomoct optimalizovat odvozování modelu strojového učení pomocí Open Neural Network Exchange (ONNX). Odvození 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 na maximum hardwarové funkce. Tato úloha se stává složitou, pokud chcete dosáhnout optimálního výkonu na různých typech platforem, jako je cloud nebo hraniční zařízení, procesor nebo GPU atd., protože každá platforma má různé možnosti a charakteristiky. Složitost se zvyšuje, pokud máte modely z různých architektur, které je potřeba spouštět na různých platformách. Optimalizace všech různých kombinací architektur a hardwaru může být časově náročná. Proto je užitečné vytrénovat model jednou v upřednostňované architektuře a pak ho spustit kdekoli v cloudu nebo hraničním zařízení – toto řešení je místo, kde se dodává ONNX.

Co je ONNX?

Microsoft a komunita partnerů vytvořili ONNX jako otevřený standard pro reprezentaci modelů strojového učení. Modely z mnoha architektur , včetně TensorFlow, PyTorch, scikit-learn, Keras, Chainer, MXNet a MATLAB, je možné exportovat nebo převést na standardní formát ONNX. Jakmile jsou modely ve formátu ONNX, je možné je spustit na různých platformách a zařízeních.

ONNX Runtime je vysoce výkonný modul pro odvozování pro nasazení modelů ONNX do produkčního prostředí. Je optimalizovaná pro cloud i hraniční zařízení a funguje v systémech Linux, Windows a Mac. I když je ONNX napsaný v jazyce C++, má také rozhraní API jazyka C, Python, C#, Java a JavaScript (Node.js) pro použití v mnoha prostředích. 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í.

Modul runtime ONNX se používá ve vysoce škálovatelných služby Microsoft, jako je Bing, Office a Azure AI. 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. Kromě služeb Azure Machine Učení běží modul RUNTIME ONNX také v jiných produktech, které podporují úlohy Učení počítačů, včetně:

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

Jak získat modely ONNX

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

Mnoho modelů, včetně klasifikace obrázků, rozpoznávání objektů a modelů zpracování textu, může být reprezentováno jako modely ONNX. Pokud narazíte na problém s modelem, který se nedá úspěšně převést, vytvořte problém GitHubu v úložišti převaděče, který jste použili. Dokud problém nevyřešíte, můžete pokračovat v používání existujícího formátu modelu.

Nasazení modelu ONNX v Azure

Pomocí služby Azure Machine Učení můžete nasazovat, spravovat a monitorovat modely ONNX. Pomocí standardního pracovního postupu nasazení MLOps a modulu RUNTIME ONNX můžete vytvořit koncový bod REST hostovaný v cloudu. Praktické příklady najdete v těchto poznámkových blocích Jupyter.

Instalace a použití modulu runtime ONNX s Pythonem

Balíčky Pythonu pro modul runtime ONNX jsou k dispozici na PyPi.org (CPU a GPU). 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:

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 také 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í modelu, použijte run a předejte seznam výstupů, které chcete vrátit (nebo seznam ponechte prázdný, pokud chcete všechny) a mapu vstupních hodnot. 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í PYTHON API najdete v referenční dokumentaci k modulu runtime ONNX.

Příklady

Přečtěte si další informace o ONNX nebo přispívání do projektu:

Další informace o modulu runtime ONNX nebo přispívání do projektu: