如何在Windows ML中使用GPU示例



我正在尝试调整本教程以使用我自己的神经网络和图像。我可以在我的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 };
}

一旦进入check_hresult(...)行,就立即抛出winrt::hresult_error。我认为这意味着bindings在某种程度上无效。。。但(a(我对此不确定,(b(我不知道该怎么做才能使其有效。帮助

编辑:我现在可以让MS样本工作,但不是我的适应。当我使用Netron查看MS sample.onx文件时,输入和输出节点的名称合理,报告的张量大小也合理。在我尝试使用的模型上;输出节点都具有":0";作为其名称的最后部分,并且张量大小具有一个"1";未知";大小,例如输入大小被报告为"0";unk_123 x 3 x 224 x 224";。这两者中的任何一个都会造成不兼容吗?网络是提供给我的,所以我想了解在要求之前是否需要更改…

一切都按预期进行。在尝试调整WindowsML代码以适应我的需求时,我曾多次失误,我强烈建议:

  • 仔细检查所有内容-使用调试器来证明变量包含您认为它们在设置的每一步所做的事情

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

我可以确认设置deviceKind = LearningModelDeviceKind::DirectX是调用GPU的原因,但这样做可能不会显著提高速度

最新更新