onnxruntime C#部署环境安装

CUDA、cudnn和OnnxRuntime版本对应

NVIDIA - CUDA | onnxruntime

官网查看版本,需要一一对应,否则无法正常运行;

CUDA更新最快,OnnxRuntime最慢,需要根据OnnxRuntime版本下载安装CUDA和cudnn

CUDA:

cuda_11.8.0_522.06_windows

CUDA Toolkit Archive | NVIDIA Developer

  • Step1:双击cuda_11.8.0_522.06_windows.exe运行安装;
  • Step2:同意并继续;

软件许可

  • Step3:自定义下一步直到安装完成;

安装选项

cudnn:

cudnn-windows-x86_64-8.5.0.96_cuda11-archive

cuDNN Archive | NVIDIA Developer

  • Step1:解压cudnn-windows-x86_64-8.5.0.96_cuda11-archive.zip;
  • Step2:cudnn-windows-x86_64-8.5.0.96_cuda11-archive\bin中所有文件拷贝到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8\bin;
  • Step3:cudnn-windows-x86_64-8.5.0.96_cuda11-archive\lib中所有文件拷贝到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8\lib\x64;
  • 以上路径根据你选择的版本和路径来,一般路径都是默认路径

zlibwapi.dll:

http://www.winimage.com/zLibDll/zlib123dllx64.zip

  • Step1:解压zlib123dllx64.zip;
  • Step2:zlib123dllx64\dll_x64中zlibwapi.dll拷贝到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8\bin;
  • 无zlibwapi.dll在推理时会出现闪退

OnnxRuntime(NuGet包):

Microsoft.ML.OnnxRuntime.Gpu 1.6.3

参考C#onnxruntime模型部署时,无法在 DLL“onnxruntime”中找到名为“OrtGetApiBase”的入口点的解决方法-优快云博客

### C# 项目中部署 ONNXRuntime #### 安装 ONNX Runtime NuGet 包 为了在 C# 中加载和运行 ONNX 模型,需要先确保已安装 ONNX Runtime 的 NuGet 包[^1]。 可以通过 Visual Studio 的 NuGet 包管理器来完成此操作: ```shell Install-Package Microsoft.ML.OnnxRuntime ``` 或者,在项目的 `.csproj` 文件中添加如下依赖项: ```xml <ItemGroup> <PackageReference Include="Microsoft.ML.OnnxRuntime" Version="1.16.2" /> </ItemGroup> ``` #### 创建并配置 C# 应用程序 创建一个新的 Windows Forms 或控制台应用程序,并设置目标框架为 .NET Framework 4.7.2 或更高版本。这一步骤对于后续集成 OpenCVSharp 和其他必要的库至关重要[^4]。 #### 加载 ONNX 模型文件 定义一个用于初始化 ONNX 运行时会话的方法,该方法接收模型路径作为参数并将返回 `InferenceSession` 实例对象。下面是一个简单的实现方式: ```csharp using System; using Microsoft.ML.OnnxRuntime; public class OnnxModelLoader { public static InferenceSession LoadOnnxModel(string modelPath) { var options = new SessionOptions(); return new InferenceSession(modelPath, options); } } ``` #### 准备输入数据并执行推理 准备要传递给模型的数据结构体或数组形式的张量,将其转换成适合于 ONNX Runtime 处理的形式。接着调用 `Run()` 方法传入这些预处理过的输入变量来进行预测计算过程。 假设有一个名为 `inputTensor` 的浮点数二维数组表示图像像素值,则可以这样编写代码片段以获取输出结果: ```csharp var inputMetaDefs = session.InputMetadata; // 获取输入元数据信息 var inputs = new List<NamedOnnxValue>(); foreach (var kv in inputMetaDefs.Keys.Zip(new[] { inputTensor }, Tuple.Create)) { string name = kv.Item1; object value = kv.Rest; NamedOnnxValue namedInput = NamedOnnxValue.CreateFromTensor(name, value); inputs.Add(namedInput); } // 执行推理得到输出列表 IDisposableReadOnlyCollection<DisposableNamedOnnxValue> results = session.Run(inputs); // 解析输出... float[][] outputArray = null; foreach(var result in results){ outputArray = result.AsEnumerable<float>().ToArray(); } ``` 以上展示了基本的工作流;实际应用可能还需要额外考虑错误处理机制以及性能优化等方面的内容[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不鸣~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值