边缘计算资源分配和任务调度优化

前言:

由于需要工程落地,所以最后所有的算法等都需要部署在边缘设备(如树莓派、Jetson系类、RK系列),这是上位机,然后再与下位机(如STM32等)连接,去控制底盘的运动,完成整个机器人的自主控制。

但是边缘设备资源有限,所有需要很多的操作去处理来实现算法部署。

下面会讲解一些基础概念,基于RK系列和Jetsion系列,后续可能会专门出一期基于RK3576的优化方案。


基础概念

1. 资源

在边缘计算和嵌入式开发中,我们所提到的资源resources,通常包含多个方面:

1\] 计算资源------"处理能力" \[2\] 存储资源------"工作台空间" \[3\] 功耗与热资源------"体能上限" \[4\] I/O资源------"数据吞吐" #### 1.1 计算资源 (Compute Resources) 计算资源是最直观的资源,这直接决定了算法跑不跑得动,以及能跑多快。 > **CPU (中央处理器):** > > * 角色: ++通用的大脑++。负责逻辑控制(ROS节点调度)、数据通信、外设驱动、非AI的数学计算(如坐标变换)。 > > * 痛点: 它的++并行计算能力弱++。如果你用 CPU 去做图像缩放或深度学习推理,它会瞬间跑满 100%,导致系统卡顿。 > **Rockchip (RK3576/RK3588)** > > **NPU (神经网络处理器):** > > * 角色: ++**AI 专用加速器**++。RK3576 上有约 6 TOPS 的算力。专门用来跑矩阵乘法(卷积神经网络)。 > > * 痛点: 它的功能很单一,++只能跑转化好的模型(`.rknn`)++,不能跑复杂的逻辑代码。 > > **2D硬件加速器 (RGA):** > > * 角色: ++**瑞芯微芯片的一大特色**++。这是 RK 的杀手锏资源。它独立于 CPU/NPU,专门负责图像缩放、裁剪、格式转换。 > > * 价值: 不用 RGA,RK 的 CPU 就会被图像预处理吃光。 > **NVIDIA Jetson (Orin/Xavier)** > > **GPU (图形处理器):** > > * 角色: 负责渲染(如果你的机器人有屏幕显示界面)或通用并行计算(OpenCL)。在 RK 平台上,通常用于 UI 渲染。 > > * 使用优势: 支持 FP16(半精度)甚至 FP32。不仅能跑深度学习(TensorRT),还能用 CUDA 编写通用的矩阵运算(加速 SLAM 的后端优化、粒子滤波等)。 > > **DLA (Deep Learning Accelerator):** > > * 角色:Jetson 上除了 GPU 还有一个类似 NPU 的东西叫 DLA,专门用来跑简单的推理,帮 GPU 分担压力。 #### 1.2 存储资源 (Memory Resources) 在边缘端,内存(RAM)往往比算力更紧缺,决定了你能同时加载多少个模型。 > **RAM (系统内存)** : > > * 竞争: Linux 操作系统、ROS 2 中间件、摄像头采集的每一帧图片、加载进去的 AI 模型权重(Weights)、程序代码,全部都在抢这几GB空间。 > > * 统一内存架构 (UMA): 边缘设备最大的特点 **CPU 和 NPU/GPU 共享同一块物理内存**。这意味着,如果 NPU 模型占用了 2GB,CPU 就只剩 2GB 可用了。 > > **内存带宽 (Memory Bandwidth):** > > * 定义: 数据在 RAM 和 CPU/NPU/GPU 之间传输的"高速公路车道数"。 > > * 痛点: 即使你的 NPU/GPU 算力很强,但如果摄像头分辨率太高(4K),数据传输把"高速公路"堵死了,NPU 读不到数据,也会空转。这就是为什么我们强调 零++拷贝(Zero-Copy)。++ > > **存储空间 (Storage/Disk):** > > * 定义: eMMC 或 SD 卡。 > > * 痛点: 频繁读写(如记录高频日志或频繁保存地图)不仅慢,还会磨损闪存寿命。 > **Rockchip (RK3576/RK3588)** : > > **CMA (连续内存分配器)** : > > * **痛点** :RK 的 NPU 驱动通常需要++物理地址**连续**的内存块++ 。如果系统运行久了产生"内存碎片",哪怕剩余内存总量很大,NPU 也可能因为申请不到连续内存而报错(OOM)。 > > **DMA_BUF (零拷贝机制)** : > > * **策略** :为了避免 CPU 和 NPU 之间的数据拷贝,RK 平台极度依赖 `dma_buf` 机制。必须++让 RGA 把处理好的图像直接存入 DMA 缓冲区,NPU 才能直接读取++,否则会消耗双倍内存。 > **NVIDIA Jetson (Orin/Xavier)** : > > **显存管理 (VRAM Usage)**: > > **痛点**:虽然物理上是统一内存,但在软件开发(CUDA)中区分 Host(CPU端)和 Device(GPU端)。TensorRT 生成的引擎文件(Engine)通常体积较大,且推理时会占用大量显存。 > > **Pinned Memory (页锁定内存)**: > > * **策略** :Jetson 上为了实现真正的"零拷贝"加速,需要申请特殊的"页锁定内存"。普通 `malloc` 分配的内存无法被 GPU 高速访问。 #### 1.3 功耗与热资源 (Power \& Thermal Resources) 服务器开发很少考虑这部分内容,但边缘端必须"锱铢必较"的资源,它直接限制了设备的**持续性能。** > **TDP (热设计功耗)** : > > 芯片能承受的最高温度。全速运行时,如果散热跟不上,硬件会强制降频(Throttling),导致帧率断崖式下跌。 > **Rockchip (RK3576/RK3588)** : > > 本身属于低功耗选手。RK 芯片源于移动端架构,能效比通常较高,适合被动散热或电池供电的场景。 > > **策略** :Linux 内核通过 `devfreq` 节点动态调节 NPU 频率。在低负载时,NPU 可以自动降频以节省电量。 > **NVIDIA Jetson (Orin/Xavier)** : > > 高性能高功耗。GPU 架构天生发热量大,通常需要主动散热(风扇)。 > > **NVPModel (功耗模式管理)** : > > * **独有工具** :Jetson 提供了独有的 `nvpmodel` 工具。你可以手动定义资源上限,例如限制为 "15W 模式"(限制核心数和频率)或 "MAXN 模式"(火力全开)。 #### 1.4 I/O 资源 (Input/Output Resources) 这是数据的入口和出口,决定了传感器数据的**吞吐量和延迟**。 > **总线带宽** : > > 包括摄像头接口(MIPI-CSI)、USB、PCIe 等。如果接入的高分辨率摄像头过多,总线带宽可能成为瓶颈,导致丢帧。 > **Rockchip (RK3576/RK3588)** : > > **ISP (图像信号处理器)** : > > * **角色** :负责把摄像头传感器的++原始 RAW 数据"洗净"变成 NV12 图像++。它是数据的源头。 > > **MPP/VPU (视频处理单元)** : > > * **角色** :**独立的硬件编解码器**。如果你的机器人需要录像或网络推流,必须调用 MPP 进行 H.264/H.265 硬件编码。 > * **价值** :千万不要用 CPU 去做视频编码(如 x264),那会瞬间耗尽 CPU 资源。MPP 是处理视频流的关键 I/O 资源。 > **NVIDIA Jetson (Orin/Xavier)** : > > **LibArgus \& VIC** : > > * **角色** :NVIDIA 提供了专用的相机 API (LibArgus) 和 **VIC (Video Image Compositor)** 。VIC 类似于 RK 的 RGA,是 Jetson 上++专门用于卸载 GPU 负担的图像 I/O 协处理器++。 > > **高速接口扩展** : > > * **优势**:Jetson 载板通常提供更强的 PCIe 通道资源,适合扩展高速 NVMe 存储或多路千兆网口。 ### 2. 资源分配 ------ "空间"上的切分 这解决的是"**谁用什么硬件,用多少** "的问题。以RK3576举例 这是一个典型的异构计算平台 (Heterogeneous Computing Platform),它包含 CPU (ARM Cortex), NPU (AI加速器), DSP/RGA (图像处理) 和 RAM。 资源分配优化的核心目标是:物尽其用,避免瓶颈。 一般包含以下三个任务: \[1\] 计算单元映射 (Compute Unit Mapping); \[2\] 内存管理(Memory Management); \[3\] 带宽分配 (Bandwidth Allocation); #### 2.1 计算单元映射 计算单元映射即决定哪个算法跑在哪个核上。我们以常规机器人所涉及到的一些功能举例: * **CPU:**负责逻辑控制、状态机、ROS通信、LiDAR点云预处理(因为点云稀疏,NPU不好加速)。 * **NPU:**负责 YOLO检测、人脸识别特征提取、深度估计网络。 * **RGA (2D硬件加速):**负责图像缩放、裁剪、格式转换(YUV转RGB)。这叫计算卸载 (Offloading),把 CPU 不擅长的搬运工作丢给专用硬件,这是极其重要的优化。 * **MCU (微控制器单元,单片机):**负责底盘电机的硬实时控制(PWM波生成)。 #### 2.2 内存管理 如何在有限的 RAM(4G/8G)中塞下更多东西,减少搬运。 * **内存复用 (Memory Reuse)** :比如人脸识别和跟踪算法互斥,不需要同时启动,它们可以分时复用同一块内存空间。 * **零拷贝 (Zero-Copy)** :利用共享内存(Shared Memory)或 DMA(直接内存访问),让 CPU、NPU 和 GPU 读写同一块物理内存,避免 `memcpy` 造成的 CPU 占用和延迟。 #### 2.3 带宽分配 所有硬件都在抢内存的读写速度(DDR Bandwidth)。 **优化** :如果 CPU 正在疯狂拷贝大地图数据,NPU 此时去拉取模型权重可能会卡顿。优化意味着要平衡数据流,或者降低某些非关键任务的分辨率。 *** ** * ** *** ### 3. 任务调度------ "时间"上的排序 这解决的是"**谁先运行,谁后运行,怎么插队**"的问题。在机器人系统中,实时性(Real-time)是第一要素。 > > #### **3.1 优先级调度** > > 给任务打标签,重要的先跑。 > > * Level 1 (最高危):急停避障、底盘控制回路。一旦有数据,CPU/MCU 必须立即响应,哪怕打断别的任务。 > * Level 2 (业务核心):行人跟踪算法。掉帧会导致跟丢,优先级高。 > * Level 3 (非实时):建图保存、日志记录、语音播报。慢个0.5秒也没关系。 > * Linux手段:使用**nice 值** 调整进程优先级,或者使用 **SCHED_FIFO (实时调度策略)**。 > > #### 3.2 **流水线并行** > > 让 CPU、RGA 和 NPU 同时工作,而不是串行等待。 > > 优化前 (串行): > > * Frame 1: CPU读图 -\> RGA缩放 -\> NPU推理 -\> CPU后处理 -\> (耗时 100ms) > > 优化后 (流水线): > > * T1时刻: NPU 推理 Frame 1 \| RGA 处理 Frame 2 \| CPU 读 Frame 3 > > * 结果:虽然单帧延迟没变,但++吞吐量 (FPS) 大幅提升++。 > #### **3.3 频率控制** > > 有些任务不需要全速跑。 > > 比如,相机是 30FPS,但人脸识别只需要 5FPS 就能确认身份。不需要每帧都塞进 NPU,可以**每隔 5 帧做一次推理**,中间的帧直接丢弃或只做简单的光流跟踪。 *** ** * ** *** ### 4. 总结 在边缘设备上做"部署优化",本质是在做资源交换,空间和时间的交换、专用资源和通用资源的交换。为解决算力、带宽与功耗的矛盾,总结以下多维度优化策略: **数据流优化:** 通过 **模型量化(Int8)** ++减少算力需求++ ,利用**零拷贝(Zero-Copy)** 机制++消除片内冗余数据搬运++,降低内存带宽压力。 **异构并行计算:** 利用 **NPU/GPU 进行深度学习加速** ,同时引入**RGA/VIC 独立硬件负责图像预处理**,构建异步流水线,实现 CPU、NPU、RGA 的全并行工作。 **分层资源调度:** 采用"SoC + MCU"双核架构,实现++高算力感知与硬实时控制的解耦++,确保在 AI 满载时底盘控制依然精准。 **动态能效管理:** 结合 **DVFS(动态电压频率调整)与热管理策略**,根据任务负载动态分配计算频率,平衡性能与续航。 *** ** * ** *** ## 工程落地 待更新...

相关推荐
璞华Purvar6 小时前
璞华易知ChatBI精彩亮相百度智能云Agent大会,以自然语言驱动企业智能决策
大数据·人工智能
Jerryhut6 小时前
sklearn函数总结十 —— 决策树
人工智能·决策树·sklearn
星川皆无恙6 小时前
基于ARIMA 算法模型和NLP:社交媒体舆情分析在涉众型经济犯罪情报挖掘中的应用研究
人工智能·爬虫·python·算法·机器学习·自然语言处理·数据分析
何小少6 小时前
论文写作全流程自动化:5个阶段的高效工具链构建
人工智能·论文写作·学术写作·ai工具·科研工具
摘星观月6 小时前
【深度学习6】多层感知机2
人工智能·深度学习
啊巴矲6 小时前
小白从零开始勇闯人工智能:机器学习初级篇(KNN算法)
人工智能
FL16238631296 小时前
[C#][winform]基于yolov11的水下目标检测系统C#源码+onnx模型+评估指标曲线+精美GUI界面
人工智能·yolo·目标检测
todoitbo6 小时前
从零搭建 Dify AI 平台:一次跌宕起伏的部署之旅
人工智能·ai·大模型·dify·流处理·工具流
SCBAiotAigc6 小时前
一个github的proxy url
人工智能·python