核心机器学习中 fp16 计算与 fp32 计算的区别


我想

问一下,对于 fp16 和 fp32 Core ML 模型,计算在 iPhone(我正在使用的 iPhone X 和 iOS 12(上是如何工作的。我有一个 fp32 模型,并使用 coremltools 将其量化为 fp16。尺寸确实减小到 fp32 尺寸的一半左右,但预测时间根本没有减少,我不太明白。

我已经使用 Xcode 着色器调试器查看了 GPU 帧。所有缓冲区似乎都显示数据为 RGBA16Float 格式,所以我想知道 fp32 权重或偏差是否已经转换为 fp16?此外,管道统计显示"高浮动与半比率"的消息。这是否意味着 GPU 在计算之前将所有内容转换为 fp16?

我用 fp32 和 fp16 类型对 MPSMatrix乘法进行了测试。 在大多数情况下,FP16 比 FP32 快 60%。所以我希望 fp16 的计算速度也可以更快。谢谢!

*这是答案中提到的图像,显示了GPU帧和消息。图形处理器框架

当 Core ML 在 GPU 上运行模型时,它会使用 fp16 执行此操作,因为 iPhone 中的 GPU 针对 16 位浮点数进行了优化。如果您的权重是 fp32,则在加载模型时,它们首先转换为 fp16。

在CPU上,Core ML使用fp32。(我不确定神经引擎,但我希望这也是 fp16。

最新更新