AI 2.0时代的节能革命:解密英伟达SC7黑科技如何让自动驾驶"深度休眠"

5天前 阅读数 167 #综合
图片
作者 | Jessie
出品 | 焉知汽车


"汽车AI能耗"(Automotive AI Power Consumption)是智能汽车领域的重要概念,指人工智能系统在车辆运行中消耗的能源量。随着人工智能(AI)技术在汽车行业的深度应用,自动驾驶、智能座舱和车联网等功能的能耗问题日益凸显。本文基于英伟达芯片设计的典型智驾系统中央运算平台,系统性的梳理了AI汽车的主要能耗来源,分析了当前中央运算平台技术所面临的能效瓶颈,并总结了硬件优化、算法改进和系统级设计等关键节能策略。


对于中央域控制器来说,设计一种极低功耗的运行模式可以很好的减少其对整体AI能耗的消耗程度。SC7(Sleep Context 7)模式是英伟达在其车载SoC(如Orin、Xavier等)平台上设计的一种超低功耗睡眠模式,主要目的是在不完全关机的前提下,尽可能降低系统功耗,同时保留对关键唤醒事件的响应能力,非常适合应用于车载域控制器(DCU)这种对能耗敏感、需长时间待机、但又要求快启的场景。


SC7模式的核心目标包括最大限度降低SoC功耗(至毫瓦级别),保留最低限度的运行态逻辑用于系统唤醒,维持DRAM上下文(不会掉电),快速从睡眠中恢复,无需完整重新初始化系统。SC7模式与传统模式SC6的对比如下:


项目
正常运行
深睡眠(SC6)
超低功耗(SC7)
CPU状态
活跃
关机
完全断电
加速器状态
活跃
关闭
完全断电
BPMP
运行
可关
持续运行
唤醒响应
快速
快速
功耗
10~50W
0.5~2W
<100mW


这里需要对上面的SC6状态中的关机/关闭状态和SC7中的完全断电状态进行详细的解析说明:


SC6 深睡眠下的“关机”状态通常意味着CPU、加速器进入WFI(Wait for Interrupt)或电源域关闭。但 MC(Memory Controller)可能仍在运行以维持DRAM上下文。系统级唤醒依赖RTC、GPIO或特定外设,唤醒后需要手动恢复上下文、OS调度器等状态。以上操作过程对操作系统不透明,某些外设恢复依赖驱动配合。


而SC7 的“完全断电”≠完全关机,实际指的是SoC大部分模块“完全断电”,但系统不是“关机状态”。仅保留:


DRAM 自刷新,数据保留。

BPMP(电源管理核)或 AON 域保持运行;

支持快速响应唤醒事件;

唤醒时可以无感恢复前一任务状态。


有人一定好奇这里的DRAM数据保留的到底是哪些信息。其实,这些包括了如下的一些数据信息:



1、SC7工作原理详述


SC7的整体工作原理:SC7模式可理解为一种极限“浅休眠”模式,系统软件(如Linux、QNX或ROS)通过电源管理固件(BPMP-FW)控制进入SC7模式,SoC内部绝大多数模块(包括CPU/GPU/DLA等)将被时钟门控、功耗断电,只有PMIC(电源管理芯片)+少量always-on模块保留活动状态。


系统启动时间的很大一部分消耗在应用程序初始化上,包括加载库文件和数据(深度神经网络模型及地图文件),要在所有使用场景下实现冷启动的启动时间目标颇具挑战性。针对这一问题,解决方案是在系统需要进入完全运行状态前,就预先加载并初始化DRAM内存。具体做法是:当系统闲置时不彻底关机,而是将其维持在SC7低功耗状态(该状态能在保持DRAM内存数据加载和大部分软件初始化的同时,将功耗降至最低)。


采用SC7方案后,系统会在挂起前完成数据加载和应用程序初始化(例如深度神经网络模型解包等无需外部交互的操作)。为了更加形象的说明如上变更带来的影响,我们以自动驾驶中的具体例子来进行说明:



如果把场景具体设定为泊车辅助中的视觉感知模块,则可以参照如下过程进行特定的处理。假设我们用一个 TensorRT 推理模型识别倒车影像中的障碍物,该模型的加载和运行涉及以下几个阶段:



如上过程真正体现了 SC7 模式是软硬件协同设计下的极限低功耗 + 快速响应机制,特别适合智能汽车、机器人等需要 standby-resume 快速切换的具身智能系统。这里需要注意的是模型必须在挂起前就完全加载并建立上下文。不能在 SC7 状态中尝试从磁盘重新加载模型(eMMC/PCIe 可能掉电),输入数据在唤醒时需要刷新/复位,避免处理挂起前旧数据。


当系统恢复时,应用程序只需对外部传感器进行编程配置,并完成剩余初始化工作。由于大部分涉及I/O操作和CPU密集计算的初始化过程已在挂起前完成,用户实际感知到的启动时间仅为恢复时间(相比冷启动大幅缩短)。


下图展示了SC7状态的转换流程,以及DRIVE OS和用户应用程序为实现SC7功能所需执行的操作步骤。Tegra的关机流程:


当车辆熄火(发动机关闭)时,Tegra不会直接关机,而是进入挂起(suspend)状态。在进入挂起状态前,可选择性地执行KeyOFFIST流程(可选步骤)。在SC7低功耗状态下,系统仅维持极低功耗运行,但若长时间无操作,系统会在超时后自动关机以进一步节省电量。



如上图所示整个SC7包括几个重要的阶段:


应用预初始化阶段(App Pre-Init)

在进入 SC7 低功耗状态之前,应用预初始化阶段可用于初始化并加载 CUDA 和 cuDNN 等关键库。由于这些库可能占用数GB内存,加载过程耗时较长,因此,在此阶段提前加载可显著优化恢复时间(Resume Time)。此外,二进制化深度神经网络(Binarized DNN) 也可在此阶段从内存加载。


应用后初始化阶段(App Post-Init)

应用后初始化阶段用于初始化和分配预初始化阶段未完成的资源,包括开启 I/O 外设(如摄像头传感器、串行器/解串器等)。运行时阶段(Runtime Phase) 负责主动处理并流式传输各类传感器捕获的数据,简而言之,数据管道(Pipeline)的创建在此阶段完成。


应用后反初始化阶段(App Post-DeInit)

应用后反初始化阶段用于释放应用后初始化阶段分配的资源,即拆除数据管道(Pipeline Teardown)。但需注意:已加载的 cuDNN 和 CUDA 库不应在此阶段释放,这些库及其他资源应在应用反初始化阶段(App DeInit) 统一释放。


SC7 低功耗模式下的硬件检测(HW Latent Checks)

由于 Orin SoC 在 车辆钥匙下次启动前会保持 SC7 模式,系统可选择性地在 MPFDTI(每8小时一次,即 N=8 小时) 执行一次硬件潜在问题检测(HW Latent Checks)。更多细节可参阅 SMCU 集成指南。


SC7 超时关机机制

如果系统在 SC7 模式下持续运行时间达到 M,则 Tegra SoC 可由 SMCU 执行断电操作。M 的具体数值需由客户根据需求决定。


2、SC7启动和挂起的时序控制


下图从高层级视角展示了从KeyOFF IST流程开始进入SC7状态的完整时序。如需查看详细的时序图,可参阅SMCU集成指南。



上图所示,各个模块的呈现形式如下:


ENV:表示提供触发启动或关闭事件的环境。

DRIVEOS:运行在Orin芯片上的DRIVE OS软件主体部分。

DRIVEOS_FSI:由DRIVE OS提供的FSI(功能安全接口)功能模块。

DRIVEOS_MCU:由DRIVE OS提供的MCU(微控制器单元)功能模块。

GuestOSApplication:在虚拟机客户操作系统中运行的用户应用程序。

USER_FSI:与DRIVEOS_FSI集成的FSI固件及用户应用程序。

USER_MCU:与DRIVEOS_MCU集成的MCU固件及用户应用程序。


下图展示了从SC7低功耗状态恢复的系统流程。



摄像头管线上下文(Camera Pipeline Context)在挂起(suspend)和恢复(resume)之间不会被保存,因此在系统恢复后需要重新创建摄像头管线,并在再次挂起前清理/拆除(purge/teardown)该管线。在进入 SC7 低功耗状态之前,必须确保所有提交至计算引擎(engines) 的任务全部完成,否则可能导致异常。


如下图所示的 SC7 功耗分层:


Normal → SC0(轻睡眠) → SC2(深睡眠) → SC6(近关机) → SC7(超低功耗睡眠)


SC7 模式下 SoC 各模块控制逻辑(以NVIDIA Orin为例)如下:


SC7 能大幅降低域控能耗的关键原因如下:


模块级电源门控(Power Gating):

不是仅关掉主CPU,而是将整个SoC的绝大多数模块断电;

仅保留MC、BPMP和SCE中的关键逻辑运行;


时钟门控(Clock Gating):

对维持供电的模块,如内存控制器,也尽可能断开非必要时钟;

保持系统上下文,避免重启:

DRAM不掉电,SoC状态保存,唤醒时可快速恢复运行,无需cold boot;


支持外部事件唤醒(wake-on-CAN / GPIO / RTC):

满足“智能车”中休眠期间保持与外部交互的能力(如远程OTA、上电响应、钥匙靠近等);

典型车载场景中的应用效果在于在车辆熄火状态下,域控不必完全断电,可进入SC7模式。维持低功耗监听能力(如CAN、摄像头帧同步、麦克风监听等),SoC功耗从几十瓦下降到几十毫瓦(Xavier可降至30mW,Orin SC7约60~80mW),唤醒时间可缩短至几十ms,实现无感启动、快启体验。


3、SOC各模块在SC7工作状态下的响应机制


进入SC7模式之前,应该确保如下各个组件的工作状态提前做好相应组件特定限制的准备。


NvStreams

在进入SC7状态前,使用NvStreams框架在生产者与消费者之间流式传输数据的应用需满足以下要求:确保NvStreams应用提交的任务在CPU或引擎流水线中无挂起作业;

应用不得处于任何活跃的NvSciSync栅栏等待状态;


若NvStreams流水线正在初始化,进入SC7前需执行以下操作:

等待缓冲区及同步原语完成分配,并确保NvSciBuf与NvSciSync对象已注册至用户模式驱动(UMD);

对于NvSciStream应用,需等待流水线初始化完成且所有数据包就绪于池区块中;


当应用处于流传输阶段时,需遵循以下要求:

根据相关UMD的SC7进入指南,确保CPU或UMD引擎流水线中无挂起任务;

确保无传输中的未完成的数据包;

CUDA


进入SC7状态前,应用需满足以下条件:

使用适当的同步API(如cudaEventSynchronizecudaStreamSynchronizecudaDeviceSynchronize)确保所有GPU任务(如内核执行、内存拷贝、事件等待)均已完成;

跨引擎依赖任务(如DLA与GPU之间通过NvSciSync互操作构建的任务)需确保信号方已解除所有GPU端的等待,否则可能导致无限等待;

确保所有主机同步型CUDA API(如cudaMalloccudaStreamCreate)已执行完毕;


注意:从SC7状态恢复后,cudaEvent记录的时间戳将包含GPU挂起状态的持续时间,因此需据此解读cudaEventElapsedTime返回的耗时。


DLA

作为英伟达的一种专用AI推理引擎。专为神经网络推理任务设计,用于高效执行卷积神经网络(CNN)、Transformer等模型,支持INT8/FP16精度。通过硬件级优化(如张量核心、稀疏计算),实现高吞吐量(TOPS/Watt)的AI推理,适合车载实时处理。在异构计算中,DLA与GPU协同工作(如NVIDIA DRIVE平台中,GPU负责训练,DLA专注部署)。实际工程化开发过程中,若应用未能确保所有提交任务均已完成,DLA将检测到该场景并阻止SC7进入。


PVA

PVA 完成原始数据预处理(如摄像头帧稳定化),输出标准化数据流。进入SC7状态前:

应用需通过调用cupva::Fence::wait()等待所有已提交命令完成,确保PVA引擎无挂起任务/命令;

在DOS过渡至SC7挂起状态期间,禁止向PVA提交任何新命令;


Camera

SIPL相机应用仅应在非硬件初始化及非运行时状态下,请求NVIDIA DRIVE® OS切换至SC7节能状态。


Graphics

进入SC7前,需要确保所有提交至GPU的任务均无挂起状态。应用需为每个已创建的VkQueue调用vkQueueWaitIdle()


NvSciIpc

进入SC7前,需要确保使用NvSciIpc的应用无未完成任务。若对端进程因未在SC7期间运行(如Trust Agent)而重启,应用需在SC7退出后调用NvSciIpcResetEndpointSafe(),并通过NvSciIpcGetEventSafe()重建连接。


NvGPU

进入SC7前,确保使用NVGPU的应用无未完成任务。在挂起回调触发后至恢复回调完成前,禁止向NVGPU发起新请求(仅允许恢复回调操作),需等待驱动恢复完成并将进程状态设为"resume done"后,方可继续发起请求。


总结:NVIDIA SC7 模式是车载高性能计算平台节能管理的核心机制之一,它通过全局时钟/电源门控、精细化模块状态保持、可配置的外设唤醒路径、软硬件协同的电源管理协议,使得整个域控SoC在待机期间能以毫瓦级功耗持续运行,同时能在用户交互事件中迅速恢复响应,是智能汽车系统“低功耗高唤醒能力”需求的理想解决方案。


版权声明

本文仅作者转发或者创作,不代表旺旺头条立场。
如有侵权请联系站长删除

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门