API#
API 概述#
ONNX Runtime 載入 ONNX 圖格式或 ORT 格式(用於記憶體和磁碟受限環境)的模型並執行推理。
模型消耗和產生的資料可以以最適合您場景的方式指定和訪問。
載入並執行模型#
InferenceSession 是 ONNX Runtime 的主要類。它用於載入和執行 ONNX 模型,以及指定環境和應用程式配置選項。
session = onnxruntime.InferenceSession('model.onnx')
outputs = session.run([output names], inputs)
ONNX 和 ORT 格式模型由計算圖組成,建模為運算子,並實現為針對不同硬體目標的最佳化運算子核心。ONNX Runtime 透過執行提供程式協調運算子核心的執行。執行提供程式包含特定執行目標(CPU、GPU、IoT 等)的核心集。執行提供程式使用 providers 引數進行配置。來自不同執行提供程式的核心按照提供程式列表給出的優先順序順序選擇。在下面的示例中,如果 CUDA 執行提供程式中存在核心,則 ONNX Runtime 在 GPU 上執行該核心。否則,核心在 CPU 上執行。
session = onnxruntime.InferenceSession(
model, providers=['CUDAExecutionProvider', 'CPUExecutionProvider']
)
可用執行提供程式的列表可以在這裡找到: 執行提供程式。
從 ONNX Runtime 1.10 開始,您必須顯式指定目標的執行提供程式。在 CPU 上執行時,API 僅允許不顯式設定 provider 引數。在以下示例中,使用了 CUDAExecutionProvider 和 CPUExecutionProvider,假設應用程式在 NVIDIA GPU 上執行。請將這些替換為特定於您環境的執行提供程式。
您可以透過 session options 引數提供其他會話配置。例如,要在會話上啟用效能分析
options = onnxruntime.SessionOptions()
options.enable_profiling=True
session = onnxruntime.InferenceSession(
'model.onnx',
sess_options=options,
providers=['CUDAExecutionProvider', 'CPUExecutionProvider'])
)
資料輸入和輸出#
ONNX Runtime 推理會話使用其 OrtValue 類消耗和產生資料。
CPU 上的資料#
在 CPU 上(預設),OrtValue 可以對映到原生 Python 資料結構以及從原生 Python 資料結構對映而來:numpy 陣列、字典和 numpy 陣列列表。
# X is numpy array on cpu
ortvalue = onnxruntime.OrtValue.ortvalue_from_numpy(X)
ortvalue.device_name() # 'cpu'
ortvalue.shape() # shape of the numpy array X
ortvalue.data_type() # 'tensor(float)'
ortvalue.is_tensor() # 'True'
np.array_equal(ortvalue.numpy(), X) # 'True'
# ortvalue can be provided as part of the input feed to a model
session = onnxruntime.InferenceSession(
'model.onnx',
providers=['CUDAExecutionProvider', 'CPUExecutionProvider'])
)
results = session.run(["Y"], {"X": ortvalue})
預設情況下,ONNX Runtime 始終將輸入和輸出放置在 CPU 上。如果輸入或輸出在 CPU 以外的裝置上消耗和產生,則將資料放在 CPU 上可能不是最佳選擇,因為它會在 CPU 和裝置之間引入資料複製。
裝置上的資料#
ONNX Runtime 支援自定義資料結構,該結構支援所有 ONNX 資料格式,允許使用者將這些資料結構的支援資料放置在裝置上,例如,在 CUDA 支援的裝置上。在 ONNX Runtime 中,這稱為 IOBinding。
要使用 IOBinding 功能,請將 InferenceSession.run() 替換為 InferenceSession.run_with_iobinding()。
圖在 CPU 以外的裝置(例如 CUDA)上執行。使用者可以使用 IOBinding 將資料複製到 GPU 上。
# X is numpy array on cpu
session = onnxruntime.InferenceSession(
'model.onnx',
providers=['CUDAExecutionProvider', 'CPUExecutionProvider'])
)
io_binding = session.io_binding()
# OnnxRuntime will copy the data over to the CUDA device if 'input' is consumed by nodes on the CUDA device
io_binding.bind_cpu_input('input', X)
io_binding.bind_output('output')
session.run_with_iobinding(io_binding)
Y = io_binding.copy_outputs_to_cpu()[0]
輸入資料在裝置上,使用者直接使用輸入。輸出資料在 CPU 上。
# X is numpy array on cpu
X_ortvalue = onnxruntime.OrtValue.ortvalue_from_numpy(X, 'cuda', 0)
session = onnxruntime.InferenceSession(
'model.onnx',
providers=['CUDAExecutionProvider', 'CPUExecutionProvider'])
)
io_binding = session.io_binding()
io_binding.bind_input(name='input', device_type=X_ortvalue.device_name(), device_id=0, element_type=np.float32, shape=X_ortvalue.shape(), buffer_ptr=X_ortvalue.data_ptr())
io_binding.bind_output('output')
session.run_with_iobinding(io_binding)
Y = io_binding.copy_outputs_to_cpu()[0]
輸入資料和輸出資料都在裝置上,使用者直接使用輸入,並將輸出也放置在裝置上。
#X is numpy array on cpu
X_ortvalue = onnxruntime.OrtValue.ortvalue_from_numpy(X, 'cuda', 0)
Y_ortvalue = onnxruntime.OrtValue.ortvalue_from_shape_and_type([3, 2], np.float32, 'cuda', 0) # Change the shape to the actual shape of the output being bound
session = onnxruntime.InferenceSession(
'model.onnx',
providers=['CUDAExecutionProvider', 'CPUExecutionProvider'])
)
io_binding = session.io_binding()
io_binding.bind_input(
name='input',
device_type=X_ortvalue.device_name(),
device_id=0,
element_type=np.float32,
shape=X_ortvalue.shape(),
buffer_ptr=X_ortvalue.data_ptr()
)
io_binding.bind_output(
name='output',
device_type=Y_ortvalue.device_name(),
device_id=0,
element_type=np.float32,
shape=Y_ortvalue.shape(),
buffer_ptr=Y_ortvalue.data_ptr()
)
session.run_with_iobinding(io_binding)
使用者可以請求 ONNX Runtime 在裝置上分配輸出。這對於動態形狀的輸出特別有用。使用者可以使用 get_outputs() API 來訪問與已分配輸出對應的 OrtValue。因此,使用者可以將 ONNX Runtime 為輸出分配的記憶體作為 OrtValue 消耗。
#X is numpy array on cpu
X_ortvalue = onnxruntime.OrtValue.ortvalue_from_numpy(X, 'cuda', 0)
session = onnxruntime.InferenceSession(
'model.onnx',
providers=['CUDAExecutionProvider', 'CPUExecutionProvider'])
)
io_binding = session.io_binding()
io_binding.bind_input(
name='input',
device_type=X_ortvalue.device_name(),
device_id=0,
element_type=np.float32,
shape=X_ortvalue.shape(),
buffer_ptr=X_ortvalue.data_ptr()
)
#Request ONNX Runtime to bind and allocate memory on CUDA for 'output'
io_binding.bind_output('output', 'cuda')
session.run_with_iobinding(io_binding)
# The following call returns an OrtValue which has data allocated by ONNX Runtime on CUDA
ort_output = io_binding.get_outputs()[0]
此外,如果 OrtValue 作為輸入饋送的一部分提供,則 ONNX Runtime 支援在推理模型時直接使用 OrtValue。
使用者可以直接繫結 OrtValue。
#X is numpy array on cpu
#X is numpy array on cpu
X_ortvalue = onnxruntime.OrtValue.ortvalue_from_numpy(X, 'cuda', 0)
Y_ortvalue = onnxruntime.OrtValue.ortvalue_from_shape_and_type([3, 2], np.float32, 'cuda', 0) # Change the shape to the actual shape of the output being bound
session = onnxruntime.InferenceSession(
'model.onnx',
providers=['CUDAExecutionProvider', 'CPUExecutionProvider'])
)
io_binding = session.io_binding()
io_binding.bind_ortvalue_input('input', X_ortvalue)
io_binding.bind_ortvalue_output('output', Y_ortvalue)
session.run_with_iobinding(io_binding)
您還可以將輸入和輸出直接繫結到 PyTorch 張量。
# X is a PyTorch tensor on device
session = onnxruntime.InferenceSession('model.onnx', providers=['CUDAExecutionProvider', 'CPUExecutionProvider']))
binding = session.io_binding()
X_tensor = X.contiguous()
binding.bind_input(
name='X',
device_type='cuda',
device_id=0,
element_type=np.float32,
shape=tuple(x_tensor.shape),
buffer_ptr=x_tensor.data_ptr(),
)
## Allocate the PyTorch tensor for the model output
Y_shape = ... # You need to specify the output PyTorch tensor shape
Y_tensor = torch.empty(Y_shape, dtype=torch.float32, device='cuda:0').contiguous()
binding.bind_output(
name='Y',
device_type='cuda',
device_id=0,
element_type=np.float32,
shape=tuple(Y_tensor.shape),
buffer_ptr=Y_tensor.data_ptr(),
)
session.run_with_iobinding(binding)
您還可以在 ONNX Runtime 推理示例中檢視此 API 的程式碼示例。
某些 onnx 資料型別(例如 TensorProto.BFLOAT16、TensorProto.FLOAT8E4M3FN 和 TensorProto.FLOAT8E5M2)Numpy 不支援。您可以直接將輸入或輸出與 GPU 記憶體中相應資料型別(例如 torch.bfloat16、torch.float8_e4m3fn 和 torch.float8_e5m2)的 Torch 張量繫結。
x = torch.ones([3], dtype=torch.float8_e5m2, device='cuda:0')
y = torch.empty([3], dtype=torch.bfloat16, device='cuda:0')
binding = session.io_binding()
binding.bind_input(
name='X',
device_type='cuda',
device_id=0,
element_type=TensorProto.FLOAT8E5M2,
shape=tuple(x.shape),
buffer_ptr=x.data_ptr(),
)
binding.bind_output(
name='Y',
device_type='cuda',
device_id=0,
element_type=TensorProto.BFLOAT16,
shape=tuple(y.shape),
buffer_ptr=y.data_ptr(),
)
session.run_with_iobinding(binding)
API 詳細資訊#
InferenceSession#
- class onnxruntime.InferenceSession(path_or_bytes: str | bytes | os.PathLike, sess_options: onnxruntime.SessionOptions | None = None, providers: Sequence[str | tuple[str, dict[Any, Any]]] | None = None, provider_options: Sequence[dict[Any, Any]] | None = None, **kwargs)[source]#
這是用於執行模型的主類。
- 引數:
path_or_bytes – 位元組字串中的檔名或序列化的 ONNX 或 ORT 格式模型。
sess_options – 會話選項。
providers – 優先順序遞減的可選提供程式序列。值可以是提供程式名稱,也可以是(提供程式名稱、選項字典)的元組。如果未提供,則所有可用的提供程式都將使用預設優先順序。
provider_options – 與“providers”中列出的提供程式對應的可選選項字典序列。
模型型別將被推斷,除非在 SessionOptions 中顯式設定。要顯式設定
so = onnxruntime.SessionOptions() # so.add_session_config_entry('session.load_model_format', 'ONNX') or so.add_session_config_entry('session.load_model_format', 'ORT')
“.ort”的副檔名將被推斷為 ORT 格式模型。所有其他檔名均假定為 ONNX 格式模型。
“providers”可以包含名稱,也可以包含名稱和選項。當“providers”中給出任何選項時,不應使用“provider_options”。
提供程式列表按優先順序排序。例如 [‘CUDAExecutionProvider’, ‘CPUExecutionProvider’] 表示如果 CUDAExecutionProvider 有能力,則使用它執行節點,否則使用 CPUExecutionProvider 執行。
- disable_fallback()#
停用 session.run() 回退機制。
- enable_fallback()#
啟用 session.Run() 回退機制。如果 session.Run() 由於內部執行提供程式故障而失敗,請重置為此會話啟用的執行提供程式。如果啟用了 GPU,則回退到 CUDAExecutionProvider。否則,回退到 CPUExecutionProvider。
- end_profiling()#
結束效能分析並將結果返回到檔案中。
如果選項
onnxruntime.SessionOptions.enable_profiling(),結果將儲存在檔名中。
- get_inputs()#
將輸入元資料作為
onnxruntime.NodeArg的列表返回。
- get_modelmeta()#
返回元資料。請參閱
onnxruntime.ModelMetadata。
- get_outputs()#
將輸出元資料作為
onnxruntime.NodeArg的列表返回。
- get_overridable_initializers()#
將輸入(包括初始值設定項)元資料作為
onnxruntime.NodeArg的列表返回。
- get_profiling_start_time_ns()#
返回效能分析開始時間的納秒數。與 Python 3.3 之後的 time.monotonic_ns() 相當。在某些平臺上,此計時器可能沒有納秒那麼精確。例如,在 Windows 和 MacOS 上,精度約為 100 納秒
- get_provider_options()#
返回已註冊的執行提供程式的配置。
- get_providers()#
返回已註冊的執行提供程式的列表。
- get_session_options()#
返回會話選項。請參閱
onnxruntime.SessionOptions。
- io_binding()#
返回 onnxruntime.IOBinding 物件。
- run(output_names, input_feed, run_options=None)#
計算預測。
- 引數:
output_names – 輸出的名稱
input_feed – 字典
{ input_name: input_value }run_options – 請參閱
onnxruntime.RunOptions。
- 返回值:
結果列表,每個結果可以是 numpy 陣列、稀疏張量、列表或字典。
sess.run([output_name], {input_name: x})
- run_async(output_names, input_feed, callback, user_data, run_options=None)#
在與 ort 內部操作執行緒池分離的 cxx 執行緒中非同步計算預測。
- 引數:
output_names – 輸出的名稱
input_feed – 字典
{ input_name: input_value }callback – python 函式,接受結果陣列和錯誤狀態字串。回撥將由來自 ort 內部操作執行緒池的 cxx 執行緒呼叫。
run_options – 請參閱
onnxruntime.RunOptions。
- ::
- class MyData
- def __init__(self)
# …
- def save_results(self, results)
# …
- def callback(results: np.ndarray, user_data: MyData, err: str) -> None
- if err
print (err)
- else
# 將結果儲存到 user_data
sess.run_async([output_name], {input_name: x}, callback)
- run_with_iobinding(iobinding, run_options=None)#
計算預測。
- 引數:
iobinding – 已繫結圖輸入/輸出的 iobinding 物件。
run_options – 請參閱
onnxruntime.RunOptions。
- run_with_ort_values(output_names, input_dict_ort_values, run_options=None)#
計算預測。
- 引數:
output_names – 輸出的名稱
input_dict_ort_values – 字典
{ input_name: input_ort_value }請參閱OrtValue類,瞭解如何從 numpy 陣列或 SparseTensor 建立 OrtValuerun_options – 請參閱
onnxruntime.RunOptions。
- 返回值:
一個 OrtValue 陣列
sess.run([output_name], {input_name: x})
- run_with_ortvaluevector(run_options, feed_names, feeds, fetch_names, fetches, fetch_devices)#
計算預測,類似於其他 run_*() 方法,但 C++/Python 轉換開銷最小。
- 引數:
run_options – 請參閱
onnxruntime.RunOptions。feed_names – 輸入名稱列表。
feeds – 輸入 OrtValue 列表。
fetch_names – 輸出名稱列表。
fetches – 輸出 OrtValue 列表。
fetch_devices – 輸出裝置列表。
- set_providers(providers=None, provider_options=None)#
註冊執行提供程式的輸入列表。將重新建立底層會話。
- 引數:
providers – 優先順序遞減的可選提供程式序列。值可以是提供程式名稱,也可以是(提供程式名稱、選項字典)的元組。如果未提供,則所有可用的提供程式都將使用預設優先順序。
provider_options – 與“providers”中列出的提供程式對應的可選選項字典序列。
“providers”可以包含名稱,也可以包含名稱和選項。當“providers”中給出任何選項時,不應使用“provider_options”。
提供程式列表按優先順序排序。例如 [‘CUDAExecutionProvider’, ‘CPUExecutionProvider’] 表示如果 CUDAExecutionProvider 有能力,則使用它執行節點,否則使用 CPUExecutionProvider 執行。
選項#
RunOptions#
- class onnxruntime.RunOptions(self: onnxruntime.capi.onnxruntime_pybind11_state.RunOptions)#
單個 Run 的配置資訊。
- add_run_config_entry(self: onnxruntime.capi.onnxruntime_pybind11_state.RunOptions, arg0: str, arg1: str) None#
將單個執行配置條目設定為一對字串。
- get_run_config_entry(self: onnxruntime.capi.onnxruntime_pybind11_state.RunOptions, arg0: str) str#
使用給定的配置鍵獲取單個執行配置值。
- property log_severity_level#
資訊 (Info),2:警告 (Warning),3:錯誤 (Error),4:致命 (Fatal)。預設為 2。
- 型別:
特定 Run() 呼叫的日誌嚴重性級別。0
- 型別:
詳細 (Verbose),1
- property log_verbosity_level#
如果為 DEBUG 構建且 run_log_severity_level 為 0,則為 VLOG 級別。適用於特定的 Run() 呼叫。預設為 0。
- property logid#
用於標識特定 Run() 呼叫生成的日誌。
- property only_execute_path_to_fetches#
僅執行提取列表所需的節點
- property terminate#
設定為 True 以終止任何當前正在使用此 RunOptions 例項的執行呼叫。各個呼叫將正常退出並返回錯誤狀態。
- property training_mode#
選擇在訓練或推理模式下執行
SessionOptions#
- class onnxruntime.SessionOptions(self: onnxruntime.capi.onnxruntime_pybind11_state.SessionOptions)#
會話的配置資訊。
- add_external_initializers(self: onnxruntime.capi.onnxruntime_pybind11_state.SessionOptions, arg0: list, arg1: list) None#
- add_free_dimension_override_by_denotation(self: onnxruntime.capi.onnxruntime_pybind11_state.SessionOptions, arg0: str, arg1: int) None#
為與輸入自由維度關聯的每個指示符指定維度大小。
- add_free_dimension_override_by_name(self: onnxruntime.capi.onnxruntime_pybind11_state.SessionOptions, arg0: str, arg1: int) None#
指定模型輸入中命名維度的值。
- add_initializer(self: onnxruntime.capi.onnxruntime_pybind11_state.SessionOptions, arg0: str, arg1: object) None#
- add_session_config_entry(self: onnxruntime.capi.onnxruntime_pybind11_state.SessionOptions, arg0: str, arg1: str) None#
將單個會話配置條目設定為字串對。
- property enable_cpu_mem_arena#
在 CPU 上啟用記憶體 Arena。Arena 可能會為未來使用預先分配記憶體。如果您不希望這樣做,請將此選項設定為 false。預設為 True。
- property enable_mem_pattern#
啟用記憶體模式最佳化。預設為 true。
- property enable_mem_reuse#
啟用記憶體重用最佳化。預設為 true。
- property enable_profiling#
為此會話啟用效能分析。預設為 false。
- property execution_mode#
設定執行模式。預設為 sequential(順序執行)。
- property execution_order#
設定執行順序。預設為 basic topological order(基本拓撲順序)。
- get_session_config_entry(self: onnxruntime.capi.onnxruntime_pybind11_state.SessionOptions, arg0: str) str#
使用給定的配置鍵獲取單個會話配置值。
- property graph_optimization_level#
此會話的圖最佳化級別。
- property inter_op_num_threads#
設定用於並行化圖執行(跨節點)的執行緒數。預設為 0,讓 onnxruntime 選擇。
- property intra_op_num_threads#
設定用於並行化節點內執行的執行緒數。預設為 0,讓 onnxruntime 選擇。
- property log_severity_level#
日誌嚴重性級別。適用於會話載入、初始化等。0:Verbose(詳細), 1:Info(資訊), 2:Warning(警告). 3:Error(錯誤), 4:Fatal(致命)。預設為 2。
- property log_verbosity_level#
VLOG 級別(如果為 DEBUG 構建且 session_log_severity_level 為 0)。適用於會話載入、初始化等。預設為 0。
- property logid#
用於會話輸出的 Logger ID。
- property optimized_model_filepath#
序列化最佳化模型的檔案的路徑。除非設定 optimized_model_filepath,否則不會序列化最佳化模型。序列化模型格式將預設為 ONNX,除非: - 使用 add_session_config_entry 將 ‘session.save_model_format’ 設定為 ‘ORT’,或者 - 沒有 ‘session.save_model_format’ 配置條目且 optimized_model_filepath 以 ‘.ort’ 結尾(不區分大小寫)
- property profile_file_prefix#
效能分析檔案的字首。當前時間將附加到檔名。
- register_custom_ops_library(self: onnxruntime.capi.onnxruntime_pybind11_state.SessionOptions, arg0: str) None#
指定包含執行模型所需的自定義 op 核心的共享庫的路徑。
- property use_deterministic_compute#
是否使用確定性計算。預設為 false。
- class onnxruntime.ExecutionMode(self: onnxruntime.capi.onnxruntime_pybind11_state.ExecutionMode, value: int)#
成員
ORT_SEQUENTIAL (順序執行)
ORT_PARALLEL (並行執行)
- property name#
- class onnxruntime.ExecutionOrder(self: onnxruntime.capi.onnxruntime_pybind11_state.ExecutionOrder, value: int)#
成員
DEFAULT (預設)
PRIORITY_BASED (基於優先順序)
MEMORY_EFFICIENT (記憶體高效)
- property name#
- class onnxruntime.GraphOptimizationLevel(self: onnxruntime.capi.onnxruntime_pybind11_state.GraphOptimizationLevel, value: int)#
成員
ORT_DISABLE_ALL (停用所有最佳化)
ORT_ENABLE_BASIC (啟用基本最佳化)
ORT_ENABLE_EXTENDED (啟用擴充套件最佳化)
ORT_ENABLE_ALL (啟用所有最佳化)
- property name#
- class onnxruntime.OrtAllocatorType(self: onnxruntime.capi.onnxruntime_pybind11_state.OrtAllocatorType, value: int)#
成員
INVALID (無效)
ORT_DEVICE_ALLOCATOR (裝置分配器)
ORT_ARENA_ALLOCATOR (Arena 分配器)
- property name#
- class onnxruntime.OrtArenaCfg(*args, **kwargs)#
過載函式。
__init__(self: onnxruntime.capi.onnxruntime_pybind11_state.OrtArenaCfg, arg0: int, arg1: int, arg2: int, arg3: int) -> None
__init__(self: onnxruntime.capi.onnxruntime_pybind11_state.OrtArenaCfg, arg0: dict) -> None
- class onnxruntime.OrtMemoryInfo(self: onnxruntime.capi.onnxruntime_pybind11_state.OrtMemoryInfo, arg0: str, arg1: onnxruntime.capi.onnxruntime_pybind11_state.OrtAllocatorType, arg2: int, arg3: onnxruntime.capi.onnxruntime_pybind11_state.OrtMemType)#
- class onnxruntime.OrtMemType(self: onnxruntime.capi.onnxruntime_pybind11_state.OrtMemType, value: int)#
成員
CPU_INPUT (CPU 輸入)
CPU_OUTPUT (CPU 輸出)
CPU
DEFAULT (預設)
- property name#
函式#
分配器#
- onnxruntime.create_and_register_allocator(arg0: OrtMemoryInfo, arg1: OrtArenaCfg) None#
- onnxruntime.create_and_register_allocator_v2(arg0: str, arg1: OrtMemoryInfo, arg2: dict[str, str], arg3: OrtArenaCfg) None#
遙測事件#
提供程式#
構建,版本#
裝置#
日誌記錄#
隨機數#
資料#
OrtValue#
- class onnxruntime.OrtValue(ortvalue, numpy_obj=None)[source]#
一種資料結構,支援所有 ONNX 資料格式(張量和非張量),允許使用者將這些資料放置在裝置上,例如,在 CUDA 支援的裝置上。此類提供用於構造和處理 OrtValue 的 API。
- numpy()[source]#
從 OrtValue 返回一個 Numpy 物件。僅對儲存張量的 OrtValue 有效。對於儲存非張量的 OrtValue 會丟擲異常。使用訪問器來獲取對非張量物件(如 SparseTensor)的引用
- static ort_value_from_sparse_tensor(sparse_tensor)[source]#
此函式將從有效的 SparseTensor 構造一個 OrtValue 例項。OrtValue 的新例項將承擔 sparse_tensor 的所有權
- static ortvalue_from_numpy(numpy_obj, device_type='cpu', device_id=0)[source]#
工廠方法,用於從給定的 Numpy 物件構造 OrtValue(其中包含張量)。僅當裝置不是 cpu 時,OrtValue 才持有 Numpy 物件中資料的副本
- 引數:
numpy_obj – 要從中構造 OrtValue 的 Numpy 物件
device_type – 例如 cpu、cuda、cann,預設為 cpu
device_id – 裝置 ID,例如 0
SparseTensor#
- class onnxruntime.SparseTensor(sparse_tensor)[source]#
一種資料結構,用於投影 C++ SparseTensor 物件。該類提供了與該物件互動的 API。根據格式,該類將儲存多個緩衝區,具體取決於格式
內部建構函式
- as_blocksparse_view()[source]#
此方法將返回稀疏張量的 coo 表示形式,這將允許查詢 BlockSparse 索引。如果例項不包含 BlockSparse 格式,則會丟擲異常。您可以按如下方式查詢 coo 索引
block_sparse_indices = sparse_tensor.as_blocksparse_view().indices()
這將返回一個由本機記憶體支援的 numpy 陣列
- as_coo_view()[source]#
此方法將返回稀疏張量的 coo 表示形式,這將允許查詢 COO 索引。如果例項不包含 COO 格式,則會丟擲異常。您可以按如下方式查詢 coo 索引
coo_indices = sparse_tensor.as_coo_view().indices()
這將返回一個由本機記憶體支援的 numpy 陣列。
- as_csrc_view()[source]#
此方法將返回稀疏張量的 CSR(C) 表示形式,這將允許查詢 CRS(C) 索引。如果例項不包含 CSR(C) 格式,則會丟擲異常。您可以按如下方式查詢索引
inner_ndices = sparse_tensor.as_csrc_view().inner() outer_ndices = sparse_tensor.as_csrc_view().outer()
返回由本機記憶體支援的 numpy 陣列。
- static sparse_coo_from_numpy(dense_shape, values, coo_indices, ort_device)[source]#
用於從給定引數構造 COO 格式的 SparseTensor 的工廠方法
- 引數:
dense_shape – 1-D numpy 陣列 (int64) 或 python 列表,其中包含稀疏張量的 dense_shape,必須位於 cpu 記憶體中
values – 同質的、連續的 1-D numpy 陣列,其中包含張量的非零元素,型別為。
coo_indices – 連續的 numpy 陣列 (int64),其中包含張量的 COO 索引。當 coo_indices 包含非零值的線性索引時,它可能具有 1-D 形狀,並且其長度必須等於值的長度。它也可以是 2-D 形狀,在這種形狀中,它包含每個非零值的座標對,並且其長度必須正好是值長度的兩倍。
ort_device –
描述由提供的 numpy 陣列擁有的後備記憶體。僅 CPU 記憶體是
非數字資料型別支援。
對於原始型別,該方法會將 values 和 coo_indices 陣列對映到本機記憶體中,並將它們用作後備儲存。它將增加 numpy 陣列的引用計數,並在 GC 時減少它。緩衝區可能駐留在任何儲存中,無論是 CPU 還是 GPU。對於字串和物件,它將在 CPU 記憶體中建立陣列的副本,因為 ORT 不支援其他裝置上的字串和物件,並且它們的記憶體無法對映。
- static sparse_csr_from_numpy(dense_shape, values, inner_indices, outer_indices, ort_device)[source]#
用於從給定引數構造 CSR 格式的 SparseTensor 的工廠方法
- 引數:
dense_shape – 1-D numpy 陣列 (int64) 或 python 列表,其中包含稀疏張量的 dense_shape(行,列),必須位於 cpu 記憶體中
values – 連續的、同質的 1-D numpy 陣列,其中包含張量的非零元素,型別為。
inner_indices – 連續的 1-D numpy 陣列 (int64),其中包含張量的 CSR 內部索引。其長度必須等於值的長度。
outer_indices – 連續的 1-D numpy 陣列 (int64),其中包含張量的 CSR 外部索引。其長度必須等於行數 + 1。
ort_device –
描述由提供的 numpy 陣列擁有的後備記憶體。僅 CPU 記憶體是
非數字資料型別支援。
對於原始型別,該方法會將 values 和 indices 陣列對映到本機記憶體中,並將它們用作後備儲存。它將增加引用計數,並在 GC 時減少計數。緩衝區可能駐留在任何儲存中,無論是 CPU 還是 GPU。對於字串和物件,它將在 CPU 記憶體中建立陣列的副本,因為 ORT 不支援其他裝置上的字串和物件,並且它們的記憶體無法對映。
Devices#
IOBinding#
- class onnxruntime.IOBinding(session: Session)[source]#
此類提供 API 以將輸入/輸出繫結到指定的裝置,例如 GPU。
- bind_cpu_input(name, arr_on_cpu)[source]#
將輸入繫結到 CPU 上的陣列 :param name: 輸入名稱 :param arr_on_cpu: CPU 上的 python 陣列形式的輸入值
- bind_input(name, device_type, device_id, element_type, shape, buffer_ptr)[source]#
- 引數:
name – 輸入名稱
device_type – 例如 cpu、cuda、cann
device_id – 裝置 ID,例如 0
element_type – 輸入元素型別
shape – 輸入形狀
buffer_ptr – 指向輸入資料的記憶體指標
- class onnxruntime.SessionIOBinding(self: onnxruntime.capi.onnxruntime_pybind11_state.SessionIOBinding, arg0: onnxruntime.capi.onnxruntime_pybind11_state.InferenceSession)#
- bind_input(*args, **kwargs)#
過載函式。
bind_input(self: onnxruntime.capi.onnxruntime_pybind11_state.SessionIOBinding, arg0: str, arg1: object) -> None
bind_input(self: onnxruntime.capi.onnxruntime_pybind11_state.SessionIOBinding, arg0: str, arg1: onnxruntime.capi.onnxruntime_pybind11_state.OrtDevice, arg2: object, arg3: list[int], arg4: int) -> None
- bind_ortvalue_input(self: onnxruntime.capi.onnxruntime_pybind11_state.SessionIOBinding, arg0: str, arg1: onnxruntime.capi.onnxruntime_pybind11_state.OrtValue) None#
- bind_ortvalue_output(self: onnxruntime.capi.onnxruntime_pybind11_state.SessionIOBinding, arg0: str, arg1: onnxruntime.capi.onnxruntime_pybind11_state.OrtValue) None#
- bind_output(*args, **kwargs)#
過載函式。
bind_output(self: onnxruntime.capi.onnxruntime_pybind11_state.SessionIOBinding, arg0: str, arg1: onnxruntime.capi.onnxruntime_pybind11_state.OrtDevice, arg2: object, arg3: list[int], arg4: int) -> None
bind_output(self: onnxruntime.capi.onnxruntime_pybind11_state.SessionIOBinding, arg0: str, arg1: onnxruntime.capi.onnxruntime_pybind11_state.OrtDevice) -> None
- clear_binding_inputs(self: onnxruntime.capi.onnxruntime_pybind11_state.SessionIOBinding) None#
- clear_binding_outputs(self: onnxruntime.capi.onnxruntime_pybind11_state.SessionIOBinding) None#
- copy_outputs_to_cpu(self: onnxruntime.capi.onnxruntime_pybind11_state.SessionIOBinding) list#
- get_outputs(self: onnxruntime.capi.onnxruntime_pybind11_state.SessionIOBinding) onnxruntime.capi.onnxruntime_pybind11_state.OrtValueVector#
- synchronize_inputs(self: onnxruntime.capi.onnxruntime_pybind11_state.SessionIOBinding) None#
- synchronize_outputs(self: onnxruntime.capi.onnxruntime_pybind11_state.SessionIOBinding) None#
OrtDevice#
Internal classes#
這些類不能由使用者例項化,但它們由該庫的方法或函式返回。
ModelMetadata#
NodeArg#
Backend#
除了針對性能和可用性最佳化的常規 API 之外,ONNX Runtime 還實現了 ONNX 後端 API,用於驗證 ONNX 規範的符合性。支援以下功能
- onnxruntime.backend.is_compatible(model, device=None, **kwargs)#
返回模型是否與後端相容。
- 引數:
model – 未使用
device – None 以使用預設裝置,或使用字串(例如:‘CPU’)
- 返回值:
boolean
- onnxruntime.backend.prepare(model, device=None, **kwargs)#
載入模型並建立一個
onnxruntime.InferenceSession,準備用作後端。- 引數:
model – ModelProto(由 onnx.load 返回)、用於檔名的字串或用於序列化模型的位元組
device – 請求的計算裝置,None 表示預設裝置,具體取決於編譯設定
kwargs – 請參閱
onnxruntime.SessionOptions
- 返回值:
- onnxruntime.backend.run(model, inputs, device=None, **kwargs)#
計算預測。
- 引數:
model – 由函式 prepare 返回的
onnxruntime.InferenceSessioninputs – 輸入
device – 請求的計算裝置,None 表示預設裝置,具體取決於編譯設定
kwargs – 請參閱
onnxruntime.RunOptions
- 返回值:
預測
- onnxruntime.backend.supports_device(device)#
檢查後端是否編譯了特定的裝置支援。特別是,它在測試套件中使用。