onnxruntime 0.6.0 → 0.6.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4b0bef4682d8d44fb3cfd3fa619c1e7e620943014a22f259e14bfa1692dbe2ef
4
- data.tar.gz: bfe59759c177613806ab0ddd97c4d8a68a7e3915299d81aab3e9d369ce672918
3
+ metadata.gz: cdaa22ac1c012d33382f55edd3239dfa234d46b8f62f78cfce1c1f6907361214
4
+ data.tar.gz: 966f47e7b851c67fb2a5ca32ee2145dbd113753356b1e439ab86e79bda5bcbe5
5
5
  SHA512:
6
- metadata.gz: f0dfc6c0a91621b5637e56061b40ba26648a7e538d84cb2c135a06c1832c9f71aba2e7fb7ab849750756540d02632726b3f45732a8c50649ca4ace03befbe086
7
- data.tar.gz: 59a01f8d955f9d31f35864a9217fcf79eb35876229e749c5c50b4572903d9dc3e312a4a7a55612e9c36e3095a797da58637442ac0bb191adcb743b62fefb0905
6
+ metadata.gz: c5ae2163e7266b2812ffb370278bb8d50eba9ec629011b7419a816e87acb1109b35918e81ba1b601f492356b210731533d2af0ddc08b0fe3edda639e2f0da36a
7
+ data.tar.gz: 7637d96ebded51e0cc1c782344832f129c0691e0255e97d207a026ca50e360e1358b0c5d5cffc52f6e3e9a06c2f67dfa61fdbcfe8cd92d46cbaf475c8cbbfca0
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## 0.6.1 (2021-05-17)
2
+
3
+ - Fixed memory errors
4
+
1
5
  ## 0.6.0 (2021-03-14)
2
6
 
3
7
  - Updated ONNX Runtime to 1.7.0
@@ -81,13 +81,16 @@ module OnnxRuntime
81
81
 
82
82
  # TODO support logid
83
83
  def run(output_names, input_feed, log_severity_level: nil, log_verbosity_level: nil, logid: nil, terminate: nil, output_type: :ruby)
84
- input_tensor = create_input_tensor(input_feed)
84
+ # pointer references
85
+ refs = []
86
+
87
+ input_tensor = create_input_tensor(input_feed, refs)
85
88
 
86
89
  output_names ||= @outputs.map { |v| v[:name] }
87
90
 
88
91
  output_tensor = ::FFI::MemoryPointer.new(:pointer, outputs.size)
89
- input_node_names = create_node_names(input_feed.keys.map(&:to_s))
90
- output_node_names = create_node_names(output_names.map(&:to_s))
92
+ input_node_names = create_node_names(input_feed.keys.map(&:to_s), refs)
93
+ output_node_names = create_node_names(output_names.map(&:to_s), refs)
91
94
 
92
95
  # run options
93
96
  run_options = ::FFI::MemoryPointer.new(:pointer)
@@ -174,7 +177,7 @@ module OnnxRuntime
174
177
 
175
178
  private
176
179
 
177
- def create_input_tensor(input_feed)
180
+ def create_input_tensor(input_feed, refs)
178
181
  allocator_info = ::FFI::MemoryPointer.new(:pointer)
179
182
  check_status api[:CreateCpuMemoryInfo].call(1, 0, allocator_info)
180
183
  input_tensor = ::FFI::MemoryPointer.new(:pointer, input_feed.size)
@@ -201,19 +204,21 @@ module OnnxRuntime
201
204
  input_node_dims.write_array_of_int64(shape)
202
205
 
203
206
  if inp[:type] == "tensor(string)"
204
- if numo_array?(input)
205
- input_tensor_size = input.size
206
- input_tensor_values = ::FFI::MemoryPointer.new(:pointer, input.size)
207
- input_tensor_values.write_array_of_pointer(input_tensor_size.times.map { |i| ::FFI::MemoryPointer.from_string(input[i]) })
208
- else
209
- flat_input = input.flatten.to_a
210
- input_tensor_size = flat_input.size
211
- input_tensor_values = ::FFI::MemoryPointer.new(:pointer, input_tensor_size)
212
- input_tensor_values.write_array_of_pointer(flat_input.map { |v| ::FFI::MemoryPointer.from_string(v) })
213
- end
207
+ str_ptrs =
208
+ if numo_array?(input)
209
+ input.size.times.map { |i| ::FFI::MemoryPointer.from_string(input[i]) }
210
+ else
211
+ input.flatten.map { |v| ::FFI::MemoryPointer.from_string(v) }
212
+ end
213
+
214
+ input_tensor_values = ::FFI::MemoryPointer.new(:pointer, str_ptrs.size)
215
+ input_tensor_values.write_array_of_pointer(str_ptrs)
216
+
214
217
  type_enum = FFI::TensorElementDataType[:string]
215
218
  check_status api[:CreateTensorAsOrtValue].call(@allocator.read_pointer, input_node_dims, shape.size, type_enum, input_tensor[idx])
216
- check_status api[:FillStringTensor].call(input_tensor[idx].read_pointer, input_tensor_values, input_tensor_size)
219
+ check_status api[:FillStringTensor].call(input_tensor[idx].read_pointer, input_tensor_values, str_ptrs.size)
220
+
221
+ refs << str_ptrs
217
222
  else
218
223
  tensor_type = tensor_types[inp[:type]]
219
224
 
@@ -236,15 +241,23 @@ module OnnxRuntime
236
241
  end
237
242
 
238
243
  check_status api[:CreateTensorWithDataAsOrtValue].call(allocator_info.read_pointer, input_tensor_values, input_tensor_values.size, input_node_dims, shape.size, type_enum, input_tensor[idx])
244
+
245
+ refs << input_node_dims
246
+ refs << input_tensor_values
239
247
  end
240
248
  end
241
249
 
250
+ refs << allocator_info
251
+
242
252
  input_tensor
243
253
  end
244
254
 
245
- def create_node_names(names)
255
+ def create_node_names(names, refs)
256
+ str_ptrs = names.map { |v| ::FFI::MemoryPointer.from_string(v) }
257
+ refs << str_ptrs
258
+
246
259
  ptr = ::FFI::MemoryPointer.new(:pointer, names.size)
247
- ptr.write_array_of_pointer(names.map { |v| ::FFI::MemoryPointer.from_string(v) })
260
+ ptr.write_array_of_pointer(str_ptrs)
248
261
  ptr
249
262
  end
250
263
 
@@ -1,3 +1,3 @@
1
1
  module OnnxRuntime
2
- VERSION = "0.6.0"
2
+ VERSION = "0.6.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: onnxruntime
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Kane
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-03-15 00:00:00.000000000 Z
11
+ date: 2021-05-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffi