一、本周学习内容

本周的主题从是生成式 AI 应用开发,主要学习了以下内容:

  1. LLM 基础知识:理解大语言模型、Token、推理过程以及模型训练的主要阶段。

  2. Transformer 架构:理解注意力机制、上下文窗口和自回归文本生成。

  3. 模型选型:根据 Jetson 的统一内存、模型参数量和量化精度选择合适的模型。

  4. 本地大模型部署:使用 Ollama 在 Jetson 上运行本地 LLM。

  5. Web 交互:通过 Open WebUI 访问本地推理服务。

  6. API 与 Python 调用:通过 HTTP API 和 Python 程序调用本地模型。

  7. VLM 多模态应用:让模型接收图片并进行内容理解。

  8. 离线语音助手:理解并搭建 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 模型训练的三个主要阶段

  1. 预训练(Pre-training):模型从大量文本中学习语言规律、知识和基本推理能力。

  2. 指令微调(Supervised Fine-Tuning):使用问答或指令数据,让模型学会按照人类要求完成任务。

  3. 对齐阶段(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

完成部署后,需要验证:

  1. Windows 浏览器能够打开 Open WebUI;

  2. 页面能够看到 qwen2.5:7b

  3. 能够进行一轮完整中文对话;

  4. 关闭互联网后,已经下载的模型仍能在局域网内完成推理。

     

     可以选择语言模型: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 的验收方式:

  1. 选择一张包含多个物体的实际图片;

  2. 上传到 VLM 应用;

  3. 提问:“图片中有哪些物体?它们之间是什么关系?”;

  4. 保存输入图片、问题和模型回答的同屏截图;


成功拉取多模态模型

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 预期运行效果

  1. R 开始录音;

  2. 对着麦克风说一句中文;

  3. S 停止录音;

  4. FunASR 输出识别文本;

  5. Qwen2.5 输出中文回答;

  6. 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提供的硬件支持
 

更多推荐