汽车行车安全是每个人十分关心的话题,每一次交通事故的发生,都是不小的损失;随着人们对舒适性,娱乐性,智能驾驶等驾驶体验的需求不断增长,汽车电子系统愈加复杂,由电气电子系统故障导致的风险也越来越高。许多车辆都配备了一系列旨在提高安全性和可靠性的功能,虽然有可能解决车辆中的许多安全性和可靠性问题,但它们也带来了尚未完全解决的新风险和新的故障模式。必须设置安全措施,以确保车辆的控制器功能或控制器辅助功能不会增加操作车辆的风险。在投入生产之前,可以采用各种策略来测试控制器实现的车辆特性。然而,即使进行了彻底的测试,在实际条件下操作时仍可能遇到错误。因此,提供改进的系统和方法来处理车辆应用中使用的处理器中的错误将是有利的。
2020年3月31号,特斯拉《车辆神经网络处理器的误差处理系统与方法》专利公布(专利公开号:US10606678B2),该专利涉及用于处理车辆神经网络处理器中的错误的系统和方法。
特斯拉该专利“公开了一种神经网络误差处理系统,包括用于执行与车辆使用相关联的神经网络的神经网络处理器。神经网络处理器包括被配置成检测与神经网络的执行相关联的数据错误的错误检测器和被配置成从错误检测器接收数据错误报告的神经网络控制器。作为对接收到报告的响应,在不终止神经网络的执行的情况下,神经网络控制器进一步被配置成信号,该信号表明神经网络的未决结果受到污染。”
通常处理神经网络是数据或计算密集型的,比如用于图像识别的深卷积神经网络可以包括数百万或数十亿个参数。相应地,通过神经网络的前向传递可能涉及数百万或数十亿次计算。因此,期望使用专用计算资源(例如,硬件、软件资源)来处理神经网络,以提高神经网络的性能,同时减少神经网络的执行与控制器的其他应用之间的干扰。因此控制器可以使用神经网络处理器来处理神经网络,而神经网络处理器可以包括专用于处理神经网络的一个或多个处理器核心。如使用专用集成电路(ASIC)、现场可编程门阵列(FPGA)等来实现神经网络处理器,达到在执行神经网络时实现硬件加速性能。
下图是特斯拉专利公布的具有神经网络处理系统的车辆简化图。“车辆100可以是全电动车辆、混合动力车辆、汽油动力车辆等。车辆100可以完全或部分自动驾驶,车辆100可以配备一个或多个传感器110,其收集与车辆100或其周围环境相关联的数据。传感器数据可以包括图像数据、音频数据、时序数据等。传感器110的示例包括照相机(包括可见光照相机、红外照相机等)、麦克风、温度传感器、激光雷达单元、加速度计、转速表等。
图 1
车辆100可以包括控制器120以执行与自主驾驶车辆100相关联的实时决策任务。例如,自主驾驶任务可以包括识别或分类车辆100附近的对象、控制车辆100的转向、传输、加速和/或制动、向车辆100的驾驶员提供警报、向远程服务器发送驾驶数据等。在驾驶操作期间,控制器120可以从传感器110接收实时输入数据流。在一些示例中,控制器120可以使用神经网络处理来自传感器110的输入数据。
在一些示例中,神经网络处理器130可以串联和/或并行地处理多个神经网络。例如,神经网络处理器130可以处理从前向摄像机接收输入数据流的第一图像识别模型、从后向摄像机接收输入数据流的第二图像识别模型、从麦克风接收音频数据的音频识别模型等。与这些示例一致,神经网络处理器130可以在接收到新的图像和/或音频数据帧时顺序地处理每个模型。在其他示例中,可以使用多个神经网络处理器和/或处理器核心并行地处理多个神经网络。
在自主驾驶应用或其他应用中,神经网络处理器需要连续可靠地工作,而神经网络处理器对输入数据进行操作的时间有限,在某些情况下,这种情况可能在几百分之一秒内发生,如果在快速行驶的车辆中,神经网络处理器的功能丧失、处理延迟、异常行为等可导致事故发生,从而导致财产损失、人员伤害或死亡。
特斯拉该专利指出“特定错误对神经网络处理器130的影响可以根据错误的类型而变化。某些类型的错误可能导致神经网络处理器130挂起或超时。即,神经网络处理器130的一个或多个部分可以冻结或以其他方式保持不活动超过预定的时间量。当遇到超时错误时,神经网络处理器130可以停止提供输出数据和/或响应输入数据。其它类型的错误,例如程序错误和/或数据错误,可能导致由神经网络处理器130生成的输出数据被损坏。当遇到这样的错误时,神经网络处理器130可以继续提供输出数据,但是结果可能是不正确的、无意义的和/或其他不可用的。
为了解决与这些错误相关联的安全问题,神经网络处理器130可以包括防止、检测和/或响应错误的安全特性。安全特征可以在神经网络处理器130的设计周期的各个阶段实现和/或激活。
在一些示例中,神经网络处理器130可以具有高度的复杂性和/或可以包括许多子系统,每个子系统可以由不同的团队和/或供应商设计。鉴于这种复杂性,在训练期间对神经网络处理器130的测试过程可能是广泛的(例如,发生在数周或数月期间),并且可能对神经网络处理器130和车辆100的总体安全性和可靠性产生重大影响。例如,测试可以揭示在神经网络处理器130的设计期间没有捕捉到的不期望和/或错误行为。
即使在训练期间进行了广泛的测试,神经网络处理器130在生产期间仍然可能遇到错误(例如,当部署在车辆100的生产模型中时)。在生产过程中,与提出不同,神经网络处理器130通常希望在最小中断和/或停机时间的情况下从错误中平滑地恢复。具体地,神经网络处理器130可以负责执行与驾驶车辆100相关联的实时决策任务。”
下图是用于处理神经网络的系统200的简化图。其具体特征如下所示:
图 2
“神经网络处理器210可以包括外部接口220,用于从一个或多个外部资源(例如,控制器110的其他处理和/或存储器资源)接收和/或向其发送数据。在其它功能中,外部接口220可用于从CPU接收指令、从存储器读取模型定义和/或参数(例如,权重和/或偏差)、访问传感器数据、写出神经网络的结果等。在一些实施例中,外部接口220可以包括直接存储器访问(DMA)控制器。
外部接口220可以实现一个或多个通信协议。例如,外部接口220可以使用非相干总线协议(例如高级可扩展接口(AXI)协议)与控制器110的CPU(和/或其他处理器)接口。在另一示例中,外部接口220可以使用诸如AXI相干扩展(ACE)协议的相干总线协议与控制器110的DRAM(和/或其他存储器)接口。应当理解,这些仅仅是示例,并且外部接口模块220可以实现除AXI和ACE之外的和/或作为AXI和ACE的替代品的多种通信协议。
在一些示例中,神经网络处理器210可以包括为神经网络处理器210提供本地数据存储的本地存储器230。例如,本地存储器230可以存储与神经网络相关联的数据,例如模型定义;模型参数(例如,权重和/或偏差);神经网络的输入数据;神经网络处理器210生成的中间结果(例如,神经网络隐层的输出);神经网络的最终结果等。在一些实施例中,本地存储器230可以存储要由神经网络处理器210执行的指令和/或程序。在一些实施例中,本地存储器230可以使用静态RAM(SRAM)来实现。
在一些示例中,神经网络处理器210可以包括计算引擎240。计算引擎240执行指令以计算给定输入数据集的神经网络的结果。在一些实施例中,计算引擎240可以针对神经网络计算进行优化。例如,计算引擎240可以包括单指令多数据处理器、向量处理器等。在一些示例中,计算引擎240执行的指令可以是浮点指令。
在操作期间,神经网络处理器210和/或其组成模块(例如,外部接口220、本地存储器230和/或计算引擎240)可能会遇到错误,这些错误可能会中断神经网络处理器210的功能,导致神经网络处理器210的结果被损坏或污染,诸如此类。因此,神经网络处理器210可以包括一个或多个错误检测器251-257,以监视神经网络处理器210的操作并检测错误的发生。为了响应于检测错误,错误检测器251-257可以报告检测到的错误,以便可以采取适当的补救措施。
在一些实施例中,错误检测器251-257可以包括与外部接口220相关联的响应错误检测器251。在一些实施例中,响应错误检测器251可以基于从经由外部接口220接收的响应消息中提取的状态信息来报告响应错误。
在一些实施例中,错误检测器251-257可以包括与外部接口220相关联的完整性错误检测器252。在一些实施例中,完整性错误检测器252可以验证经由外部接口220接收的数据的完整性,并且在接收的数据被损坏时报告完整性错误。
在一些实施例中,错误检测器251-257可以包括与外部接口220相关联的协议错误检测器253。在一些实施例中,当检测到与由外部接口220实现的通信协议相关联的错误时,协议错误检测器253可以报告协议错误。
在一些实施例中,错误检测器251-257可以包括与本地存储器230相关联的奇偶校验错误检测器254。在一些实施例中,奇偶校验错误检测器254可以验证存储在本地存储器230中的数据的完整性,并且当所存储的数据被识别为损坏时引发奇偶校验错误。在一些示例中,奇偶校验模块242可以保持一个或多个奇偶校验位,并且当奇偶校验位与存储的数据不匹配时报告奇偶校验错误。
在一些实施例中,错误检测器251-257可以包括与本地存储器230相关联的指令错误检测器255。在一些实施例中,指令错误检测器255可以验证存储在本地存储器230中的指令,并且在存储的指令无效时引发指令错误。
在一些实施例中,错误检测器251-257可以包括与计算引擎240相关联的计算错误检测器256。在一些实施例中,计算错误检测器256可以报告与经由计算引擎240执行计算相关联的错误。计算引擎240在操作期间可能遇到的说明性错误可以包括无效操作、被零除、溢出、下溢、非规范化、不精确数字等。
在一些实施例中,错误检测器251-257可以包括超时错误检测器257。在一些实施例中,当由神经网络处理器210执行的一个或多个模块和/或任务挂起或以其他方式变得无响应时,超时错误检测器257可报告超时错误。
在一些实施例中,神经网络处理器210可以包括神经网络控制器270。在一些实施例中,神经网络控制器270可以保持与在神经网络处理器210上运行的一个或多个神经网络中的每一个相关联的状态信息。神经网络控制器270可以为每个神经网络维护一个或多个状态寄存器275。在一些示例中,状态寄存器275可以使用诸如进程指示符(例如,挂起、运行、完成等)、错误指示符、地址指针(例如,存储神经网络的当前结果的存储器中的位置)等变量来跟踪每个神经网络的执行状态。
在一些示例中,神经网络控制器270可以为每个神经网络设置一个或多个中断管脚280的电平。中断管脚280耦合到中断处理器290以使系统200能够响应中断信号。例如,中断管脚280可以包括完成管脚282,该完成管脚282用于在神经网络完成计算和/或神经网络的结果已在输出缓冲器226中更新时发送信号。在一些示例中,完成管脚282可以作为边缘敏感和/或电平敏感中断来操作。响应于检测完成管脚282上的中断信号,系统200可以检索相应神经网络的更新结果。
在一些实施例中,神经网络控制器270可以集中管理和/或响应由错误检测器251-257报告的错误。例如,可以使用机器检查架构(machine check architecture,MCA)报告将错误报告给神经网络控制器270。与这些实施例一致,状态寄存器275可以存储每个神经网络的错误代码,例如16位MCA错误代码。在一些示例中,错误代码可以指示在各个神经网络中是否发生错误(例如,使用错误有效位),如果发生,则指示遇到的错误类型(例如,响应错误、完整性错误等)。同样,中断管脚280可以包括错误管脚284,该错误管脚284用于在神经网络遇到错误时发出信号。在一些示例中,错误管脚284可以作为边缘敏感和/或电平敏感中断来操作。响应于在错误pin 284上检测到中断信号,系统200可以通过经由状态寄存器275访问错误代码来确定错误的类型,并且基于错误类型采取适当的补救措施。
在一些实施例中,完成管脚282和错误管脚284可以异步操作。也就是说,可以在错误管脚284上发送错误中断信号,而无需等待在完成管脚282上发送相应的完成中断信号。因此,中断处理程序290具有立即响应错误中断处理程序(例如,通过终止神经网络)的选项,或者尽管发生错误但等待等待等待完成的计算。在一些实施例中,决定是立即终止神经网络还是等待完成可能取决于错误的类型。”
通过以上所述,神经网络处理器可以识别和标记在神经网络处理期间发生的许多类型的错误。如程序错误(例如,分别由错误检测器253、255检测的协议错误、指令错误)、数据错误(例如,分别由错误检测器251、252、254和256检测的响应错误、完整性错误、奇偶校验错误、计算错误),、超时错误(例如,由超时错误检测器257检测到的超时错误)。
对于某些类型的错误,神经网络的执行可能在错误检测后立即终止。例如,当遇到程序错误(例如,协议错误、指令错误)时,可以在检测到错误后立即重新启动神经网络,以便重新加载程序。当遇到超时错误时,神经网络处理器210可以在检测到错误时立即重新启动,以便解冻任何挂起的模块。
“对于其他类型的错误,神经网络计算的下一个结果可能被认为是污染的或损坏的,但是等待的计算仍然可以继续进行。例如,当遇到数据错误(例如,响应错误、完整性错误、奇偶校验错误和/或计算错误)时,可以允许基于错误数据的未决计算在不终止神经网络的执行和/或重新启动神经网络处理器210的情况下进行。然而,可以指示系统200忽略或跳过计算结果。在不重新启动神经网络的情况下跳过由神经网络生成的污染结果,有两个目的:一是避免对污染数据的错误依赖,二是避免与完全重新启动神经网络相关的中断。例如,在自动驾驶车辆应用中,神经网络可以每秒处理数十或数百个图像帧。在这种情况下,有时跳过帧可能不会被视为有问题和/或对自动驾驶性能没有重大影响。同时,这种方法避免了与依赖错误数据相关的风险,因为受污染的结果会被识别并丢弃。
在一些实施例中,对某些类型的错误的响应可以取决于系统200的设计周期阶段。例如,在启动阶段,当遇到超时错误时,神经网络处理器210可以转换到调试模式。在调试模式下,可以暂停神经网络处理器的执行,允许访问神经网络处理器210的详细状态信息(例如,寄存器状态)和/或允许指令的单步执行。进入调试模式可通过提供对错误发生时的神经网络处理器210的状态的访问来促进对超时错误的原因的快速和/或准确识别。另一方面,进入调试模式可能不适合于生产阶段;响应于生产阶段中的超时错误的优选行为可以是尝试尽快恢复神经网络处理器210的正常操作。因此,在生产阶段,当遇到超时错误时,可以终止神经网络和/或立即重新启动神经网络处理器210。”
下图是根据一些实施例的超时错误检测器300的简化图。根据图1和图2,可知,超时错误检测器300可用于实现神经网络处理器210的超时错误检测器257。
图 3
“超时错误检测器300包括一个或多个主定时器311-319。在一些示例中,主定时器311-319可以监视神经网络处理器210的一个或多个块或模块中的空闲周期。例如,主定时器311可以监视自外部接口220接收到数据(例如,从存储器读取数据)以来经过的时间。在另一个示例中,主定时器312可以监视自外部接口220已经发送数据(例如,写入存储器的数据)以来经过的时间。在另一示例中,主定时器319可以监视自计算引擎240被激活以来经过的时间(例如,执行的指令)。
在一些实施例中,经过的时间可以通过计算自上次检测到活动以来的时钟周期来确定。例如,主定时器311-319可以从阈值时钟周期数开始倒计时。在一些示例中,被监视的块中的每一个可以发出指示活动发生的信号(例如,从存储器读取和/或写入存储器的包、由计算引擎执行的指令等)。当从被监视的块接收到信号时,计数重置为阈值。如果计数为零,则会引发错误。另外或交替地,主定时器311-319可以从零开始计数,直到达到阈值数。
在一些实施例中,超时检测模块300还可以包括一个或多个复合定时器,例如层定时器320和/或神经网络定时器330。在一些实施例中,复合定时器可以监视神经网络处理器210的多个块中的聚合活动。例如,复合计时器可以同时监视自外部接口200接收到数据以来的经过时间、自外部接口200发送数据以来的经过时间和/或自计算引擎240激活以来的经过时间。
在一些示例中,当处理神经网络层所花费的时间已经超过预定的时间量时,层定时器320可以超时。与这些示例一致,层计时器320可以监视与在神经网络中执行层有关的活动的总和,该活动可以包括但不限于存储器读取、存储器写入和计算引擎活动。在一些示例中,层定时器320的阈值时间可以大于每个主定时器311-319的阈值时间。
在一些示例中,当处理整个神经网络所花费的时间已经超过预定的时间量时,神经网络定时器330可以超时。与这些示例一致,神经网络定时器330可以监视与执行神经网络有关的活动的总和,该活动可以包括但不限于存储器读取、存储器写入和计算引擎活动。在一些示例中,神经网络定时器330的阈值时间可以大于主定时器311-319和/或层定时器320的阈值时间。例如,神经网络定时器330的阈值时间可以是十亿个时钟周期。
在一些示例中,聚合器340可以基于主定时器311-319和/或复合定时器(例如,布局定时器320和/或神经网络定时器330)的输出提供聚合超时错误信号。根据一些实施例,当主定时器311-319、层定时器320和/或神经网络定时器330中的任何一个超时时,聚合超时错误信号可以指示错误。即,当神经网络处理器210的各个模块挂起(导致一个或多个主定时器311-319超时)、当神经网络的一层挂起(导致层定时器320超时)和/或当神经网络挂起(导致网络定时器330定时)时,超时错误检测器300可报告超时错误出去)。”
下图是根据一些实施例的具有调试模式的神经网络处理器400的简化图。神经网络处理器400可用于实现系统200的神经网络处理器210。图中示出了在启动期间调试处理器400访问神经网络处理器400的隐藏寄存器的能力。
图 4
“在一些示例中,在启动期间,神经网络处理器400可以响应于错误(例如超时错误)自动地从操作模式(例如,神经网络的正常执行)转换到调试模式。
神经网络处理器400包括多个寄存器,这些寄存器存储与神经网络处理器400相关联的状态信息和/或各种其他类型的信息(例如,指令、数据、地址指针等)。在一些示例中,多个寄存器可以包括一个或多个顶层寄存器412,其可以容易地和/或通过外部接口(例如,通过使用AXI总线协议的外部接口220)直接访问以用于调试目的。此外,多个寄存器包括一个或多个深寄存器414,它们不容易和/或通过外部装置直接访问。例如,可以通过经由多路复用器420将数据迁移到顶层寄存器412来访问存储在深寄存器414中的数据。因此,存储在深寄存器414中的数据可能需要大量时间来检索。
通常,当处理器遇到错误(如超时错误)时,处理器的运行进程将终止和/或重新启动,而不提供对存储在处理器寄存器中的状态信息的访问。或者,可以保存捕捉超时错误时刻处理器状态信息子集的快照。例如,快照可以包括来自一个或多个顶层寄存器(例如顶层寄存器412)的数据。然而,快照通常不包括来自深寄存器(例如深寄存器414)的数据。特别是,生成深度寄存器的综合快照可能需要很长时间,而且效率很低,因为存储在深度寄存器中的许多信息与手头的错误无关。然而,为了加速处理器的调试过程,需要能够有选择地从深寄存器访问相关数据。
为了解决这些问题,神经网络处理器400在调试模式下暂停执行神经网络,使得神经网络处理器400的许多寄存器中的数据不再像在工作模式中那样改变值。在一些实施例中,神经网络处理器400在其它情况下仍然能够在调试模式下响应外部刺激和/或请求。因此,负责调试错误的工程师保留对来自寄存器(包括顶层寄存器412和深层寄存器414)的数据的访问。例如,工程师可以控制多路复用器420来手动查找与深寄存器414中存储的错误相关的信息。此外,如图4所示,工程师可以在神经网络处理器400上运行单步指令,以确定增量操作如何影响神经网络处理器400的状态。这些能力可以帮助工程师确定错误的根本原因。因此,相对于传统方法,调试神经网络处理器400的过程可以大大加快。”
下图是根据一些实施例的用于神经网络处理器中的错误处理的方法500的简化图。方法500可由神经网络处理器120、220、400实现。
图 5
“在处理510处,接收错误报告。例如,可以响应于检测错误而从神经网络处理器的一个或多个错误检测器(例如错误检测器251-257)接收错误报告。错误报告的示例包括响应错误、完整性错误、协议错误、奇偶校验错误、指令错误、计算错误和/或超时错误,如前面关于图2所讨论的。在一些示例中,错误报告可能对应于机器检查体系结构(MCA)错误报告。
在处理520处,确定错误的类型。在一些实施例中,确定错误的类型可以包括确定错误是否对应于程序错误、数据错误和/或超时错误。例如,程序错误可以包括协议错误和/或指令错误;数据错误可以包括响应错误、完整性错误、奇偶校验错误和/或计算错误;超时错误可以包括超时错误检测器257引起的错误。当遇到程序错误时,方法500可以继续处理530和540,以分别终止神经网络的执行并将神经网络的未决结果识别为损坏。当遇到数据错误时,方法500可以继续处理540,以识别神经网络的未决结果为损坏,而不在处理530终止神经网络的执行。当遇到超时错误时,根据神经网络处理器是在启动模式还是在生产模式下操作,方法500可以进行到用于转换到调试状态的过程550或用于终止神经网络的执行并重置神经网络处理器的过程560。
在处理530处,在不重置神经网络处理器的情况下,立即终止和/或暂停神经网络的执行。在一些实施例中,过程530可以在遇到程序错误时执行,因为当要执行的指令有缺陷时(例如,当程序指令包括未识别的或其他无效的命令和/或指令代码时),神经网络处理器可能无法继续执行神经网络。因此,可以立即停止神经网络的执行,以便可以重新加载和/或以其他方式更正指令。
在处理540,神经网络的未决结果被识别为损坏。在一些实施例中,通过改变神经网络处理器的错误中断管脚(例如错误中断管脚284)的电平,可以将未决结果识别为损坏。改变错误中断pin的电平可导致外部系统(例如中断处理器290)访问错误信息(例如,通过从神经网络处理器的状态寄存器检索错误信息)并确定适当的补救措施。针对被识别为损坏的神经网络的待处理结果可采取的补救措施的示例可包括从头和/或从先前的检查点重试待处理的神经网络计算;完全删除待处理结果并转入下一个计算;重新启动神经网络处理器等。
在处理550,当神经网络处理器在启动期间遇到超时错误时,神经网络处理器转换到调试模式。如先前关于图4所述,当神经网络处理器转换到调试模式时,暂停神经网络处理器的执行,使得在超时错误时的寄存器值停止改变。在这方面,工程师可以通过检查寄存器值和/或通过单步执行指令来调试超时错误。
在处理560处,当神经网络处理器在生产中遇到超时错误时,终止神经网络的执行并重新启动神经网络处理器。与提出的情况不同,需要使神经网络处理器在超时错误时尽快恢复并运行。而且,在生产中通常没有工程资源可用于调试神经网络处理器。因此,重新启动神经网络处理器以消除挂起情况可能是对生产中超时错误的首选响应。”
关于特斯拉电池组安全充电方法的专利解析报道就简要介绍到这里。特拉斯专利原文见附件。