Ubuntu安装miniconda3到非默认环境、安装pytorch、训练YOLO11
本篇是总目录的其中一个分支,欢迎查阅总目录 https://www.cnblogs.com/xixixing/p/18501624
训练都是基于python的,所以安装在虚拟环境里。不推荐更改系统自带的python版本,例如ubuntu20.04的终端gnome-terminal依赖系统自带的python3.8,如果装成高版本,则终端只转圈,打不开。
建议禁止系统内核自动更新。内核自动更新会导致驱动和内核版本不对应,导致驱动无法使用。尤其是显卡驱动,然后开不开机。ubuntu系统禁止/开启内核自动更新_ubuntu禁止内核更新-CSDN博客
一点提醒
如果是GeForce GTX 1050(算力61)等算力一般的显卡,不建议安装较新版本的软件,否则可能在onnx转engine时提示Unsupported SM: 0x601等错误,这个是TensorRT版本过高导致的。
重新安装低版本的TensorRT 8.6.0时,又提示tensorrt-bindings 8.6.0无法安装,python默认安装了3.12版本导致。再降python版本到3.10时,之前装过的软件都要降,白忙了,弯路走的不小。
以上是GeForce GTX 1050硬件趟过得大坑,注意!!!
当然,算力较高的可以直接装较新版本的软件是没有问题的,比如GeForce RTX 4080。我的这篇博客是在GeForce RTX 4080上装的 https://www.cnblogs.com/xixixing/p/18440423
查询算力,参考https://developer.nvidia.cn/cuda-gpus#collapseOne
再次提醒,重点关注TensorRT版本以及python版本。在onnx转engine时,如果提示找不到libcudnn.so.8,那就继续降TensorRT 的版本。
以下是在GeForce GTX 1050上装的。
1、安装Miniconda
官网下载(Miniconda在最下边) https://www.anaconda.com/download/
安装到/usr/miniconda3目录
sudo bash ./下载/Miniconda3-latest-Linux-x86_64.sh -p /usr/miniconda3
阅读一大段后,yes,回车
将bin目录添加到环境变量里,否则不识别conda指令。
我已经安装了vscode作为文档编辑器,打开.bashrc文档
code .bashrc
在文档最后添加一行
export PATH="/usr/miniconda3/bin:$PATH"
重启终端,或刷新环境
source .bashrc
初始化一次conda(在.bashrc文档里自动添加了一些内容)
conda init
禁用启动终端自动进入conda虚拟环境(会自动创建.condarc文档,如下设置会写入其中)
conda config --set auto_activate_base false
重启终端
指定虚拟环境创建的目录,否则,自己创建的虚拟环境可能默认不在 /usr/miniconda3/envs 里,而是在一个叫.conda/envs 里
conda config --add envs_dirs /usr/miniconda3/envs
conda config指令基本都在往.condarc文档里写配置,其内容样式如下
修改目录的读写权限,方便创建、删除其中的虚拟环境等。否则可能依然默认创建在.conda/envs 里
sudo chmod 777 -R /usr/miniconda3/
查看下版本是否成功
conda -V
关于卸载Miniconda 参考https://blog.csdn.net/Damien_J_Scott/article/details/136565110。其实就是删除安装目录,然后删除环境变量。
默认的conda源其实也都能下载成功,如果下载太慢更换源,参考anaconda | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
更换conda源
code ~/.condarc
打开配置文件后,添加如下内容
auto_activate_base: false envs_dirs: - /usr/miniconda3/envs channels: - defaults show_channel_urls: true default_channels: - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2 custom_channels: conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
2、查看显卡驱动支持的cuda版本
添加源(在“软件和更新——其他软件”里可以看到)
sudo add-apt-repository ppa:graphics-drivers/ppa
然后把 http://ppa.launchpad.net 替换为 https://launchpad.proxy.ustclug.org ,否则nvidia驱动下载非常慢~非常慢
查看本机显卡能够配置的驱动信息
sudo apt update
ubuntu-drivers devices
安装最新的nvidia驱动
sudo apt install nvidia-driver-560
查看驱动支持的最高cuda版本,一般都cuda12以上了
nvidia-smi
3、创建新环境,安装pytorch
3.1 先创建虚拟环境
我创建一个叫jw的虚拟环境,所有的软件都安装到这个虚拟环境里。指定了安装python3.10
conda create -n jw python=3.10
出现这个,说明默认是自己指定的目录了
进入jw环境
conda activate jw
3.2 安装pytorch
安装pytorch,选cuda11.8版本的,可以适应tensorrt8。一般cuda12对应tensorrt10版本。
conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia
注意安装较慢,耐心等~~~,终端并没有卡住,等结束。如果因为网络不好终止了安装,再次运行继续装。
安装好后,查看下PyTorch版本
conda list pytorch
自动安装了cuda的一些包,查看下
conda list cuda
明明指定的安装11.8,却出来个12.6。重新安装这个
conda install cuda-version=11.8
再次查看下 conda list cuda,不再有任何12版本了。
如果想卸载,记得清缓存,否则卸载后再安装会出错。清空缓存命令如下。参考 Anaconda安装环境报错CondaVerificationError,SafetyError,ClobberError解决方案
conda clean --packages --tarballs
到这里,其实已经可以训练模型了,因为pytorch安装时已经把需要的cuda等安装了。
如果需要转engine格式,那么才需要安装tensorrt,一般训练后pt转到onnx就可以了,onnx转engine是在部署的机器上进行转换的。
当然,如果训练后也想试一试engine,那么继续安装tensorrt,建议使用8版本。
3.3、安装tensorrt8
两种安装方式:
方式一,直接pip安装 8.5.3.1 版本
安装完直接可用,不需要添加环境变量等操作。至于为什么不装8.6.1,自动安装的不是匹配的cu11版本,可以自己尝试下
pip install tensorrt==8.5.3.1
会自动安装3个大包
tensorrt-8.5.3.1
nvidia-cublas-cu11-11.11.3.6
nvidia-cudnn-cu11-9.5.1.17
nvidia-cuda-runtime-cu11-11.8.89 这个很小,可能是之前已经装好cuda的原因。
方式二,官网安装tar包
训练都是用python的东西,所以安装python版的tensorrt。官方指示tar包才是python版。
官方摘录
Refer to Tar File Installation for information on manually installing TensorRT wheels that do not bundle the C++ libraries. You can stop after this section if you only need Python support.
下载地址 https://developer.nvidia.com/nvidia-tensorrt-8x-download
安装如下,也可自己看官网安装 https://docs.nvidia.com/deeplearning/tensorrt/install-guide/index.html#installing-tar
解压tar包
tar -xzvf TensorRT-8.6.1.6.Linux.x86_64-gnu.cuda-11.8.tar.gz
进到python目录里,安装适合自己python版本的whl,把tensorrt、tensorrt_dispatch、tensorrt_lean都装了
pip install *.whl
将lib添加到conda的环境变量里
code ~/.condarc
添加后保存,样式如下,注意自己的路径
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/tensorrt8.6/TensorRT-8.6.1.6/lib
环境生效下
source ~/.bashrc
附一些可学习的转模型案例:
https://blog.csdn.net/qq_44908396/article/details/143628108
https://zhuanlan.zhihu.com/p/679763042
4、训练YOLO11
所有操作都是在虚拟环境jw里进行的
安装ultralytics包
pip install ultralytics
会自动安装需要的 matplotlib、opencv_python、pandas、scipy等包
最终目录在 /usr/miniconda3/envs/jw/lib/python3.10/site-packages/ultralytics
使用pycharm创建python项目,运行如下代码(目的是让其自动检索安装需要的包,如onnx、onnxslim、onnxrumtime-gpu、tensorrt等,注意自动安装的tensorrt版本是10版本,所以我自己已经主动装了8版本)
from ultralytics import YOLO model=YOLO('yolo11n.pt') # model.export(format='onnx',dynamic=True) model.export(format='engine',half=True) #yolo支持直接pt转engine。其实pt——onnx——engine
如果自动检索的包不能安装成功,按下述方式手动安装。若无问题,直接跳过看4.1步骤。
安装cuDNN
pip install nvidia-cudnn-cu11==8.9.2.26
如果cuDNN下载很慢,可以更换pip源,参考 https://mirrors.tuna.tsinghua.edu.cn/help/pypi/
pip config set global.index-url https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple
安装onnxrumtime-gpu
pip install onnxruntime-gpu==1.19.2
查看下onnx是否安装全
若没有onnx和onnxslim,继续安装
pip install onnx==1.17.0 onnxslim==0.1.34
安装tensorrt
pip install tensorrt==8.6.0
整体查看下
conda list
4.1 下载样本
以coco8为例,学习组织和训练自己的样本。样本目录样式如下(建议有test文件夹)
--coco8 |--images |--train 图片 |--val |--test |--labels |--train 标注的txt |--val |--test
直接复制链接用浏览器下载,解压后放到/home/jv/datasets中
download: https://github.com/ultralytics/assets/releases/download/v0.0.0/coco8.zip
自己创建个yaml用于指定目录等,如下图所示
内容样式如下:
#图片路径。防止意外,使用了绝对路径 train: /home/jv/datasets/coco8/images/train val: /home/jv/datasets/coco8/images/val test: /home/jv/datasets/coco8/images/test #类别数 nc: 2 #具体的类别名 names: 0: cat #0前面有两个空格 1: dog
由于自己创建了myData.yaml,所以不用管yolo11.yaml(在 miniconda3\envs\你的环境名\Lib\site-packages\ultralytics\cfg\models\11 里)和自动生成的settings.json这两个文件。
4.2 pyCharm创建项目,训练yolo11
pycharm使用conda虚拟环境
main.py内容如下
def myFun():# -------------------- 载入YOLO from ultralytics import YOLO # 训练 model = YOLO("yolo11n.pt") results = model.train(data="/home/jv/datasets/myData.yaml", epochs=1, batch=1, imgsz=640) if __name__ == '__main__': myFun()
运行训练,得到模型
预测看下效果 Predict - Ultralytics YOLO Docs
转engine模型,以确认tensorrt配置无问题
model=YOLO('./runs/detect/train/weights/best.pt',task='detect') model.export(format='engine', imgsz=[160, 640], half=True, batch=1, device='0')
用engine再预测下
batch=1 test_dir='/home/jv/datasets/coco8/images/test' model=YOLO('./runs/detect/train/weights/best.engine',task='detect') results=model.predict(source=test_dir,imgsz=[160,640],show=False,batch=batch,save=True,device='0')