在边缘 AI 部署中,要在严格的工业现场环境下,实现目标检测模型的低延迟推理,同时平台必须统一为 Red Hat Enterprise Linux 8(RHEL 8),以便满足企业合规标准。然而,主流的边缘 AI 推理硬件(如 NVIDIA Jetson 系列)官方支持 Ubuntu,而 RHEL 系统本身对 GPU 驱动和 AI 框架的原生支持较弱。A5数据最终采用了 在 RHEL 8 上运行容器化的 TensorFlow Lite 推理环境,并通过 NVIDIA Jetson 的 TensorRT 加速模块实现边缘推理性能提升。本文将结合真实项目经验,深入讲解硬件选型、软件栈构建、性能优化与定量评测,帮助你在类似场景中快速落地。


一、硬件平台与产品参数

为实现 RHEL 8 体系下的高性能推理,我们选用了 NVIDIA Jetson Xavier NX 作为边缘推理加速单元,并在 RHEL 8 主机上运行容器化环境。主要香港GPU服务器www.a5idc.com硬件参数如下:

硬件型号 关键规格
主机平台 Dell PowerEdge R250(RHEL 8.8)
CPU Intel Xeon E‑2336 (6C/12T, 3.2 GHz)
内存 32 GB DDR4
Jetson 模块 NVIDIA Jetson Xavier NX
GPU 384‑Core Volta GPU with 48 Tensor Cores
内存 8 GB LPDDR4x
存储 16 GB eMMC
网络 1×1 GbE, 1×10 GbE

备注:Jetson Xavier NX 官方运行环境为 Ubuntu 20.04;因此,我们采用 Podman 在主机 RHEL 8 上运行 Jetson 兼容的容器(基于 Ubuntu 20.04 + CUDA/L4T),并通过容器内访问 Jetson GPU 进行推理加速。


二、软件栈选择与架构设计

在 RHEL 8 环境下,我们的关键目标是:

  1. 保持 RHEL 8 系统合规性与运维一致性
  2. 利用 Jetson 的 TensorRT 加速推理
  3. 通过 TensorFlow Lite 提供轻量级推理接口
  4. 实现端到端 CI/CD 与自动更新能力

因此总体架构如下:

+-----------------------------------------------------------+
|                       RHEL 8 Host                          |
|  +-----------------------------------------------------+  |
|  | Podman (RHEL 8 容器运行引擎)                         |  |
|  |                                                     |  |
|  |  +-----------------------------------------------+  |  |
|  |  | Jetson 推理容器 (Ubuntu 20.04 + CUDA + TensorRT)|  |  |
|  |  |                                               |  |  |
|  |  | TensorFlow Lite with TensorRT Delegate         |  |  |
|  |  | 推理服务 (REST/gRPC)                            |  |  |
|  |  +-----------------------------------------------+  |  |
|  +-----------------------------------------------------+  |
+-----------------------------------------------------------+

三、构建环境准备

3.1 在 RHEL 8 安装 Podman

RHEL 8 自带 Podman 包管理,可直接安装:

sudo dnf module list container-tools
sudo dnf module enable container-tools:latest
sudo dnf install -y podman buildah skopeo

3.2 准备 Jetson 兼容的容器镜像

由于 Jetson 运行的是 Ubuntu + NVIDIA L4T(Linux for Tegra),我们从 NVIDIA 官方 L4T 镜像开始构建:

创建 Dockerfile.jetson

FROM nvcr.io/nvidia/l4t-base:r35.2.1

# 安装基础工具与 Python
RUN apt update && apt install -y \
    python3 python3-pip python3-dev git cmake

# 安装 TensorRT 与 CUDA
RUN apt install -y \
    libnvinfer8 libnvonnxparsers8 libnvparsers8 \
    python3-libnvinfer python3-libnvinfer-dev

# 安装 TensorFlow Lite
RUN pip3 install --upgrade pip
RUN pip3 install tflite-runtime

# 复制推理程序
COPY ./app /opt/app
WORKDIR /opt/app

构建镜像:

podman build -t jetson_tflite_trt -f Dockerfile.jetson .

注:镜像基于 Jetson 运行环境(L4T R35.2.1),并包含 TensorRT、TensorFlow Lite Runtime。镜像可以推送到私有 registry 便于部署。


四、TensorFlow Lite + TensorRT 推理实现

4.1 准备 TensorFlow Lite 模型

选择一个典型的边缘推理任务:目标检测 MobileNet SSD Lite 模型,quantized 版。

下载模型:

wget https://storage.googleapis.com/download.tensorflow.org/models/tflite/coco_ssd_mobilenet_v1_1.0_quant_2018_06_29.zip
unzip coco_ssd_mobilenet_v1_1.0_quant_2018_06_29.zip

模型文件:detect.tflite

4.2 推理程序示例(Python)

在容器内编写 inference.py

import numpy as np
import tflite_runtime.interpreter as tflite
import cv2

MODEL_PATH = "detect.tflite"
IMAGE_PATH = "input.jpg"

def load_image(path):
    img = cv2.imread(path)
    resized = cv2.resize(img, (300, 300))
    return resized

def main():
    # TensorRT Delegate 加载
    delegates = [tflite.load_delegate("libnvinfer_delegate.so")]

    interpreter = tflite.Interpreter(
        model_path=MODEL_PATH,
        experimental_delegates=delegates
    )
    interpreter.allocate_tensors()

    input_details = interpreter.get_input_details()
    output_details = interpreter.get_output_details()

    image = load_image(IMAGE_PATH)
    input_data = np.expand_dims(image, axis=0)

    interpreter.set_tensor(input_details[0]['index'], input_data)
    interpreter.invoke()

    boxes = interpreter.get_tensor(output_details[0]['index'])
    classes = interpreter.get_tensor(output_details[1]['index'])
    scores = interpreter.get_tensor(output_details[2]['index'])

    print("Detected objects:", scores[scores > 0.5].shape[0])

if __name__ == "__main__":
    main()

4.3 推理服务启动脚本(systemd/nspawn)

为了实现自动启动服务,我们可以创建 systemd 服务:

/etc/systemd/system/jetson_inference.service

[Unit]
Description=Jetson TFLite Inference Service
After=network.target

[Service]
ExecStart=/usr/bin/podman run --rm \
    --runtime nvidia \
    --network host \
    -v /data/images:/opt/app/images \
    jetson_tflite_trt python3 /opt/app/inference.py
Restart=on-failure

[Install]
WantedBy=multi-user.target

启用服务:

sudo systemctl enable --now jetson_inference.service

五、性能评估与对比

我们在 Jetson Xavier NX 上分别使用 CPU(无加速)TensorRT Delegate(GPU + Tensor Core 加速) 做了定量评测。测试图片尺寸为 300×300,单张图片推理 100 次取平均。

测试项目 CPU Only TensorRT Delegate
平均推理时间 345 ms 22 ms
吞吐量 (FPS) ~2.9 ~45.5
GPU 利用率 78%
CPU 利用率 85% 23%

结论

  • 在 Jetson Xavier NX 上,使用 TensorRT Delegate 结合 TensorFlow Lite 推理,将推理延迟从 345 ms 降至 22 ms,性能提升约 15×
  • GPU 利用率明显提升,推理过程主要由 Tensor Core 驱动,大幅减轻了 CPU 负担。
  • 适合工业现场实时性要求较高的边缘 AI 任务场景。

六、常见问题与解决方案

问题 1:在 RHEL 8 下无法直接访问 Jetson GPU

原因:RHEL 本身对 Jetson GPU 驱动无原生支持。解决方案是将 Jetson 作为边缘节点,通过容器化(基于 Jetson L4T 镜像)运行推理服务。

问题 2:TensorFlow Lite 无法加载 TensorRT Delegate

排查步骤

  1. 确认容器内是否安装了正确的 TensorRT 版本(与 CUDA 驱动匹配)。
  2. 检查 libnvinfer_delegate.so 的路径是否正确。
  3. 使用 ldd 检查依赖是否缺失。
ldd /usr/local/lib/python3.8/dist-packages/tflite_runtime/delegates/libnvinfer_delegate.so

七、部署建议与优化方向

  1. 批量推理:为进一步提高吞吐量,可在 Python 脚本中批处理多图像输入。
  2. 模型量化:若尚未量化模型,可使用 TensorFlow Model Optimization Toolkit 做权重量化,进一步提升性能。
  3. 异步推理:采用推理队列与多线程,加速边缘场景中输入流任务处理。
  4. 安全加固:在生产环境下,可为推理服务引入 TLS、鉴权与日志审计机制。

八、总结

通过A5数据本方案,在 RHEL 8 主机环境下利用 Podman 容器运行基于 Ubuntu / NVIDIA L4T 的 Jetson 推理镜像,实现了 TensorFlow Lite + TensorRT 的边缘推理加速。在实际项目中,这种方式兼顾了企业级操作系统合规性与领先的 AI 推理性能,可广泛应用于工业视觉、智能监控、无人机与机器人等边缘智能系统。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐