Модуль сеансов ONNX Runtime
Модуль доступен в версиях после 20260402.
Объект session отвечает за загрузку ONNX-модели, получение сведений о входах и выходах и выполнение инференса.
Конфигурация среды выполнения
onnxruntime.configure(opts)
assert(onnxruntime.configure({
log_severity_level = 2,
log_id = "my-runtime",
use_global_thread_pools = false,
global_intra_op_num_threads = 0,
global_inter_op_num_threads = 0,
}))
Описание:
- Необходимо вызвать до создания любой session.
- После появления активной session повторный вызов приводит к ошибке.
Поддерживаемые поля:
log_severity_levellog_iduse_global_thread_poolsglobal_intra_op_num_threadsglobal_inter_op_num_threads
Создание сеанса
onnxruntime.session(model_path[, opts])
объект_session, сообщение_об_ошибке = onnxruntime.session(путь_к_модели, параметры)
Загружает ONNX-модель по пути к файлу.
onnxruntime.session_from_bytes(model_bytes[, opts])
объект_session, сообщение_об_ошибке = onnxruntime.session_from_bytes(байты_модели, параметры)
Создаёт session из байтов в памяти.
Параметры Session
Общие поля
providersилиproviderМожно передать отдельную строку или массив строк; сейчас нативно обрабатываются и поддерживаются"cpu"и"coreml", а также псевдонимыCPUExecutionProviderиCoreMLExecutionProvider.fallback_to_cpuЛогическое значение, по умолчаниюtrue.intra_op_num_threadsinter_op_num_threadslog_idsession_log_severity_levelsession_log_verbosity_leveloptimized_model_pathprofile_file_prefixfree_dimension_overridesconfig_entriesgraph_optimization_levelВозможные значения:"disable","basic","extended","all".execution_modeВозможные значения:"sequential","parallel".deterministic_computedisable_per_session_threadsenable_cpu_mem_arenaenable_mem_patterncustom_op_libraries
Дополнительные сведения:
- Для
free_dimension_overridesтребуется таблица-массив; каждая запись имеет структуру{ by = "name"|"denotation", key = "...", value = целое_число }. config_entriesдолжен быть table вида «строковый ключ -> строковое значение».custom_op_librariesможет быть строкой с одним путём, массивом путей или дескриптором, возвращённымload_custom_op_library(); в массиве можно смешивать пути и дескрипторы.- Если
providersявно не задан или список provider пуст, текущая реализация по умолчанию добавляет CPU provider. - Если список provider содержит
"coreml"иfallback_to_cpu = true, после сбоя инициализации CoreML provider возможен автоматический откат к CPU. - При явной записи
providers = {"coreml", "cpu"}порядок означает сначала CoreML, затем CPU.
Поля CoreML provider
Если providers содержит "coreml", также доступны:
coreml_compute_unitsРекомендуются"all","cpu_only","cpu_and_gpu","cpu_and_neural_engine"; анализатор также поддерживает псевдонимыCPUOnly,CPUAndGPU,CPUAndNeuralEngine,MLComputeUnits....coreml_create_mlprogramcoreml_require_static_input_shapescoreml_enable_on_subgraphcoreml_flagscoreml_use_cpu_onlycoreml_use_cpu_and_gpucoreml_only_enable_device_with_ane
Дополнительные сведения:
coreml_flags,coreml_use_cpu_only,coreml_use_cpu_and_gpu,coreml_only_enable_device_with_ane— поля для совместимости со старым синтаксисом.- Старые и новые поля можно смешивать, но при конфликтующих значениях создание session немедленно завершается ошибкой.
coreml_only_enable_device_with_aneнельзя одновременно использовать с взаимоисключающими конфигурациямиcoreml_compute_units = "cpu_only"/"cpu_and_gpu".
Методы объекта session
Основные сведения
session:input_names()session:output_names()session:overridable_initializer_names()session:input_count()session:output_count()session:overridable_initializer_count()
Сведения о типах
session:input_info(name_or_index)session:output_info(name_or_index)session:overridable_initializer_info(name_or_index)
Возвращается таблица сведений о типе; распространённые поля:
nameonnx_typeis_sparsedata_typetypehas_shapeshapesymbolic_shapeelementkey_typevalue
Описание:
- tensor / sparse tensor содержат
data_type,shape,symbolic_shape. - sequence / optional содержат вложенное поле
element. - map содержит
key_typeи вложенное полеvalue.
Сведения о памяти
session:memory_info_for_inputs()session:memory_info_for_outputs()
Возвращаемые значения можно получать по порядку или по имени. Отдельный элемент обычно содержит:
nameidmem_typeallocator_typedevice_typedevice_mem_typevendor_id
Метаданные и жизненный цикл
session:metadata()session:close()session:end_profiling()session:profiling_start_time_ns()session:set_ep_dynamic_options(opts)session:register_custom_op_library(path_or_handle)
Описание:
end_profiling()возвращает путь к файлу профилирования.set_ep_dynamic_options()преобразует key/value переданной table в строки и передаёт их в ORT.register_custom_op_library()пересоздаёт внутреннюю session на основе текущих параметров session.path_or_handleможет быть путём или дескриптором, возвращённымload_custom_op_library().
Выполнение инференса
session:run(inputs[, output_names[, run_options]])
таблица_выходов, сообщение_об_ошибке = session:run({
input_ids = входной_тензор,
attention_mask = тензор_маски,
}, {
"logits",
}, run_options)
session:run_into(inputs, outputs[, run_options])
таблица_выходов, сообщение_об_ошибке = session:run_into({
x = входной_тензор,
}, {
y = повторно_используемый_тензор,
}, run_options)
session:run_with_iobinding(binding[, run_options])
таблица_выходов, сообщение_об_ошибке = session:run_with_iobinding(binding, run_options)
Правила входных данных:
inputsможет быть последовательным массивом или словарём, организованным по именам входов.- Последовательный массив сопоставляется с входами модели по порядку; затем имена overridable initializer также можно переопределить.
- В форме словаря ключи должны совпадать с именами входов или overridable initializer.
- optional-вход можно опустить или передать как
onnxruntime.optional(nil, type_info).
Правила выходных данных:
- Возвращается table.
- Один и тот же выход можно получить как по числовому индексу, так и по имени.
- Если
run_into()повторно использует существующий tensor, соответствующий элемент возвращаемой таблицы является самим исходным объектом.
Run Options
onnxruntime.run_options([opts])
local run_options = assert(onnxruntime.run_options({
tag = "session-run",
log_severity_level = 2,
log_verbosity_level = 1,
}))
Поддерживаемые поля:
taglog_severity_levellog_verbosity_level
Методы объекта:
run_options:tag([value])run_options:log_severity_level([value])run_options:log_verbosity_level([value])run_options:terminate()run_options:reset_terminate()
IOBinding
session:create_io_binding()
binding, сообщение_об_ошибке = session:create_io_binding()
binding:bind_input(name, value)
Привязывает входное значение. Пустой optional здесь не принимается.
binding:bind_output(name[, spec_or_tensor])
Поддерживаются три формы:
binding:bind_output("y")Привязывает к памяти CPU; позднее значение можно получить черезget_outputs().binding:bind_output("y", existing_tensor)Напрямую записывает в существующий tensor.binding:bind_output("y", {type = "float32", shape = {1, 2}})Интерфейс создаёт и возвращает выходной tensor.
Также поддерживается:
binding:bind_output("y", {mode = "device"})
Другие методы
binding:clear_inputs()binding:clear_outputs()binding:synchronize_inputs()binding:synchronize_outputs()binding:get_outputs()
Пример
local ort = require("onnxruntime")
local session = assert(ort.session(XXT_HOME_PATH.."/models/demo/model.onnx", {
providers = {"coreml", "cpu"},
fallback_to_cpu = true,
coreml_compute_units = "all",
}))
local x = assert(ort.tensor("float32", {1, 2}, {1.0, 2.0}))
local bias = assert(ort.tensor("float32", {1, 2}, {0.5, -0.5}))
local run_options = assert(ort.run_options({tag = "demo"}))
local outputs = assert(session:run({
x = x,
bias = bias,
}, {"y"}, run_options))
print(outputs.y:to_table()[1])