你可能听过“边缘计算”,但真正做过大模型本地化部署的朋友都知道,一旦脱离了云,就意味着不能再依赖高算力和稳定网络。
所以我们第一步必须搞清楚:
需求场景 | 云端问题 | 边缘优势 |
---|---|---|
工业控制系统 | 网络不稳定、响应不及时 | 实时推理、本地执行 |
家庭语音助手 | 用户隐私数据上传敏感 | 本地语音识别 + 本地语义响应 |
小型服务机器人 | 无法持续联网 / 延迟太高 | 全流程在设备上完成 |
边缘 AI 的本质:让模型自己跑在“离用户近”的地方,不依赖云,也不怕断网。
NVIDIA 的 Jetson 系列本质是嵌入式 GPU 计算平台,具备:
推荐使用如下型号:
Jetson 型号 | 显存 | 推荐用途 |
---|---|---|
Orin Nano 8GB | 8GB | 文本大模型轻量推理 |
Xavier NX | 8GB | 轻型语音 / 多模态组合 |
Orin NX 16GB | 16GB | 支持中等规模模型部署 |
Jetson 的强大之处在于——它可以只用几瓦功耗,完成完整的模型推理闭环。
Qwen2.5 是阿里推出的全国产 LLM 系列,最大的优势是:
对于 Jetson 这种资源受限的设备:
推荐部署 Qwen2.5-1.8B-chat 量化版本(int4 / int8),可将显存占用压缩至 3~4GB,完全适配 Orin Nano。
一些边缘 AI 的实际任务:
任务类型 | 应用示例 |
---|---|
本地问答助手 | 离线语音助手 / 工业控制对话终端 |
图文问答 | 嵌入式视觉问答系统(后续章节我们会扩展) |
指令解析器 | 家居机器人指令拆解、本地 Agent 网关 |
局域网推理服务 | 为家庭 / 实验室提供局域 LLM API |
大模型部署的前提,是让 Jetson 跑起来一个稳定、可复现的 CUDA + Python + PyTorch 环境。这一章我们只讲关键步骤,跳过花哨 UI 操作,直接进入工程部署建议。
设备 | 推荐型号 / 配件 | 说明 |
---|---|---|
主控模块 | Jetson Orin Nano 8GB / NX 16GB | 显存充足,适配1.8B模型 |
散热系统 | 双风扇铝壳散热 + 外壳通风设计 | 持续推理不降频 |
电源适配 | 65W 电源适配器,稳定 12V 输出 | 推荐独立供电,不走USB |
存储 | M.2 NVMe SSD + SD 卡 32GB | 模型加载更快 / 防止 root 滿盘 |
屏幕(选配) | HDMI 小屏 / OLED 调试屏 | 可显示 API / 温度 / 状态日志 |
Jetson 默认运行 Ubuntu 20.04 / JetPack SDK。推荐:
sudo apt update && sudo apt upgrade
sudo apt install python3-pip python3-venv
pip3 install -U pip setuptools
从官方提供的预编译版本安装:
# 官方 Jetson wheel 安装地址:https://forums.developer.nvidia.com/t/pytorch-for-jetson/
pip3 install torch-1.13.0-cp38-cp38-linux_aarch64.whl
pip3 install transformers accelerate
pip3 install ctransformers
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
make LLAMA_CUBLAS=1
问题 | 解决建议 |
---|---|
pip 无法安装 | 使用 --break-system-packages 开启 |
CUDA 内核无法加载 | JetPack版本不兼容,建议重刷镜像 |
显存爆炸 / 卡死 | 模型未量化 / 无分页交换 / SWAP过小 |
电源不足频繁重启 | 外接供电不足,务必用≥65W稳压适配器 |
大模型的格式不是细节,而是决定你是否能跑得起来的核心前提。在 Jetson 上,我们优先考虑的是:
✅ Qwen2.5-1.8B-Chat
模型维度 | 参数量 | 优势说明 |
---|---|---|
基础语言模型 | 1.8B | 精度可控、响应速度快、部署资源友好 |
Chat对话优化 | 是 | 适合问答、多轮交互、小Agent接口 |
多模态支持 | 暂无 | 可后续替换为 Qwen-VL 小模型组合 |
更大的模型(如 Qwen2.5-7B)也能跑,但 Orin Nano 必须搭配 int4 精量化 + 分片加载,否则容易超显存崩溃。
最轻量、最适合 Jetson 的格式:GGUF(用于 llama.cpp)
1️⃣ 克隆 llama.cpp 并编译 GPU 支持版本:
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
make LLAMA_CUBLAS=1
2️⃣ 将 HF 模型转换为 GGUF 格式
使用
transformers
官方转换脚本(需 Python ≥3.9)
pip install huggingface_hub transformers
python convert.py \
--model-path Qwen/Qwen2.5-1.8B-Chat \
--outfile qwen2.5-1.8B.gguf \
--dtype q4_0
推荐量化等级:
q4_0
:推理速度快,精度保持良好(Jetson 主推)q2_k
:更低显存版本,适合极限资源情况3️⃣ 推理测试:
./main -m qwen2.5-1.8B.q4_0.gguf -p "你好,请自我介绍一下" -n 128
ONNX 是 PyTorch → 高性能引擎的桥梁格式,适用于:
1️⃣ 安装依赖:
pip install onnx onnxruntime transformers
2️⃣ 转换为 ONNX:
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2.5-1.8B-Chat", torch_dtype=torch.float16).eval()
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2.5-1.8B-Chat")
dummy_input = tokenizer("你好", return_tensors="pt").input_ids
torch.onnx.export(model, (dummy_input,), "qwen25.onnx", input_names=["input_ids"], output_names=["output"])
3️⃣ 推理接口测试:
import onnxruntime
session = onnxruntime.InferenceSession("qwen25.onnx")
注意:Jetson 上建议使用 fp16
模型输入,节省资源。
工具 | 用途 |
---|---|
onnx2trt |
将 ONNX 转换为 TRT 引擎 |
TensorRT runtime | 执行 .engine 文件 |
TensorRT-LLM | 新版支持长文本 / KV cache 推理 |
/usr/src/tensorrt/bin/trtexec \
--onnx=qwen25.onnx \
--saveEngine=qwen25.engine \
--fp16
import tensorrt as trt
# 加载并执行 engine...
缺点:调试复杂、接口多变、报错少解释,不建议新手第一步就直接用。
格式 | 资源占用 | 部署复杂度 | 推理速度 | 适合场景 |
---|---|---|---|---|
GGUF | ⭐⭐⭐ | ⭐ | ⭐⭐⭐⭐ | llama.cpp × C++/Python 快速集成 |
ONNX | ⭐⭐ | ⭐⭐ | ⭐⭐ | 可控型 Python 模拟部署 |
TensorRT | ⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | 超低延迟部署 / 强推理场景 |
搞定模型格式,只是部署的起点。要真正跑得起来、集成得进去,还需要选好推理框架。对于 Jetson 这种资源受限设备,我们重点推荐:
llama.cpp
:低功耗 + 高兼容性 + int4 支持好ctransformers
:Python API 友好,适合快速测试或服务封装FasterTransformer
:对 TensorRT 有一定经验者可选,性能极致git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
make LLAMA_CUBLAS=1
编译后生成 ./main
命令行推理入口,支持 GGUF 格式。
./main -m models/qwen2.5-1.8B.q4_0.gguf \
-p "请你自我介绍一下" \
-n 128 --color --temp 0.7
-n
:生成 token 数--color
:输出带颜色标记,适合调试--temp
:控制生成多样性./main -m qwen.gguf --interactive --color
键入一行即可触发模型交互,非常适合终端测试/嵌入式原型。
如需在 Jetson 上通过 Python 接口调用 GGUF 模型,推荐使用 ctransformers
。
pip install ctransformers
from ctransformers import AutoModelForCausalLM
llm = AutoModelForCausalLM.from_pretrained(
'models/',
model_file='qwen2.5-1.8B.q4_0.gguf',
model_type='llama',
gpu_layers=30 # CUDA 加速层数,默认 0 可调高
)
prompt = "请你介绍一下 Jetson 的特点。"
print(llm(prompt, max_new_tokens=128, stream=True))
如你选择将模型转为 .engine
文件并追求极致性能,可使用 FasterTransformer。
ONNX -> TensorRT Engine (.plan/.engine)
↓
FasterTransformer
+ KV Cache 支持
不建议新手直接走这条路径,调试门槛较高。
目标 | 框架推荐 | 输出建议 |
---|---|---|
原型测试 | llama.cpp CLI | 用 main 命令行测试结构 |
Python 快速集成 | ctransformers | 返回 JSON 格式 + stream |
Web 服务封装 | FastAPI + GGUF | /chat 接口,输入 prompt,返回流 |
轻量 Agent 接入 | LangChain 模型类封装 | 兼容 tools / memory / history |
建议构建一个推理性能测试脚本:
import time
prompt = "你好,请你介绍一下 Jetson 设备。"
start = time.time()
response = llm(prompt, max_new_tokens=128)
end = time.time()
tokens = len(response.split())
print(f"耗时: {end-start:.2f}s, tokens/s: {tokens/(end-start):.2f}")
输出示例:
耗时: 3.72s, tokens/s: 34.4
建议记录每次推理的 token 数、响应时间、显存占用(可用 tegrastats
实时查看 GPU 使用率)
搞定模型格式,只是部署的起点。要真正跑得起来、集成得进去,还需要选好推理框架。对于 Jetson 这种资源受限设备,我们重点推荐:
llama.cpp
:低功耗 + 高兼容性 + int4 支持好ctransformers
:Python API 友好,适合快速测试或服务封装FasterTransformer
:对 TensorRT 有一定经验者可选,性能极致git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
make LLAMA_CUBLAS=1
编译后生成 ./main
命令行推理入口,支持 GGUF 格式。
./main -m models/qwen2.5-1.8B.q4_0.gguf \
-p "请你自我介绍一下" \
-n 128 --color --temp 0.7
-n
:生成 token 数--color
:输出带颜色标记,适合调试--temp
:控制生成多样性./main -m qwen.gguf --interactive --color
键入一行即可触发模型交互,非常适合终端测试/嵌入式原型。
如需在 Jetson 上通过 Python 接口调用 GGUF 模型,推荐使用 ctransformers
。
pip install ctransformers
from ctransformers import AutoModelForCausalLM
llm = AutoModelForCausalLM.from_pretrained(
'models/',
model_file='qwen2.5-1.8B.q4_0.gguf',
model_type='llama',
gpu_layers=30 # CUDA 加速层数,默认 0 可调高
)
prompt = "请你介绍一下 Jetson 的特点。"
print(llm(prompt, max_new_tokens=128, stream=True))
如你选择将模型转为 .engine
文件并追求极致性能,可使用 FasterTransformer。
ONNX -> TensorRT Engine (.plan/.engine)
↓
FasterTransformer
+ KV Cache 支持
不建议新手直接走这条路径,调试门槛较高。
目标 | 框架推荐 | 输出建议 |
---|---|---|
原型测试 | llama.cpp CLI | 用 main 命令行测试结构 |
Python 快速集成 | ctransformers | 返回 JSON 格式 + stream |
Web 服务封装 | FastAPI + GGUF | /chat 接口,输入 prompt,返回流 |
轻量 Agent 接入 | LangChain 模型类封装 | 兼容 tools / memory / history |
建议构建一个推理性能测试脚本:
import time
prompt = "你好,请你介绍一下 Jetson 设备。"
start = time.time()
response = llm(prompt, max_new_tokens=128)
end = time.time()
tokens = len(response.split())
print(f"耗时: {end-start:.2f}s, tokens/s: {tokens/(end-start):.2f}")
输出示例:
耗时: 3.72s, tokens/s: 34.4
建议记录每次推理的 token 数、响应时间、显存占用(可用 tegrastats
实时查看 GPU 使用率)
配置项 | 内容 |
---|---|
设备型号 | Jetson Orin Nano 8GB |
系统版本 | JetPack 5.1.2 + Ubuntu 20.04 |
CUDA / cuDNN | CUDA 11.4 / cuDNN 8.6 |
模型版本 | Qwen2.5-1.8B-Chat(int4 GGUF) |
推理框架 | llama.cpp / ctransformers |
测试 prompt 示例 | “请你介绍一下 Jetson 的特点。” |
指标项 | 含义说明 |
---|---|
首字延迟(s) | 从输入到第一个 token 输出的时间 |
tokens/s | 平均每秒生成的 token 数量 |
显存占用(MB) | CUDA 显存使用峰值(nvidia-smi / tegrastats) |
语义准确率 | 人工主观评估的输出质量(满分5分) |
推理方式 | 首字延迟 | tokens/s | 显存占用 | 输出质量评分 |
---|---|---|---|---|
llama.cpp(CLI) | 2.1 s | 38.5 | ~3.4 GB | ⭐⭐⭐⭐(4.2) |
ctransformers(Python) | 2.4 s | 35.6 | ~3.6 GB | ⭐⭐⭐⭐(4.0) |
ONNX(fp16) | 3.8 s | 28.1 | ~4.2 GB | ⭐⭐⭐(3.6) |
TensorRT(优化版) | 1.2 s | 55.7 | ~3.1 GB | ⭐⭐⭐⭐(4.1) |
请你介绍一下 Jetson Orin Nano 的特点。
Jetson Orin Nano 是 NVIDIA 推出的嵌入式 AI 计算平台,具有高性能、低功耗等特点,适用于边缘智能场景。
输出简洁准确,具备“国产 LLM 微调范式”风格,适合部署问答类任务。
通过连续推理 100 条指令,观察 Jetson 性能稳定性:
建议为持续运行配置虚拟内存(swap)以提升稳定性:
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
tokens/s 趋势图:
TensorRT ────────────╮
llama.cpp ───────╮ │
ctransformers ───╮│ │
ONNX ──────╮ ││ │
↓ ↓↓ ↓
28 35 38 55
(建议发布时配一张柱状图或折线图)
场景 | 推荐格式 / 框架 |
---|---|
快速部署 / 测试 | GGUF + llama.cpp / ctransformers |
高并发 / 极致性能 | TensorRT 引擎(搭配调度器) |
局域网 API + UI 展示 | GGUF + Python 接口集成 |
跑通模型只是基础,要实现边缘 AI 的实际价值,我们必须把它变成一个可以被调用 / 被交互 / 被集成的系统。
本章将带你从模型加载 → API 调用 → 局域网 Web 接入,构建一套轻量边缘服务体系。
我们使用 ctransformers
搭配 FastAPI
,构建一个本地可用的 HTTP 接口服务。
pip install fastapi uvicorn ctransformers
main.py
from fastapi import FastAPI, Request
from pydantic import BaseModel
from ctransformers import AutoModelForCausalLM
app = FastAPI()
llm = AutoModelForCausalLM.from_pretrained(
'models/',
model_file='qwen2.5-1.8B.q4_0.gguf',
model_type='llama',
gpu_layers=30
)
class PromptInput(BaseModel):
prompt: str
max_tokens: int = 128
@app.post("/chat")
async def chat(input: PromptInput):
output = llm(input.prompt, max_new_tokens=input.max_tokens)
return {"response": output}
uvicorn main:app --host 0.0.0.0 --port 8000
在同一局域网内访问 http://
即可测试。
pip install gradio
import gradio as gr
def ask_llm(message):
return llm(message, max_new_tokens=128)
gr.ChatInterface(fn=ask_llm).launch(server_name="0.0.0.0", server_port=7860)
访问 http://
即可获得一个边缘 AI 网页助手。
能力模块 | 实现建议 |
---|---|
请求限流 | FastAPI 中添加 max_tokens / 超时判断 |
语义缓存 | Redis / 内存缓存最近 query 结果 |
IP 过滤 | 配置 nginx 反向代理 + IP 白名单 |
VAD 语音接入 | 后续接入 whisper.cpp + vad.py |
指令路由 | 支持 /plan /status 等功能切换 API |
网络结构类型 | 服务部署建议 |
---|---|
单一设备端使用 | localhost + CLI/streamlit 接入即可 |
局域网共享服务 | 配置静态 IP / nginx 网关开放 8000 端口 |
移动设备访问助手 | Web UI 响应式设计 + 移动端调试 |
MQTT / 控制设备桥接 | Jetson 做边缘 Agent / 物理设备控制桥 |
语音输入:
whisper.cpp
/ faster-whisper
(Jetson 兼容)图像输入:
到目前为止,我们已经完成了:
这一章我们不再赘述细节代码,而是从工程架构角度,梳理如何基于当前系统,继续扩展出一个更完整的边缘 AI 应用生态。
升级阶段 | 目标能力 | 推荐方案 |
---|---|---|
当前阶段 | 本地文本问答 / API 服务 | Qwen2.5 + llama.cpp + FastAPI |
多模态阶段 | 加入图像 / 语音感知 | Qwen-VL / Whisper / VAD 集成 |
工具协作阶段 | Agent 能触发动作 / 控制系统 | 加入 Function Calling / 控制模块调用 |
连续对话阶段 | 多轮记忆 / 意图建模 / 状态追踪 | 加入 Memory Buffer / State Tracker |
多智能体阶段 | 多端通信 / 任务协同 / 意图共享 | 构建局域 RAG / LangGraph 多 Agent 协同 |
你可以在现有 API 接口基础上扩展:
whisper.cpp
本地模型当你的模型能感知图文语音、响应用户时,就可以往智能体方向演进:
能力 | 实现建议 |
---|---|
多轮记忆 | 本地 JSON memory + RAG 语义检索 |
工具调用 | FastAPI 内置函数注册 → Agent tool 调度 |
状态感知 | 局部数据库 / 设备状态接口对接 |
多任务链条 | Prompt 中使用 Plan-and-Act 模式串联动作计划 |
运维点 | 建议操作 |
---|---|
启动脚本 | 设置 systemd 自动启动推理服务 |
日志管理 | redirect stdout → log 文件 + tail |
温控管理 | 使用 tegrastats 实时监控 GPU 负载 |
异常恢复 | Watchdog 脚本监测推理服务挂死自动重启 |
[语音输入] [图像上传]
↓ ↓
[ Whisper/VAD ] [ Qwen-VL 图文预处理 ]
↘ ↙
[Qwen2.5-1.8B 本地推理模块]
↓
[ FastAPI 推理服务接口 ]
↓
[ Web UI / 局域设备 / 控制终端 ]
你已掌握如何完成一套完整的国产大模型边缘部署方案:
如果你觉得这篇内容对你有帮助,欢迎:
点赞收藏支持一下,激励我继续写接下来的两篇边缘 AI 技术实战文
评论区聊聊你会把 Jetson × 大模型用在哪些场景