jetson_yolo_deployment 02_linux_dev_skills
02 — Linux 开发必备技能作者智汇嵌入式实验室 · 7yewh本文件是 Jetson YOLO 部署系列的第 2 篇。目标掌握部署过程中真正用得到的 Linux 技能不贪多只求实战够用。1. Shell 脚本基础部署时经常需要写脚本来自动化流程启动推理、批量转换模型、定时录制等。1.1 最小可用脚本#!/bin/bash# 文件名run_inference.sh# 功能启动 YOLO 推理echoecho 启动 YOLO 推理echo# 激活虚拟环境source~/envs/yolo/bin/activate# 运行推理python3 detect.py--weightsyolov8n.pt--source0--device0echo推理结束# 给脚本执行权限chmodx run_inference.sh# 运行./run_inference.sh1.2 变量与参数#!/bin/bash# 变量定义等号两边不能有空格MODELyolov8n.ptINPUT./test_images/DEVICE0CONF0.5# 使用变量python3 detect.py\--weights$MODEL\--source$INPUT\--device$DEVICE\--conf$CONF# 命令行参数# $1 是第一个参数$2 是第二个$# 是参数总数# 用法./run.sh yolov8s.pt 0.7MODEL${1:-yolov8n.pt}# 如果没传参数用默认值CONF${2:-0.5}1.3 条件判断#!/bin/bash# 检查文件是否存在if[-fmodel.onnx];thenecho模型文件存在开始转换python3 convert.pyelseecho错误model.onnx 不存在exit1fi# 检查 GPU 是否可用ifnvidia-smi/dev/null21;thenecho检测到 NVIDIA GPUDEVICE0elseecho未检测到 GPU使用 CPUDEVICEcpufi# 检查目录是否存在不存在则创建[-d./output]||mkdir-p./output1.4 循环#!/bin/bash# 批量处理图片forimgin./images/*.jpg;doecho处理:$imgpython3 detect.py--source$img--savedone# 批量转换模型精度forprecisioninfp32 fp16 int8;doecho转换$precision模型...python3 export.py--precision$precisiondone# while 循环持续监控 GPU 温度whiletrue;dotemp$(cat/sys/devices/virtual/thermal/thermal_zone0/temp)echoGPU 温度:$((temp/1000))°Csleep5done1.5 实用模板部署启动脚本#!/bin/bash# deploy.sh — 一键部署脚本set-e# 任何命令失败就停止echo[1/4] 检查环境...python3-cimport torch; assert torch.cuda.is_available()||{echo错误CUDA 不可用exit1}echo[2/4] 导出 ONNX...python3 export_onnx.py--weightsbest.pt--imgsz640echo[3/4] 转换 TensorRT.../usr/src/tensorrt/bin/trtexec\--onnxbest.onnx\--saveEnginebest.engine\--fp16echo[4/4] 启动推理...python3 infer_trt.py--enginebest.engine--source0echo部署完成2. 进程管理推理程序可能要长时间运行你需要知道怎么管理进程。2.1 前台 / 后台运行# 前台运行占住终端CtrlC 停止python3 detect.py--source0# 后台运行加 符号python3 detect.py--source0# 终端可以继续用程序在后台跑# 查看后台任务jobs# 把后台任务拉回前台fg# CtrlZ 暂停当前任务 → bg 让它在后台继续2.2 nohup 断开 SSH 后继续运行# 问题SSH 断开后后台程序也会被杀死# 解决用 nohupnohuppython3 detect.py--sourcevideo.mp4output.log21# 解释# nohup 不受 SSH 断开影响# output.log 标准输出写入文件# 21 错误输出也写入同一文件# 后台运行# 查看输出tail-foutput.log# 查看进程psaux|grepdetect.py# 杀死进程killPID2.3 tmux推荐比 nohup 更好用tmux 是终端复用器可以创建多个虚拟终端SSH 断开后自动保持。# 安装sudoaptinstalltmux# 创建新会话tmux new-syolo# 在 tmux 里运行推理python3 detect.py--source0# 断开会话程序继续运行# 按 CtrlB然后按 D# 重新连接会话tmux attach-tyolo# 列出所有会话tmuxls# 杀死会话tmux kill-session-tyolotmux 常用快捷键先按 CtrlB再按后面的键快捷键作用d断开detach回到正常终端c创建新窗口n/p下一个 / 上一个窗口%左右分屏上下分屏方向键在分屏间切换3. 系统监控推理时你需要知道 GPU 是否满载、内存是否够用、温度是否正常。3.1 GPU 监控nvidia-smi# 一次性查看nvidia-smi# 输出示例# -------------------------------# | GPU Name Persistence-M|# | Fan Temp Perf Pwr:Usage/Cap|# | 40C P0 10W / 15W |# -------------------------------# | Processes: |# | GPU PID Type Process name |# | 0 1234 C python3 | ← 你的推理进程# -------------------------------# 持续监控每 1 秒刷新watch-n1nvidia-smi# Jetson 专用监控工具更详细sudotegrastats# 输出RAM 2048/4096MB | CPU [45%1420,38%1420] | GPU 65%921 | ...3.2 CPU / 内存监控# htop交互式推荐htop# 按 q 退出# 按 F6 选择排序方式按 CPU%、MEM% 等# 查看内存free-h# 输出# total used free available# Mem: 3.9Gi 2.1Gi 0.3Gi 1.5Gi# Swap: 2.0Gi 0.5Gi 1.5Gi# Jetson 内存很少Nano 4GB如果 free 很低# 1. 减小 batch size# 2. 用更小的模型# 3. 增大 swap3.3 温度监控# Jetson 温度cat/sys/devices/virtual/thermal/thermal_zone*/temp# 输出是毫度除以 1000 得到摄氏度# 一键查看所有温度forzonein/sys/devices/virtual/thermal/thermal_zone*/temp;doname$(cat$(dirname $zone)/type)temp$(cat$zone)echo$name:$((temp/1000))°Cdone# 温度安全范围# 60°C正常# 60-80°C高负载正常但注意散热# 80°C过热会自动降频throttling3.4 磁盘 I/O# 查看磁盘读写速度iotop# 需要 sudo apt install iotop# 查看磁盘使用df-h# 如果 SD 卡快满了sudoaptcleansudodockersystem prune-arm-rf~/.cache/pip4. 网络调试从 PC 传模型、下载数据集、远程访问推理结果都需要网络操作。4.1 基本网络命令# 查看 IP 地址ipaddr show# 测试网络连通性ping8.8.8.8# 测外网ping192.168.1.1# 测网关# 查看端口占用ss-tlnp# 或netstat-tlnp# 查看网络流量ifstat# 需要 sudo apt install ifstat4.2 端口转发远程查看推理结果如果你的推理程序有 Web UI比如 Gradio需要通过端口转发在 PC 上查看# 在 PC 上执行 SSH 端口转发ssh-L8080:localhost:8080 jetson# 含义把 Jetson 的 8080 端口映射到 PC 的 8080 端口# 然后在 PC 浏览器打开 http://localhost:8080# 也可以用 VS Code 的端口转发功能更方便4.3 下载文件# wget最常用wgethttps://example.com/dataset.zip# 断点续传wget-chttps://example.com/large_file.zip# curlcurl-Ohttps://example.com/model.onnx# Python 方式有进度条pipinstallgdown gdown https://drive.google.com/uc?idxxxxx# Google Drive 文件5. 文本编辑器5.1 nano最简单推荐新手nanoconfig.yaml# 编辑完# CtrlO → Enter 保存# CtrlX 退出5.2 vim高效建议逐步学vimconfig.yaml# 模式# 按 i 进入编辑模式可以打字了# 按 Esc 回到命令模式# 输入 :wq 保存并退出# 输入 :q! 不保存退出# 最常用操作# dd 删除当前行# yy 复制当前行# p 粘贴# /text 搜索 text# u 撤销5.3 实际推荐日常开发用 VS Code Remote-SSH编辑配置文件用 nano高频操作熟练后再学 vim。6. Git 基础管理你的推理代码和配置。# 初始化仓库gitinit# 添加文件gitadddetect.py config.yaml# 提交gitcommit-m添加推理脚本# 查看状态gitstatus# 查看提交历史gitlog--oneline# 克隆别人的项目最常用gitclone https://github.com/ultralytics/ultralytics.git# 创建分支gitcheckout-bfeature/tensorrt# 合并分支gitcheckout maingitmerge feature/tensorrt部署时最常用的 Git 操作# 1. 克隆 YOLO 仓库gitclone https://github.com/ultralytics/ultralytics.git# 2. 切到特定版本gitcheckout v8.1.0# 3. 拉取更新gitpull7. 本章实操任务□ 1. 写一个 Shell 脚本接收模型路径作为参数检查文件是否存在后运行推理 □ 2. 用 tmux 创建一个会话在里面运行一个 Python 脚本然后断开再重连 □ 3. 用 watch -n 1 nvidia-smi 监控 GPU如果有 □ 4. 配置 SSH 端口转发把远程 8080 端口映射到本地 □ 5. 用 git clone 克隆 ultralytics 仓库 □ 6. 写一个循环脚本每 5 秒打印一次 CPU 温度智汇嵌入式实验室 · 7yewh
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2414110.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!