当前位置: 首页 > news >正文

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

创建虚拟环境

  1. 创建
    yolov10 为自定义的名字,python=3.12是指定python的版本(也可指定另外的版本)
conda create -n yolov10 python=3.12

等待一段时间后输入y即可

  1. 查看是否安装成功
conda env list

输出

base /home/apps/anaconda3
yolov10 * /home/apps/anaconda3/envs/yolov10

  1. 激活
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命令

  1. 如果需要删除环境
conda remove -n yolov10 --all
  1. 退出当前环境
conda deactivate
  1. 卸载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依赖

首先需要在本地生成依赖

  1. 激活环境
conda activate yolov10
  1. 生成依赖
conda env export > environment.yml
  1. 编写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。根据项目做修改即可

  1. 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"]

服务器生成依赖

将项目代码打包,上传服务器,在服务器上再次生成依赖

  1. 激活环境
conda activate yolov10
  1. 生成依赖
conda env export > environment.yml
  1. 修改服务器生成的environment文件
    在这里插入图片描述
    在这里插入图片描述

  2. 构建镜像

在项目根目录下构建

docker build --no-cache -t yolo-real-detect .

可能需要修改个别依赖包,因为windows和linux构建,依赖的少数包有可能会不通

  1. 运行容器
docker run -it \-p 5000:5000 \-v /home/data/airuns:/home/data/airuns \yolo-real-detect
http://www.dtcms.com/a/192625.html

相关文章:

  • java17
  • 每日一道leetcode(新学数据结构版)
  • 高防服务器流量“清洗”什么意思
  • msf安卓远控木马手动捆绑正常apk
  • 分类预测 | Matlab实现ABC-Transformer人工蜂群算法优化编码器多特征分类预测/故障诊断Matlab实现
  • 【FileZilla】 从事件类型到消息类型的函数形参类型转化
  • 使用Beyond Compare显示有差异点进去又没差异 问题解决
  • 提高成功率!课题中的立项依据深度写作
  • 计算机视觉----基于锚点的车道线检测、从Line-CNN到CLRNet到CLRKDNet 本文所提算法Line-CNN 后续会更新以下全部算法
  • 养生:健康生活的核心策略
  • 蓝桥杯11届国B 约数
  • 道通龙鱼系列-混合翼无人机:垂直起降+长时续航
  • HGDB企业版迁移到HGDB安全版
  • 游戏引擎学习第280天:精简化的流式实体sim
  • pg_dump“: CreateProcess error=2, 系统找不到指定的文件
  • Hugging Face 中 LeRobot 使用的入门指南
  • ultalytics代码中模型接收多层输入的处理
  • 《山东欧曼谛:美业梦想的启航港》
  • 面试 Linux 运维相关问题
  • 微信小程序van-dialog确认验证失败时阻止对话框的关闭
  • 嵌软面试每日一阅----FreeRTOS
  • CertiK荣获以太坊基金会两项资助,领跑zkEVM形式化验证
  • 【专栏启动】开篇:为什么是 Django + Vue3?测试平台的技术选型与架构蓝图
  • 基于微信小程序的在线聊天功能实现:WebSocket通信实战
  • C++从入门到实战(十五)String(上)介绍STL与String的关系,为什么有string类,String有什么用
  • 【深度学习之四】知识蒸馏综述提炼
  • Vue2在子组件上使用v-model实现数据的双向绑定、.sync修饰符
  • Windows软件插件-写mp3
  • 全链路压测实战指南:从理论到高可用架构的终极验证
  • 【Python】在vscode利用pyinstaller中的.spec文件把py项目打包为.exe实现非py环境下使用的操作步骤