对于一个项目,我们使用WinML通过全卷积网络进行推理。我们查询平台上的所有适配器,并将d3d12设备显式传递给Learning会话。 出于性能原因,我们将权重转换为半浮点格式,我们发现某些GPU不支持它。创建学习会话时实际上有两种情况:
任何帮助/见解将不胜感激。 问候, 文森特
答案 0 :(得分:1)
Windows 机器学习实现使用各种检查来确定特定 GPU 是否支持 Float16。
它包含一个块列表的组合:
bool CheckAdapterFP16Blocked(bool isMcdmAdapter, uint32_t vendorId, uint32_t majorVersion, uint32_t minorVersion) {
switch (vendorId) {
case c_intelVendorId: {
if (isMcdmAdapter) {
return false;
}
// Check Intel GPU driver version
return (majorVersion < 25) || (majorVersion == 25 && minorVersion < 6574) || (majorVersion == 26 && minorVersion < 6572);
}
}
return false;
}
以及对 DML 设备的查询以指示底层硬件是否支持 float16。
winrt::com_ptr<IDMLDevice> dmlDevice;
winrt::check_hresult(DMLCreateDevice(
device,
DML_CREATE_DEVICE_FLAG_NONE,
IID_PPV_ARGS(dmlDevice.put())));
DML_FEATURE_QUERY_TENSOR_DATA_TYPE_SUPPORT float16Query = {DML_TENSOR_DATA_TYPE_FLOAT16};
DML_FEATURE_DATA_TENSOR_DATA_TYPE_SUPPORT float16Data = {};
winrt::check_hresult(dmlDevice->CheckFeatureSupport(
DML_FEATURE_TENSOR_DATA_TYPE_SUPPORT,
sizeof(float16Query),
&float16Query,
sizeof(float16Data),
&float16Data));
return float16Data.IsSupported;