之前,通过以下两篇文章,着重介绍了,使用openMMLab开发的MMDeploy库对MMxx系列仓库训练得到的权重pth转换得到的onnx,并分别使用python SDK和C++ SDK进行调用的详细步骤:
- 使用MMDeploy(预编译包)转换MMxx(MMDeploy支持库均可)pth权重到onnx,并使用python SDK进行部署验证
- 使用MMDeploy(预编译包)转换MMxx(MMDeploy支持库均可)pth权重到onnx,并使用C++ SDK加载onnx得到dll动态链接库,实现在windows平台中调用(linux也适用)
但本人再将得到的dll库迁移到另外的windows系统上的时候出现了WinError126的情况(使用python 3.7调用dll得到的错误)。现对解决方法进行说明:
-
首先,使用Dependency Walker检查得到的dll动态链接库,查看依赖是否完善,把缺少的依赖放到需要调用的dll动态链接库的同级目录下;
-
如果你使用了我在上述1/2项中列出的两篇文章得到的dll ,那么一定注意将文章使用MMDeploy(预编译包)转换MMxx(MMDeploy支持库均可)pth权重到onnx,并使用C++ SDK加载onnx得到dll动态链接库,实现在windows平台中调用(linux也适用)中出现的对应的dll库放入到需要调用的dll的同级目录下;
-
在完成了上述两项检查之后如果仍然出现WinError126的错误,那么请检查两台电脑中对应的cuda版本是否一致,如果不一致,那么请继续使用Dependency Walker检查mmdeploy.dll缺少的依赖,可能会看到缺少cuda64_xxx.dll(这个库可以直接从本机CUDA安装目录下,例如:“C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.5\bin\”下找到,这里我检查得到的缺少dll为:cudart64_110.dll),之后将对应的dll放到需要调用的dll同级目录下即可;
-
如果经过上述三个步骤之后还无法调用,且报相同的错误,那么将文章使用MMDeploy(预编译包)转换MMxx(MMDeploy支持库均可)pth权重到onnx,并使用C++ SDK加载onnx得到dll动态链接库,实现在windows平台中调用(linux也适用)中指出的“mmdeploy-0.14.0-windows-amd64-cuda11.3”包下面的"thirdparty"对应的两个目录(onnxruntime/tensorrt)下的所有dll放到需要调用的dll的同级目录下即可;
做完上述几个步骤之后,一般来说就可以解决WinError 126这个问题。