微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何获取Microsoft.ML.OnnxRuntime.DirectML.net core 3.1的正确GPU设备ID?

如何解决如何获取Microsoft.ML.OnnxRuntime.DirectML.net core 3.1的正确GPU设备ID?

我正在使用microsoft.ml.OnnxRuntime.DirectML nuget包进行图像分类,如下所示:

    var options = new Sessionoptions();
    options.AppendExecutionProvider_DML( 1 ); // deviceid goes here
    var session = new InferenceSession( _modelPath,options );

我有一个大问题:在IIS中,集成视频卡的deviceid为0,离散的设备的deviceid为1。但是,当我的应用在Kestrel下运行时,集成的设备的deviceid为1,离散的设备ID为0,这与Task的相反进行评分时,Manager会在“ GPU引擎”列中显示

现在我的集成卡不能与该软件包一起使用,因为它会抛出此异常(而且这毫无意义):

Exception Info: microsoft.ml.OnnxRuntime.OnnxRuntimeException: [ErrorCode:RuntimeException] D:\5\s\onnxruntime\core\providers\dml\dml_provider_factory.cc(110)\onnxruntime.DLL!00007FF8C074118F: (caller: 00007FF8C07411C7) Exception(941) tid(35b8) 887A0020 An internal issue prevented the driver from carrying out the specified operation. The driver's state is probably SUSPECT,and the application should not continue.

因此,我需要一种可靠的方法来检测离散视频卡的deviceid

解决方法

好的,我现在已经找到一种解决方法。 我可以使用这种方法检查女巫视频卡是否集成/分离 How get GPU information in C#? 然后我可以使用Vortice.DXGI nuget包找出每个视频卡具有哪个deviceId-它基本上是索引

DXGI.CreateDXGIFactory1( out IDXGIFactory1 factory );
factory.EnumAdapters1( 0,out var adapter0 );
factory.EnumAdapters1( 1,out var adapter1 );
factory.EnumAdapters1( 2,out var adapter2 );

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?