如何解决如何获取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 举报,一经查实,本站将立刻删除。