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 引數。在以下示例中,使用了 CUDAExecutionProviderCPUExecutionProvider,假設應用程式在 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 建立 OrtValue

  • run_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)#

過載函式。

  1. __init__(self: onnxruntime.capi.onnxruntime_pybind11_state.OrtArenaCfg, arg0: int, arg1: int, arg2: int, arg3: int) -> None

  2. __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#

遙測事件#

onnxruntime.disable_telemetry_events() None#

停用特定於平臺的遙測資料收集。

onnxruntime.enable_telemetry_events() None#

在適用的情況下啟用特定於平臺的遙測資料收集。

提供程式#

onnxruntime.get_all_providers() list[str]#

返回此 Onnxruntime 版本可以支援的執行提供程式的列表。元素的順序表示執行提供程式的預設優先順序順序,從高到低。

onnxruntime.get_available_providers() list[str]#

返回此已安裝的 Onnxruntime 版本中可用的執行提供程式的列表。元素的順序表示執行提供程式的預設優先順序順序,從高到低。

構建,版本#

onnxruntime.get_build_info() str#
onnxruntime.get_version_string() str#
onnxruntime.has_collective_ops() bool#

裝置#

onnxruntime.get_device() str#

返回用於計算預測的裝置 (CPU, MKL, …)

日誌記錄#

onnxruntime.set_default_logger_severity(arg0: int) None#

設定預設日誌嚴重性。0:Verbose(詳細), 1:Info(資訊), 2:Warning(警告), 3:Error(錯誤), 4:Fatal(致命)

onnxruntime.set_default_logger_verbosity(arg0: int) None#

設定預設日誌詳細級別。要啟用詳細日誌,您需要將預設日誌嚴重性設定為 0:Verbose 級別。

隨機數#

onnxruntime.set_seed(arg0: int) None#

設定 Onnxruntime 中用於隨機數生成的種子。

資料#

OrtValue#

class onnxruntime.OrtValue(ortvalue, numpy_obj=None)[source]#

一種資料結構,支援所有 ONNX 資料格式(張量和非張量),允許使用者將這些資料放置在裝置上,例如,在 CUDA 支援的裝置上。此類提供用於構造和處理 OrtValue 的 API。

as_sparse_tensor()[source]#

此函式將返回此 OrtValue 中包含的 SparseTensor(稀疏張量)

data_ptr()[source]#

返回 OrtValue 資料緩衝區中第一個元素的地址

data_type()[source]#

返回 OrtValue 中資料的的資料型別

device_name()[source]#

返回 OrtValue 的資料緩衝區所在的裝置的名稱,例如 cpu、cuda、cann

element_type()[source]#

如果 OrtValue 是張量,則返回 OrtValue 中資料的 proto 型別。

has_value()[source]#

如果與可選型別對應的 OrtValue 包含資料,則返回 True,否則返回 False

is_sparse_tensor()[source]#

如果 OrtValue 包含 SparseTensor,則返回 True,否則返回 False

is_tensor()[source]#

如果 OrtValue 包含 Tensor(張量),則返回 True,否則返回 False

is_tensor_sequence()[source]#

如果 OrtValue 包含 Tensor Sequence(張量序列),則返回 True,否則返回 False

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

static ortvalue_from_shape_and_type(shape=None, element_type=None, device_type='cpu', device_id=0)[source]#

工廠方法,用於從給定的形狀和 element_type 構造 OrtValue(其中包含張量)

引數:
  • shape – 指示 OrtValue 形狀的整數列表

  • element_type – OrtValue 中元素的資料型別(numpy 型別)

  • device_type – 例如 cpu、cuda、cann,預設為 cpu

  • device_id – 裝置 ID,例如 0

shape()[source]#

返回 OrtValue 中資料的形狀

update_inplace(np_arr)[source]#

使用新的 Numpy 陣列就地更新 OrtValue。numpy 內容被複制到支援 OrtValue 的裝置記憶體中。它可用於在使用 CUDA 圖時更新 InferenceSession 的輸入值,或在其他需要更新 OrtValue 但記憶體地址不能更改的情況下使用。

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 陣列。

data_type()[source]#

返回 OrtValue 中資料的字串資料型別

dense_shape()[source]#

返回一個包含稀疏張量密集形狀的 numpy 陣列 (int64)

device_name()[source]#

返回 SparseTensor 資料緩衝區所在的裝置名稱,例如 cpu、cuda

format()[source]#

返回 OrtSparseFormat 列舉

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 不支援其他裝置上的字串和物件,並且它們的記憶體無法對映。

to_cuda(ort_device)[source]#

返回此例項在指定 cuda 裝置上的副本

引數:

ort_device – 名稱為 ‘cuda’ 且具有有效 gpu 裝置 ID

如果以下情況,該方法將丟擲異常

  • 此例項包含字串

  • 此例項已在 GPU 上。不支援跨 GPU 複製

  • 此構建中不存在 CUDA

  • 如果指定的裝置無效

values()[source]#

如果資料型別為數字,則該方法返回由本機記憶體支援的 numpy 陣列。否則,返回的 numpy 陣列包含字串的副本。

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 – 指向輸入資料的記憶體指標

bind_ortvalue_input(name, ortvalue)[source]#
引數:
  • name – 輸入名稱

  • ortvalue – 要繫結的 OrtValue 例項

bind_ortvalue_output(name, ortvalue)[source]#
引數:
  • name – 輸出名稱

  • ortvalue – 要繫結的 OrtValue 例項

bind_output(name, device_type='cpu', device_id=0, element_type=None, shape=None, buffer_ptr=None)[source]#
引數:
  • name – 輸出名稱

  • device_type – 例如 cpu、cuda、cann,預設為 cpu

  • device_id – 裝置 ID,例如 0

  • element_type – 輸出元素型別

  • shape – 輸出形狀

  • buffer_ptr – 指向輸出資料的記憶體指標

copy_outputs_to_cpu()[source]#

將輸出內容複製到 CPU。

get_outputs()[source]#

返回在呼叫之前 Run() 的輸出 OrtValue。獲得的 OrtValue 的資料緩衝區可能不在 CPU 記憶體中

class onnxruntime.SessionIOBinding(self: onnxruntime.capi.onnxruntime_pybind11_state.SessionIOBinding, arg0: onnxruntime.capi.onnxruntime_pybind11_state.InferenceSession)#
bind_input(*args, **kwargs)#

過載函式。

  1. bind_input(self: onnxruntime.capi.onnxruntime_pybind11_state.SessionIOBinding, arg0: str, arg1: object) -> None

  2. 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)#

過載函式。

  1. 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

  2. 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#

class onnxruntime.OrtDevice(c_ort_device)[source]#

一種資料結構,用於公開底層的 C++ OrtDevice

內部建構函式

Internal classes#

這些類不能由使用者例項化,但它們由該庫的方法或函式返回。

ModelMetadata#

class onnxruntime.ModelMetadata#

關於模型的預定義和自定義元資料。它通常用於標識用於執行預測的模型,並有助於比較。

property custom_metadata_map#

附加元資料

property description#

模型的描述

property domain#

ONNX 域

property graph_description#

模型中託管的圖的描述

property graph_name#

圖名稱

property producer_name#

生產者名稱

property version#

模型版本

NodeArg#

class onnxruntime.NodeArg#

節點引數定義,包括輸入和輸出,包括引數名稱、引數型別(包含型別和形狀)。

property name#

節點名稱

property shape#

節點形狀(假設節點包含張量)

property type#

節點型別

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.InferenceSession

onnxruntime.backend.run(model, inputs, device=None, **kwargs)#

計算預測。

引數:
返回值:

預測

onnxruntime.backend.supports_device(device)#

檢查後端是否編譯了特定的裝置支援。特別是,它在測試套件中使用。