Jetson Orin Nano 刷机、Docker GPU 环境与大语言模型部署实践(Ollama / vLLM)

Jetson Orin Nano 虽然只有 8GB 内存,但仍然可以运行一些 7B 以下的大语言模型。虽然性能无法满足生产需求,但对于学习 LLM 推理原理、GPU推理框架、模型部署方式 非常有帮助。

本文记录 Jetson Orin Nano 从 刷机 → 环境配置 → Docker GPU → LLM部署(Ollama / vLLM) 的完整实践流程。


一、Jetson Orin Nano 刷机

1 进入 Recovery 模式

Jetson Orin Nano 刷机需要进入 Force Recovery Mode

步骤:

  1. 短接 2号和3号针脚

  2. 使用 USB 数据线连接电脑

  3. 给 Jetson Orin Nano 上电

此时设备进入 Recovery模式,可以被电脑识别。


2 安装 SDK Manager

下载:

https://developer.nvidia.com/sdk-manager

SDK Manager 2.4.0 开始:

  • 支持 Windows 直接刷机

  • 不再必须使用 Ubuntu 主机


3 选择刷写组件

SDK Manager 会显示三个组件:

组件 作用
Jetson Linux Jetson 操作系统
Jetson Runtime Components AI运行库,运行 AI 推理程序
Jetson SDK Components 开发工具

如果只是运行模型通常只选择:Jetson Linux Jetson、Runtime Components即可。


4 刷机过程中两个提示

第一次弹窗

配置:

  • Ubuntu 用户名

  • 密码

  • 安装位置

推荐:NVMe 性能最好。

随后会提示 此时 SDK Manager 会提示连接中断,这是正常现象。此时需要重新给 Jetson 上电(重启设备),注意不是重新插 USB


第二次弹窗

选择网络连接方式:

USB Ethernet

推荐:USB SDK Manager 会通过 USB 虚拟网卡连接设备。


二、GPU 驱动检查

执行:

nvidia-smi
可能输出:
Driver Version: 540.5.0
CUDA Version: 12.6
GPU: Orin (nvgpu)

三、安装 jtop(Jetson 监控工具)

jtop 是 Jetson 平台非常常用的监控工具。

可以实时查看:

  • CPU

  • GPU

  • 内存

  • 温度

  • 功耗

  • GPU频率

安装:

sudo apt update
sudo apt install python3-pip python3-setuptools -y

sudo pip3 install -U jetson-stats

启动服务:

sudo systemctl restart jtop.service

重启系统:

sudo reboot

运行:

jtop

四、安装 NVIDIA Docker GPU 支持

Docker 默认 无法使用 GPU,需要安装:nvidia-container-toolkit 它的作用是允许 Docker容器访问 GPU、CUDA、驱动设备

安装:

sudo apt update
sudo apt install nvidia-container-toolkit

重启 docker:

sudo systemctl restart docker

加入 docker 用户组:

sudo usermod -aG docker $USER
newgrp docker

配置默认 GPU Runtime

编辑:/etc/docker/daemon.json,加入"default-runtime": "nvidia"

{
  "runtimes": {
    "nvidia": {
      "args": [],
      "path": "nvidia-container-runtime"
    }
  },
  "default-runtime": "nvidia"
}

检查 runtime 是否生效:

docker info | grep -i runtime
应该看到:
Runtimes: nvidia runc io.containerd.runc.v2 
Default Runtime: nvidia
检查 NVIDIA container 组件
dpkg -l | grep nvidia-container

常见组件:

  • nvidia-container-toolkit

  • nvidia-container-runtime

  • libnvidia-container

应包含nvidia-container-toolkit

五、安装 JetPack AI 软件栈

JetPack 是 NVIDIA 为 Jetson 平台提供的 官方 AI 软件栈,可以理解为 Jetson 上运行 AI 应用的完整基础环境。

JetPack 中主要包含以下核心组件:

组件 作用
CUDA GPU 并行计算框架
cuDNN 深度学习加速库
TensorRT 深度学习推理优化引擎
VPI 视觉处理库
Multimedia API 视频编解码与图像处理

这些组件共同构成 Jetson 的 AI 推理运行环境
在运行 PyTorch、TensorRT、vLLM、Ollama 等 AI 推理程序时,都需要依赖 JetPack 中提供的 GPU 计算库。

在本文的环境中,安装 JetPack 的主要作用是:

  • 提供 CUDA GPU 计算能力

  • 提供 深度学习推理加速库

  • 为后续 Docker GPU 容器、LLM 推理框架 提供底层支持

简单理解:JetPack = Jetson 的 AI 运行环境

安装:

sudo apt update
sudo apt install nvidia-jetpack

安装完成后可以检查 CUDA 是否正常:

nvcc --version

如果输出类似信息:

Cuda compilation tools, release 12.x

说明 CUDA 已正确安装,JetPack AI 环境配置完成。


六、安装 jetson-containers

项目:https://github.com/dusty-nv/jetson-containers

它的作用:

封装复杂的 Docker GPU 运行参数

例如:

  • GPU runtime

  • 设备映射

  • 网络

  • CUDA版本匹配

安装:

git clone https://github.com/dusty-nv/jetson-containers
cd jetson-containers

./install.sh
检查是否安装成功:
jetson-containers list

检查软链接:

ls -l /usr/local/bin/jetson-containers
设置数据目录权限:
sudo chown -R $USER:$USER ~/jetson-containers/data
由於 Jetson-container項目更新十分頻繁,因此每次要創建項目時,建議先執行以下指令進行更新:
jetson-containers update

七、Ollama 部署大语言模型

参考:https://www.jetson-ai-lab.com/tutorials/ollama/

1. 启动 Ollama

使用 jetson-containers

jetson-containers run --name ollama $(autotag ollama)

这个命令会自动:

  • 匹配 JetPack 版本

  • 自动添加 GPU

  • 自动配置 CUDA

模型默认存储在:./jetson-containers/data/models/ollama/models该路径会被自动挂载到容器。


使用 Docker 直接运行

docker run --runtime nvidia -d \
--name ollama \
--network host \
--restart always \
--shm-size=8g \
-v /data/ollama/models:/data/models/ollama/models \
-v /data/ollama/logs:/data/logs \
dustynv/ollama:0.6.8-r36.4
 

2. 升级 Docker 中的 Ollama

问题:dustynv 镜像中的 Ollama 版本通常较旧。例如:0.6.8 而官方版本可能已经到:0.17.x 某些新模型:例如:qwen3.5 可能无法运行。

1):使用 jetson-containers 重新构建

jetson-containers build ollama
优点:
  • 自动适配 JetPack

  • 自动安装依赖

检查生成的 images

docker images | grep ollama

你应该能看到类似:

ollama:r36.5.tegra-aarch64-cu126-22.04-ollama

2):在容器内升级

进入容器:

docker exec -it ollama bash
安装工具:
apt-get update
apt-get install -y curl zstd

安装最新版:

curl -fsSL https://ollama.com/install.sh | sh

验证:

ollama --version

固化镜像

清理垃圾:

rm -rf /tmp/*.zst
apt-get clean
rm -rf /var/lib/apt/lists/*
卸载临时工具:
apt-get purge -y curl zstd

提交镜像:

docker commit \
--change='ENTRYPOINT ["ollama", "serve"]' \
ollama \
jetson-ollama:v0.17.7-jetpack6
docker commit \
--change='ENTRYPOINT ["bash"]' \
ollama \
jetson-ollama:v0.17.7-jetpack6

3):Docker 镜像瘦身

提交后的镜像可能非常大大约14GB(升级前原版本大约9GB)甚至更大,可以使用docker 的导入导出,镜像体积通常会缩减 3GB - 5GB。

原理:编写一个简单的 Dockerfile,把那个 原版 镜像里编译好的 ollama 二进制文件,放到一个精简的 Runtime 镜像里,Runtime 镜像只包含运行必需的共享库(.so),加上提取出的 Ollama 二进制和 Runners

新建一个Dockerfile.slim:

# ========== 阶段 1: 编译 v0.17.7 ==========
FROM nvcr.io/nvidia/l4t-jetpack:r36.4.0 AS builder
RUN apt-get update && apt-get install -y wget git build-essential cmake
RUN wget https://go.dev/dl/go1.24.1.linux-arm64.tar.gz && tar -C /usr/local -xzf go1.24.1.linux-arm64.tar.gz
ENV PATH="/usr/local/cuda/bin:/usr/local/go/bin:${PATH}"

WORKDIR /build
# 显式拉取 v0.17.7 标签
RUN git clone --depth 1 --branch v0.17.7 https://github.com/ollama/ollama.git
WORKDIR /build/ollama

# 注入版本号编译
RUN go generate ./... && \
    go build -trimpath -ldflags "-X github.com/ollama/ollama/version.Version=v0.17.7 -X github.com/ollama/ollama/server.mode=release" -o ollama .

# ========== 阶段 2: 组装精简版 ==========
FROM nvcr.io/nvidia/l4t-cuda:12.6.11-runtime

# 1. 目录配置 (对齐原版路径)
ENV OLLAMA_HOST=0.0.0.0
ENV OLLAMA_MODELS=/data/models/ollama/models
ENV OLLAMA_LOGS=/data/logs/ollama.log
ENV LD_LIBRARY_PATH="/usr/lib/ollama:/usr/local/cuda/lib64:/usr/lib/aarch64-linux-gnu/tegra:${LD_LIBRARY_PATH}"
ENV OLLAMA_RUNNERS_DIR=/usr/lib/ollama

RUN mkdir -p /data/models/ollama/models /data/logs /usr/lib/ollama

# 2. 拷贝核心文件
COPY --from=builder /build/ollama/ollama /usr/bin/ollama
COPY --from=ollama:r36.5.tegra-aarch64-cu126-22.04-ollama /opt/ollama/build/lib/ollama /usr/lib/ollama

RUN echo "#!/bin/bash\n\
echo \"Starting ollama server\"\n\
echo \"\"\n\
echo \"OLLAMA_HOST    \$OLLAMA_HOST\"\n\
echo \"OLLAMA_LOGS    \$OLLAMA_LOGS\"\n\
echo \"OLLAMA_MODELS  \$OLLAMA_MODELS\"\n\
echo \"\"\n\
\n\
# 1. 后台启动服务\n\
ollama serve > \$OLLAMA_LOGS 2>&1 &\n\
\n\
# 2. 等待服务启动 (使用 Bash 原生方式探测 11434 端口)\n\
echo \"Waiting for Ollama to be ready...\"\n\
while ! timeout 1 bash -c \"echo > /dev/tcp/localhost/11434\" 2>/dev/null; do\n\
  sleep 1\n\
done\n\
\n\
echo \"\"\n\
echo \"ollama server is now started, and you can run commands here like 'ollama run gemma3'\"\n\
echo \"\"\n\
\n\
# 3. 进入交互式 Shell\n\
exec /bin/bash" > /start_ollama.sh && chmod +x /start_ollama.sh

# 4. 关键:强制设置 ENTRYPOINT 为我们的脚本,覆盖掉 NVIDIA 的默认输出
ENTRYPOINT ["/bin/bash", "/start_ollama.sh"]

执行以下命令重新构建:

docker build -t ollama:jetson-slim-v0.17.7 -f Dockerfile.slim .

上图

截屏2026-03-10 13.46.44

3. Ollama 常用命令

ollama list # 查看本地模型
ollama pull qwen2.5:7b # 拉取模型
ollama run qwen2.5:7b # 运行模型
ollama rm qwen2.5:7b # 删除模型
ollama show qwen2.5:7b # 查看模型信息

ollama serve # 启动服务
pkill ollama # 停用服务

八、vLLM 部署大模型

官方支持:https://www.jetson-ai-lab.com/models/

Jetson 官方更推荐vLLM而不是 Ollama。

原因:

  • 推理性能更高

  • 支持 OpenAI API

  • 支持更多模型

拉取镜像

docker pull ghcr.io/nvidia-ai-iot/vllm:latest-jetson-orin

这个镜像:

  • 专门为 Jetson 编译

  • CUDA 已适配

  • 支持最新 vLLM

启动 vLLM并运行模型

docker run -it --rm \
--runtime=nvidia \
--network host \
-v /data/vllm/models:/models \
ghcr.io/nvidia-ai-iot/vllm:latest-jetson-orin \
vllm serve Qwen/Qwen3-4B-AWQ --port 8000 \
  --quantization awq \
  --gpu-memory-utilization 0.55 \
  --enforce-eager \
  --max-model-len 4096

启动容器后运行模型

docker run --rm -it \
--runtime nvidia \
--network host \
--shm-size=8g \
--ulimit memlock=-1 \
--ulimit stack=67108864 \
-v /data/vllm/models:/models \
ghcr.io/nvidia-ai-iot/vllm:latest-jetson-orin \
bash
在容器内:
vllm serve Qwen/Qwen3-4B-AWQ --port 8000 \
  --quantization awq \
  --gpu-memory-utilization 0.55 \
  --enforce-eager \
  --max-model-len 4096

调用:

curl http://localhost:8000/v1/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "Qwen/Qwen3-4B-AWQ",
    "prompt": "你好,请介绍一下自己",
    "max_tokens": 128,
    "temperature": 0.7
  }'

Docker run 参数说明

常见参数:

参数 作用
--runtime nvidia 启用 GPU
--network host 使用宿主机网络
--shm-size 共享内存
--rm 退出删除容器
-it 交互模式
-v 挂载目录
-e 设置环境变量
--ulimit 系统资源限制

例如:--shm-size=8g 用于:增加共享内存,防止模型加载失败。

vLLM 启动参数说明

参数说明:

参数 作用
--port API端口
--tp-size tensor parallel数量
--mem-fraction-static GPU显存使用比例
--context-length 最大上下文长度

高级参数:

参数 作用
--reasoning-parser 推理模型解析
--speculative-algo speculative decoding
--speculative-num-steps 推测步数

这些参数主要用于:提高推理速度

HuggingFace 模型管理

安装 CLI:

pip install huggingface_hub

登录:

huggingface-cli login

常用命令:

huggingface-cli scan-cache # 查看缓存模型
huggingface-cli download Qwen/Qwen3.5-4B # 下载模型
huggingface-cli delete-cache # 删除缓存
~/.cache/huggingface # 查看缓存位置

九、Open WebUI

Open WebUI 是 Ollama 的 Web 界面。

vLLM 默认只有 API,可以使用 Open WebUI

为Ollama启动

docker run -d \
--network=host \
-v open-webui:/app/backend/data \
-e OLLAMA_BASE_URL=http://127.0.0.1:11434 \
--name open-webui \
--restart always \
ghcr.io/open-webui/open-webui:main

为vLLM启动

docker run -d \ 
--network host \ 
-v open-webui:/app/backend/data \ 
-e OPENAI_API_BASE=http://127.0.0.1:8000/v1 \ 
--name open-webui \ 
ghcr.io/open-webui/open-webui:main

访问:http://JETSON_IP:8080 即可使用 Web UI。


十、Jetson Orin Nano 运行模型建议

推荐模型:

模型 推荐
Qwen2.5-1.5B 流畅
Qwen2.5-3B 可用
Qwen2.5-7B 勉强

量化版本:Q4 Q5 更适合 8GB 设备。


总结

Jetson Orin Nano 运行 LLM 的软件架构:

Jetson Linux
     ↓
JetPack (CUDA + TensorRT)
     ↓
NVIDIA Container Toolkit
     ↓
Docker
     ↓
LLM Runtime
 ├── Ollama
 └── vLLM
 
其中:
工具 特点
Ollama 简单易用
vLLM 推理性能更强
posted @ 2026-03-09 01:40  ejiyuan  阅读(1240)  评论(1)    收藏  举报