🧪 新教程持續更新中 · 由機械臂到傳感器,跟隨教程從零搭建
跳到主要內容

邊緣 AI 部署入門

面向把模型從「訓練好」帶到「跑在邊緣設備上」的開發者。以 NVIDIA Jetson 平台為例。

1. 為什麼需要邊緣部署?

對比雲端推理邊緣推理
延遲網絡往返 50-500ms設備本地 <10ms
隱私數據需上雲數據不出設備
成本持續 GPU 費用一次性硬件
離線斷網不可用完全離線

對於機器人(實時控制)、工業檢測(產線延遲敏感)、隱私敏感場景(醫療/安防),邊緣部署是剛需。

2. 部署路徑總覽

PyTorch 模型
   │  torch.onnx.export

ONNX 模型 ──► TensorRT Engine ──► 推理應用
   │              │
   └──► TorchScript ──► 推理應用(簡化路徑)
路徑加速比(相對原生 PyTorch)適用
TorchScript~1.5-2x快速落地,改動小
ONNX Runtime~2-4x跨平台,生態好
TensorRT5-10x性能優先,Jetson/邊緣最優

3. 快速上手:PyTorch → TensorRT

3.1 導出 ONNX

python
import torch

# 安全加載:weights_only=True 防止反序列化攻擊
model = torch.load('model.pt', map_location='cuda', weights_only=True)
model.eval()

dummy = torch.randn(1, 3, 224, 224).cuda()
torch.onnx.export(
    model, dummy, 'model.onnx',
    input_names=['input'], output_names=['output'],
    opset_version=17,
)

3.2 ONNX → TensorRT Engine

bash
trtexec --onnx=model.onnx \
        --saveEngine=model.engine \
        --fp16 \
        --workspace=2048

3.3 Python 推理

python
import tensorrt as trt
import pycuda.driver as cuda
import pycuda.autoinit

with open('model.engine', 'rb') as f:
    engine = trt.Runtime(trt.Logger()).deserialize_cuda_engine(f.read())
context = engine.create_execution_context()

4. 性能檢查清單

  • [ ] 用 --fp16(半精度)而非 fp32
  • [ ] 輸入分辨率降低到任務可接受下限
  • [ ] 用 trtexec 基準測試確認實際幀率
  • [ ] 機器人場景通常 batch=1 最優
  • [ ] 檢查功率模式(sudo nvpmodel -m 0)

5. 常見問題

Q: TensorRT 報 Unsupported layer?

A: 模型裡有 TensorRT 不支持的算子。對策:換新版本 TensorRT、用 onnx-simplifier、降 opset。

Q: fp16 精度影響大嗎?

A: 大多數 CV 模型幾乎無損;檢測/分割任務建議實測對比 mAP。

Q: 內存不足(workspace)?

A: 降低 workspace 或輸入分辨率;Orin 16GB 版本更從容。

Q: 為什麼用 TensorRT 還是慢?

A: 檢查是否真的用了 GPU(nvidia-smi);確認沒有在 GPU 與 CPU 間反复拷貝數據。


相關鏈接

技術支援