DAMOYOLO-S模型Linux生产环境部署:Ubuntu 20.04系统配置

发布时间:2026/5/19 8:42:11

DAMOYOLO-S模型Linux生产环境部署:Ubuntu 20.04系统配置 DAMOYOLO-S模型Linux生产环境部署Ubuntu 20.04系统配置想在生产环境的Ubuntu服务器上跑起DAMOYOLO-S模型是不是感觉有点无从下手别担心这篇文章就是为你准备的。咱们不聊那些虚的直接上干货手把手带你从一台刚装好的Ubuntu 20.04服务器开始一步步配置好所有环境最后让DAMOYOLO-S模型稳定地跑起来还能开机自启、自动管理日志。整个过程就像搭积木跟着做你也能搞定。1. 部署前准备理清思路与检查清单在动手之前咱们先花几分钟把要做的事情和需要的东西理清楚。生产环境部署和在自己电脑上玩玩儿最大的区别就是“稳定”和“可维护”。咱们的目标是搭建一个能7x24小时稳定运行出了问题能快速定位的服务。首先你得有一台安装了Ubuntu 20.04 LTS的服务器。为什么是20.04因为它是长期支持版本社区支持好软件包稳定非常适合做生产环境的基础。你的服务器最好有独立显卡因为DAMOYOLO-S这类目标检测模型用GPU跑起来才够快。如果没有用CPU也能跑就是速度会慢很多。你需要准备的东西很简单一台Ubuntu 20.04 LTS服务器有sudo权限的用户账号。稳定的网络连接下载驱动和软件包需要。一点耐心因为有些步骤可能需要点时间。接下来咱们就正式开始这场从零开始的搭建之旅。2. 第一步打好系统基础服务器拿到手第一步不是急着装模型而是先把系统本身收拾利索。一个干净、更新及时的系统环境是后续所有步骤能顺利进行的前提。2.1 更新系统与安装基础工具打开终端第一件事就是更新软件包列表并升级所有已安装的包。这能确保我们使用的是最新的安全补丁和软件版本。sudo apt update sudo apt upgrade -y升级完成后系统可能会提示你重启。如果内核有更新最好重启一下让新内核生效。sudo reboot重启后重新登录咱们安装一些后续步骤会用到的基础开发工具和依赖库。sudo apt install -y build-essential cmake git wget curl pkg-config sudo apt install -y libssl-dev libffi-dev libbz2-dev libreadline-dev libsqlite3-dev sudo apt install -y zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev这些工具和库是编译软件、管理代码和运行Python扩展模块的基础先装上准没错。2.2 配置NVIDIA驱动GPU用户如果你的服务器有NVIDIA显卡这一步是必须的。驱动是GPU和系统沟通的桥梁没它CUDA也用不了。首先添加NVIDIA的官方软件仓库这样我们能直接安装最新或最稳定的驱动。sudo add-apt-repository ppa:graphics-drivers/ppa -y sudo apt update接下来查找适合你显卡的推荐驱动版本。你可以使用下面的命令ubuntu-drivers devices这个命令会列出所有可用的驱动并标出一个推荐版本通常后面会跟着“recommended”字样。假设推荐版本是nvidia-driver-535我们就安装它。sudo apt install -y nvidia-driver-535安装过程可能会有点长完成后必须重启服务器让驱动加载。sudo reboot重启后再次登录用下面的命令验证驱动是否安装成功。如果能看到显卡的型号和驱动版本信息就说明没问题了。nvidia-smi看到那个熟悉的表格输出心里就踏实了一半。这说明GPU已经被系统识别可以准备迎接CUDA了。3. 第二步搭建AI模型的核心运行环境驱动搞定后就该安装AI计算的“发动机”——CUDA和它的“加速器”cuDNN了。最后我们还需要一个独立的Python环境避免和系统自带的Python产生冲突。3.1 安装CUDA Toolkit 11.8CUDA是NVIDIA推出的并行计算平台。我们选择版本11.8因为它是一个长期支持、且与众多深度学习框架兼容性非常好的版本。直接从NVIDIA官网下载并安装是最稳妥的方式。使用wget命令下载本地安装包。wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run下载完成后运行安装程序。这里有几个关键选项需要注意sudo sh cuda_11.8.0_520.61.05_linux.run在安装界面中接受许可协议。在组件选择界面使用空格键取消勾选“Driver”因为我们已经单独安装了驱动。确保“CUDA Toolkit 11.8”是被选中的。其他选项保持默认开始安装。安装完成后需要将CUDA的路径添加到系统环境变量中这样系统才能找到它。打开你的用户配置文件如果你用的是bash shell通常是~/.bashrc如果是zsh则是~/.zshrc。nano ~/.bashrc在文件末尾添加以下几行export PATH/usr/local/cuda-11.8/bin${PATH::${PATH}} export LD_LIBRARY_PATH/usr/local/cuda-11.8/lib64${LD_LIBRARY_PATH::${LD_LIBRARY_PATH}}保存并退出编辑器在nano中是按CtrlX然后按Y确认再按回车。让配置立即生效source ~/.bashrc最后验证CUDA是否安装成功nvcc --version如果这个命令输出了CUDA 11.8的版本信息恭喜你核心引擎安装完毕。3.2 安装cuDNNcuDNN是深度神经网络GPU加速库可以理解为CUDA的“专业加速包”。安装它需要先在NVIDIA官网注册账号并下载对应版本的库文件。假设你已经下载了适用于CUDA 11.x的cuDNN本地压缩包例如cudnn-linux-x86_64-8.9.7.29_cuda11-archive.tar.xz将其上传到服务器然后执行以下步骤解压并复制文件。# 解压文件请替换为你的实际文件名 tar -xvf cudnn-linux-x86_64-8.9.7.29_cuda11-archive.tar.xz # 复制头文件和库文件到CUDA目录 sudo cp cudnn-*-archive/include/cudnn*.h /usr/local/cuda-11.8/include sudo cp -P cudnn-*-archive/lib/libcudnn* /usr/local/cuda-11.8/lib64 sudo chmod ar /usr/local/cuda-11.8/include/cudnn*.h /usr/local/cuda-11.8/lib64/libcudnn*这样就完成了cuDNN的安装。3.3 创建独立的Python虚拟环境系统自带的Python环境很纯净我们最好不要去动它。为DAMOYOLO-S创建一个独立的虚拟环境是保证项目依赖清晰、互不干扰的最佳实践。首先安装Python虚拟环境管理工具venv如果还没安装的话和Python3的开发包。sudo apt install -y python3-venv python3-dev然后在你喜欢的位置比如你的家目录创建一个项目文件夹并在里面创建虚拟环境。这里我们命名为damoyolo_env。cd ~ mkdir damoyolo_project cd damoyolo_project python3 -m venv damoyolo_env创建完成后激活这个虚拟环境。你会看到命令行提示符前面多了(damoyolo_env)的字样。source damoyolo_env/bin/activate记住后续所有关于Python包的操作都需要在这个虚拟环境激活的状态下进行。当你需要退出这个环境时只需输入deactivate。4. 第三步部署DAMOYOLO-S模型服务环境全部就绪现在主角可以登场了。我们将安装DAMOYOLO-S模型并把它包装成一个可以通过HTTP请求调用的服务。4.1 安装模型依赖与推理库在激活的虚拟环境中我们首先升级包管理工具pip然后安装PyTorch。注意PyTorch的版本需要和我们的CUDA 11.8匹配。pip install --upgrade pip pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118安装完成后可以在Python中简单验证一下GPU是否可用import torch print(torch.cuda.is_available()) # 应该输出 True print(torch.__version__) # 查看版本接下来安装DAMOYOLO模型库和其他必要的依赖。pip install openmim mim install mmengine mmcv mmdet pip install damo-yolo为了将模型暴露为服务我们使用轻量级的Web框架Flask。pip install flask4.2 创建模型推理与应用服务脚本光有库还不够我们需要写一个Python脚本它既能加载模型进行推理又能接收外部的HTTP请求。在项目目录下创建一个文件比如叫app.py。# app.py import torch from flask import Flask, request, jsonify from damo_yolo import build_model import cv2 import numpy as np import logging from werkzeug.serving import WSGIRequestHandler # 配置日志 logging.basicConfig(levellogging.INFO) logger logging.getLogger(__name__) app Flask(__name__) # 全局变量用于缓存加载的模型 _model None _device None def load_model(): 加载DAMOYOLO-S模型 global _model, _device try: # 指定设备优先使用GPU _device cuda if torch.cuda.is_available() else cpu logger.info(f使用设备: {_device}) # 加载预训练的DAMOYOLO-S模型 # 模型会自动从网络下载权重文件生产环境建议提前下载好并指定本地路径 _model build_model(model_namedamoyolo_s, device_device) _model.eval() # 设置为评估模式 logger.info(DAMOYOLO-S模型加载成功。) return True except Exception as e: logger.error(f模型加载失败: {e}) return False def predict_image(image_np): 对输入的numpy图像数组进行预测 global _model, _device if _model is None: return {error: 模型未加载} try: # 执行推理 with torch.no_grad(): # 禁用梯度计算节省内存 results _model(image_np, conf_threshold0.25) # 可以调整置信度阈值 # 格式化结果 predictions [] if results and len(results) 0: for box, score, cls_id in zip(results[0].boxes.xyxy, results[0].boxes.conf, results[0].boxes.cls): box box.cpu().numpy().tolist() predictions.append({ bbox: [round(x, 2) for x in box], # 坐标 [x1, y1, x2, y2] score: round(score.item(), 4), class_id: int(cls_id.item()), # 你可以根据需要添加类别名称映射 # class_name: class_names[int(cls_id)] }) return {predictions: predictions} except Exception as e: logger.error(f推理过程出错: {e}) return {error: str(e)} app.route(/health, methods[GET]) def health_check(): 健康检查端点 if _model is not None: return jsonify({status: healthy, device: _device}) else: return jsonify({status: unhealthy}), 503 app.route(/predict, methods[POST]) def predict(): 预测端点接收图片文件 if file not in request.files: return jsonify({error: 未提供文件}), 400 file request.files[file] if file.filename : return jsonify({error: 文件名为空}), 400 try: # 读取图片 file_bytes np.frombuffer(file.read(), np.uint8) img cv2.imdecode(file_bytes, cv2.IMREAD_COLOR) if img is None: return jsonify({error: 无法解码图片}), 400 # 执行预测 result predict_image(img) return jsonify(result) except Exception as e: logger.error(f请求处理失败: {e}) return jsonify({error: 内部服务器错误}), 500 if __name__ __main__: # 启动时加载模型 if load_model(): # 生产环境建议使用 waitress 或 gunicorn 启动这里为演示使用Flask开发服务器 # 绑定到所有网络接口端口5000 WSGIRequestHandler.protocol_version HTTP/1.1 app.run(host0.0.0.0, port5000, debugFalse) else: logger.error(服务启动失败因为模型加载未成功。)这个脚本做了几件事定义了两个HTTP接口/health用于检查服务状态/predict用于上传图片并获取检测结果。在服务启动时加载DAMOYOLO-S模型到GPU或CPU。将模型推理过程封装成函数接收图片并返回结构化的检测结果边界框、置信度、类别。你可以先手动运行测试一下python app.py然后在另一台机器上用curl或者Postman向http://你的服务器IP:5000/predict发送一个POST请求带上图片文件看看是否能收到检测结果。5. 第四步配置生产级系统服务手动运行python app.py不是长久之计。我们需要让这个服务在系统启动时自动运行在崩溃时自动重启并且把日志好好地管理起来。Linux的systemd服务管理器就是干这个的。5.1 创建systemd服务单元文件首先为我们的服务创建一个配置文件。我们需要知道Python解释器和脚本的绝对路径。# 在虚拟环境下查看Python解释器的路径 which python # 输出类似/home/你的用户名/damoyolo_project/damoyolo_env/bin/python # 查看app.py的绝对路径 pwd # 输出项目目录假设为/home/你的用户名/damoyolo_project接下来创建systemd服务文件。sudo nano /etc/systemd/system/damoyolo.service将下面的内容粘贴进去请务必将User、WorkingDirectory、ExecStart中的路径替换成你实际的路径。[Unit] DescriptionDAMOYOLO-S Model Inference Service Afternetwork.target nvidia-persistenced.service Wantsnvidia-persistenced.service [Service] # 替换为你的用户名 User你的用户名 Group你的用户组 # 替换为你的项目绝对路径 WorkingDirectory/home/你的用户名/damoyolo_project # 替换为你的虚拟环境Python和脚本的绝对路径 ExecStart/home/你的用户名/damoyolo_project/damoyolo_env/bin/python /home/你的用户名/damoyolo_project/app.py # 服务崩溃后自动重启 Restartalways RestartSec10 # 标准输出和错误输出重定向到系统日志 StandardOutputjournal StandardErrorjournal # 环境变量确保CUDA能被正确找到 EnvironmentPATH/usr/local/cuda-11.8/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin EnvironmentLD_LIBRARY_PATH/usr/local/cuda-11.8/lib64 [Install] WantedBymulti-user.target保存并退出。5.2 启动服务并设置开机自启创建好服务文件后需要让systemd重新加载配置然后启动我们的服务。# 重新加载systemd配置 sudo systemctl daemon-reload # 启动damoyolo服务 sudo systemctl start damoyolo.service # 设置服务开机自动启动 sudo systemctl enable damoyolo.service现在服务已经在后台运行了。我们可以检查一下它的状态。sudo systemctl status damoyolo.service如果看到“active (running)”的字样并且下面没有红色的错误日志就说明服务启动成功了。你可以按q键退出状态查看。5.3 管理日志与常用操作服务运行的所有输出包括我们代码里打的log都会被systemd的日志系统journald接管。查看日志非常方便# 查看服务的全部日志 sudo journalctl -u damoyolo.service # 实时跟踪最新的日志类似 tail -f sudo journalctl -u damoyolo.service -f # 查看指定时间段的日志例如今天 sudo journalctl -u damoyolo.service --since today一些常用的服务管理命令# 停止服务 sudo systemctl stop damoyolo.service # 重启服务比如更新了app.py代码后 sudo systemctl restart damoyolo.service # 查看服务是否启用开机自启 sudo systemctl is-enabled damoyolo.service # 禁用开机自启 sudo systemctl disable damoyolo.service6. 总结走完这一整套流程你的Ubuntu 20.04服务器上应该已经稳稳地跑起了DAMOYOLO-S模型服务。从最开始的系统更新、驱动安装到CUDA和Python环境的搭建再到最后用systemd把整个应用包装成一个可靠的系统服务每一步都是为了生产环境的“稳定”和“省心”这两个目标。回头看看整个过程虽然步骤不少但逻辑是清晰的先准备好硬件和系统底层环境再搭建AI模型所需的软件生态最后将应用服务化。这套方法不仅适用于DAMOYOLO对于其他类似的深度学习模型部署思路也是相通的。现在你的模型服务已经可以通过http://服务器IP:5000/predict来调用了。接下来你可以考虑在前端加个简单的上传界面或者把它集成到更大的业务流水线中去。如果遇到流量变大还可以考虑用Nginx做反向代理和负载均衡。不过那就是另一个故事了。希望这篇指南能帮你扫清部署路上的障碍让你能把更多精力花在模型调优和业务创新上。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

相关新闻