1-创建虚拟环境,指定python版本
当前常用版本3.7或3.8,或readme中给出的版本。当然即便如此也避免不了踩坑,可能需要export环境变量防止出现搜索不到包的问题。个人感觉3.7比较稳定,readme写3.6的,3.7改改也能跑。
2-pip install -r requirements.txt
装各种包。最好打开txt看一下,如果有些包指定了版本号,且是“>=x.xx.xxx”,需要通过搜索查找(或者遭遇报错)把合适的版本确定下来。如果requirements.txt或者.yml里指定了pytorch/torch版本,最好把这几行删掉,然后在第3步自己装合适的pytorch.
ffmpeg: error while loading shared libraries: libopenh264.so.5:-优快云博客
2-装版本对应的pytorch
低版本python会有兼容不了高版本pytorch的问题,低版本pytorch会有兼容不了高版本CUDA的问题。而高版本显卡驱动似乎可以向下兼容,实际上不行:例如RTX3090只支持11.0及以上的CUDA(10.2没试过,10.0不行)
高性能显卡无法支持低版本CUDA的原因可能是算力太高:编译参数指定的计算能力如果和GPU计算能力不符,就会报错。参见
3090应该是sm_80,低版本CUDA不支持。
有时pytorch自带的某些库需要与pytorch“脱钩”后重装,如ffmpeg。conda list命令可以查看当前环境中的各种包,最右一列“channel”表示它从哪里来。
最后检查各版本兼容性,例如:
python3.7……pytorch1.8.0……cudatoolkit11.1;本机nvidia-smi显示显卡驱动版本及最高支持的CUDA版本:12.2,可以兼容11.1
4-查漏补缺
关于no module、 module not found,有以下几种解决方案:
4.1 缺啥装啥,pip install,注意名称有可能不同(类似cv2对应opencv),善用搜索引擎
4.2 检查环境变量,是不是没有搜索包所在的目录,把目录export进去;undefined symbol问题也可以这样解决(通常是因为“擅自”改变了python等的版本,导致有的库找不到)
4.3 这个是真的玄学:在anaconda/envs/环境名/lib/python3.x/site-packages中,同样一个模块(设为module1)会对应两个文件夹,一个叫module1, 一个叫module1-xxxxxx-dist-info,如果存在dist-info文件,python会认为包存在,但我遇到了dist-info存在,而module1本身不存在的情况。把dist-info手动删除后,再次pip install,问题解决。
5-上github查issues
6-在跑模型的时候用nvidia-smi关注显存占用情况
我是nvidia-smi反复刷,其实也有一些更方便的工具,这里就不多介绍了。如果显存占用特别大,有概率是CUDA啥的配错了,会影响推理速度甚至推理效果,要好好检查。