ONNX Runtime 세션 모듈
이 모듈은 20260402 이후 버전에서 사용할 수 있습니다.
세션 객체는 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])
세션 객체, 오류 정보 = onnxruntime.session(모델 경로, 옵션)
파일 경로에서 ONNX 모델을 불러옵니다.
onnxruntime.session_from_bytes(model_bytes[, opts])
세션 객체, 오류 정보 = onnxruntime.session_from_bytes(모델 바이트열, 옵션)
메모리 바이트로 세션을 생성합니다.
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로 자동 fallback할 수 있습니다. 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: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()은 profiling 출력 파일 경로를 반환합니다.set_ep_dynamic_options()는 전달된 table의 key/value를 모두 문자열로 변환한 뒤 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])