AIGlasses_for_navigation部署案例:CentOS 7.9 + NVIDIA Driver 470 + Docker CE 20.10
AIGlasses_for_navigation部署案例CentOS 7.9 NVIDIA Driver 470 Docker CE 20.101. 引言当AI眼镜遇见传统服务器想象一下你手里有一套为视障人群设计的智能导航眼镜系统它集成了盲道识别、红绿灯检测、物品查找和实时语音交互。这套系统功能强大但它的运行环境却是一台老旧的、装着CentOS 7.9的服务器。更棘手的是这台服务器上还装着NVIDIA 470版本的驱动以及一个相对早期的Docker CE 20.10。这听起来像是一个技术挑战对吧老系统、旧驱动、特定版本的容器环境要把一个现代化的AI应用部署上去似乎每一步都可能踩坑。但别担心这正是我们今天要解决的问题。我最近就成功地把AIGlasses_for_navigation这套智能导航系统部署在了这样一套“复古”但稳定的环境上。整个过程就像是在给一位经验丰富但有点固执的老兵装备上最先进的智能武器。这篇文章我就来和你分享这次部署的完整过程。我会带你一步步走通从环境检查、驱动安装、Docker配置到最终服务上线的每一个环节。无论你是想在自己的服务器上复现还是遇到了类似“老环境配新应用”的困境相信这篇实战记录都能给你带来直接的帮助。2. 环境准备摸清家底再动手在开始任何部署之前了解清楚你的服务器“家底”是至关重要的。这能帮你避免很多后续的兼容性问题。2.1 系统环境确认首先我们登录服务器看看系统的基本情况# 查看系统版本 cat /etc/redhat-release # 查看内核版本 uname -r # 查看系统架构 uname -m在我的案例中输出是这样的系统版本CentOS Linux release 7.9.2009 (Core)内核版本3.10.0-1160.el7.x86_64系统架构x86_64CentOS 7.9虽然不算最新但它的稳定性和广泛的软件支持让它依然是很多生产环境的选择。不过它的内核版本相对较老这对后续安装新版NVIDIA驱动可能会是个挑战。2.2 硬件信息检查接下来我们需要确认服务器的显卡情况# 查看PCI设备中的NVIDIA显卡信息 lspci | grep -i nvidia # 如果没有lspci命令先安装 yum install pciutils -y这个命令会列出服务器上所有的NVIDIA显卡。记下你的显卡型号比如我的是Tesla T4。不同的显卡型号对应的驱动版本要求可能不同。2.3 现有驱动状态检查当前是否已经安装了NVIDIA驱动# 检查nvidia-smi命令是否可用 which nvidia-smi # 如果可用查看驱动版本 nvidia-smi | grep Driver Version如果系统提示nvidia-smi命令不存在说明还没有安装NVIDIA驱动。如果已经安装了但版本不对我们可能需要先卸载旧驱动。2.4 磁盘空间检查AI模型和Docker镜像通常都比较大确保有足够的磁盘空间# 查看根目录剩余空间 df -h / # 建议至少预留20GB空间用于Docker和模型文件3. NVIDIA驱动安装与老内核的博弈在CentOS 7.9上安装NVIDIA 470驱动可能是整个部署过程中最具挑战性的一步。老内核对新驱动的支持可能不完善我们需要一些技巧来绕过兼容性问题。3.1 准备工作禁用Nouveau驱动Nouveau是Linux下的开源NVIDIA驱动它会和官方驱动冲突必须禁用。# 创建配置文件 echo -e blacklist nouveau\noptions nouveau modeset0 /etc/modprobe.d/blacklist-nouveau.conf # 重建initramfs dracut --force # 重启系统 reboot重启后验证Nouveau是否被禁用# 检查Nouveau模块是否加载 lsmod | grep nouveau如果没有任何输出说明禁用成功。3.2 安装依赖包安装编译NVIDIA驱动所需的内核开发包# 安装EPEL仓库如果尚未安装 yum install epel-release -y # 安装开发工具和内核头文件 yum groupinstall Development Tools -y yum install kernel-devel kernel-headers -y # 确认内核头文件版本与当前内核匹配 uname -r rpm -qa | grep kernel-devel | grep $(uname -r)关键点确保kernel-devel的版本与uname -r显示的内核版本完全一致。如果不一致驱动编译会失败。3.3 下载并安装NVIDIA 470驱动直接从NVIDIA官网下载对应版本的驱动# 切换到临时目录 cd /tmp # 下载驱动请根据你的显卡型号选择正确版本 # 对于Tesla T4我使用的是470.199.02版本 wget https://us.download.nvidia.com/tesla/470.199.02/NVIDIA-Linux-x86_64-470.199.02.run # 添加执行权限 chmod x NVIDIA-Linux-x86_64-470.199.02.run在安装前我们需要进入文本模式因为图形界面会占用显卡# 切换到运行级别3文本模式 systemctl set-default multi-user.target reboot重启进入文本模式后开始安装# 运行安装程序 ./NVIDIA-Linux-x86_64-470.199.02.run # 安装过程中的关键选择 # 1. 是否安装32位兼容库根据需求选择通常选否 # 2. 是否运行nvidia-xconfig如果服务器无图形界面选否 # 3. 是否安装DKMS建议选是便于内核更新后自动重建驱动如果安装过程中提示内核版本不兼容你可能需要尝试以下方法# 方法1使用--kernel-source-path指定内核头文件路径 ./NVIDIA-Linux-x86_64-470.199.02.run --kernel-source-path/usr/src/kernels/$(uname -r) # 方法2如果上述方法失败尝试禁用签名验证 ./NVIDIA-Linux-x86_64-470.199.02.run --no-cc-version-check --no-drm3.4 验证驱动安装安装完成后验证驱动是否正常工作# 查看驱动版本 nvidia-smi # 应该看到类似这样的输出 # ----------------------------------------------------------------------------- # | NVIDIA-SMI 470.199.02 Driver Version: 470.199.02 CUDA Version: 11.4 | # |--------------------------------------------------------------------------- # | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | # | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | # | | | MIG M. | # || # | 0 Tesla T4 Off | 00000000:00:04.0 Off | 0 | # | N/A 34C P8 9W / 70W | 0MiB / 15109MiB | 0% Default | # | | | N/A | # ---------------------------------------------------------------------------如果能看到显卡信息和驱动版本说明驱动安装成功。3.5 安装后的配置为了让Docker能够使用GPU我们需要安装nvidia-container-toolkit# 配置NVIDIA容器运行时仓库 distribution$(. /etc/os-release;echo $ID$VERSION_ID) curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.repo | tee /etc/yum.repos.d/nvidia-docker.repo # 安装nvidia-container-toolkit yum install -y nvidia-container-toolkit # 重启Docker服务 systemctl restart docker4. Docker CE 20.10安装与配置虽然Docker CE 20.10不是最新版本但它在CentOS 7.9上的稳定性经过了时间考验。对于生产环境来说稳定往往比新特性更重要。4.1 卸载旧版本Docker如果系统上已经有旧版本的Docker先清理干净# 停止Docker服务 systemctl stop docker # 卸载旧版本 yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine # 删除残留文件 rm -rf /var/lib/docker rm -rf /var/lib/containerd4.2 安装Docker CE 20.10CentOS 7的官方仓库中的Docker版本较旧我们需要从Docker官方仓库安装# 安装依赖包 yum install -y yum-utils device-mapper-persistent-data lvm2 # 添加Docker官方仓库 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # 查看可用的Docker版本 yum list docker-ce --showduplicates | sort -r # 安装指定版本20.10.23 yum install -y docker-ce-20.10.23 docker-ce-cli-20.10.23 containerd.io为什么选择20.10.23这个版本是20.10.x系列的最后一个稳定版本修复了之前版本的一些已知问题同时保持了良好的兼容性。4.3 配置Docker安装完成后进行一些必要的配置# 启动Docker服务并设置开机自启 systemctl start docker systemctl enable docker # 验证安装 docker --version # 应该输出Docker version 20.10.23, build 7155243 # 运行测试容器 docker run hello-world配置Docker使用国内镜像加速可选但推荐# 创建或修改daemon.json mkdir -p /etc/docker cat /etc/docker/daemon.json EOF { registry-mirrors: [ https://docker.mirrors.ustc.edu.cn, https://hub-mirror.c.163.com ], exec-opts: [native.cgroupdriversystemd], log-driver: json-file, log-opts: { max-size: 100m }, storage-driver: overlay2 } EOF # 重启Docker使配置生效 systemctl restart docker4.4 配置Docker使用NVIDIA GPU验证Docker能否正确识别和使用NVIDIA GPU# 运行nvidia-smi测试容器 docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi # 如果一切正常你应该能看到和在宿主机上运行nvidia-smi类似的输出如果遇到权限问题可能需要将当前用户加入docker组# 将用户加入docker组替换your_username为你的用户名 usermod -aG docker your_username # 重新登录使组权限生效5. AIGlasses_for_navigation部署实战环境准备就绪后我们开始部署AIGlasses_for_navigation系统。这个系统包含多个AI模型和Web服务我们需要确保所有组件都能正确运行。5.1 获取项目代码首先从GitHub获取项目代码# 切换到工作目录 cd /root # 克隆项目如果网络问题可以使用镜像源 git clone https://github.com/AI-FanGe/OpenAIglasses_for_Navigation.git # 如果克隆失败可以尝试使用镜像 git clone https://ghproxy.com/https://github.com/AI-FanGe/OpenAIglasses_for_Navigation.git # 重命名为AIGlasses_for_navigation根据项目要求 mv OpenAIglasses_for_Navigation AIGlasses_for_navigation cd AIGlasses_for_navigation5.2 检查项目结构了解项目结构有助于后续的问题排查# 查看项目文件结构 tree -L 2 # 关键文件和目录 # app_main.py - 主程序入口 # model/ - AI模型目录 # templates/ - Web前端模板 # static/ - 静态资源 # voice/ - 语音文件 # requirements.txt - Python依赖5.3 安装Python依赖项目使用Python开发需要安装相关依赖# 检查Python版本需要Python 3.7 python3 --version # 如果Python版本低于3.7需要先升级 # CentOS 7默认Python版本是3.6需要安装Python 3.8 yum install python38 python38-devel -y # 创建虚拟环境推荐 python3.8 -m venv venv source venv/bin/activate # 安装依赖 pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple常见问题解决 如果在安装过程中遇到编译错误可能是缺少某些开发库# 安装常见的开发依赖 yum install gcc-c make openssl-devel bzip2-devel libffi-devel zlib-devel -y5.4 配置阿里云DashScope API KeyAIGlasses_for_navigation的语音识别和AI对话功能依赖阿里云的DashScope服务需要配置API Key# 创建API Key配置文件 cat .api_key.json EOF { api_key: 你的DashScope API Key } EOF如何获取API Key访问阿里云DashScope控制台https://dashscope.console.aliyun.com/注册或登录阿里云账号进入「API-KEY管理」页面点击「创建新的API-KEY」复制生成的Key格式如sk-xxxxxxxxxxxxxxxxxxxxxx5.5 下载AI模型文件项目需要多个AI模型文件如果GitHub仓库中没有包含需要手动下载# 进入模型目录 cd model # 下载盲道分割模型 wget https://github.com/AI-FanGe/OpenAIglasses_for_Navigation/releases/download/v1.0.0/yolo-seg.pt # 下载障碍物检测模型 wget https://github.com/AI-FanGe/OpenAIglasses_for_Navigation/releases/download/v1.0.0/yoloe-11l-seg.pt # 下载物品识别模型 wget https://github.com/AI-FanGe/OpenAIglasses_for_Navigation/releases/download/v1.0.0/shoppingbest5.pt # 下载红绿灯检测模型 wget https://github.com/AI-FanGe/OpenAIglasses_for_Navigation/releases/download/v1.0.0/trafficlight.pt # 下载手部检测模型 wget https://github.com/AI-FanGe/OpenAIglasses_for_Navigation/releases/download/v1.0.0/hand_landmarker.task cd ..如果下载速度慢可以尝试使用代理或从其他镜像源下载。5.6 使用Supervisor管理服务为了确保服务稳定运行我们使用Supervisor进行进程管理# 安装Supervisor yum install supervisor -y # 创建AIGlasses的Supervisor配置 cat /etc/supervisord.d/aiglasses.ini EOF [program:aiglasses] command/root/AIGlasses_for_navigation/venv/bin/python /root/AIGlasses_for_navigation/app_main.py directory/root/AIGlasses_for_navigation autostarttrue autorestarttrue startsecs10 startretries3 userroot redirect_stderrtrue stdout_logfile/root/AIGlasses_for_navigation/logs/supervisor.log stdout_logfile_maxbytes10MB stdout_logfile_backups5 environmentPYTHONPATH/root/AIGlasses_for_navigation,PATH/root/AIGlasses_for_navigation/venv/bin:%(ENV_PATH)s EOF # 创建日志目录 mkdir -p /root/AIGlasses_for_navigation/logs # 启动Supervisor服务 systemctl start supervisord systemctl enable supervisord # 重新加载配置 supervisorctl reread supervisorctl update # 启动AIGlasses服务 supervisorctl start aiglasses5.7 验证服务运行检查服务是否正常运行# 查看服务状态 supervisorctl status aiglasses # 应该显示aiglasses RUNNING pid XXXX # 查看服务日志 tail -f /root/AIGlasses_for_navigation/logs/supervisor.log # 检查端口是否监听 netstat -tlnp | grep 8081 # 应该看到tcp 0 0 0.0.0.0:8081 0.0.0.0:* LISTEN6. 功能测试与使用指南服务部署完成后我们需要验证各个功能是否正常工作。即使没有硬件设备我们也可以通过Web界面进行基本测试。6.1 访问Web界面在浏览器中打开服务器的Web界面http://你的服务器IP:8081如果一切正常你应该能看到AIGlasses_for_navigation的Web界面。界面右下角有一个系统状态面板显示以下信息✅ 服务运行状态✅ API配置状态✅ 模型加载情况盲道/红绿灯/物品识别✅ 音频文件数量✅ 摄像头连接状态6.2 配置API Key在Web界面中配置阿里云DashScope API Key点击右上角的「⚙️ API配置」按钮在弹出的对话框中输入你的API Key点击「保存」按钮配置成功后状态面板中的「API配置状态」应该变为绿色对勾。6.3 测试视频上传功能即使没有连接ESP32硬件你也可以通过上传本地视频来测试系统功能点击页面右上角的「 上传视频」按钮选择本地视频文件支持MP4、AVI、MOV等格式最大500MB系统会自动处理视频并显示检测结果你可以测试以下功能盲道检测测试上传包含盲道的视频系统应该能识别出盲道并标注出来红绿灯识别测试上传包含红绿灯的视频系统应该能识别红绿灯状态红/黄/绿物品查找测试上传包含常见物品的视频如矿泉水、饮料瓶等系统应该能识别并标注物品6.4 测试API接口系统提供了REST API接口可以通过命令行测试# 获取当前配置 curl http://localhost:8081/api/config # 返回示例 # { # api_key: sk-t****7890, # is_configured: true # } # 更新API配置 curl -X POST http://localhost:8081/api/config \ -H Content-Type: application/json \ -d {api_key: sk-你的新key}6.5 硬件连接如果有ESP32设备如果你有ESP32-CAM硬件可以按照以下步骤连接烧录固件使用Arduino IDE打开compile/compile.ino文件选择正确的开发板ESP32-CAM配置WiFi SSID和密码与服务器同一网络烧录到ESP32设备硬件连接将ESP32-CAM连接到电源确保与服务器在同一局域网ESP32会自动连接到系统的WebSocket端点验证连接在Web界面中查看摄像头连接状态如果连接成功应该能看到实时视频流7. 常见问题与解决方案在部署和使用过程中你可能会遇到一些问题。这里我整理了一些常见问题及其解决方法。7.1 服务启动失败问题现象supervisorctl status aiglasses # 显示aiglasses FATAL Exited too quickly可能原因及解决Python依赖缺失# 查看详细日志 tail -100 /root/AIGlasses_for_navigation/logs/supervisor.log # 如果看到ImportError重新安装依赖 cd /root/AIGlasses_for_navigation source venv/bin/activate pip install -r requirements.txt --force-reinstall端口被占用# 检查8081端口是否被占用 netstat -tlnp | grep 8081 # 如果被占用可以修改app_main.py中的端口号 # 或者停止占用端口的进程模型文件缺失# 检查model目录下的文件 ls -la /root/AIGlasses_for_navigation/model/ # 确保所有.pt和.task文件都存在 # 如果缺失重新下载7.2 语音识别不工作问题现象Web界面中语音识别没有反应或者提示API错误。排查步骤检查API Key配置# 检查配置文件 cat /root/AIGlasses_for_navigation/.api_key.json # 通过API测试 curl http://localhost:8081/api/config测试网络连接# 测试是否能访问阿里云服务 ping dashscope.aliyuncs.com # 测试API Key是否有效替换为你的API Key curl -X POST https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation \ -H Authorization: Bearer sk-你的key \ -H Content-Type: application/json \ -d {model: qwen-turbo, input: {messages: [{role: user, content: 你好}]}}检查阿里云账户状态确认DashScope服务已开通检查账户余额或免费额度是否用完确认API Key有语音识别ASR权限7.3 GPU无法使用问题现象服务日志中显示CUDA不可用或者检测速度很慢。排查步骤检查NVIDIA驱动# 确认驱动安装正确 nvidia-smi # 检查CUDA版本 nvidia-smi | grep CUDA Version检查Docker GPU支持# 测试Docker是否能使用GPU docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi # 如果失败重新配置nvidia-container-toolkit systemctl restart docker检查PyTorch CUDA支持# 进入Python环境测试 cd /root/AIGlasses_for_navigation source venv/bin/activate python3 -c import torch; print(torch.cuda.is_available()) # 应该输出True7.4 模型加载失败问题现象服务启动时卡在模型加载阶段或者提示模型文件错误。解决方法重新下载模型文件cd /root/AIGlasses_for_navigation/model # 删除损坏的模型文件 rm -f *.pt *.task # 重新下载使用国内镜像加速 wget https://ghproxy.com/https://github.com/AI-FanGe/OpenAIglasses_for_Navigation/releases/download/v1.0.0/yolo-seg.pt # ... 下载其他模型文件检查模型文件完整性# 检查文件大小 ls -lh *.pt *.task # 正常大小应该为 # yolo-seg.pt: 约50-100MB # yoloe-11l-seg.pt: 约100-200MB # shoppingbest5.pt: 约50-100MB # trafficlight.pt: 约10-50MB # hand_landmarker.task: 约10-30MB手动验证模型# 使用Python验证模型是否能加载 cd /root/AIGlasses_for_navigation source venv/bin/activate python3 -c import torch try: model torch.hub.load(ultralytics/yolov5, custom, pathmodel/yolo-seg.pt) print(模型加载成功) except Exception as e: print(f模型加载失败: {e}) 7.5 Web界面无法访问问题现象浏览器无法打开http://服务器IP:8081。排查步骤检查防火墙# 查看防火墙状态 systemctl status firewalld # 如果防火墙开启添加8081端口例外 firewall-cmd --permanent --add-port8081/tcp firewall-cmd --reload # 或者临时关闭防火墙测试用 systemctl stop firewalld检查SELinux# 查看SELinux状态 getenforce # 如果是Enforcing模式可以临时禁用 setenforce 0 # 或者添加SELinux规则 semanage port -a -t http_port_t -p tcp 8081检查服务是否监听正确地址# 查看服务监听的地址 netstat -tlnp | grep 8081 # 应该显示0.0.0.0:8081 # 如果是127.0.0.1:8081需要修改绑定地址8. 总结与优化建议经过以上步骤你应该已经在CentOS 7.9 NVIDIA Driver 470 Docker CE 20.10的环境上成功部署了AIGlasses_for_navigation系统。这个组合虽然看起来有些“复古”但它的稳定性在实际生产环境中得到了验证。8.1 部署要点回顾让我简单回顾一下这次部署的关键点环境兼容性是关键老系统配新应用最重要的是确保各个组件之间的兼容性。NVIDIA 470驱动在CentOS 7.9上需要特别注意内核版本的匹配。分步验证很重要不要试图一步到位。先验证驱动再验证Docker最后部署应用。每一步都确认无误后再进行下一步。日志是你的好朋友遇到问题时第一时间查看日志。Supervisor的日志、应用日志、系统日志都能提供宝贵的线索。备份和回滚在关键步骤前做好备份比如修改系统配置前。这样如果出现问题可以快速回滚到之前的状态。8.2 性能优化建议如果你的服务器资源有限或者希望获得更好的性能可以考虑以下优化模型优化# 使用更小的模型文件如果精度要求不高 # 可以在model目录下放置轻量级模型 # 或者使用模型量化技术减小模型大小内存优化# 调整Docker内存限制 # 在/etc/docker/daemon.json中添加 # { # default-ulimits: { # nofile: { # Name: nofile, # Hard: 65535, # Soft: 65535 # } # } # }GPU内存优化# 在app_main.py中调整批处理大小 # 减少同时处理的图像数量降低GPU内存占用 batch_size 4 # 根据你的GPU内存调整8.3 扩展功能建议基础部署完成后你还可以考虑以下扩展多摄像头支持修改代码支持多个ESP32摄像头同时连接云端备份将识别结果和日志自动备份到云端移动端应用开发手机App远程查看和管理系统数据分析收集使用数据分析用户行为模式8.4 维护建议为了确保系统长期稳定运行建议定期更新定期检查并更新安全补丁监控系统设置监控告警当服务异常时及时通知日志轮转配置日志轮转避免日志文件过大定期备份定期备份配置文件和模型文件部署这样一个AI系统到老环境上确实需要一些耐心和技巧。但一旦成功你会发现这种“老树开新花”的搭配往往能提供非常稳定的服务。希望这篇详细的部署指南能帮助你少走弯路顺利将AIGlasses_for_navigation系统运行起来。记住技术部署从来不是一蹴而就的遇到问题时耐心排查、分步验证总能找到解决方案。祝你的部署顺利获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。