onnxruntime 0.6.0 → 0.6.1

Sign up to get free protection for your applications and to get access to all the features.
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