当我们正确安装CUDA、cudnn和Microsoft.ML.OnnxRuntime.Gpu(NuGet包)后,CPU可以正常推理,但是GPU一运行InferenceSession对象的Run()就闪退,没有任何提示
但是观察任务管理器加载模型时GPU专用内存有少量提升,Cuda性能有波动
程序闪退时,GPU专用内存下降,Cuda性能有波动
这时问题一般出在缺少libwapi.dll上,安装即可
也可以启动onnxruntime的log记录功能查看
using System;
using System.Diagnostics;
public class CustomConsoleTraceListener : TraceListener
{
public override void Write(string message)
{
Console.Write(message);
}
public override void WriteLine(string message)
{
Console.WriteLine(message);
}
}
继承TraceListener
通过继承 System.Diagnostics.TraceListener
类,您可以创建自定义的日志监听器来捕获和处理日志信息。TraceListener
类提供了一个接口,允许您自定义日志输出的行为。当您将自定义的 TraceListener
添加到 Trace.Listeners
集合中时,任何通过 Trace
类或 System.Diagnostics.Debug
类输出的日志信息都会被您的监听器接收
Trace.Listeners.Add(new CustomTraceListener());
var options = new SessionOptions
{
OrtLoggingLevel = OrtLoggingLevel.ORT_LOGGING_LEVEL_VERBOSE
};
// 创建 InferenceSession 对象
var session = new InferenceSession("model.onnx", options);
OrtLoggingLevel
枚举定义了以下日志级别:
ORT_LOGGING_LEVEL_VERBOSE
:最详细的日志信息,包括所有信息。ORT_LOGGING_LEVEL_INFO
:一般的信息,例如模型加载和推理进度。ORT_LOGGING_LEVEL_WARNING
:警告级别的日志,例如潜在的问题或性能下降。ORT_LOGGING_LEVEL_ERROR
:错误级别的日志,例如无法恢复的错误。ORT_LOGGING_LEVEL_FATAL
:致命错误,通常是程序无法继续执行的错误。