C# onnxruntime DirectML
时间: 2025-06-28 08:24:30 浏览: 12
### C# 集成 ONNX Runtime 与 DirectML 实现指南
#### 创建项目环境配置
为了实现C#应用程序中集成ONNX Runtime并利用DirectML作为执行提供者,需先安装必要的NuGet包。通过Visual Studio的NuGet管理器或命令行工具来完成此操作。
对于基于.NET Core/.NET 5及以上版本的应用程序而言,应添加`Microsoft.ML.OnnxRuntime`以及`Microsoft.ML.OnnxRuntime.DirectML`两个库[^1]。
```bash
dotnet add package Microsoft.ML.OnnxRuntime --version <latest_version>
dotnet add package Microsoft.ML.OnnxRuntime.DirectML --version <latest_version>
```
#### 初始化ONNX模型加载过程
在准备就绪之后,在代码里初始化ONNX运行时实例,并指定使用DirectML作为计算资源:
```csharp
using System;
using Microsoft.ML.OnnxRuntime;
// 加载ONNX模型文件路径
string modelPath = @"path\to\model.onnx";
// 设置SessionOptions启用DirectML加速
var sessionOptions = new SessionOptions();
sessionOptions.ExecutionMode = ExecutionMode.ORT_SEQUENTIAL; // 或 ORT_PARALLEL
sessionOptions.AddExecutionProvider_DirectML(0); // 使用默认GPU设备ID=0
// 创建推理会话对象
InferenceSession inferenceSession = new InferenceSession(modelPath, sessionOptions);
```
上述代码片段展示了如何创建一个新的推断会话,并指定了DirectML为首选硬件加速方式。这使得后续的数据处理能够充分利用图形处理器的能力来进行高效运算。
#### 执行预测任务
当一切设置完毕后,就可以调用已训练好的神经网络模型进行前向传播计算了。这里给出一个简单的例子说明怎样输入数据给模型并获取输出结果:
```csharp
// 准备输入张量(假设是一个二维数组)
float[] inputData = { /* ... */ };
Tensor<float> inputTensor = new DenseTensor<float>(inputData, new int[] { batchSize, featureSize });
// 构建命名参数列表用于传递到模型
List<NamedOnnxValue> inputs = new List<NamedOnnxValue>();
inputs.Add(NamedOnnxValue.CreateFromTensor("InputName", inputTensor));
// 运行模型得到输出
Disposable.IDisposable.Dispose(inferenceSession.Run(inputs));
```
这段示例代码构建了一个浮点数类型的密集型张量作为模型的输入,并将其封装在一个名为`NamedOnnxValue`的对象集合内传入至`Run()`方法中以启动一次完整的预测流程。
#### 性能优化建议
考虑到实际应用场景可能涉及大量连续性的请求响应交互,可以考虑预先加载好多个不同配置下的`InferenceSession`实例池,从而减少每次新建连接所带来的开销;另外也可以尝试调整线程调度策略(`ExecutionMode`)或是探索更多高级特性如异步API支持等手段进一步提升整体性能表现。
阅读全文
相关推荐


















