Skip to content

L8 Jetson 端侧推理 ​

目标 ​

  • 熟悉 NVIDIA Jetson 设备的软件栈、功耗模式和监控工具;
  • 在 Jetson 上部署小模型,测量生成速度和功耗;
  • 把同一个模型在服务器 GPU 和 Jetson 上的表现做对比。

端侧设备的算力、内存和功耗都受限,这正是边缘智能研究要面对的条件。

背景 ​

设备软件栈
Jetson Orin 系列(Orin Nano、Orin NX、AGX Orin)JetPack 6.x(Jetson Linux r36,Ubuntu 22.04,CUDA 12)
Jetson ThorJetPack 7.x(Jetson Linux r38 起,CUDA 13)

JetPack 7 的较新版本也开始支持 Orin,但很多现成的容器镜像是为 JetPack 6 构建的,在新版本上可能无法使用 GPU。先确认设备上的 JetPack 版本,再选对应的镜像或安装方式。

Jetson 上的 CPU 和 GPU 共享同一块内存,没有独立显存。模型能不能放下,要看总内存减去系统占用后还剩多少。

第 1 步:认识你的设备 ​

bash
cat /etc/nv_tegra_release          # Jetson Linux 版本
sudo pip3 install jetson-stats     # 安装 jtop,装完重新登录。JetPack 7(Ubuntu 24.04)上要加 --break-system-packages
jtop                               # 图形化查看 CPU、GPU、内存、功耗、温度
sudo tegrastats                    # 命令行持续输出资源和功耗,Ctrl+C 退出

功耗模式:Jetson 有多种功耗模式,性能和功耗差别很大,测试前必须固定并记录:

bash
sudo nvpmodel -q          # 查看当前模式
sudo nvpmodel -m 0        # 切换到模式 0(通常是最高性能,不同型号的编号含义不同)
sudo jetson_clocks        # 把频率锁定到当前模式的最高值,测性能时使用

第 2 步:部署模型 ​

方式一:Ollama 原生安装(最简单)

Ollama 的官方安装脚本支持 Jetson:

bash
curl -fsSL https://ollama.com/install.sh | sh
ollama run qwen3:0.6b --verbose     # --verbose 会在每次回答后打印速度统计

方式二:容器

Jetson 不能直接使用 x86 服务器上的镜像,要用为 Jetson 构建的版本。按 Jetson AI Lab 的 Ollama 教程选择与 JetPack 版本对应的镜像,例如 JetPack 6 可以用 jetson-containers 项目的 dustynv/ollama 镜像:

bash
docker run --runtime nvidia -it --rm --network=host \
  -v ~/ollama:/ollama -e OLLAMA_MODELS=/ollama \
  dustynv/ollama:r36.2.0

--runtime nvidia 让容器使用 Jetson 的 GPU;--network=host 直接使用宿主机网络,不需要端口映射。镜像标签要和设备的 Jetson Linux 版本(r36.x)匹配,Thor 等新设备请使用 NVIDIA 在 GHCR 上发布的镜像(见上面的教程)。

方式三:从源码编译 llama.cpp

镜像不兼容时,直接在设备上编译最可靠:

bash
git clone https://github.com/ggml-org/llama.cpp
cd llama.cpp
cmake -B build -DGGML_CUDA=ON
cmake --build build --config Release -j$(nproc)

编译完成后用 build/bin/llama-bench 测试 GGUF 格式模型的速度。

第 3 步:测速度和功耗 ​

  1. 固定功耗模式并运行 jetson_clocks。
  2. 另开一个终端运行 sudo tegrastats --interval 500 --logfile power.log,记录功耗。
  3. 用 ollama run qwen3:0.6b --verbose 提几个问题,记录输出中的 prompt eval rate(预填充速度)和 eval rate(生成速度,tokens/s)。
  4. 停止记录,从日志里算出推理期间的平均功耗(Orin Nano、Orin NX 上 VDD_IN 一项是整板输入功耗,单位 mW;其他型号的电源轨名称不同,以设备实际输出为准)。

练习:

  • 测 0.6B、1.7B、4B 三个规模的模型,画出“模型大小—生成速度—功耗”的关系。
  • 在不同功耗模式下重复,算出每个 token 消耗的能量(焦耳/token)。
  • 同样的模型在服务器 GPU 上用 L1 的方法测一遍,对比两者的差距。哪些请求适合留在端侧,哪些应该交给云端?这就是方向一的核心问题。

常见问题 ​

  • 内存不够:Jetson 内存是 CPU 和 GPU 共用的,关掉桌面环境(sudo systemctl set-default multi-user.target 后重启)能多出不少可用内存;选更小的模型或更低精度的量化版本。
  • 容器里看不到 GPU:检查是否加了 --runtime nvidia,镜像版本是否和 JetPack 匹配。
  • 速度忽快忽慢:没有运行 jetson_clocks,或者设备过热降频(jtop 里看温度)。

作者:崔涵帅、姚智、王振胜、唐志清 · 边缘智能系统实验室