我正在使用 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,离散显卡的 deviceId 为 0,这与任务管理器中显示的相反评分正在进行时的“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。