Core ML中的fp16计算与fp32计算的区别

时间:2019-04-22 09:28:33

标签: gpu metal coreml

我想问一下fp16和fp32 Core ML模型在iPhone(我正在使用的iPhone X和iOS 12)上如何进行计算。我有一个fp32模型,并使用coremltools将其量化为fp16。大小确实减少到了fp32大小的一半,但预测时间却根本没有减少,对此我不太了解。

我已经使用Xcode Shader Debugger查看了GPU框架。所有缓冲区似乎都显示数据为RGBA16Float格式,因此我想知道fp32权重或偏差是否已转换为fp16?此外,管道统计信息还显示一条消息,“浮空比高”。这是否意味着GPU在计算之前将所有内容都转换为fp16?

我对使用fp32和fp16类型的MPSMatrixMultiplication进行了测试。在大多数情况下,fp16比fp32快60%。因此,我希望fp16的计算速度也会更快。谢谢!

*这是答案中提到的图像,其中显示了GPU框架和消息。 GPU frame

1 个答案:

答案 0 :(得分:1)

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

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