Jetson实践—离线大语言模型应用开发
一、本周学习内容
本周的主题从是生成式 AI 应用开发,主要学习了以下内容:
-
LLM 基础知识:理解大语言模型、Token、推理过程以及模型训练的主要阶段。
-
Transformer 架构:理解注意力机制、上下文窗口和自回归文本生成。
-
模型选型:根据 Jetson 的统一内存、模型参数量和量化精度选择合适的模型。
-
本地大模型部署:使用 Ollama 在 Jetson 上运行本地 LLM。
-
Web 交互:通过 Open WebUI 访问本地推理服务。
-
API 与 Python 调用:通过 HTTP API 和 Python 程序调用本地模型。
-
VLM 多模态应用:让模型接收图片并进行内容理解。
-
离线语音助手:理解并搭建 ASR → LLM → TTS 的本地语音交互链路。
本周深刻理解模型服务、Web 界面、多模态输入和语音外设如何组合成一个完整的边缘 AI 应用。
二、LLM 基础知识整理
2.1 什么是 LLM
LLM(Large Language Model,大语言模型)是一类以大量文本数据训练的神经网络模型。它的基本工作方式不是从数据库中查找一段固定答案,而是根据已有上下文预测下一个 Token,并不断重复这个过程,最终生成完整回答。
一个简化的推理流程可以表示为:
用户输入
↓
Tokenizer 将文本转换为 Token
↓
Transformer 根据上下文计算概率分布
↓
选择或采样下一个 Token
↓
不断重复,直到生成结束标记
2.2 Token
Token 是模型处理文本的基本单位。一个 Token 可能是一个汉字、一个词的一部分、英文单词或标点符号。
Token 会影响以下内容:
输入内容占用的上下文长度;
模型推理所需的计算量;
API 服务的输入、输出统计;
长文本任务的处理能力。
因此,“上下文窗口为 8K、32K 或 128K”表示模型一次能够处理的 Token 数量上限,而不是简单的汉字数量。
2.3 模型训练的三个主要阶段
-
预训练(Pre-training):模型从大量文本中学习语言规律、知识和基本推理能力。
-
指令微调(Supervised Fine-Tuning):使用问答或指令数据,让模型学会按照人类要求完成任务。
-
对齐阶段(Alignment):通过人类反馈或偏好数据,让回答更加安全、自然并符合预期。

在 Jetson 上通常不会从零训练大模型,而是下载已经训练好的模型,通过量化和推理框架在本地运行。
2.4 Transformer 与自回归生成
Transformer 的核心是注意力机制。模型可以根据上下文判断哪些 Token 对当前生成最重要。
自回归生成表示模型每次生成一个新的 Token,再把它加入上下文继续预测。这样能够形成连贯文本,但回答越长,推理时间和内存访问量也会增加。

三、Jetson 上的大模型选型
3.1 选型时需要考虑的因素
Jetson Orin NX 16GB 使用 CPU 与 GPU 共享的统一内存,因此不能只看模型文件能否下载,还要为 CUDA、KV Cache、推理框架、系统进程和 Web 服务预留内存。
| 选型因素 | 主要影响 |
|---|---|
| 参数量 | 参数越多,模型能力通常越强,但内存和计算需求越高 |
| 量化精度 | 4-bit 模型更节省内存,适合 16GB Jetson |
| 上下文窗口 | 上下文越长,KV Cache 占用越大 |
| 语言能力 | 中文场景需要优先选择中文效果较好的模型 |
| 模态 | 文本 LLM 与带视觉编码器的 VLM 内存需求不同 |
| 推理框架 | Ollama、llama.cpp、TensorRT-LLM 的部署复杂度和性能不同 |
3.2 本机推荐路线
本次课程优先选择:
Qwen2.5 7B 量化模型 + Ollama
选择原因:
7B 规模适合 Orin NX 16GB 进行单模型推理;
中文问答能力较好;
Ollama 模型管理和 API 调用方式简单;
可以与 Open WebUI、Python 和语音助手组合。
如果运行 7B 模型时内存压力较大,可以先使用 3B 模型完成服务链路验证,再切换到 7B。运行 LLM/VLM 时不建议同时保留 YOLO、多个 WebUI 和多个大模型实例。

下载好了qwen2.5:3b的模型
四、设备与环境检查
4.1 设备信息
已经确认当前设备信息如下:
| 项目 | 当前环境 |
|---|---|
| 设备型号 | NVIDIA Jetson Orin NX Engineering Reference Developer Kit |
| 核心模块 | NVIDIA Jetson Orin NX 16GB,P-Number p3767-0000 |
| SoC | Tegra234 |
| 架构 | aarch64 |
| 系统 | Ubuntu 22.04 Jammy Jellyfish |
| L4T | R36.4.4 |
| 内核 | 5.15.148-tegra |
| CUDA | 12.6.68 |
| cuDNN | 9.3.0 |
| TensorRT | 10.3.0.30 |
| Docker | 28.2.2 |
4.2 动态库验证结果
此前通过 Python ctypes 完成动态库加载测试,结果如下:
[PASS] libcudart.so.12
[PASS] libcudnn_ops.so.9
[PASS] libnvinfer.so.10
[PASS] TensorRT Python: 10.3.0
这些结果表明 CUDA Runtime、cuDNN 和 TensorRT 已经具备,不需要为了本周任务重新刷机。
4.3 Docker GPU 环境
已经验证:
Docker service: active
Default Runtime: nvidia
该环境已经成功运行过 Ultralytics YOLO 容器,说明 Docker、NVIDIA Runtime 和 Jetson GPU 容器链路具备运行 AI 应用的基础。
五、本地 LLM 部署思路:Ollama + Qwen2.5
本节执行的详细步骤如下:
5.1 释放统一内存
运行本地大模型前,建议先停止 YOLO 和其他非必要推理容器:
docker stop ultralytics-yolo open-webui 2>/dev/null || true
free -h
df -h /
docker ps -a
docker stop 只停止容器,不会删除镜像、模型和配置。
5.2 启动 Ollama
本机已经使用 jetson-examples 和 Docker,因此优先沿用容器化 Ollama,不再另外安装一套宿主机 Ollama,避免两套服务争用 11434 端口。
docker ps -a --filter name=ollama
如果 Ollama 容器存在但已停止:
docker start ollama
如果容器尚不存在,可以通过 jetson-examples 启动:
export PATH="$HOME/.local/bin:$PATH"
reComputer run ollama
5.3 拉取并运行模型
docker exec -it ollama ollama pull qwen2.5:7b
docker exec -it ollama ollama list
docker exec -it ollama ollama run qwen2.5:7b
5.4 模型能力验证
测试能力可以从中文表达、逻辑推理、代码、Jetson 专业知识和格式遵循几个方面测试。先在 Ollama 对话中输入:
1.中文解释能力
请用初学者能理解的语言,在150字以内解释什么是大语言模型,并举一个生活中的例子。

2.Jetson 与边缘 AI
比较云端AI和Jetson本地AI在延迟、隐私、成本、功耗和网络依赖方面的区别,用表格输出。

3.编程能力
写一个Python函数,输入一张图片,依次完成灰度化、高斯模糊和Canny边缘检测,并把三个结果保存到指定目录。

4.逻辑推理
一个程序处理100张图片需要20秒。如果优化后单张处理时间降低30%,但初始化额外需要2秒,总耗时是多少?写出计算过程。

预期效果:终端能够显示模型生成的中文回答,并且回答过程完全由 Jetson 上的本地模型完成。
六、通过 Open WebUI 访问本地模型
Ollama 提供模型服务,Open WebUI 提供类似在线聊天工具的浏览器界面。两者的关系如下:
Windows 浏览器
↓
Open WebUI
↓
Ollama API(11434)
↓
Qwen2.5 7B
完成部署后,需要验证:
-
Windows 浏览器能够打开 Open WebUI;
-
页面能够看到
qwen2.5:7b; -
能够进行一轮完整中文对话;
-
关闭互联网后,已经下载的模型仍能在局域网内完成推理。
可以选择语言模型:qwen2.5:3b和多模态模型lllava:7b

qwen2.5:3b模型验证:


lllava:7b模型验证:
首次下载模型和容器仍然需要网络;“离线运行”指模型与依赖已经准备完成后,核心推理不再依赖云端 API。
七、通过 API 和 Python 调用 Ollama
7.1 curl 调用
Ollama API 默认端口为 11434。可以在 Jetson 上测试:
curl http://127.0.0.1:11434/api/chat \
-d '{
"model": "qwen2.5:7b",
"messages": [
{"role": "user", "content": "请介绍一下边缘生成式 AI。"}
],
"stream": false
}'
预期结果:终端返回 JSON,其中包含模型生成的回答。
7.2 Python 调用
import requests
url = "http://127.0.0.1:11434/api/chat"
payload = {
"model": "qwen2.5:7b",
"messages": [
{
"role": "user",
"content": "请用中文解释什么是 VLM。",
}
],
"stream": False,
}
response = requests.post(url, json=payload, timeout=300)
response.raise_for_status()
print(response.json()["message"]["content"])
这一部分说明本地大模型不仅可以通过网页聊天,还可以作为服务被其他 Python 应用调用。
八、VLM 多模态应用
8.1 多模态概念
VLM(Vision Language Model)能够同时处理图片和文本。与第二周的 YOLO 目标检测不同,VLM 不只是输出类别和检测框,还可以理解图像内容并使用自然语言回答问题。
两种视觉任务的区别:
| 对比项 | YOLO | VLM |
|---|---|---|
| 主要任务 | 目标检测、定位 | 图像理解、描述和问答 |
| 输出 | 类别、置信度、检测框 | 自然语言回答 |
| 优点 | 速度快、结果结构化 | 语义理解能力更强 |
| 典型应用 | 实时检测、安防、质检 | 图片问答、内容分析、场景理解 |
8.2 多模态能力验证
VLM Demo 的验收方式:
-
选择一张包含多个物体的实际图片;
-
上传到 VLM 应用;
-
提问:“图片中有哪些物体?它们之间是什么关系?”;
-
保存输入图片、问题和模型回答的同屏截图;

成功拉取多模态模型
lllava:7b模型理解图片,并用中文描述图片里面的内容








也可以让模型直接读取文件夹里面的图片,一次性给出所有的结果
这一部分说明本地大模型有识别图片的能力,即具有多模态能力。
九、ASR → LLM → TTS 离线语音助手
9.1 完整处理链路
USB 麦克风 / reSpeaker Flex
↓
FunASR:语音转文字
↓
Ollama + Qwen2.5 7B:生成回答
↓
Coqui TTS:文字转语音
↓
扬声器播放
该方案把三种能力组合在一起:
ASR 负责“听懂”;
LLM 负责“理解和回答”;
TTS 负责“说出来”。
9.2 为什么选择课程项目一
课程提供了 FunASR + Qwen2.5 7B + Coqui TTS 路线,以及更复杂的 NVIDIA Riva 路线。Orin NX 16GB 优先选择项目一,因为它的硬件要求和部署复杂度更适合当前设备。Riva 路线更适合内存更大的 AGX Orin。
9.3 运行前检查
lsusb
arecord -l
aplay -l
先录制并回放 5 秒音频:
mkdir -p ~/project/seeedstudio/week3/audio
arecord -f S16_LE -r 16000 -c 1 -d 5 \
~/project/seeedstudio/week3/audio/mic_test.wav
aplay ~/project/seeedstudio/week3/audio/mic_test.wav
只有先确认麦克风和扬声器正常,才能继续排查模型链路。
9.4 预期运行效果
-
按
R开始录音; -
对着麦克风说一句中文;
-
按
S停止录音; -
FunASR 输出识别文本;
-
Qwen2.5 输出中文回答;
-
Coqui TTS 合成并播放语音。
以下是在Jetson上面实现 ASR + LLM + TTS 流水线的完整测试项目,最终演示如下所示:
reComputer + Reachy Mini 语音 LLM



程序正常启动后,我们可以用键盘上的按键控制录制的R开始和S停止。录制停止后,程序会调用本地大型语言模型以生成响应。
十、本周实践完成情况
| 实践任务 | 当前状态 | 说明 |
|---|---|---|
| Jetson 基础环境复核 | ✅ 已完成 | 设备、L4T、CUDA、cuDNN、TensorRT 已确认 |
| Docker NVIDIA Runtime | ✅ 已完成 | Docker active,默认 Runtime 为 nvidia |
| 模型选型 | ✅ 已完成 | 优先采用 Qwen2.5 7B 量化模型 |
| SSH 连接 | ✅ 已完成 | Windows PowerShell 可正常 SSH 登录 |
| Ollama + Qwen2.5 7B | ✅ 已完成 | 保存了模型列表和中文问答输出 |
| Open WebUI | ✅ 已完成 | 保存了页面和对话截图 |
| API / Python 调用 | ✅ 已完成 | 保存了 JSON 与 Python 输出 |
| VLM Demo | ✅ 已完成 | 采用lllava:7b模型展示了多模态模型的能力 |
| ASR → LLM → TTS | ✅ 已完成 | 在Jetson上面实现了在reComputer Jetson 上部署本地语音 LLM |
十一、本周学习总结
通过本周学习,我认识到在 Jetson 上部署生成式 AI 是一个完整的系统工程,而不仅是安装模型文件。模型能否稳定运行,取决于模型参数量、量化方式、统一内存、Docker Runtime、网络代理、端口映射和外设状态。
对于 Jetson Orin NX 16GB,比较合理的实践路线是:
先验证基础环境
→ 再运行 Ollama 单模型
→ 接入 Open WebUI
→ 完成 API / Python 调用
→ 体验 VLM
→ 最后组合 ASR、LLM 和 TTS
与第二周 YOLO 实践相比,YOLO 更强调实时检测和结构化输出,而本周 LLM/VLM 更强调自然语言生成、多模态理解和应用组合。
感谢@seeedstudio提供的硬件支持
更多推荐

所有评论(0)