您如何使用 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 作为输入。
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 作为输入。