您如何使用 ONNXRuntime C 运行 半浮点 ONNX 模型 API?

How do you run a half float ONNX model using ONNXRuntime C API?

C语言没有half float的实现,如何向ONNXRuntime C发送数据API?

the C language doesn't have a half float implementation

是的,但是有语言扩展,您可以编写自己的库来处理数据。

因此,例如 _Float16 类型由 ISO/IEC TS 18661-3:2015 定义,在某些架构上 gcc 支持。

您可以编写 or find a library 来处理半浮点运算。

您可能可以从此处链接一个示例:https://github.com/microsoft/onnxruntime/issues/1173#issuecomment-501088662

您可以使用 CreateTensorAsOrtValue 创建一个缓冲区来写入输入数据,并使用 GetTensorMutableData 访问 OrtValue 中的缓冲区。

ONNXRuntime 正在使用 Eigen 将浮点数转换为您可以写入该缓冲区的 16 位值。

uint16_t floatToHalf(float f) {
  return Eigen::half_impl::float_to_half_rtne(f).x;
}

或者,您可以编辑模型以添加一个从 float32 到 float16 的 Cast 节点,以便模型将 float32 作为输入。