onnxruntime 0.7.0-x64-mingw → 0.7.1-x64-mingw
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +9 -0
- data/README.md +5 -1
- data/lib/onnxruntime/ffi.rb +90 -14
- data/lib/onnxruntime/inference_session.rb +69 -8
- data/lib/onnxruntime/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 57bd291ce97b10c9723c1f4cf670ad87a6452d16e2c5eece72cf7d79c8f444b2
|
4
|
+
data.tar.gz: 12c9c924de9158f46cf4082d366d66bd27083edba778e7ce5893fb0d951dea1f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ce4f6ca3e88158c44a1178bde823386ef0e57a4ddd621687324203a92af22cbff1fd286d375302c1b7344fa59372fb0cee7adf4fe3c7b3f19f34b50641b5bc63
|
7
|
+
data.tar.gz: f57bab36ba4ed4f99900b52be0c78c6197ec297d28e9a42a08042f3b92f740b824923dc54f3c79f354df66b2f817ec74005bce3abda2487f51d86d75a1ffc0f8
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
## 0.7.1 (2022-03-28)
|
2
|
+
|
3
|
+
- Added `graph_description` to metadata
|
4
|
+
- Added `free_dimension_overrides_by_denotation` and `free_dimension_overrides_by_name` options
|
5
|
+
- Added `profile_file_prefix` option
|
6
|
+
- Added `session_config_entries` option
|
7
|
+
- Fixed memory leaks
|
8
|
+
- Fixed `enable_cpu_mem_arena: false`
|
9
|
+
|
1
10
|
## 0.7.0 (2022-03-27)
|
2
11
|
|
3
12
|
- Added platform-specific gems
|
data/README.md
CHANGED
@@ -64,13 +64,17 @@ OnnxRuntime::Model.new(path_or_bytes, {
|
|
64
64
|
enable_mem_pattern: true,
|
65
65
|
enable_profiling: false,
|
66
66
|
execution_mode: :sequential, # :sequential or :parallel
|
67
|
+
free_dimension_overrides_by_denotation: nil,
|
68
|
+
free_dimension_overrides_by_name: nil,
|
67
69
|
graph_optimization_level: nil, # :none, :basic, :extended, or :all
|
68
70
|
inter_op_num_threads: nil,
|
69
71
|
intra_op_num_threads: nil,
|
70
72
|
log_severity_level: 2,
|
71
73
|
log_verbosity_level: 0,
|
72
74
|
logid: nil,
|
73
|
-
optimized_model_filepath: nil
|
75
|
+
optimized_model_filepath: nil,
|
76
|
+
profile_file_prefix: "onnxruntime_profile_",
|
77
|
+
session_config_entries: nil
|
74
78
|
})
|
75
79
|
```
|
76
80
|
|
data/lib/onnxruntime/ffi.rb
CHANGED
@@ -2,19 +2,13 @@ module OnnxRuntime
|
|
2
2
|
module FFI
|
3
3
|
extend ::FFI::Library
|
4
4
|
|
5
|
-
|
6
|
-
ffi_lib OnnxRuntime.ffi_lib
|
7
|
-
rescue LoadError => e
|
8
|
-
if e.message.include?("Library not loaded: /usr/local/opt/libomp/lib/libomp.dylib") && e.message.include?("Reason: image not found")
|
9
|
-
raise LoadError, "OpenMP not found. Run `brew install libomp`"
|
10
|
-
else
|
11
|
-
raise e
|
12
|
-
end
|
13
|
-
end
|
5
|
+
ffi_lib OnnxRuntime.ffi_lib
|
14
6
|
|
15
7
|
# https://github.com/microsoft/onnxruntime/blob/master/include/onnxruntime/core/session/onnxruntime_c_api.h
|
16
8
|
# keep same order
|
17
9
|
|
10
|
+
ORT_API_VERSION = 11
|
11
|
+
|
18
12
|
# enums
|
19
13
|
TensorElementDataType = enum(:undefined, :float, :uint8, :int8, :uint16, :int16, :int32, :int64, :string, :bool, :float16, :double, :uint32, :uint64, :complex64, :complex128, :bfloat16)
|
20
14
|
OnnxType = enum(:unknown, :tensor, :sequence, :map, :opaque, :sparsetensor)
|
@@ -84,7 +78,7 @@ module OnnxRuntime
|
|
84
78
|
:GetTensorElementType, callback(%i[pointer pointer], :pointer),
|
85
79
|
:GetDimensionsCount, callback(%i[pointer pointer], :pointer),
|
86
80
|
:GetDimensions, callback(%i[pointer pointer size_t], :pointer),
|
87
|
-
:GetSymbolicDimensions, callback(%i[], :pointer),
|
81
|
+
:GetSymbolicDimensions, callback(%i[pointer pointer size_t], :pointer),
|
88
82
|
:GetTensorShapeElementCount, callback(%i[pointer pointer], :pointer),
|
89
83
|
:GetTensorTypeAndShape, callback(%i[pointer pointer], :pointer),
|
90
84
|
:GetTypeInfo, callback(%i[pointer pointer], :pointer),
|
@@ -97,10 +91,10 @@ module OnnxRuntime
|
|
97
91
|
:MemoryInfoGetMemType, callback(%i[], :pointer),
|
98
92
|
:MemoryInfoGetType, callback(%i[], :pointer),
|
99
93
|
:AllocatorAlloc, callback(%i[], :pointer),
|
100
|
-
:AllocatorFree, callback(%i[], :pointer),
|
94
|
+
:AllocatorFree, callback(%i[pointer pointer], :pointer),
|
101
95
|
:AllocatorGetInfo, callback(%i[], :pointer),
|
102
96
|
:GetAllocatorWithDefaultOptions, callback(%i[pointer], :pointer),
|
103
|
-
:AddFreeDimensionOverride, callback(%i[], :pointer),
|
97
|
+
:AddFreeDimensionOverride, callback(%i[pointer string int64], :pointer),
|
104
98
|
:GetValue, callback(%i[pointer int pointer pointer], :pointer),
|
105
99
|
:GetValueCount, callback(%i[pointer pointer], :pointer),
|
106
100
|
:CreateValue, callback(%i[], :pointer),
|
@@ -145,9 +139,91 @@ module OnnxRuntime
|
|
145
139
|
:CreateThreadingOptions, callback(%i[], :pointer),
|
146
140
|
:ReleaseThreadingOptions, callback(%i[], :pointer),
|
147
141
|
:ModelMetadataGetCustomMetadataMapKeys, callback(%i[pointer pointer pointer pointer], :pointer),
|
148
|
-
:AddFreeDimensionOverrideByName, callback(%i[], :pointer),
|
142
|
+
:AddFreeDimensionOverrideByName, callback(%i[pointer string int64], :pointer),
|
149
143
|
:GetAvailableProviders, callback(%i[pointer pointer], :pointer),
|
150
|
-
:ReleaseAvailableProviders, callback(%i[pointer int], :pointer)
|
144
|
+
:ReleaseAvailableProviders, callback(%i[pointer int], :pointer),
|
145
|
+
:GetStringTensorElementLength, callback(%i[], :pointer),
|
146
|
+
:GetStringTensorElement, callback(%i[], :pointer),
|
147
|
+
:FillStringTensorElement, callback(%i[], :pointer),
|
148
|
+
:AddSessionConfigEntry, callback(%i[pointer string string], :pointer),
|
149
|
+
:CreateAllocator, callback(%i[], :pointer),
|
150
|
+
:ReleaseAllocator, callback(%i[], :pointer),
|
151
|
+
:RunWithBinding, callback(%i[], :pointer),
|
152
|
+
:CreateIoBinding, callback(%i[], :pointer),
|
153
|
+
:ReleaseIoBinding, callback(%i[], :pointer),
|
154
|
+
:BindInput, callback(%i[], :pointer),
|
155
|
+
:BindOutput, callback(%i[], :pointer),
|
156
|
+
:BindOutputToDevice, callback(%i[], :pointer),
|
157
|
+
:GetBoundOutputNames, callback(%i[], :pointer),
|
158
|
+
:GetBoundOutputValues, callback(%i[], :pointer),
|
159
|
+
:ClearBoundInputs, callback(%i[], :pointer),
|
160
|
+
:ClearBoundOutputs, callback(%i[], :pointer),
|
161
|
+
:TensorAt, callback(%i[], :pointer),
|
162
|
+
:CreateAndRegisterAllocator, callback(%i[], :pointer),
|
163
|
+
:SetLanguageProjection, callback(%i[], :pointer),
|
164
|
+
:SessionGetProfilingStartTimeNs, callback(%i[], :pointer),
|
165
|
+
:SetGlobalIntraOpNumThreads, callback(%i[], :pointer),
|
166
|
+
:SetGlobalInterOpNumThreads, callback(%i[], :pointer),
|
167
|
+
:SetGlobalSpinControl, callback(%i[], :pointer),
|
168
|
+
:AddInitializer, callback(%i[], :pointer),
|
169
|
+
:CreateEnvWithCustomLoggerAndGlobalThreadPools, callback(%i[], :pointer),
|
170
|
+
:SessionOptionsAppendExecutionProvider_CUDA, callback(%i[], :pointer),
|
171
|
+
:SessionOptionsAppendExecutionProvider_ROCM, callback(%i[], :pointer),
|
172
|
+
:SessionOptionsAppendExecutionProvider_OpenVINO, callback(%i[], :pointer),
|
173
|
+
:SetGlobalDenormalAsZero, callback(%i[], :pointer),
|
174
|
+
:CreateArenaCfg, callback(%i[], :pointer),
|
175
|
+
:ReleaseArenaCfg, callback(%i[], :pointer),
|
176
|
+
:ModelMetadataGetGraphDescription, callback(%i[pointer pointer pointer], :pointer),
|
177
|
+
:SessionOptionsAppendExecutionProvider_TensorRT, callback(%i[], :pointer),
|
178
|
+
:SetCurrentGpuDeviceId, callback(%i[], :pointer),
|
179
|
+
:GetCurrentGpuDeviceId, callback(%i[], :pointer),
|
180
|
+
:KernelInfoGetAttributeArray_float, callback(%i[], :pointer),
|
181
|
+
:KernelInfoGetAttributeArray_int64, callback(%i[], :pointer),
|
182
|
+
:CreateArenaCfgV2, callback(%i[], :pointer),
|
183
|
+
:AddRunConfigEntry, callback(%i[], :pointer),
|
184
|
+
:CreatePrepackedWeightsContainer, callback(%i[], :pointer),
|
185
|
+
:ReleasePrepackedWeightsContainer, callback(%i[], :pointer),
|
186
|
+
:CreateSessionWithPrepackedWeightsContainer, callback(%i[], :pointer),
|
187
|
+
:CreateSessionFromArrayWithPrepackedWeightsContainer, callback(%i[], :pointer),
|
188
|
+
:SessionOptionsAppendExecutionProvider_TensorRT_V2, callback(%i[], :pointer),
|
189
|
+
:CreateTensorRTProviderOptions, callback(%i[], :pointer),
|
190
|
+
:UpdateTensorRTProviderOptions, callback(%i[], :pointer),
|
191
|
+
:GetTensorRTProviderOptionsAsString, callback(%i[], :pointer),
|
192
|
+
:ReleaseTensorRTProviderOptions, callback(%i[], :pointer),
|
193
|
+
:EnableOrtCustomOps, callback(%i[], :pointer),
|
194
|
+
:RegisterAllocator, callback(%i[], :pointer),
|
195
|
+
:UnregisterAllocator, callback(%i[], :pointer),
|
196
|
+
:IsSparseTensor, callback(%i[], :pointer),
|
197
|
+
:CreateSparseTensorAsOrtValue, callback(%i[], :pointer),
|
198
|
+
:FillSparseTensorCoo, callback(%i[], :pointer),
|
199
|
+
:FillSparseTensorCsr, callback(%i[], :pointer),
|
200
|
+
:FillSparseTensorBlockSparse, callback(%i[], :pointer),
|
201
|
+
:CreateSparseTensorWithValuesAsOrtValue, callback(%i[], :pointer),
|
202
|
+
:UseCsrIndices, callback(%i[], :pointer),
|
203
|
+
:UseBlockSparseIndices, callback(%i[], :pointer),
|
204
|
+
:GetSparseTensorFormat, callback(%i[], :pointer),
|
205
|
+
:GetSparseTensorValuesTypeAndShape, callback(%i[], :pointer),
|
206
|
+
:GetSparseTensorValues, callback(%i[], :pointer),
|
207
|
+
:GetSparseTensorIndicesTypeShape, callback(%i[], :pointer),
|
208
|
+
:GetSparseTensorIndices, callback(%i[], :pointer),
|
209
|
+
:HasValue, callback(%i[], :pointer),
|
210
|
+
:KernelContext_GetGPUComputeStream, callback(%i[], :pointer),
|
211
|
+
:GetTensorMemoryInfo, callback(%i[], :pointer),
|
212
|
+
:GetExecutionProviderApi, callback(%i[], :pointer),
|
213
|
+
:SessionOptionsSetCustomCreateThreadFn, callback(%i[], :pointer),
|
214
|
+
:SessionOptionsSetCustomThreadCreationOptions, callback(%i[], :pointer),
|
215
|
+
:SessionOptionsSetCustomJoinThreadFn, callback(%i[], :pointer),
|
216
|
+
:SetGlobalCustomCreateThreadFn, callback(%i[], :pointer),
|
217
|
+
:SetGlobalCustomThreadCreationOptions, callback(%i[], :pointer),
|
218
|
+
:SetGlobalCustomJoinThreadFn, callback(%i[], :pointer),
|
219
|
+
:SynchronizeBoundInputs, callback(%i[], :pointer),
|
220
|
+
:SynchronizeBoundOutputs, callback(%i[], :pointer),
|
221
|
+
:SessionOptionsAppendExecutionProvider_CUDA_V2, callback(%i[], :pointer),
|
222
|
+
:CreateCUDAProviderOptions, callback(%i[], :pointer),
|
223
|
+
:UpdateCUDAProviderOptions, callback(%i[], :pointer),
|
224
|
+
:GetCUDAProviderOptionsAsString, callback(%i[], :pointer),
|
225
|
+
:ReleaseCUDAProviderOptions, callback(%i[], :pointer),
|
226
|
+
:SessionOptionsAppendExecutionProvider_MIGraphX, callback(%i[], :pointer)
|
151
227
|
end
|
152
228
|
|
153
229
|
class ApiBase < ::FFI::Struct
|
@@ -2,19 +2,41 @@ module OnnxRuntime
|
|
2
2
|
class InferenceSession
|
3
3
|
attr_reader :inputs, :outputs
|
4
4
|
|
5
|
-
def initialize(path_or_bytes, enable_cpu_mem_arena: true, enable_mem_pattern: true, enable_profiling: false, execution_mode: nil, graph_optimization_level: nil, inter_op_num_threads: nil, intra_op_num_threads: nil, log_severity_level: nil, log_verbosity_level: nil, logid: nil, optimized_model_filepath: nil)
|
5
|
+
def initialize(path_or_bytes, enable_cpu_mem_arena: true, enable_mem_pattern: true, enable_profiling: false, execution_mode: nil, free_dimension_overrides_by_denotation: nil, free_dimension_overrides_by_name: nil, graph_optimization_level: nil, inter_op_num_threads: nil, intra_op_num_threads: nil, log_severity_level: nil, log_verbosity_level: nil, logid: nil, optimized_model_filepath: nil, profile_file_prefix: nil, session_config_entries: nil)
|
6
6
|
# session options
|
7
7
|
session_options = ::FFI::MemoryPointer.new(:pointer)
|
8
8
|
check_status api[:CreateSessionOptions].call(session_options)
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
if enable_cpu_mem_arena
|
10
|
+
check_status api[:EnableCpuMemArena].call(session_options.read_pointer)
|
11
|
+
else
|
12
|
+
check_status api[:DisableCpuMemArena].call(session_options.read_pointer)
|
13
|
+
end
|
14
|
+
if enable_mem_pattern
|
15
|
+
check_status api[:EnableMemPattern].call(session_options.read_pointer)
|
16
|
+
else
|
17
|
+
check_status api[:DisableMemPattern].call(session_options.read_pointer)
|
18
|
+
end
|
19
|
+
if enable_profiling
|
20
|
+
check_status api[:EnableProfiling].call(session_options.read_pointer, ort_string(profile_file_prefix || "onnxruntime_profile_"))
|
21
|
+
else
|
22
|
+
check_status api[:DisableProfiling].call(session_options.read_pointer)
|
23
|
+
end
|
12
24
|
if execution_mode
|
13
25
|
execution_modes = {sequential: 0, parallel: 1}
|
14
26
|
mode = execution_modes[execution_mode]
|
15
27
|
raise ArgumentError, "Invalid execution mode" unless mode
|
16
28
|
check_status api[:SetSessionExecutionMode].call(session_options.read_pointer, mode)
|
17
29
|
end
|
30
|
+
if free_dimension_overrides_by_denotation
|
31
|
+
free_dimension_overrides_by_denotation.each do |k, v|
|
32
|
+
check_status api[:AddFreeDimensionOverride].call(session_options.read_pointer, k.to_s, v)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
if free_dimension_overrides_by_name
|
36
|
+
free_dimension_overrides_by_name.each do |k, v|
|
37
|
+
check_status api[:AddFreeDimensionOverrideByName].call(session_options.read_pointer, k.to_s, v)
|
38
|
+
end
|
39
|
+
end
|
18
40
|
if graph_optimization_level
|
19
41
|
optimization_levels = {none: 0, basic: 1, extended: 2, all: 99}
|
20
42
|
level = optimization_levels[graph_optimization_level]
|
@@ -27,6 +49,11 @@ module OnnxRuntime
|
|
27
49
|
check_status api[:SetSessionLogVerbosityLevel].call(session_options.read_pointer, log_verbosity_level) if log_verbosity_level
|
28
50
|
check_status api[:SetSessionLogId].call(session_options.read_pointer, logid) if logid
|
29
51
|
check_status api[:SetOptimizedModelFilePath].call(session_options.read_pointer, ort_string(optimized_model_filepath)) if optimized_model_filepath
|
52
|
+
if session_config_entries
|
53
|
+
session_config_entries.each do |k, v|
|
54
|
+
check_status api[:AddSessionConfigEntry].call(session_options.read_pointer, k.to_s, v.to_s)
|
55
|
+
end
|
56
|
+
end
|
30
57
|
|
31
58
|
# session
|
32
59
|
@session = ::FFI::MemoryPointer.new(:pointer)
|
@@ -47,6 +74,7 @@ module OnnxRuntime
|
|
47
74
|
ObjectSpace.define_finalizer(self, self.class.finalize(@session))
|
48
75
|
|
49
76
|
# input info
|
77
|
+
# don't free allocator
|
50
78
|
allocator = ::FFI::MemoryPointer.new(:pointer)
|
51
79
|
check_status api[:GetAllocatorWithDefaultOptions].call(allocator)
|
52
80
|
@allocator = allocator
|
@@ -60,9 +88,11 @@ module OnnxRuntime
|
|
60
88
|
num_input_nodes.read(:size_t).times do |i|
|
61
89
|
name_ptr = ::FFI::MemoryPointer.new(:string)
|
62
90
|
check_status api[:SessionGetInputName].call(read_pointer, i, @allocator.read_pointer, name_ptr)
|
91
|
+
# freed in node_info
|
63
92
|
typeinfo = ::FFI::MemoryPointer.new(:pointer)
|
64
93
|
check_status api[:SessionGetInputTypeInfo].call(read_pointer, i, typeinfo)
|
65
94
|
@inputs << {name: name_ptr.read_pointer.read_string}.merge(node_info(typeinfo))
|
95
|
+
allocator_free name_ptr
|
66
96
|
end
|
67
97
|
|
68
98
|
# output
|
@@ -71,12 +101,14 @@ module OnnxRuntime
|
|
71
101
|
num_output_nodes.read(:size_t).times do |i|
|
72
102
|
name_ptr = ::FFI::MemoryPointer.new(:string)
|
73
103
|
check_status api[:SessionGetOutputName].call(read_pointer, i, allocator.read_pointer, name_ptr)
|
104
|
+
# freed in node_info
|
74
105
|
typeinfo = ::FFI::MemoryPointer.new(:pointer)
|
75
106
|
check_status api[:SessionGetOutputTypeInfo].call(read_pointer, i, typeinfo)
|
76
107
|
@outputs << {name: name_ptr.read_pointer.read_string}.merge(node_info(typeinfo))
|
108
|
+
allocator_free name_ptr
|
77
109
|
end
|
78
110
|
ensure
|
79
|
-
|
111
|
+
release :SessionOptions, session_options
|
80
112
|
end
|
81
113
|
|
82
114
|
# TODO support logid
|
@@ -112,6 +144,7 @@ module OnnxRuntime
|
|
112
144
|
release :Value, input_tensor[i]
|
113
145
|
end
|
114
146
|
end
|
147
|
+
# output values released in create_from_onnx_value
|
115
148
|
end
|
116
149
|
|
117
150
|
def modelmeta
|
@@ -120,6 +153,7 @@ module OnnxRuntime
|
|
120
153
|
description = ::FFI::MemoryPointer.new(:string)
|
121
154
|
domain = ::FFI::MemoryPointer.new(:string)
|
122
155
|
graph_name = ::FFI::MemoryPointer.new(:string)
|
156
|
+
graph_description = ::FFI::MemoryPointer.new(:string)
|
123
157
|
producer_name = ::FFI::MemoryPointer.new(:string)
|
124
158
|
version = ::FFI::MemoryPointer.new(:int64_t)
|
125
159
|
|
@@ -129,15 +163,21 @@ module OnnxRuntime
|
|
129
163
|
custom_metadata_map = {}
|
130
164
|
check_status api[:ModelMetadataGetCustomMetadataMapKeys].call(metadata.read_pointer, @allocator.read_pointer, keys, num_keys)
|
131
165
|
num_keys.read(:int64_t).times do |i|
|
132
|
-
|
166
|
+
key_ptr = keys.read_pointer[i * ::FFI::Pointer.size]
|
167
|
+
key = key_ptr.read_pointer.read_string
|
133
168
|
value = ::FFI::MemoryPointer.new(:string)
|
134
169
|
check_status api[:ModelMetadataLookupCustomMetadataMap].call(metadata.read_pointer, @allocator.read_pointer, key, value)
|
135
170
|
custom_metadata_map[key] = value.read_pointer.read_string
|
171
|
+
|
172
|
+
allocator_free key_ptr
|
173
|
+
allocator_free value
|
136
174
|
end
|
175
|
+
allocator_free keys
|
137
176
|
|
138
177
|
check_status api[:ModelMetadataGetDescription].call(metadata.read_pointer, @allocator.read_pointer, description)
|
139
178
|
check_status api[:ModelMetadataGetDomain].call(metadata.read_pointer, @allocator.read_pointer, domain)
|
140
179
|
check_status api[:ModelMetadataGetGraphName].call(metadata.read_pointer, @allocator.read_pointer, graph_name)
|
180
|
+
check_status api[:ModelMetadataGetGraphDescription].call(metadata.read_pointer, @allocator.read_pointer, graph_description)
|
141
181
|
check_status api[:ModelMetadataGetProducerName].call(metadata.read_pointer, @allocator.read_pointer, producer_name)
|
142
182
|
check_status api[:ModelMetadataGetVersion].call(metadata.read_pointer, version)
|
143
183
|
|
@@ -146,11 +186,17 @@ module OnnxRuntime
|
|
146
186
|
description: description.read_pointer.read_string,
|
147
187
|
domain: domain.read_pointer.read_string,
|
148
188
|
graph_name: graph_name.read_pointer.read_string,
|
189
|
+
graph_description: graph_description.read_pointer.read_string,
|
149
190
|
producer_name: producer_name.read_pointer.read_string,
|
150
191
|
version: version.read(:int64_t)
|
151
192
|
}
|
152
193
|
ensure
|
153
194
|
release :ModelMetadata, metadata
|
195
|
+
allocator_free description
|
196
|
+
allocator_free domain
|
197
|
+
allocator_free graph_name
|
198
|
+
allocator_free graph_description
|
199
|
+
allocator_free producer_name
|
154
200
|
end
|
155
201
|
|
156
202
|
# return value has double underscore like Python
|
@@ -250,6 +296,8 @@ module OnnxRuntime
|
|
250
296
|
refs << allocator_info
|
251
297
|
|
252
298
|
input_tensor
|
299
|
+
ensure
|
300
|
+
release :MemoryInfo, allocator_info
|
253
301
|
end
|
254
302
|
|
255
303
|
def create_node_names(names, refs)
|
@@ -352,6 +400,8 @@ module OnnxRuntime
|
|
352
400
|
else
|
353
401
|
unsupported_type("ONNX", type)
|
354
402
|
end
|
403
|
+
ensure
|
404
|
+
api[:ReleaseValue].call(out_ptr) unless out_ptr.null?
|
355
405
|
end
|
356
406
|
|
357
407
|
def create_strings_from_onnx_value(out_ptr, output_tensor_size, result)
|
@@ -445,8 +495,15 @@ module OnnxRuntime
|
|
445
495
|
|
446
496
|
node_dims = ::FFI::MemoryPointer.new(:int64, num_dims)
|
447
497
|
check_status api[:GetDimensions].call(tensor_info.read_pointer, node_dims, num_dims)
|
498
|
+
dims = node_dims.read_array_of_int64(num_dims)
|
499
|
+
|
500
|
+
# TODO uncomment in 0.8.0
|
501
|
+
# symbolic_dims = ::FFI::MemoryPointer.new(:pointer, num_dims)
|
502
|
+
# check_status api[:GetSymbolicDimensions].call(tensor_info.read_pointer, symbolic_dims, num_dims)
|
503
|
+
# named_dims = num_dims.times.map { |i| symbolic_dims[i].read_pointer.read_string }
|
504
|
+
# dims = named_dims.zip(dims).map { |n, d| n.empty? ? d : n }
|
448
505
|
|
449
|
-
[type.read_int,
|
506
|
+
[type.read_int, dims]
|
450
507
|
end
|
451
508
|
|
452
509
|
def unsupported_type(name, type)
|
@@ -485,8 +542,12 @@ module OnnxRuntime
|
|
485
542
|
self.class.release(*args)
|
486
543
|
end
|
487
544
|
|
545
|
+
def allocator_free(ptr)
|
546
|
+
api[:AllocatorFree].call(@allocator.read_pointer, ptr.read_pointer)
|
547
|
+
end
|
548
|
+
|
488
549
|
def self.api
|
489
|
-
@api ||= FFI.OrtGetApiBase[:GetApi].call(
|
550
|
+
@api ||= FFI.OrtGetApiBase[:GetApi].call(FFI::ORT_API_VERSION)
|
490
551
|
end
|
491
552
|
|
492
553
|
def self.release(type, pointer)
|
data/lib/onnxruntime/version.rb
CHANGED