如何在Windows ML示例中使用GPU

问题描述

我正在尝试改编this tutorial以使用我自己的神经网络和图像。我可以在cpu上执行此操作,但是我无法使用未更改的教程或对其进行改编的操作是使用GPU。根据系统信息,我有一台“ NVIDIA Quadro P2200”,而不是我需要告知的任何地方。相反,似乎我所需要做的就是替换:

LearningModelDeviceKind deviceKind = LearningModelDeviceKind::Default;

具有:

LearningModelDeviceKind deviceKind = LearningModelDeviceKind::DirectX;

执行此操作时,出现以下异常:

auto results = session.Evaluate(binding,L"RunId");

构造第二个参数后,它会落入:

template <typename D> WINRT_IMPL_AUTO(Windows::AI::MachineLearning::LearningModelEvaluationResult) consume_Windows_AI_MachineLearning_ILearningModelSession<D>::Evaluate(Windows::AI::MachineLearning::LearningModelBinding const& bindings,param::hstring const& correlationId) const
{
    void* result{};
    check_hresult(WINRT_IMPL_SHIM(Windows::AI::MachineLearning::ILearningModelSession)->Evaluate(*(void**)(&bindings),*(void**)(&correlationId),&result));
    return Windows::AI::MachineLearning::LearningModelEvaluationResult{ result,take_ownership_from_abi };
}

踏入winrt::hresult_error行时,立即抛出check_hresult(...)。我认为这意味着bindings在某种程度上是无效的……但是(a)我不确定,并且(b)我不知道该怎么做才能使其有效。帮助吗?

解决方法

一切都按预期工作。在尝试使 Windows ML 代码适应我的要求时多次失败,我的强烈建议是:

  • 仔细检查所有内容 - 使用调试器来证明变量包含您认为它们在设置的每个步骤中执行的操作。

例如,为了响应 EDIT 部分,问题是复制/粘贴/编辑的代码将输出形状从 1 x 1000 x 1 x 1(粘贴)更改为 1 x 10 x 1 x 1(编辑)时它需要是 1 x 10。这是按照我上面的建议检测到的:-)

我可以确认设置 deviceKind = LearningModelDeviceKind::DirectX 是调用 GPU 的原因,但您可能不会因此而获得任何明显的速度提升。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...