Jetson Orin NX 部署 Ollama 与 Llama 3.2 实战指南
随着大语言模型(LLM)向边缘侧下沉,如何在资源受限的设备上高效运行推理成为关键。NVIDIA Jetson Orin NX 凭借 100 TOPS AI 算力和统一内存架构,为本地化部署提供了硬件基础。本文将基于 JetPack 5 (Ubuntu 20.04) 环境,演示如何从零搭建 Ollama + Llama 3.2 的 GPU 加速推理平台。
注意: 尽管 Orin NX 算力强劲,但相比桌面级显卡,显存带宽和容量仍是瓶颈。部署时需合理选择模型量化等级,并管理好性能预期。
环境准备与系统检查
硬件与软件基线
| 组件 | 最低要求 | 推荐配置 |
|---|---|---|
| 设备型号 | Jetson Orin NX | Orin NX 16GB |
| 内存 | ≥8GB | 16GB |
| 存储 | ≥32GB | NVMe SSD 256GB+ |
| 系统 | JetPack 5.x | JetPack 5.1.2+ |
软件层面需确保 CUDA 11.4+ 及 cuDNN 8.6+ 已随 JetPack 安装完毕。对于模型存储,建议预留至少 4GB 空间用于加载量化后的 Llama 3.2 模型。
系统状态验证
安装前确认环境无误:
# 查看 L4T 版本
cat /etc/nv_tegra_release
# 查看系统信息
uname -a
lsb_release -a
# 检查 JetPack 组件
apt list --installed | grep nvidia-jetpack
GPU 监控:Jetson 使用 tegrastats 替代 nvidia-smi。
sudo tegrastats
sudo jetson_clocks --show
关注 GR3D_FREQ(GPU 频率)、RAM(内存占用)及 EMC_FREQ(内存带宽)。若磁盘空间紧张,优先将模型文件移至 NVMe SSD。
安装 Ollama(JetPack 5 专用版)
目录规划
为避免污染系统路径,建议采用用户目录隔离安装:
mkdir -p ~/apps/ollama/{bin,lib,tmp}
sudo mkdir -p /data/ollama/models
sudo chown $USER:$USER /data/ollama/models
# 或直接在用户家目录(空间充足时)
mkdir -p ~/.ollama/models
获取与解压
下载官方提供的 ARM64 JetPack 5 版本包:
# 设置代理(如网络受限)
export HTTP_PROXY=http://127.0.0.1:你的端口
export HTTPS_PROXY=http://127.0.0.1:你的端口
# 获取最新版本号
TAG=$(curl -fsSL https://api.github.com/repos/ollama/ollama/releases/latest | grep -m1 '"tag_name"' | cut -d'"' -f4)
echo "Latest version: $TAG"
# 下载专用包
curl -fL "https://github.com/ollama/ollama/releases/download/${TAG}/ollama-linux-arm64-jetpack5.tgz" \
-o ~/apps/ollama/tmp/ollama-jetpack5.tgz
解压并安装二进制文件:
cd ~/apps/ollama/tmp
tar -xzf ollama-jetpack5.tgz
mv bin/ollama ~/apps/ollama/bin/
chmod +x ~/apps/ollama/bin/ollama
# 关键步骤:复制运行库
mkdir -p ~/apps/ollama/lib
cp -r lib/* ~/apps/ollama/lib/
# 验证安装
~/apps/ollama/bin/ollama --version
成功输出应显示类似 ollama version 0.4.8。
配置运行环境
环境变量决定了 Ollama 的行为模式,特别是针对边缘设备的并发限制。
# 当前会话生效
export PATH="$HOME/apps/ollama/bin:$PATH"
export OLLAMA_MODELS="/data/ollama/models"
export OLLAMA_HOST="127.0.0.1:11434"
# 边缘端优化参数
export OLLAMA_NUM_PARALLEL=1
export OLLAMA_CONTEXT_LENGTH=2048
永久保存至 .bashrc:
cat >> ~/.bashrc <<'EOF'
# Ollama Configuration
export PATH="$HOME/apps/ollama/bin:$PATH"
export OLLAMA_MODELS="/data/ollama/models"
export OLLAMA_HOST="127.0.0.1:11434"
export OLLAMA_NUM_PARALLEL=1
export OLLAMA_CONTEXT_LENGTH=2048
EOF
source ~/.bashrc
启动服务与 GPU 验证
启动服务后,务必确认是否调用了 GPU 而非 CPU。
ollama serve
观察日志输出,关键标志如下:
level=INFO source=gpu.go:199 msg="detected GPU" library=cuda compute=8.7 driver=11.4 name="NVIDIA Orin" total="15.7 GiB"
若出现 library=cpu,请检查 lib 目录是否正确复制,以及 CUDA 环境是否正常。此时可在新终端运行 sudo tegrastats 实时监控显存变化。
部署 Llama 3.2 模型
模型选型策略
根据显存余量选择量化版本:
- 入门级:
llama3.2:1b-instruct-q4_0(~1GB),速度最快。 - 平衡型:
llama3.2:3b-instruct-q4_0(~2GB),效果更佳。 - 高精度:
llama3.2:3b-instruct-q8_0(~3.5GB),精度最高。
拉取与测试
保持 ollama serve 运行,执行:
ollama pull llama3.2:1b-instruct-q4_0
ollama list
下载完成后即可交互:
ollama run llama3.2:1b-instruct-q4_0
>>> 介绍一下 NVIDIA Jetson 平台
性能测试可参考首 Token 延迟及生成速度。通常 1B 模型在 Orin NX 上能达到 10-15 tokens/s 的生成速率。
HTTP API 接口调用
Ollama 提供标准的 RESTful API,便于集成到业务系统中。
非流式响应
curl -X POST http://127.0.0.1:11434/api/generate \
-H 'Content-Type: application/json' \
-d '{ "model": "llama3.2:1b-instruct-q4_0", "prompt": "解释什么是边缘计算", "stream": false }' | jq
Python 流式处理
import requests
import json
url = 'http://127.0.0.1:11434/api/generate'
data = {
'model': 'llama3.2:1b-instruct-q4_0',
'prompt': '写一首关于机器人的诗',
'stream': True
}
response = requests.post(url, json=data, stream=True)
for line in response.iter_lines():
if line:
chunk = json.loads(line)
print(chunk['response'], end='', flush=True)
性能优化与调优
功耗与频率控制
默认情况下,Jetson 可能处于节能模式。强制高性能模式可显著提升推理速度:
# 切换到最高性能模式 (MODE_15W_6CORE)
sudo nvpmodel -m 0
# 锁定最高频率
sudo jetson_clocks
内存与上下文管理
export OLLAMA_CONTEXT_LENGTH=1024
export OLLAMA_KEEP_ALIVE=5m
定期清理未使用的模型以释放空间:
ollama rm model_name
du -sh $OLLAMA_MODELS/*
系统服务配置
为了让服务开机自启,配置 systemd 用户服务:
# ~/.config/systemd/user/ollama.service
[Unit]
Description=Ollama AI Model Server
After=network-online.target
[Service]
Type=simple
Restart=always
Environment="PATH=%h/apps/ollama/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin"
Environment="OLLAMA_MODELS=/data/ollama/models"
ExecStart=%h/apps/ollama/bin/ollama serve
LimitNOFILE=65536
[Install]
WantedBy=default.target
启用命令:
systemctl --user daemon-reload
systemctl --user enable ollama
systemctl --user start ollama
若需后台常驻,可能需要 sudo loginctl enable-linger $USER。
实战应用场景
机器人语义导航示例
结合 ROS 或自定义控制逻辑,利用 LLM 解析自然语言指令:
#!/usr/bin/env python3
import json
import requests
class SemanticNavigator:
def __init__(self, ollama_url="http://127.0.0.1:11434"):
self.ollama_url = ollama_url
self.model = "llama3.2:1b-instruct-q4_0"
def parse_navigation_intent(self, user_input: str) -> dict:
prompt = f"""你是一个机器人导航助手。分析以下指令并返回 JSON 格式:
{{"action": "navigate/stop/pause", "landmark": "具体地标名称", "confidence": 0.0-1.0}}
用户指令:{user_input} 只返回 JSON,不要其他解释。"""
response = requests.post(f"{self.ollama_url}/api/generate", json={
"model": self.model,
"prompt": prompt,
"stream": False,
"options": {"temperature": 0.3}
})
try:
return json.loads(response.json()['response'])
except:
return {"action": "unknown", "landmark": None, "confidence": 0.0}
if __name__ == "__main__":
nav = SemanticNavigator()
cmd = "带我去充电桩"
result = nav.parse_navigation_intent(cmd)
print(f"解析结果:{json.dumps(result, ensure_ascii=False)}")
此场景下,建议限制输出长度并使用结构化提示词以提高稳定性。
总结
在 Jetson Orin NX 上运行 LLM 的关键在于平衡算力、内存与功耗。通过上述步骤,我们完成了从环境搭建到服务化的全流程。
性能参考数据:
- 1B 模型:首 Token 延迟 ~2-3 秒,生成速度 ~10-15 tokens/s
- 3B 模型:首 Token 延迟 ~5-8 秒,生成速度 ~5-8 tokens/s
- 功耗:满载约 15W,待机约 5W
遇到显存溢出或推理缓慢时,优先考虑降低 CONTEXT_LENGTH 或切换更小参数量模型。官方文档和社区论坛是后续排查问题的可靠来源。

