ONNX-Runtime-Session-Modul
Dieses Modul ist in Versionen nach 20260402 verfügbar
Sessionobjekte laden ONNX-Modelle, prüfen Ein-/Ausgabeinformationen und führen Inferenz aus.
Laufzeitkonfiguration
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,
}))
Hinweise:
- Muss vor dem Erstellen jeder Session aufgerufen werden.
- Nach dem Erstellen einer aktiven Session führt ein weiterer Aufruf zu einem Fehler.
Unterstützte Felder:
log_severity_levellog_iduse_global_thread_poolsglobal_intra_op_num_threadsglobal_inter_op_num_threads
Session erstellen
onnxruntime.session(model_path[, opts])
session, err = onnxruntime.session(model_path, opts)
Lädt ein ONNX-Modell aus einem Dateipfad.
onnxruntime.session_from_bytes(model_bytes[, opts])
session, err = onnxruntime.session_from_bytes(model_bytes, opts)
Erstellt eine Session aus im Speicher befindlichen Modellbytes.
Session-Optionen
Allgemeine Felder
providersoderproviderAkzeptiert eine einzelne Zeichenkette oder ein Zeichenkettenarray; nativ unterstützt werden derzeit"cpu"und"coreml", außerdem Aliase wieCPUExecutionProviderundCoreMLExecutionProvider.fallback_to_cpuBoolean, Standardwerttrue.intra_op_num_threadsinter_op_num_threadslog_idsession_log_severity_levelsession_log_verbosity_leveloptimized_model_pathprofile_file_prefixfree_dimension_overridesconfig_entriesgraph_optimization_levelEiner von"disable","basic","extended"oder"all".execution_modeEiner von"sequential"oder"parallel".deterministic_computedisable_per_session_threadsenable_cpu_mem_arenaenable_mem_patterncustom_op_libraries
Zusätzliche Hinweise:
free_dimension_overridesmuss als Array-Tabelle übergeben werden; jedes Element hat die Form{ by = "name"|"denotation", key = "...", value = integer }.config_entriesmuss eine TabelleZeichenkette -> Zeichenkettesein.custom_op_librarieskann ein einzelner Pfad, ein Pfadarray oder ein vonload_custom_op_library()zurückgegebenes Handle sein; Arrays dürfen Pfade und Handles mischen.- Ohne explizites
providersoder bei leerer Providerliste ergänzt die aktuelle Implementierung standardmäßig den CPU-Provider. - Enthält die Providerliste
"coreml"und istfallback_to_cpu = true, kann nach fehlgeschlagener CoreML-Initialisierung automatisch auf CPU zurückgefallen werden. providers = {"coreml", "cpu"}bedeutet, dass CoreML zuerst und CPU danach versucht wird.
Felder des CoreML-Providers
Wenn providers "coreml" enthält, sind zusätzlich folgende Felder verfügbar:
coreml_compute_unitsEmpfohlen werden"all","cpu_only","cpu_and_gpu"und"cpu_and_neural_engine"; der Parser akzeptiert auch Aliase wieCPUOnly,CPUAndGPU,CPUAndNeuralEngineundMLComputeUnits....coreml_create_mlprogramcoreml_require_static_input_shapescoreml_enable_on_subgraphcoreml_flagscoreml_use_cpu_onlycoreml_use_cpu_and_gpucoreml_only_enable_device_with_ane
Zusätzliche Hinweise:
coreml_flags,coreml_use_cpu_only,coreml_use_cpu_and_gpuundcoreml_only_enable_device_with_anesind Felder zur Kompatibilität mit älteren Schreibweisen.- Neue und alte Felder können gemischt werden; bei widersprüchlicher Bedeutung schlägt die Session-Erstellung sofort fehl.
coreml_only_enable_device_with_anedarf nicht mit sich ausschließenden Einstellungen wiecoreml_compute_units = "cpu_only"/"cpu_and_gpu"kombiniert werden.
Methoden des Sessionobjekts
Grundlegende Informationen
session:input_names()session:output_names()session:overridable_initializer_names()session:input_count()session:output_count()session:overridable_initializer_count()
Typinformationen
session:input_info(name_or_index)session:output_info(name_or_index)session:overridable_initializer_info(name_or_index)
Der Rückgabewert ist eine Typinformationstabelle; häufige Felder sind:
nameonnx_typeis_sparsedata_typetypehas_shapeshapesymbolic_shapeelementkey_typevalue
Hinweise:
- Tensor / Sparse Tensor enthalten
data_type,shapeundsymbolic_shape. - Sequence / Optional enthalten das verschachtelte Feld
element. - Map enthält
key_typeund das verschachtelte Feldvalue.
Speicherinformationen
session:memory_info_for_inputs()session:memory_info_for_outputs()
Der Rückgabewert kann sowohl der Reihe nach als auch nach Namen gelesen werden. Ein Element enthält typischerweise:
nameidmem_typeallocator_typedevice_typedevice_mem_typevendor_id
Metadaten und Lebenszyklus
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)
Hinweise:
end_profiling()gibt den Pfad der Profiling-Ausgabedatei zurück.set_ep_dynamic_options()wandelt alle Schlüssel/Werte der übergebenen Tabelle in Zeichenketten um und übergibt sie an ORT.register_custom_op_library()erstellt auf Grundlage der aktuellen Session-Optionen eine interne Session neu.path_or_handlekann ein Pfad oder ein vonload_custom_op_library()zurückgegebenes Handle sein.
Inferenz ausführen
session:run(inputs[, output_names[, run_options]])
outputs, err = session:run({
input_ids = input_tensor,
attention_mask = mask_tensor,
}, {
"logits",
}, run_options)
session:run_into(inputs, outputs[, run_options])
outputs, err = session:run_into({
x = input_tensor,
}, {
y = output_tensor,
}, run_options)
session:run_with_iobinding(binding[, run_options])
outputs, err = session:run_with_iobinding(binding, run_options)
Eingaberegeln:
inputskann ein geordnetes Array oder ein nach Eingabenamen organisiertes Dictionary sein.- Ein geordnetes Array wird der Eingabereihenfolge des Modells zugeordnet und kann anschließend auch überschreibbare Initializer abdecken.
- In der Dictionary-Form müssen die Schlüssel mit Eingabenamen oder Namen überschreibbarer Initializer übereinstimmen.
- Optionale Eingaben können weggelassen oder als
onnxruntime.optional(nil, type_info)übergeben werden.
Ausgaberegeln:
- Der Rückgabewert ist eine Tabelle.
- Eine Ausgabe kann sowohl über einen numerischen Index als auch über ihren Namen abgerufen werden.
- Wenn
run_into()einen vorhandenen Tensor für eine Ausgabe wiederverwendet, verweist der entsprechende Tabelleneintrag auf genau dieses Objekt.
Run Options
onnxruntime.run_options([opts])
local run_options = assert(onnxruntime.run_options({
tag = "session-run",
log_severity_level = 2,
log_verbosity_level = 1,
}))
Unterstützte Felder:
taglog_severity_levellog_verbosity_level
Objektmethoden:
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, err = session:create_io_binding()
binding:bind_input(name, value)
Bindet einen Eingabewert. Ein leeres Optional wird hier nicht akzeptiert.
binding:bind_output(name[, spec_or_tensor])
Drei Formen werden unterstützt:
binding:bind_output("y")Bindet an CPU-Speicher; später überget_outputs()abrufen.binding:bind_output("y", existing_tensor)Schreibt direkt in einen vorhandenen Tensor.binding:bind_output("y", {type = "float32", shape = {1, 2}})Erstellt über die Schnittstelle einen Ausgabetensor und gibt ihn zurück.
Ebenfalls unterstützt:
binding:bind_output("y", {mode = "device"})
Weitere Methoden
binding:clear_inputs()binding:clear_outputs()binding:synchronize_inputs()binding:synchronize_outputs()binding:get_outputs()
Beispiel
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])