jetson_yolo_deployment 02_linux_dev_skills

02 --- Linux 开发必备技能

作者:智汇嵌入式实验室 · 7yewh

本文件是 Jetson YOLO 部署系列的第 2 篇。

目标:掌握部署过程中真正用得到的 Linux 技能,不贪多,只求实战够用。


1. Shell 脚本基础

部署时经常需要写脚本来自动化流程:启动推理、批量转换模型、定时录制等。

1.1 最小可用脚本

bash 复制代码
#!/bin/bash
# 文件名:run_inference.sh
# 功能:启动 YOLO 推理

echo "==============================="
echo "  启动 YOLO 推理"
echo "==============================="

# 激活虚拟环境
source ~/envs/yolo/bin/activate

# 运行推理
python3 detect.py --weights yolov8n.pt --source 0 --device 0

echo "推理结束"
bash 复制代码
# 给脚本执行权限
chmod +x run_inference.sh

# 运行
./run_inference.sh

1.2 变量与参数

bash 复制代码
#!/bin/bash

# 变量定义(等号两边不能有空格!)
MODEL="yolov8n.pt"
INPUT="./test_images/"
DEVICE=0
CONF=0.5

# 使用变量
python3 detect.py \
    --weights $MODEL \
    --source $INPUT \
    --device $DEVICE \
    --conf $CONF

# 命令行参数
# $1 是第一个参数,$2 是第二个,$# 是参数总数
# 用法:./run.sh yolov8s.pt 0.7
MODEL=${1:-"yolov8n.pt"}   # 如果没传参数,用默认值
CONF=${2:-0.5}

1.3 条件判断

bash 复制代码
#!/bin/bash

# 检查文件是否存在
if [ -f "model.onnx" ]; then
    echo "模型文件存在,开始转换"
    python3 convert.py
else
    echo "错误:model.onnx 不存在!"
    exit 1
fi

# 检查 GPU 是否可用
if nvidia-smi > /dev/null 2>&1; then
    echo "检测到 NVIDIA GPU"
    DEVICE=0
else
    echo "未检测到 GPU,使用 CPU"
    DEVICE="cpu"
fi

# 检查目录是否存在,不存在则创建
[ -d "./output" ] || mkdir -p ./output

1.4 循环

bash 复制代码
#!/bin/bash

# 批量处理图片
for img in ./images/*.jpg; do
    echo "处理: $img"
    python3 detect.py --source "$img" --save
done

# 批量转换模型精度
for precision in fp32 fp16 int8; do
    echo "转换 $precision 模型..."
    python3 export.py --precision $precision
done

# while 循环(持续监控 GPU 温度)
while true; do
    temp=$(cat /sys/devices/virtual/thermal/thermal_zone0/temp)
    echo "GPU 温度: $((temp/1000))°C"
    sleep 5
done

1.5 实用模板:部署启动脚本

bash 复制代码
#!/bin/bash
# deploy.sh --- 一键部署脚本

set -e  # 任何命令失败就停止

echo "[1/4] 检查环境..."
python3 -c "import torch; assert torch.cuda.is_available()" || {
    echo "错误:CUDA 不可用!"
    exit 1
}

echo "[2/4] 导出 ONNX..."
python3 export_onnx.py --weights best.pt --imgsz 640

echo "[3/4] 转换 TensorRT..."
/usr/src/tensorrt/bin/trtexec \
    --onnx=best.onnx \
    --saveEngine=best.engine \
    --fp16

echo "[4/4] 启动推理..."
python3 infer_trt.py --engine best.engine --source 0

echo "部署完成!"

2. 进程管理

推理程序可能要长时间运行,你需要知道怎么管理进程。

2.1 前台 / 后台运行

bash 复制代码
# 前台运行(占住终端,Ctrl+C 停止)
python3 detect.py --source 0

# 后台运行(加 & 符号)
python3 detect.py --source 0 &
# 终端可以继续用,程序在后台跑

# 查看后台任务
jobs

# 把后台任务拉回前台
fg

# Ctrl+Z 暂停当前任务 → bg 让它在后台继续

2.2 nohup + & (断开 SSH 后继续运行)

bash 复制代码
# 问题:SSH 断开后,后台程序也会被杀死
# 解决:用 nohup

nohup python3 detect.py --source video.mp4 > output.log 2>&1 &

# 解释:
# nohup      不受 SSH 断开影响
# > output.log   标准输出写入文件
# 2>&1       错误输出也写入同一文件
# &          后台运行

# 查看输出
tail -f output.log

# 查看进程
ps aux | grep detect.py

# 杀死进程
kill <PID>

2.3 tmux(推荐,比 nohup 更好用)

tmux 是终端复用器,可以创建多个"虚拟终端",SSH 断开后自动保持。

bash 复制代码
# 安装
sudo apt install tmux

# 创建新会话
tmux new -s yolo

# 在 tmux 里运行推理
python3 detect.py --source 0

# 断开会话(程序继续运行)
# 按 Ctrl+B,然后按 D

# 重新连接会话
tmux attach -t yolo

# 列出所有会话
tmux ls

# 杀死会话
tmux kill-session -t yolo

tmux 常用快捷键(先按 Ctrl+B,再按后面的键):

快捷键 作用
d 断开(detach),回到正常终端
c 创建新窗口
n / p 下一个 / 上一个窗口
% 左右分屏
" 上下分屏
方向键 在分屏间切换

3. 系统监控

推理时你需要知道 GPU 是否满载、内存是否够用、温度是否正常。

3.1 GPU 监控(nvidia-smi)

bash 复制代码
# 一次性查看
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 -n 1 nvidia-smi

# Jetson 专用监控工具(更详细)
sudo tegrastats
# 输出:RAM 2048/4096MB | CPU [45%@1420,38%@1420] | GPU 65%@921 | ...

3.2 CPU / 内存监控

bash 复制代码
# 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. 增大 swap

3.3 温度监控

bash 复制代码
# Jetson 温度
cat /sys/devices/virtual/thermal/thermal_zone*/temp
# 输出是毫度,除以 1000 得到摄氏度

# 一键查看所有温度
for zone in /sys/devices/virtual/thermal/thermal_zone*/temp; do
    name=$(cat $(dirname $zone)/type)
    temp=$(cat $zone)
    echo "$name: $((temp/1000))°C"
done

# 温度安全范围:
# < 60°C:正常
# 60-80°C:高负载,正常但注意散热
# > 80°C:过热,会自动降频(throttling)

3.4 磁盘 I/O

bash 复制代码
# 查看磁盘读写速度
iotop
# 需要 sudo apt install iotop

# 查看磁盘使用
df -h

# 如果 SD 卡快满了
sudo apt clean
sudo docker system prune -a
rm -rf ~/.cache/pip

4. 网络调试

从 PC 传模型、下载数据集、远程访问推理结果,都需要网络操作。

4.1 基本网络命令

bash 复制代码
# 查看 IP 地址
ip addr show

# 测试网络连通性
ping 8.8.8.8          # 测外网
ping 192.168.1.1      # 测网关

# 查看端口占用
ss -tlnp
# 或
netstat -tlnp

# 查看网络流量
ifstat  # 需要 sudo apt install ifstat

4.2 端口转发(远程查看推理结果)

如果你的推理程序有 Web UI(比如 Gradio),需要通过端口转发在 PC 上查看:

bash 复制代码
# 在 PC 上执行 SSH 端口转发
ssh -L 8080:localhost:8080 jetson

# 含义:把 Jetson 的 8080 端口映射到 PC 的 8080 端口
# 然后在 PC 浏览器打开 http://localhost:8080

# 也可以用 VS Code 的端口转发功能(更方便)

4.3 下载文件

bash 复制代码
# wget(最常用)
wget https://example.com/dataset.zip

# 断点续传
wget -c https://example.com/large_file.zip

# curl
curl -O https://example.com/model.onnx

# Python 方式(有进度条)
pip install gdown
gdown https://drive.google.com/uc?id=xxxxx  # Google Drive 文件

5. 文本编辑器

5.1 nano(最简单,推荐新手)

bash 复制代码
nano config.yaml

# 编辑完:
# Ctrl+O → Enter  保存
# Ctrl+X          退出

5.2 vim(高效,建议逐步学)

bash 复制代码
vim config.yaml

# 模式:
# 按 i     进入编辑模式(可以打字了)
# 按 Esc   回到命令模式
# 输入 :wq  保存并退出
# 输入 :q!  不保存退出

# 最常用操作:
# dd     删除当前行
# yy     复制当前行
# p      粘贴
# /text  搜索 text
# u      撤销

5.3 实际推荐

日常开发用 VS Code Remote-SSH,编辑配置文件用 nano,高频操作熟练后再学 vim。


6. Git 基础

管理你的推理代码和配置。

bash 复制代码
# 初始化仓库
git init

# 添加文件
git add detect.py config.yaml

# 提交
git commit -m "添加推理脚本"

# 查看状态
git status

# 查看提交历史
git log --oneline

# 克隆别人的项目(最常用)
git clone https://github.com/ultralytics/ultralytics.git

# 创建分支
git checkout -b feature/tensorrt

# 合并分支
git checkout main
git merge feature/tensorrt

部署时最常用的 Git 操作:

bash 复制代码
# 1. 克隆 YOLO 仓库
git clone https://github.com/ultralytics/ultralytics.git

# 2. 切到特定版本
git checkout v8.1.0

# 3. 拉取更新
git pull

7. 本章实操任务

复制代码
□ 1. 写一个 Shell 脚本,接收模型路径作为参数,检查文件是否存在后运行推理
□ 2. 用 tmux 创建一个会话,在里面运行一个 Python 脚本,然后断开再重连
□ 3. 用 watch -n 1 nvidia-smi 监控 GPU(如果有)
□ 4. 配置 SSH 端口转发,把远程 8080 端口映射到本地
□ 5. 用 git clone 克隆 ultralytics 仓库
□ 6. 写一个循环脚本,每 5 秒打印一次 CPU 温度

智汇嵌入式实验室 · 7yewh

相关推荐
supersolon2 小时前
Windows下WSL(Ubuntu24.04)安装Nodejs
linux·ubuntu·node.js
进击切图仔3 小时前
跨系统时间戳同步问题解决总结
linux
love530love3 小时前
ComfyUI rgthree-comfy Image Comparer 节点无输出问题排查与解决
人工智能·windows·python·comfyui·rgthree-comfy·nodes 2.0·vue 节点
badhope3 小时前
Docker从零开始安装配置全攻略
运维·人工智能·vscode·python·docker·容器·github
wsoz3 小时前
文件IO讲解
linux·嵌入式
用户0332126663673 小时前
使用 Python 复制 Excel 工作表
python
mounter6254 小时前
基于MLX设备的Devlink 工具全指南与核心架构演进
linux·运维·服务器·网络·架构·kernel
JaydenAI4 小时前
[LangChain之链]RunnableCallable——将“自由定义”的函数变成标准组件
python·langchain·ai编程