Documentation
¶
Index ¶
- Constants
- func DefaultLibraryPath() string
- func GetTensorData[T Number](v *Value) ([]T, error)
- type AllocatorHandle
- type AllocatorType
- type CUDAProviderOptionsV2Handle
- type Engine
- func (e *Engine) APIVersion() uint32
- func (e *Engine) Destroy()
- func (e *Engine) GetAvailableProviders() []string
- func (e *Engine) IsProviderAvailable(name string) bool
- func (e *Engine) NewSession(modelPath string, opts *SessionOptions) (*Session, error)
- func (e *Engine) NewSessionFromBytes(data []byte, opts *SessionOptions) (*Session, error)
- func (e *Engine) NewSessionOptions() (*SessionOptions, error)
- func (e *Engine) NewTensor(shape []int64, data any) (*Value, error)
- func (e *Engine) Version() Version
- func (e *Engine) VersionString() string
- type EnvHandle
- type ErrorCode
- type ExecutionMode
- type GraphOptimizationLevel
- type LoggingLevel
- type MemType
- type MemoryInfoHandle
- type Number
- type OnnxType
- type Option
- type RunOptionsHandle
- type Session
- type SessionHandle
- type SessionOptions
- func (o *SessionOptions) AddConfigEntry(key, value string) error
- func (o *SessionOptions) AddFreeDimensionOverride(denotation string, dim int64) error
- func (o *SessionOptions) AddFreeDimensionOverrideByName(name string, dim int64) error
- func (o *SessionOptions) Destroy()
- func (o *SessionOptions) EnableCUDA(options map[string]string) error
- func (o *SessionOptions) EnableTensorRT(options map[string]string) error
- func (o *SessionOptions) SetCpuMemArena(useArena bool) error
- func (o *SessionOptions) SetExecutionMode(mode ExecutionMode) error
- func (o *SessionOptions) SetGraphOptimizationLevel(level GraphOptimizationLevel) error
- func (o *SessionOptions) SetInterOpNumThreads(num int32) error
- func (o *SessionOptions) SetIntraOpNumThreads(num int32) error
- func (o *SessionOptions) SetLogSeverityLevel(level LoggingLevel) error
- type SessionOptionsHandle
- type StatusHandle
- type TensorElementDataType
- type TensorInfo
- type TensorRTProviderOptionsV2Handle
- type TensorTypeAndShapeInfoHandle
- type TypeInfoHandle
- type Value
- type ValueHandle
- type Version
Constants ¶
const ( ProviderCPU = "CPUExecutionProvider" ProviderCUDA = "CUDAExecutionProvider" ProviderTensorRT = "TensorrtExecutionProvider" )
常用 Execution Provider 名称常量。
const ( DeviceAllocator AllocatorType = 0 ArenaAllocator AllocatorType = 1 DefaultMemType MemType = 0 )
const DefaultEnvName = "younland/onnxruntime"
DefaultEnvName 是 CreateEnv 的默认 logid。
Variables ¶
This section is empty.
Functions ¶
func DefaultLibraryPath ¶
func DefaultLibraryPath() string
DefaultLibraryPath 默认动态库路径,例如:
Windows: ./lib/onnxruntime.dll Linux amd64: ./lib/onnxruntime_amd64.so Linux arm64: ./lib/onnxruntime_arm64.so Mac amd64: ./lib/onnxruntime_amd64.dylib Mac arm64: ./lib/onnxruntime_arm64.dylib
func GetTensorData ¶
GetTensorData 获取 Tensor 数据,T 需与实际元素类型匹配。
Types ¶
type AllocatorHandle ¶
type AllocatorHandle uintptr
句柄与枚举类型定义,对应 onnxruntime C API 的 opaque 指针与 enum。
type CUDAProviderOptionsV2Handle ¶
type CUDAProviderOptionsV2Handle uintptr
句柄与枚举类型定义,对应 onnxruntime C API 的 opaque 指针与 enum。
type Engine ¶
type Engine struct {
// contains filtered or unexported fields
}
Engine 推理引擎上下文。一套二进制可加载 1.23 ~ 1.31 任意版本的 onnxruntime 动态库。
func NewEngine ¶
NewEngine 加载 onnxruntime 动态库并完成初始化。
版本门禁:低于 1.23 拒绝启动;1.23 ~ 1.31 直接工作;高于 1.31 默认打印警告后放行, WithStrictVersion(true) 时拒绝。函数表按运行时实际版本协商,同一套代码可跨版本运行。
func (*Engine) APIVersion ¶
APIVersion 返回与运行时协商出的 OrtApi 表版本(23 ~ 27)。
func (*Engine) Destroy ¶
func (e *Engine) Destroy()
Destroy 释放资源。
调用顺序:session 由 env 创建并引用 env,必须先释放所有 Session(及由它们产出的 Value),再调用本方法。Destroy 之后包级 NewTensor 会返回 "engine not initialized"。
注意:与官方 C# / Python 绑定一致,这里不卸载动态库本身,避免 ORT 静态析构崩溃。
func (*Engine) GetAvailableProviders ¶
GetAvailableProviders 返回当前 onnxruntime 构建支持的 Execution Provider 名称列表。
具体返回范围取决于编译时启用的 EP:CPU 始终存在;CUDA / TensorRT 仅存在于 GPU 构建中。查询失败时返回 nil。
func (*Engine) IsProviderAvailable ¶
IsProviderAvailable 判断当前 onnxruntime 构建是否包含指定 Execution Provider。
if engine.IsProviderAvailable(ort.ProviderCUDA) {
opts.EnableCUDA(nil)
}
func (*Engine) NewSession ¶
func (e *Engine) NewSession(modelPath string, opts *SessionOptions) (*Session, error)
NewSession 从模型文件创建会话。
func (*Engine) NewSessionFromBytes ¶
func (e *Engine) NewSessionFromBytes(data []byte, opts *SessionOptions) (*Session, error)
NewSessionFromBytes 从内存中的模型字节创建会话,适用于 go:embed 等无文件场景。
func (*Engine) NewSessionOptions ¶
func (e *Engine) NewSessionOptions() (*SessionOptions, error)
NewSessionOptions 创建会话配置。
func (*Engine) VersionString ¶
VersionString 返回加载的运行时版本字符串,例如 "1.23.2"。
type ErrorCode ¶
type ErrorCode int32
句柄与枚举类型定义,对应 onnxruntime C API 的 opaque 指针与 enum。
const ( ErrOK ErrorCode = 0 ErrFail ErrorCode = 1 ErrInvalidArgument ErrorCode = 2 ErrNoSuchFile ErrorCode = 3 ErrNoModelLoaded ErrorCode = 4 ErrEngineError ErrorCode = 5 ErrRuntimeException ErrorCode = 6 ErrInvalidProtobuf ErrorCode = 7 ErrModelLoaded ErrorCode = 8 ErrNotImplemented ErrorCode = 9 ErrInvalidFileFormat ErrorCode = 10 ErrFileExists ErrorCode = 11 ErrPermissionDenied ErrorCode = 12 ErrExternalDataNotAccessible ErrorCode = 15 )
ErrorCode OrtStatus 错误码。
type ExecutionMode ¶
type ExecutionMode int32
ExecutionMode 会话执行模式(SessionOptions.SetExecutionMode)。
const ( ExecutionModeSequential ExecutionMode = 0 ExecutionModeParallel ExecutionMode = 1 )
type GraphOptimizationLevel ¶
type GraphOptimizationLevel int32
GraphOptimizationLevel 图优化级别(SessionOptions.SetGraphOptimizationLevel)。
const ( GraphOptimizationLevelNone GraphOptimizationLevel = 0 GraphOptimizationLevelBasic GraphOptimizationLevel = 1 GraphOptimizationLevelExtended GraphOptimizationLevel = 2 GraphOptimizationLevelAll GraphOptimizationLevel = 99 GraphOptimizationLevelEnableAll GraphOptimizationLevel = 99 )
type LoggingLevel ¶
type LoggingLevel int32
句柄与枚举类型定义,对应 onnxruntime C API 的 opaque 指针与 enum。
const ( LogVerbose LoggingLevel = 0 LogInfo LoggingLevel = 1 LogWarning LoggingLevel = 2 LogError LoggingLevel = 3 LogFatal LoggingLevel = 4 )
LoggingLevel 日志级别。
type MemoryInfoHandle ¶
type MemoryInfoHandle uintptr
句柄与枚举类型定义,对应 onnxruntime C API 的 opaque 指针与 enum。
type Number ¶
type Number interface {
~int8 | ~int16 | ~int32 | ~int64 |
~uint8 | ~uint16 | ~uint32 | ~uint64 |
~float32 | ~float64
}
Number 是 GetTensorData 支持的数值类型集合。
type Option ¶
type Option func(*engineConfig)
Option 引擎配置选项。
func WithEnvName ¶
WithEnvName 指定 CreateEnv 的 logid,默认 DefaultEnvName。
func WithLibraryPath ¶
WithLibraryPath 指定 onnxruntime 动态库路径,默认 DefaultLibraryPath()。
func WithStrictVersion ¶
WithStrictVersion 开启严格版本模式:加载高于已验证上限(1.31)的 onnxruntime 时 拒绝启动而不是仅警告。默认关闭。
type RunOptionsHandle ¶
type RunOptionsHandle uintptr
句柄与枚举类型定义,对应 onnxruntime C API 的 opaque 指针与 enum。
type Session ¶
type Session struct {
Inputs []TensorInfo
Outputs []TensorInfo
// contains filtered or unexported fields
}
Session 推理会话。
type SessionOptions ¶
type SessionOptions struct {
// contains filtered or unexported fields
}
SessionOptions 会话配置。
func (*SessionOptions) AddConfigEntry ¶
func (o *SessionOptions) AddConfigEntry(key, value string) error
AddConfigEntry 添加会话配置项,等价于 C API 的 OrtSessionOptionsAddSessionConfigEntry。
可设置任意 session.* 键值,例如消除空闲时的自旋占用:
opts.AddConfigEntry("session.intra_op.allow_spinning", "0")
常用键见 onnxruntime 文档(inter_op / intra_op / cpu.* 等命名空间)。 需要在创建 Session 之前调用。
func (*SessionOptions) AddFreeDimensionOverride ¶
func (o *SessionOptions) AddFreeDimensionOverride(denotation string, dim int64) error
AddFreeDimensionOverride 按维度符号(denotation)固化动态维度。
func (*SessionOptions) AddFreeDimensionOverrideByName ¶
func (o *SessionOptions) AddFreeDimensionOverrideByName(name string, dim int64) error
AddFreeDimensionOverrideByName 按维度名固化模型的动态维度。
动态模型(如 YOLO)的输入维度常以 -1 出现,在创建 Session 前按维度名覆盖即可消除动态维:
opts, _ := engine.NewSessionOptions()
opts.AddFreeDimensionOverrideByName("batch", 1)
session, _ := engine.NewSession("yolo11n.onnx", opts)
func (*SessionOptions) EnableCUDA ¶
func (o *SessionOptions) EnableCUDA(options map[string]string) error
EnableCUDA 启用 CUDA,options 为 CUDA Provider 的键值配置,可为 nil。
启用前可用 IsProviderAvailable(ProviderCUDA) 判断当前库是否包含 CUDA EP; 依赖环境(CUDA 运行库、驱动)不满足时,错误信息原样透出。
常用键:
device_id = "0" 指定显卡,默认 0 cudnn_conv_algo_search = "HEURISTIC" 卷积算法搜索,默认 EXHAUSTIVE cudnn_conv_use_max_workspace = "1" 卷积使用最大 workspace,默认 1 enable_cuda_graph = "1" 输入 shape 固定时启用 CUDA Graph,默认 0 gpu_mem_limit = "4294967296" 显存上限(字节),默认不限制 arena_extend_strategy = "kSameAsRequested" 显存池扩展策略,默认 kNextPowerOfTwo
func (*SessionOptions) EnableTensorRT ¶
func (o *SessionOptions) EnableTensorRT(options map[string]string) error
EnableTensorRT 启用 TensorRT,options 为 TensorRT Provider 的键值配置,可为 nil。
与 CUDA 一样用 device_id 指定显卡,从 0 开始计数,默认 0:
opts.EnableTensorRT(map[string]string{"device_id": "1"})
常用键:
trt_fp16_enable = "1" 启用 FP16,CV 推理加速明显 trt_int8_enable = "1" 启用 INT8 trt_engine_cache_enable = "1" 缓存引擎,避免每次构建耗时 trt_engine_cache_path = "./trt" 引擎缓存目录
Execution Provider 按挂载顺序优先生效,需同时使用 CUDA 兜底时先调用本方法, 且两者的 device_id 应指向同一张卡:
opts.EnableTensorRT(map[string]string{"device_id": "1", "trt_fp16_enable": "1"})
opts.EnableCUDA(map[string]string{"device_id": "1"})
func (*SessionOptions) SetCpuMemArena ¶
func (o *SessionOptions) SetCpuMemArena(useArena bool) error
SetCpuMemArena 设置 CPU 内存池策略:
false: 禁用内存池,推理速度稍慢,但 Destroy 后立即归还内存给 OS true: 启用内存池,推理速度最快,但 Destroy 后内存会被缓存以供复用(默认)
func (*SessionOptions) SetExecutionMode ¶
func (o *SessionOptions) SetExecutionMode(mode ExecutionMode) error
SetExecutionMode 设置执行模式(顺序 / 并行)。
func (*SessionOptions) SetGraphOptimizationLevel ¶
func (o *SessionOptions) SetGraphOptimizationLevel(level GraphOptimizationLevel) error
SetGraphOptimizationLevel 设置图优化级别。
func (*SessionOptions) SetInterOpNumThreads ¶
func (o *SessionOptions) SetInterOpNumThreads(num int32) error
SetInterOpNumThreads 设置算子间并行线程数。
func (*SessionOptions) SetIntraOpNumThreads ¶
func (o *SessionOptions) SetIntraOpNumThreads(num int32) error
SetIntraOpNumThreads 设置算子内并行线程数。
func (*SessionOptions) SetLogSeverityLevel ¶
func (o *SessionOptions) SetLogSeverityLevel(level LoggingLevel) error
SetLogSeverityLevel 设置会话日志级别。
type SessionOptionsHandle ¶
type SessionOptionsHandle uintptr
句柄与枚举类型定义,对应 onnxruntime C API 的 opaque 指针与 enum。
type TensorElementDataType ¶
type TensorElementDataType int32
句柄与枚举类型定义,对应 onnxruntime C API 的 opaque 指针与 enum。
const ( TensorElementDataTypeUndefined TensorElementDataType = 0 TensorElementDataTypeFloat TensorElementDataType = 1 TensorElementDataTypeUint8 TensorElementDataType = 2 TensorElementDataTypeInt8 TensorElementDataType = 3 TensorElementDataTypeUint16 TensorElementDataType = 4 TensorElementDataTypeInt16 TensorElementDataType = 5 TensorElementDataTypeInt32 TensorElementDataType = 6 TensorElementDataTypeInt64 TensorElementDataType = 7 TensorElementDataTypeString TensorElementDataType = 8 TensorElementDataTypeBool TensorElementDataType = 9 TensorElementDataTypeFloat16 TensorElementDataType = 10 TensorElementDataTypeDouble TensorElementDataType = 11 TensorElementDataTypeUint32 TensorElementDataType = 12 TensorElementDataTypeUint64 TensorElementDataType = 13 TensorElementDataTypeComplex64 TensorElementDataType = 14 TensorElementDataTypeComplex128 TensorElementDataType = 15 TensorElementDataTypeBFloat16 TensorElementDataType = 16 TensorElementDataTypeFloat8E4M3FN TensorElementDataType = 17 TensorElementDataTypeFloat8E4M3FNUZ TensorElementDataType = 18 TensorElementDataTypeFloat8E5M2 TensorElementDataType = 19 TensorElementDataTypeFloat8E5M2FNUZ TensorElementDataType = 20 TensorElementDataTypeUint4 TensorElementDataType = 21 TensorElementDataTypeInt4 TensorElementDataType = 22 TensorElementDataTypeFloat4E2M1 TensorElementDataType = 23 )
TensorElementDataType ONNX Tensor 元素类型。
type TensorInfo ¶
type TensorInfo struct {
Name string
DataType TensorElementDataType
Shape []int64
}
TensorInfo 描述一个输入 / 输出张量的元信息。
func (TensorInfo) ElementCount ¶
func (t TensorInfo) ElementCount() (int64, bool)
ElementCount 返回 Shape 各维度的乘积。含动态维度(-1)或溢出时第二个返回值为 false。
type TensorRTProviderOptionsV2Handle ¶
type TensorRTProviderOptionsV2Handle uintptr
句柄与枚举类型定义,对应 onnxruntime C API 的 opaque 指针与 enum。
type TensorTypeAndShapeInfoHandle ¶
type TensorTypeAndShapeInfoHandle uintptr
句柄与枚举类型定义,对应 onnxruntime C API 的 opaque 指针与 enum。
type Value ¶
type Value struct {
// contains filtered or unexported fields
}
Value 是 ONNX Runtime 的 OrtValue 包装,当前仅支持 Tensor。
func NewTensor ¶
NewTensor 初始化 Tensor(使用 NewEngine 设置的默认引擎)。
Params: ¶
shape: 形状
data: 数据,支持 []float32 / []float64 / []int64 / []int32 / []int16 / []int8 /
[]uint64 / []uint32 / []uint16 / []uint8 / []bool
onnxruntime 不会拷贝 data,只持有其指针,数据有效性由返回的 Value 托管。 调用 Value.Destroy() 后,由 GetTensorData 取到的切片随之失效。
func (*Value) GetElementCount ¶
GetElementCount 获取 Tensor 中的元素总数。
