ONNXRuntime-Extensions
ONNXRuntime-Extensions 是一個透過 ONNX Runtime 自定義運算元介面擴充套件 ONNX 模型能力和 ONNX Runtime 推理能力的庫。它包含一套自定義運算元,以支援音訊、視覺、文字和語言模型的常見模型預處理和後處理。與 ONNX Runtime 一樣,Extensions 還支援多種語言和平臺(Windows/Linux/macOS 上的 Python、Android 和 iOS 移動平臺以及 Web 彙編)。
基本工作流程是將自定義運算元新增到 ONNX 模型,然後使用 ONNX Runtime 和 ONNXRuntime-Extensions 包對增強模型執行推理。
此影像使用 Combine.AI 建立,由 Bing Chat、Bing Image Creator 和 EdgeGPT 提供支援。
快速入門
Python 安裝
pip install onnxruntime-extensions
每夜構建
在 Windows 上
pip install --index-url https://aiinfra.pkgs.visualstudio.com/PublicPackages/_packaging/ORT-Nightly/pypi/simple/ onnxruntime-extensions
onnxruntime-extensions 包依賴於 onnx 和 onnxruntime。
在 Linux/macOS 上
請確保在執行以下命令之前安裝了編譯器工具包,如 gcc(g++ 8.0 或更高版本)或 clang
python -m pip install git+https://github.com/microsoft/onnxruntime-extensions.git
NuGet 安裝(使用 .NET CLI)
dotnet add package Microsoft.ML.OnnxRuntime.Extensions --version 0.8.1-alpha
iOS 安裝
在您的 CocoaPods Podfile 中,新增 onnxruntime-extensions-c pod。
use_frameworks!
# onnxruntime C/C++ full package
pod 'onnxruntime-c'
# onnxruntime-extensions C/C++ package
pod 'onnxruntime-extensions-c'
執行 pod install。
Android 安裝
在您的 Android Studio 專案中,對以下檔案進行更改:
-
build.gradle (專案)
repositories { mavenCentral() } -
build.gradle (模組)
dependencies { // onnxruntime full package implementation 'com.microsoft.onnxruntime:onnxruntime-android:latest.release' // onnxruntime-extensions package implementation 'com.microsoft.onnxruntime:onnxruntime-extensions-android:latest.release' }
向模型新增預處理和後處理
有多種方法可以將預處理和後處理新增到 ONNX 圖中
- 如果模型及其預處理受管道 API 支援,請使用預處理管道 API
- 從 PyTorch 模型匯出到 ONNX
- 建立一個 ONNX 模型,其模型圖包含您的自定義運算元節點
- 如果您的預處理已存在於 ONNX 圖中,請使用 ONNX API 將預處理與 ONNX 模型組合
如果預處理運算元是 HuggingFace tokenizer,您還可以透過從 Huggingface transformer 資料處理類(如下例所示)進行轉換,輕鬆獲取 ONNX 處理圖
import onnxruntime as _ort
from transformers import AutoTokenizer, GPT2Tokenizer
from onnxruntime_extensions import OrtPyFunction, gen_processing_models
# SentencePieceTokenizer
spm_hf_tokenizer = AutoTokenizer.from_pretrained("t5-base", model_max_length=512)
spm_onnx_model = OrtPyFunction(gen_processing_models(spm_hf_tokenizer, pre_kwargs={})[0])
# GPT2Tokenizer
gpt2_hf_tokenizer = GPT2Tokenizer.from_pretrained("Xenova/gpt-4", use_fast=False)
gpt2_onnx_model = OrtPyFunction(gen_processing_models(gpt2_hf_tokenizer, pre_kwargs={})[0])
有關更多資訊,您可以使用以下方式檢視 API
help(onnxruntime_extensions.gen_processing_models)
如果我找不到所需的自定義運算元怎麼辦?
在此處找到我們目前支援的自定義運算元:這裡。如果您沒有找到所需的自定義運算元,可以像這樣向 ONNX Runtime Extensions 新增新的自定義運算元。請注意,如果您新增新運算元,則必須從原始碼構建。
使用 ONNX Runtime 和 Extensions 進行推理
Python
以下語言有單獨的軟體包,請安裝它們以進行構建。
import onnxruntime as _ort
from onnxruntime_extensions import get_library_path as _lib_path
so = _ort.SessionOptions()
so.register_custom_ops_library(_lib_path())
# Run the ONNXRuntime Session as per ONNXRuntime docs suggestions.
sess = _ort.InferenceSession(model, so)
sess.run (...)
C++
透過 Extensions 共享庫的路徑註冊 Extensions。
Ort::Env env = ...;
// Note: use `wchar_t` instead of `char` for paths on Windows
const char* model_uri = "/path/to/the/model.onnx";
const char* custom_op_library_filename = "/path/to/the/onnxruntime-extensions/shared/library";
Ort::SessionOptions session_options;
// Register Extensions custom ops with the session options.
Ort::ThrowOnError(Ort::GetApi().RegisterCustomOpsLibrary_V2(static_cast<OrtSessionOptions*>(session_options),
custom_op_library_filename));
// Create a session.
Ort::Session session(env, model_uri, session_options);
透過直接呼叫 RegisterCustomOps 函式註冊 Extensions。
Ort::Env env = ...;
// Note: use `wchar_t` instead of `char` for paths on Windows
const char* model_uri = "/path/to/the/model.onnx";
Ort::SessionOptions session_options;
// Register Extensions custom ops with the session options.
// `RegisterCustomOps` is declared in onnxruntime_extensions.h.
Ort::ThrowOnError(RegisterCustomOps(static_cast<OrtSessionOptions*>(session_options), OrtGetApiBase()));
// Create a session.
Ort::Session session(env, model_uri, session_options);
Java
var env = OrtEnvironment.getEnvironment();
var sess_opt = new OrtSession.SessionOptions();
/* Register the custom ops from onnxruntime-extensions */
sess_opt.registerCustomOpLibrary(OrtxPackage.getLibraryPath());
C#
SessionOptions options = new SessionOptions();
options.RegisterOrtExtensions();
session = new InferenceSession(model, options);
教程
檢視一些使用我們自定義運算元的端到端教程
貢獻
本專案歡迎貢獻和建議。大多數貢獻要求您同意一份貢獻者許可協議 (CLA),宣告您有權並確實授予我們使用您的貢獻的權利。有關詳細資訊,請訪問 https://cla.microsoft.com。
當您提交拉取請求時,CLA-bot 將自動確定您是否需要提供 CLA,並適當地修飾 PR(例如,標籤、評論)。只需遵循機器人提供的說明即可。您只需在使用我們 CLA 的所有儲存庫中執行此操作一次。
本專案已採用 Microsoft 開源行為準則。有關更多資訊,請參閱行為準則常見問題解答,或透過 opencode@microsoft.com 聯絡我們以獲取任何其他問題或評論。