centos7 基于yolov10的推理程序环境搭建
这篇文章的前提是系统显卡驱动已经安装
安装步骤参照前一篇文章centos7安装NVIDIA显卡
安装Anaconda
下载地址anaconda.com
需要注册账号获取下载地址
wget https://repo.anaconda.com/archive/Anaconda3-2024.10-1-Linux-x86_64.sh
赋予权限
chmod a+x Anaconda3-2024.10-1-Linux-x86_64.sh
安装
sh Anaconda3-2024.10-1-Linux-x86_64.sh
敲一下Enter健
然后会出现一个协议,翻到最后一页或者Ctrl+C,输入yes
会出先三个选项,我们自定义下安装路径/home/apps/anaconda3,然后Enter确认
等待一段时间后输入yes确认
配置环境变量
vim ~/.bashrc
在最后插入
export PATH=/home/apps/anaconda3/bin:$PATH
使配置生效
source ~/.bashrc
检测
conda -V
输出
conda 24.9.2
创建虚拟环境
- 创建
yolov10 为自定义的名字,python=3.12是指定python的版本(也可指定另外的版本)
conda create -n yolov10 python=3.12
等待一段时间后输入y即可
- 查看是否安装成功
conda env list
输出
base /home/apps/anaconda3
yolov10 * /home/apps/anaconda3/envs/yolov10
- 激活
conda activate yolov10
查看python版本
python -v
最后输出
Python 3.12.9 | packaged by Anaconda, Inc. | (main, Feb 6 2025, 18:56:27) [GCC 11.2.0] on linux
Type “help”, “copyright”, “credits” or “license” for more information.
Ctrl+D退出python命令
- 如果需要删除环境
conda remove -n yolov10 --all
- 退出当前环境
conda deactivate
- 卸载Anaconda
conda install anaconda-clean
anaconda-clean --yes
rm -rf ~/anaconda3
rm -rf /home/apps/anaconda3
安装GPU版本的torch
torch官网:Previous PyTorch Versions | PyTorch
这个网站打不开的话,试下热点
查看CUDA版本
nvidia-smi
选择相对应的版本
复制torch版本进行安装,我选择直接用coda安装
conda install pytorch==2.5.1 torchvision==0.20.1 torchaudio==2.5.1 pytorch-cuda=12.4 -c pytorch -c nvidia
安装过程比较耗时,耐心等待输入即可,最终输出
Preparing transaction: done
Verifying transaction: done
Executing transaction: done
本地生成pip依赖
首先需要在本地生成依赖
- 激活环境
conda activate yolov10
- 生成依赖
conda env export > environment.yml
- 编写Dockerfile
我尝试很多次如果不用Docker部署,pip依赖如果涉及到系统级别的包,会与服务器的系统环境冲突,比如Gcc等。稳妥期间还是用Docker部署,避免环境冲突
# 使用Miniconda作为基础镜像
FROM continuumio/miniconda3:latestRUN apt-get update -y && \apt-get install -y \build-essential \python3-dev \libegl1 \libgl1-mesa-glx \libgl1 \libgbm1 \libxcb-xinerama0 \libxkbcommon-x11-0 \libglvnd-dev \ffmpeg \libsm6 \libxext6 \mesa-utils \libx264-dev \&& apt-get clean \&& rm -rf /var/lib/apt/lists/*# 配置 OpenGL 环境变量
ENV LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:/usr/lib:/usr/local/lib:$LD_LIBRARY_PATH# 复制环境配置文件
COPY environment.yml /tmp/environment.yml# 创建Conda环境
RUN conda env create -f /tmp/environment.yml# 设置环境变量,激活Conda环境
ENV PATH /opt/conda/envs/yolov10/bin:$PATH# 设置工作目录
WORKDIR /app# 复制项目代码
COPY . /app# 验证库存在性(调试用)
RUN ldd /opt/conda/envs/yolov10/lib/python*/site-packages/PySide6/QtGui.abi3.so | grep EGL# 运行命令(运行的python入口文件)
CMD ["python", "fileapi.py"]
上面的libegl相关的包,是因为我的程序需要图形化界面,我又不想单独为linux版本修改代码,索性直接安装了,构建时间很长,镜像有16G。根据项目做修改即可
- yolov10补丁
如果项目的算法是基于yolov10的,还需要打个补丁
再项目根目录下创建补丁文件loss_patch.py
class v10DetectLoss:def __init__(self, model):self.one2many = v8DetectionLoss(model, tal_topk=10)self.one2one = v8DetectionLoss(model, tal_topk=1)def __call__(self, preds, batch):one2many = preds["one2many"]loss_one2many = self.one2many(one2many, batch)one2one = preds["one2one"]loss_one2one = self.one2one(one2one, batch)return loss_one2many[0] + loss_one2one[0], torch.cat((loss_one2many[1], loss_one2one[1]))
然后将补丁文件追加到容器内,Dockfile内追加以下内容
# 复制项目代码
COPY . /app
#追加内容,yolov10补丁
COPY loss_patch.py /tmp/loss_patch.pyRUN /bin/bash -c " \set -ex; \CONDA_ENV_PATH=/opt/conda/envs/yolov10; \LOSS_FILE=\"\${CONDA_ENV_PATH}/lib/python3.12/site-packages/ultralytics/utils/loss.py\"; \touch \"\${LOSS_FILE}\"; \chmod 666 \"\${LOSS_FILE}\"; \echo -e '\n\n# ===== YOLOv10 Custom Loss Patch =====\n' >> \"\${LOSS_FILE}\"; \cat /tmp/loss_patch.py >> \"\${LOSS_FILE}\"; \echo 'Patch verification passed' \"
# 运行命令(运行的python入口文件)
CMD ["python", "fileapi.py"]
服务器生成依赖
将项目代码打包,上传服务器,在服务器上再次生成依赖
- 激活环境
conda activate yolov10
- 生成依赖
conda env export > environment.yml
-
修改服务器生成的environment文件
-
构建镜像
在项目根目录下构建
docker build --no-cache -t yolo-real-detect .
可能需要修改个别依赖包,因为windows和linux构建,依赖的少数包有可能会不通
- 运行容器
docker run -it \-p 5000:5000 \-v /home/data/airuns:/home/data/airuns \yolo-real-detect