为什么启用了Metal API但我的Coreml自定义层仍在CPU上运行

时间:2018-06-25 08:54:58

标签: swift tensorflow gpu metal coreml

我真的是Coreml和Metal的新手。

现在,我正在研究Core Ml模型的项目测试性能。我基于tensorflow实现了CNN模型,并使用tf-coreml工具将此模型转换为.mlmodel。

但是在我的CNN模型中,它有一个名为“等于”的操作,Coreml不支持。它转换为.mlmodel my .mlmodel file screen shot

的自定义层

然后,我跟随Hollemans出色的博客http://machinethink.net/blog/coreml-custom-layers/在CPU和GPU上都实现了此自定义层。我的Cpu版本运行良好,但是当我在GPU上实现此操作时,无法激活“编码功能”。我按照Hollemans博客中的所有步骤创建了Metal计算内核,其余的都创建了。但是,当我运行项目时,它总是在CPU上运行。它似乎从未进入过编码功能。only run on evaluate function

我在Google上搜索了很多内容,但是找不到理想的答案,这确实让我感到沮丧。如果有人有任何提示,我将不胜感激。预先感谢。

1 个答案:

答案 0 :(得分:1)

ask your model for prediction时,您可以指定诸如running on CPU only之类的选项。您的模型未在GPU上运行的可能原因之一可能是您拥有类似

let options = MLPredictionOptions() options.usesCPUOnly = true

在代码中

,然后将options传递给预测方法。将usesCPUOnly属性设置为false可以使模型在GPU上运行。正如Hollemans的博客(确实很棒)中没有提到的那样,您可以选择在CPU或GPU上运行模型,我想这可能是您的模型继续在CPU上运行的原因之一。