onnxruntime 0.7.3 → 0.7.5

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: 319aa838b46ffb8d022e015d2f6d1162f7d553cc2bec76d7c34f78e1738a1584
4
- data.tar.gz: 576b30458a43140c30382c5ae7a05075664c31d4fb30a5918d463cfff1c2bb2c
3
+ metadata.gz: b9de7cf3676f398f47f5b8c36d7e74af3d61dc2b1d0f45f37b14f509ec8ceac3
4
+ data.tar.gz: 2d464d13f784d423a57f8a27222462a9dc90501e24243621d2615dc267e2cab5
5
5
  SHA512:
6
- metadata.gz: 176f2290a9ccade813725237fb326780dd8640823c463065da7b9c259ec5754b712a37a5028527e987de35ac40b261aee2a34fab35384eb27e62e30407b88f52
7
- data.tar.gz: 0a2cb5ccb5aa10389d92205e01e6ba222099bc38aca3cc457058fdf06c8f5b9134111cae57eba1f6ba7d9583c19e252b78cb3aa5da9766335b370981ae1a077b
6
+ metadata.gz: a384bcd9d6eb8c95583a4f97d48ba5ae63a22bc1b0fa71bd90f530f9227a129864f1a97570c5ecb8b3beb06cb48d935b7d23cd351f414626b73d0c0ea072b271
7
+ data.tar.gz: 479f8dc3b4b8973e1aea6e8758a76714d94fa4a5699e8025fe6bf55710584b4fe7ab0f1e2b23b4929ef4c3ce3b55ff12f62626480c653fcb25b765c06faea5ff
data/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ ## 0.7.5 (2023-02-11)
2
+
3
+ - Updated ONNX Runtime to 1.14.0
4
+
5
+ ## 0.7.4 (2022-10-30)
6
+
7
+ - Updated ONNX Runtime to 1.13.1
8
+
1
9
  ## 0.7.3 (2022-07-23)
2
10
 
3
11
  - Updated ONNX Runtime to 1.12.0
data/LICENSE.txt CHANGED
@@ -1,7 +1,7 @@
1
1
  MIT License
2
2
 
3
3
  Copyright (c) Microsoft Corporation
4
- Copyright (c) 2019-2022 Andrew Kane
4
+ Copyright (c) 2019-2023 Andrew Kane
5
5
 
6
6
  Permission is hereby granted, free of charge, to any person obtaining a copy
7
7
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -43,11 +43,11 @@ Get metadata
43
43
  model.metadata
44
44
  ```
45
45
 
46
- Load a model from a string
46
+ Load a model from a string or other `IO` object
47
47
 
48
48
  ```ruby
49
- byte_str = StringIO.new("...")
50
- model = OnnxRuntime::Model.new(byte_str)
49
+ io = StringIO.new("...")
50
+ model = OnnxRuntime::Model.new(io)
51
51
  ```
52
52
 
53
53
  Get specific outputs
@@ -59,7 +59,7 @@ model.predict({x: [1, 2, 3]}, output_names: ["label"])
59
59
  ## Session Options
60
60
 
61
61
  ```ruby
62
- OnnxRuntime::Model.new(path_or_bytes, {
62
+ OnnxRuntime::Model.new(path_or_io, {
63
63
  enable_cpu_mem_arena: true,
64
64
  enable_mem_pattern: true,
65
65
  enable_profiling: false,
@@ -93,7 +93,7 @@ model.predict(input_feed, {
93
93
 
94
94
  ## Inference Session API
95
95
 
96
- You can also use the Inference Session API, which follows the [Python API](https://microsoft.github.io/onnxruntime/python/api_summary.html).
96
+ You can also use the Inference Session API, which follows the [Python API](https://onnxruntime.ai/docs/api/python/api_summary.html).
97
97
 
98
98
  ```ruby
99
99
  session = OnnxRuntime::InferenceSession.new("model.onnx")
@@ -55,58 +55,12 @@ module OnnxRuntime
55
55
  end
56
56
  end
57
57
 
58
- # session
59
- @session = ::FFI::MemoryPointer.new(:pointer)
60
- from_memory =
61
- if path_or_bytes.respond_to?(:read)
62
- path_or_bytes = path_or_bytes.read
63
- true
64
- else
65
- path_or_bytes = path_or_bytes.to_str
66
- path_or_bytes.encoding == Encoding::BINARY
67
- end
68
-
69
- if from_memory
70
- check_status api[:CreateSessionFromArray].call(env.read_pointer, path_or_bytes, path_or_bytes.bytesize, session_options.read_pointer, @session)
71
- else
72
- check_status api[:CreateSession].call(env.read_pointer, ort_string(path_or_bytes), session_options.read_pointer, @session)
73
- end
58
+ @session = load_session(path_or_bytes, session_options)
74
59
  ObjectSpace.define_finalizer(self, self.class.finalize(@session))
75
60
 
76
- # input info
77
- # don't free allocator
78
- allocator = ::FFI::MemoryPointer.new(:pointer)
79
- check_status api[:GetAllocatorWithDefaultOptions].call(allocator)
80
- @allocator = allocator
81
-
82
- @inputs = []
83
- @outputs = []
84
-
85
- # input
86
- num_input_nodes = ::FFI::MemoryPointer.new(:size_t)
87
- check_status api[:SessionGetInputCount].call(read_pointer, num_input_nodes)
88
- num_input_nodes.read(:size_t).times do |i|
89
- name_ptr = ::FFI::MemoryPointer.new(:string)
90
- check_status api[:SessionGetInputName].call(read_pointer, i, @allocator.read_pointer, name_ptr)
91
- # freed in node_info
92
- typeinfo = ::FFI::MemoryPointer.new(:pointer)
93
- check_status api[:SessionGetInputTypeInfo].call(read_pointer, i, typeinfo)
94
- @inputs << {name: name_ptr.read_pointer.read_string}.merge(node_info(typeinfo))
95
- allocator_free name_ptr
96
- end
97
-
98
- # output
99
- num_output_nodes = ::FFI::MemoryPointer.new(:size_t)
100
- check_status api[:SessionGetOutputCount].call(read_pointer, num_output_nodes)
101
- num_output_nodes.read(:size_t).times do |i|
102
- name_ptr = ::FFI::MemoryPointer.new(:string)
103
- check_status api[:SessionGetOutputName].call(read_pointer, i, allocator.read_pointer, name_ptr)
104
- # freed in node_info
105
- typeinfo = ::FFI::MemoryPointer.new(:pointer)
106
- check_status api[:SessionGetOutputTypeInfo].call(read_pointer, i, typeinfo)
107
- @outputs << {name: name_ptr.read_pointer.read_string}.merge(node_info(typeinfo))
108
- allocator_free name_ptr
109
- end
61
+ @allocator = load_allocator
62
+ @inputs = load_inputs
63
+ @outputs = load_outputs
110
64
  ensure
111
65
  release :SessionOptions, session_options
112
66
  end
@@ -223,6 +177,64 @@ module OnnxRuntime
223
177
 
224
178
  private
225
179
 
180
+ def load_session(path_or_bytes, session_options)
181
+ session = ::FFI::MemoryPointer.new(:pointer)
182
+ from_memory =
183
+ if path_or_bytes.respond_to?(:read)
184
+ path_or_bytes = path_or_bytes.read
185
+ true
186
+ else
187
+ path_or_bytes = path_or_bytes.to_str
188
+ # TODO remove ability to load byte string directly in 0.8.0
189
+ path_or_bytes.encoding == Encoding::BINARY
190
+ end
191
+
192
+ if from_memory
193
+ check_status api[:CreateSessionFromArray].call(env.read_pointer, path_or_bytes, path_or_bytes.bytesize, session_options.read_pointer, session)
194
+ else
195
+ check_status api[:CreateSession].call(env.read_pointer, ort_string(path_or_bytes), session_options.read_pointer, session)
196
+ end
197
+ session
198
+ end
199
+
200
+ def load_allocator
201
+ allocator = ::FFI::MemoryPointer.new(:pointer)
202
+ check_status api[:GetAllocatorWithDefaultOptions].call(allocator)
203
+ allocator
204
+ end
205
+
206
+ def load_inputs
207
+ inputs = []
208
+ num_input_nodes = ::FFI::MemoryPointer.new(:size_t)
209
+ check_status api[:SessionGetInputCount].call(read_pointer, num_input_nodes)
210
+ num_input_nodes.read(:size_t).times do |i|
211
+ name_ptr = ::FFI::MemoryPointer.new(:string)
212
+ check_status api[:SessionGetInputName].call(read_pointer, i, @allocator.read_pointer, name_ptr)
213
+ # freed in node_info
214
+ typeinfo = ::FFI::MemoryPointer.new(:pointer)
215
+ check_status api[:SessionGetInputTypeInfo].call(read_pointer, i, typeinfo)
216
+ inputs << {name: name_ptr.read_pointer.read_string}.merge(node_info(typeinfo))
217
+ allocator_free name_ptr
218
+ end
219
+ inputs
220
+ end
221
+
222
+ def load_outputs
223
+ outputs = []
224
+ num_output_nodes = ::FFI::MemoryPointer.new(:size_t)
225
+ check_status api[:SessionGetOutputCount].call(read_pointer, num_output_nodes)
226
+ num_output_nodes.read(:size_t).times do |i|
227
+ name_ptr = ::FFI::MemoryPointer.new(:string)
228
+ check_status api[:SessionGetOutputName].call(read_pointer, i, @allocator.read_pointer, name_ptr)
229
+ # freed in node_info
230
+ typeinfo = ::FFI::MemoryPointer.new(:pointer)
231
+ check_status api[:SessionGetOutputTypeInfo].call(read_pointer, i, typeinfo)
232
+ outputs << {name: name_ptr.read_pointer.read_string}.merge(node_info(typeinfo))
233
+ allocator_free name_ptr
234
+ end
235
+ outputs
236
+ end
237
+
226
238
  def create_input_tensor(input_feed, refs)
227
239
  allocator_info = ::FFI::MemoryPointer.new(:pointer)
228
240
  check_status api[:CreateCpuMemoryInfo].call(1, 0, allocator_info)
@@ -325,7 +337,7 @@ module OnnxRuntime
325
337
  check_status api[:GetTensorMutableData].call(out_ptr, tensor_data)
326
338
 
327
339
  out_size = ::FFI::MemoryPointer.new(:size_t)
328
- output_tensor_size = api[:GetTensorShapeElementCount].call(typeinfo.read_pointer, out_size)
340
+ check_status api[:GetTensorShapeElementCount].call(typeinfo.read_pointer, out_size)
329
341
  output_tensor_size = out_size.read(:size_t)
330
342
 
331
343
  release :TensorTypeAndShapeInfo, typeinfo
@@ -1,3 +1,3 @@
1
1
  module OnnxRuntime
2
- VERSION = "0.7.3"
2
+ VERSION = "0.7.5"
3
3
  end