具有交替生产/优化模式的自适应加速器 背景技术 [0001] 有许多神经网络在计算、功率、内存等方面都“大材小用(overkill)”。冗余已被用于通过具有处理元件的备用副本并从出故障的部件切换到其备用副本来提高神经网络的可靠性。在某些行业中,由于监管要求(如例如保证一定水平的可靠性),涉及部署多个加速器的冗余是一项必备的特征。这种冗余通常会导致大量优化,如在不同精度水平上进行量化。还没有系统的优化方式,并且这通常需要再训练模型。 附图说明 [0002] 根据所公开的技术的一个或多个不同的示例,参考以下附图详细地描述了本公开。附图仅被提供用于说明性目的,并且仅仅描绘了所公开的技术的典型或示例方面。 [0003] 图1图示了根据本文描述的一个或多个示例的忆阻器交叉开关(crossbar)阵列(即,加速器)。 [0004] 图2图示了根据本文描述的一个或多个示例的具有比较器处理器的忆阻点积引擎。 [0005] 图3图示了根据本文描述的一个或多个示例的具有忆阻点积引擎(dot product engine,DPE)的资源的忆阻DPE的虚拟化系统,以及忆阻DPE的资源中的瓦片(tile)的详细图示。 [0006] 图4图示了根据本文描述的一个或多个示例的自适应忆阻器交叉开关阵列(即,自适应加速器)。 [0007] 图5图示了根据本文描述的一个或多个示例的在优化模式下的忆阻器交叉开关阵列(即,优化加速器)。 [0008] 图6图示了根据本文描述的一个或多个示例描绘了使用数据标记对数据进行排序的自适应加速器系统。 [0009] 图7是图示了根据本文描述的一个或多个示例的使用自适应加速器系统的方法的流程图。 [0010] 图8是图示了根据本文描述的一个或多个示例的使用包括数据标记能力的自适应加速器系统的方法的流程图。 [0011] 图9是可以用于实施在本公开中描述的示例的各种特征的计算部件。 [0012] 图10描绘了可以在其中实施本文描述的示例的各种特征的计算机系统的框图。 [0013] 附图并非是穷举的,并且不将本公开限制于所公开的精确形式。 具体实施方式 [0014] 应理解,所公开的技术的附图和描述可能已被简化以图示与清楚理解所公开的技术有关的元件,同时为了清晰的目的而消除在典型加速器系统或使用加速器系统的典型方法中存在的其他元件。本领域的普通技术人员将认识到,其他元件可能是期望的和/或所需的以便实施所公开的技术。然而,由于这样的元件在本领域中是众所周知的,并且由于它们不利于更好地理解所公开的技术,因此未在本文中提供对这样的元件的讨论。还应理解,此处包括的附图仅提供所公开的技术的结构的图解表示,并且落入所公开的技术的范围内的结构可以包括与附图中示出的结构不同的结构。现在将参考附图,其中,相同的结构具备相同的参考名称。 [0015] 在详细地解释所公开的技术的至少一个示例之前,应理解,本文阐述的发明概念在其应用方面不限制于以下描述中所阐述或附图中所图示的构造细节或部件布置。还应理解,本文采用的措辞和术语仅用于描述目的并且不应被视为限制性的。 [0016] 应进一步理解,所描述的特征中的任何一个可以单独地使用或结合其他特征来使用。在检查附图和本文的详细描述之后,其他所发明的设备、结构、装置、系统、方法、特征和优点对于本领域的技术人员来说将是显而易见的或变得显而易见。所有这样的附加设备、结构、装置、系统、方法、特征和优点都旨在受所附权利要求书保护。 [0017] 为了本公开的目的,短语“忆阻器交叉开关阵列”、“忆阻DPE”或术语“加速器”(和其相应的派生词)全部都可以互换地使用。 [0018] 如本文所使用的,“点积”广义地指用于形成标量的两个向量之积,该标量的值是向量的幅值和它们之间的角度的余弦之积。在忆阻DPE的上下文中,点积可以通过将电压施加到输入并将该电压乘以被编程到DPE中的电导率以获得电流来确定,如下文参考图3更加详细地描述。 [0019] 应当注意,如本文所使用的术语“优化”、“最优”等可以用于意指做到或实现尽可能有效或完美的性能。然而,阅读本文件的本领域普通技术人员将认识到,并不总是能够实现完美。因此,这些术语还可以涵盖在给定的情况下做到或实现尽可能好或有效或实际的性能、或者做到或实现优于利用其他设置或参数所可以实现的性能。 [0020] 在传统的芯片处理中,加速器用于执行若干复杂计算。例如,在卷积神经网络(convolution neural network,CNN)和其他类型的人工神经网络中,网络由具有可学习权重的神经元构成。这些网络的权重用从如高斯分布等预定义分布中抽取的随机数进行初始化,以允许神经元在训练期间学习计算有用的特征。每个神经元接收一些输入,执行这些输入与权重的向量之间的点积,并且可能随着训练进展而调整这些权重。这样,可以针对每个特定训练任务调整权重。 [0021] 然而,通过传统的芯片处理,这些训练计算是串行执行的并且可能浪费芯片上原本可用的处理能力。在深度学习过程中,这种浪费尤其严重。例如,在卷积神经网络(CNN)和一些其他类别的深度神经网络中,在每一层执行处理。层的权重由一组可学习滤波器构成,这些可学习滤波器的接受域很小,但延伸穿过输入的整个深度。在正向传递期间,每个滤波器在输入体积的宽度和高度上进行卷积,从而计算滤波器的条目与输入的条目之间的点积,并且产生该滤波器的2维激活图。因此,网络学习到滤波器会在其在输入中的某个空间位置处检测到某个特定类型的特征时激活。 [0022] 本文描述的所公开的技术的示例通过并入交叉开关内计算和交叉开关间计算来改进在传统的芯片处理中低效使用的基于交叉开关的加速器(如DPE)上的卷积计算。在交叉开关计算中,卷积层可以被展开成向量,并且这些向量可以被分组成其中每一行或列是展开的滤波器的矩阵。与卷积窗的位置相对应的输入的每个子矩阵也被展开成向量。卷积被计算为每个输入向量与滤波器矩阵的点积。在交叉开关内计算中,交叉开关的未使用空间用于存储滤波器矩阵的副本,并且XN中的未使用空间用于存储输入的更多元素。在交叉开关间计算中,未使用的交叉开关用于存储滤波器矩阵的副本,并且未使用的XNs用于存储输入的更多元素。然后,该方法在单个步骤中执行多次卷积迭代。 [0023] 所公开的技术的示例还减少用于对大输入进行卷积的计算数量。例如,在每个卷积期间,系统可以使用不同类型的滤波器从输入中提取有用的特征,这些滤波器的权重是在训练期间自动地学习的。在所公开的技术的一些示例中,可以复制滤波器并且可以在芯片中的未使用的交叉开关上执行卷积。通过外推交叉开关间滤波器复制技术,即使在交叉开关已经被充分利用但芯片中存在未使用的交叉开关时,系统也可以应用改进的卷积过程。 [0024] 当用小滤波器(例如,滤波器填充小百分比的交叉开关空间)计算卷积时,交叉开关内计算可以减少与大交叉开关相关联的资源浪费。滤波器的大小可能不改变,但系统可以实施交叉开关间计算和交叉开关内计算,以在单个步骤中执行多个卷积迭代。附加地,当将交叉开关内计算与交叉开关间计算进行组合时,使系统能够使用更大的交叉开关,同时不管滤波器的接受域的大小如何都确保效率。这可以有助于至少改进处理CNN的开始,其中,传统的系统利用少量的权重和较大的输入大小。 [0025] 图1提供了根据本公开的示例的示例电子设备。在一些示例中,电子设备(例如,加速器等)被组织在交叉开关以及协调计算并执行不由交叉开关处理的操作的本地处理器的层次结构中。交叉开关可以对固定大小的矩阵块执行矩阵向量乘法(matrix‑ vectormultiplication,MVM)。图1中图示的示例电子设备包括忆阻器交叉开关阵列100、行驱动器电路120和多个列输出电路130,每个列输出电路对应于忆阻器交叉开关阵列100的列线CL之一。 [0026] 忆阻器交叉开关阵列100可以包括N个行线RL(其中,N≥1)、M个列线CL(其中,M≥ 1)和多个忆阻器101,每个忆阻器连接在行线RL之一与列线CL之一之间(参见虚线框110)。 在某些示例中,行线RL与列线CL的每个交叉点可以具有对应的忆阻器101。行线RLn中的每一个可以对应于数字输入向量 的数字输入值xn。具体来说,行线RL1对应 于数字输入值x1,行线RL2对应于数字输入值x2,以此类推。 [0027] 行驱动器电路120用作交叉开关阵列100的输入级,并且可以跨多个时间段基于数字输入向量 根据分布式数模转换架构将模拟电压施加到行线RL。具体来说,在某些示例中,行驱动器电路120可以在多个时间段t1、t2、…、tP期间分别将多个模拟电压V1、V2、…、VP施加到节点,并且针对行线RL中的每一个,在多个时间段t1、t2、…、tP之一期间基于数字输入向量 的对应的数字输入值xn来将行线RLn选择性地连接到节点。例如,数字输入值xn等于“1”的任何行线RLn可以在第一时间段t1期间连接到节点,数字输入值xn等于“2”的任何行线RLn可以在第一时间段t2期间连接到节点,以此类推。 [0028] 列输出电路130_M(其中,M≥1)可以各自包括积分电容器Cint(未示出)以及由积分控制信号Ctr_Int(未示出)控制的开关S1(未示出)。在某些示例中,列输出电路130_M中的每一个可以包括呈类似配置的类似特征(除了连接到不同列线CLM)。 [0029] 与创建深度神经网络相关联的计算工作负载通常包括训练阶段和推理阶段。在训练期间,神经网络试图从一组输入训练数据中学习。未训练模型的每个层被分配一些随机权重,并且模型运行该输入训练数据的正向传递。这个正向传递计算模型输出,例如,通过使用模型权重确定类别得分来预测用于分类模型的类别标签。将类别得分与实际标签进行比较,并且用损失函数计算误差。然后,在反向传递中,通过神经网络往回传播误差,并且更新权重。例如,可以经由如梯度下降等算法来更新权重。梯度下降算法是将成本函数最小化的用于找到函数的参数(即,系数)的值的优化算法。 [0030] 时期(epoch)是指输入训练数据的所有样本的完整正向传递与反向传递。典型地,使用传统的基于CMOS的CPU,这些计算是非常昂贵的,并且在处理每个样本之后使用单个权重更新来执行。在这种情况下,训练数据被分成若干批次,并且在每个批次之后更新权重。 [0031] 在深度学习工作负载中使用的常见计算结构(矩阵点积)已引起GPU的应用,以相比于传统CPU提供性能加快。GPU比CPU更能处理向量和矩阵计算。单个或并行图形处理单元(GPU)可以用于加快处理。然而,已为图形应用构建的GPU并未针对深度学习工作负载的要求被完全优化,并且存在性能和能量低效的问题。 [0032] 使用忆阻器交叉开关阵列进一步减少了GPU上的处理时间,并且忆阻器交叉开关阵列提供高计算性能和较低的能量要求。忆阻器交叉开关阵列可以用于训练阶段期间的矩阵点积计算。在训练阶段的反向传递期间,可以从模型的最后一层到模型的第一层做出模型权重改变。可以用模型权重迭代地更新存储器忆阻器交叉开关阵列,并且执行矩阵点积计算以确定最佳模型。 [0033] 电子地耦接到忆阻器交叉开关阵列的向量输出寄存器的比较器电路可以将忆阻器交叉开关阵列中已经可用的数据与写入到交叉开关阵列的新模型权重数据进行比较。下文提供了更新存储在交叉开关阵列中的权重(表示为浮点数的神经网络的可训练参数)的两个示例通用方法。在第一示例方法中,更新忆阻器交叉开关阵列中的不匹配值,而使匹配值保持完整不变。在第二示例方法中,对照阈值评估新模型权重的绝对变化量权重值,以确定是否要更新交叉开关阵列。在任一示例方法中,通过改变交叉开关阵列中的忆阻器的电导率来对权重进行编程。在第一示例方法中,如果使用特定电导率编码在交叉开关单元中的权重完全匹配要编程在同一单元中的新权重,则不更新编码在该交叉开关单元中的权重。在第二示例方法中,权重(即,当前权重值和要编程的新权重值)必须不完全匹配以避免对特定单元进行重新编程。相反地,引入阈值,该阈值确定权重的当前值与新值之间的差的容差。当使用传统硬件来训练模型时,通常会描述权重。但当模型部署在由交叉开关阵列供电的硬件上时,使用忆阻器的电导率来表示权重。因此,这里的阈值适用于被估计为编程在给定单元中的当前电导率与新电导率之间的某种差。 [0034] 以下是在一种方法中确定阈值的示例步骤。首先,确定当前电导率C_current。接下来,在给出权重的新值的情况下,估计被期望用来编程C new的新电导率。这个估计值可能与由于忆阻器中的噪声水平已知而可以计算出来的某种不确定性相关联。尽管并非必要的,但可以考虑下文描述的计算的不确定性。接下来,定义两个电导值之间的距离函数。这个距离函数定义两个值的相似程度,并且通常,可以使用多个这样的距离函数。这样的函数的一个示例是绝对值:distance(C_current,C_new)=|C_current‑C_new|。这样的函数的另一示例可以是相对差:distance(C_current,C_new)=(C_new–C_current)/C_current。 在给出距离函数的选择的情况下,选择在上文被称为阈值的值。如果当前电导率与要编程的新电导率之间的所选距离低于这个阈值,则不对交叉开关单元进行重新编程。可以凭经验来估计或手动地选择这个阈值。例如,阈值可以落入某一电导率范围内,该电导率范围可以是绝对的或是现有权重的分率,例如,可以应用于上述相对差距离函数的2%或5%差。 [0035] 现在描述在神经网络深度学习应用中使用的示例忆阻交叉开关阵列。虽然描述了忆阻交叉开关阵列的特定示例,但可以使用忆阻交叉开关阵列的其他配置。图2图示了具有单个电压向量的忆阻点积引擎200。点积引擎200包括交叉开关阵列210,该交叉开关阵列包括N个行电极204和M个列电极206。贯穿交叉开关阵列210的每个交叉开关结包括忆阻元件 201,从而形成点积引擎的存储器元件。每个存储器元件可以包括彼此串联的忆阻器和晶体管。点积引擎200包括用于将电压施加到行电极204的向量输入寄存器或向量输入211、以及用于接收从列电极206中的电流得出的输出电压的向量输出寄存器或向量输出214。向量输入可以耦接到数模转换器261以将数字值转换为用于写入到交叉开关阵列210的模拟值。向量输出214可以包括模数转换器215以将模拟值转换为数字值。点积引擎200还包括用于将列电极206中的电流转换为电压的感测电路216。在示例中,感测电路216包括可以被布置为表示用于读取操作的虚接地的运算放大器218和电阻器221。 [0036] 点积引擎200还可以包括与被用作存储设备的交叉开关阵列210相关联的其他外围电路。例如,向量输入211可以包括连接到行电极204的驱动器。地址解码器可以用于选择行电极204并且激活与所选行电极204相对应的驱动器。用于所选行电极204的驱动器可以用不同电压驱动对应的行电极204,这对应于向量矩阵乘法或设置交叉开关阵列210的忆阻元件201内的电阻值的过程。对于列电极206,可以包括类似的驱动器和解码器电路。控制电路还可以用于控制点积引擎200的输入处的电压施加以及输出处的电压读取。数模转换电路和模数转换电路可以在向量输入211处和向量输出214处使用。前往行电极204和列电极 206的输入信号可以是模拟的或数字的。可以在与上述示例中的交叉开关阵列210相同的集成结构或半导体裸片中使用半导体处理技术来制作上文描述的外围电路。如下文更加详细地描述的,在点积引擎的操作期间,发生两个主要操作。第一操作是对交叉开关阵列中的忆阻器进行编程以便将N×M矩阵中的数学值映射到阵列。在一个示例中,在编程操作期间一次对一个忆阻器进行编程。第二操作是点积或矩阵乘法运算。在这个操作中,施加输入电压并且获得输出电压,这对应于将N×M矩阵乘以N×1向量的结果。输入电压低于编程电压的阈值,因此在矩阵乘法运算期间不改变阵列210中的忆阻器的电阻值。 [0037] 点积引擎200可以包括模数转换器215以将向量输出寄存器214的模拟信号转换为数字值。点积引擎200可以包括数模转换器261以将数字值转换为前往向量输入寄存器211的模拟值。 [0038] 点积引擎200可以电子地耦接到比较器处理器260。比较器处理器260可以整体地耦接到点积引擎200并且形成为其一部分。比较器处理器260可以是单独的部件(如集成电路),或单独的处理器。比较器处理器260可以是一个或多个中央处理单元(CPU)、基于半导体的微处理器、和/或适合于取得并执行存储在机器可读存储介质中的指令的其他硬件设备。比较器处理器可以提取、解码和执行指令,以控制用于比较和/或评估从点积引擎215接收到的数据(如由箭头215所示出的)与前往输入数据源(如由前往比较器处理器的箭头250所示出的)的过程。作为取得并执行指令的替代或补充方案,比较器处理器260可以包括一个或多个电子电路,这些电子电路包括用于执行一个或多个指令的功能的电子部件,例如,现场可编程门阵列(FPGA)或专用集成电路(ASIC)。比较器处理器可以包括用于存储可执行指令的存储器,和/或耦接到单独的存储介质262。 [0039] 机器可读存储介质(如262)可以包括易失性和非易失性两种、可移除和不可移除两种介质,并且可以是任何电子、磁性、光学或其他物理存储设备(包含或存储可执行指令、数据结构、程序模块或比较器处理器260可访问的其他数据),例如固件、可擦可编程只读存储器(EPROM)、随机存取存储器(RAM)、非易失性随机存取存储器(NVRAM)、光盘、固态驱动(SSD)、闪速存储器芯片等。机器可读存储介质可以是非暂态存储介质,其中,术语“非暂态”不涵盖暂态传播信号。 [0040] 比较器处理器260可以执行用于比较和/或评估输入向量数据(如由箭头250所表示的)与输出向量数据(如由箭头255所表示的)的方法,该输出向量数据已经加载到点积引擎200的忆阻器存储器中。比较器处理器260可以向另一电路或处理器270提供改变后的数据值(如由箭头265所表示的),以将改变后的数据值往回写入到点积引擎200的忆阻器存储器。 [0041] 在深度学习处理中,上文描述的比较器电路减少对交叉开关阵列的写入操作的数量,从而加速整体计算处理效率,并且减少神经网络的训练阶段的整体处理时间。然而,尽管比较器电路出于这些原因是有利的,但可以实现进一步的改进和优点(例如,对计算处理效率以及对整体处理时间的减少),如下文所阐述的。 [0042] 现在参考图3,图示了用于忆阻DPE的虚拟化的示例系统。示例系统350包括忆阻DPE 300。如本文所使用的,术语“忆阻器”可以是指维持电流的时间积分与电压的时间积分之间的函数关系的无源双端子电路元件。进一步地,术语“忆阻点积引擎”广义地是指包括忆阻交叉开关阵列的点积引擎。 [0043] 示例忆阻DPE 300包括至少一个DPE资源323。在各种示例中,DPE资源323包括至少一个忆阻交叉开关阵列,该至少一个忆阻交叉开关阵列包括多个行线以及与这些行线交叉的多个列线。下文参考图2和图3更详细地描述了示例DPE资源323。 [0044] 示例忆阻DPE 300进一步包括接口363。在各种示例中,接口363是允许DPE 300通信地耦接到外部部件的输入/输出接口。例如,计算系统的处理器可以通过接口363耦接到DPE 300并且可以获得对DPE资源323的访问。 [0045] 在示例系统350中,示例忆阻DPE 300进一步设置有控制器371。在各种示例中,控制器371可以控制示例忆阻DPE 300的各个方面。例如,控制器371可以确定哪些资源可用于或被分配给各种任务或用户。示例系统350中的控制器371包括调度器377和资源管理器 379。例如,控制器371或控制器371的调度器377通信地耦接到外部接口363,以便于外部部件对DPE资源323的访问。资源管理器379可以监测DPE资源323的各个部分的可用性并且可以选择性地分配资源323给如上文描述的外部部件等实体。 [0046] 在各种示例中,通过复制物理忆阻DPE 300的外部接口363来虚拟化忆阻DPE 300。 如图3中所图示的,示例系统350包括复制接口382a至382n。在各种示例中,可以使任何实际数量的复制接口382a至382n可用。在一些示例中,系统350可以设置最大数量的复制接口 382以允许充足的资源可用性。 [0047] 复制提供了一种机制,通过该机制,单个物理忆阻DPE 300可以向各个用户表现为多个单独的物理设备。在这方面,物理忆阻DPE 300经由每个复制接口为每个用户提供唯一存储器空间、工作队列、中断和命令处理。在一个示例中,物理忆阻DPE 300是基于外围部件互连高速(PCIe)的DPE,该DPE可以被配置为在PCI配置空间中表现为多个功能。每个复制接口提供其自身的配置空间。因此,物理忆阻DPE 300表现为多个单独的PCIe设备。 [0048] 可以通过为每个复制接口382提供单独的流层来实现物理忆阻DPE 300的虚拟化。 因此,与特定复制接口382相关联的用户可以通过对应的复制接口382来访问作为虚拟DPE 385的物理忆阻DPE 300的资源(例如,DPE资源323)。在这方面,类似于控制器371与物理忆阻DPE 300的外部接口363的耦接,每个复制接口382a至382n通信地耦接到控制器371。 [0049] 例如,在图3的示例中,用户可以通过第一复制接口382a访问物理忆阻DPE 300的DPE资源323。在这方面,第一复制接口382a可以与对应的虚拟DPE 385a相关联。对应的虚拟DPE 385a作为不同的流层由物理忆阻DPE 300的控制器371容纳。在各种示例中,调度器377可以分配时隙或时间分片给各种流层或虚拟DPE 385a至385n。 [0050] 在各种示例中,调度器377在每个时隙上动态地选择流层或虚拟DPE 385,以经由适当的复制接口382来运行。例如,调度器371可以支持各种调度算法中的任一种,如循环(round robin)和加权循环。 [0051] 示例系统350中的控制器371的资源管理器379可以在每个时隙期间选择性地分配至少一种资源给虚拟DPE。例如,资源管理器379可以动态地选择调度算法并且通过适当的虚拟DPE 385管理允许用户执行的动作类型。例如,可以防止特定流层或虚拟DPE重新配置物理忆阻DPE。 [0052] 在各种示例中,调度器377和资源管理器379可以促进从调度算法移除层。例如,在一些情况下,整个物理忆阻DPE 300可以针对扩展数量的时隙被分配给特定流层。在这方面,特定流层可以是虚拟DPE 385或通过外部接口363耦接到物理忆阻DPE 300的外部部件。 在这方面,还可以针对扩展的时段禁用时隙或时间分片。 [0053] 还图示了具有忆阻DPE 300的示例DPE资源323的图3的示例系统350。DPE资源323包括多个瓦片321。在各种示例中,每个瓦片321是DPE资源323的子集。例如,多个瓦片321可以被分配给特定任务或流层。在这方面,可以对DPE资源323进行划分以同时容纳并支持任意数量的任务。进一步地,瓦片321可以以各种方式中的任一种进行布置。例如,在图3的示例中,瓦片321布置成阵列。 [0054] 借助对忆阻DPE 300的DPE资源323中的瓦片321的示例详细说明来进一步图示图3的示例系统。示例瓦片301是使用忆阻交叉开关阵列的示例架构。在这方面,示例瓦片301包括存储器缓冲器310(例如,增强型动态随机存取存储器(或eDRAM)缓冲器)以及各种其他部件,如输出寄存器312和移位加法单元314。存储器缓冲器310可以是例如DRAM缓冲器或另一类型,并且可以用于存储向下文描述的交叉开关阵列322提供的输入值。进一步地,输出寄存器312可以用于聚合来自移位加法单元314的结果,也如下文所描述的。DPE资源323的每个瓦片(如瓦片301)设置有控制单元316,该控制单元可以通信地耦接到忆阻DPE 300的控制器371。在这方面,每个瓦片321通过总线耦接到控制器371,从而提供控制器371与每个瓦片321的各种部件(如控制单元316)之间的连接。示例瓦片301设置有被称为原位乘法累加(in‑situ multiply accumulate,IMA)单元320的一组部件。在图3的示例中,瓦片301设置有八个IMA单元320。 [0055] 在图3中详细地图示了IMA单元320的一个示例架构。在所图示的示例中,IMA单元 320设置有多个忆阻器交叉开关单元322。在图3的示例中,IMA单元320设置有四个忆阻器交叉开关单元322。每个交叉开关单元322耦接到数模转换器(DAC)324以及采样与保持(sample‑and‑hold)单元326。来自DAC 324的信号可以被组合(例如,经由输入寄存器328)并提供给一组模数转换器(ADC)330。图3的IMA单元320进一步包括控制单元332,该控制单元可以例如通过瓦片301的控制单元316通信地耦接到忆阻DPE 300的控制器371。IMA单元 320进一步包括各种其他部件,如输出寄存器334和移位加法单元336。在各种示例中,IMA单元320的输出寄存器334可以是瓦片301的输出寄存器312的一部分或耦接到该输出寄存器。 类似地,IMA单元320的移位加法单元336可以是瓦片301的移位加法单元314的一部分或耦接到该移位加法单元。 [0056] 在各种示例中,每个忆阻交叉开关阵列322包括多个行线344以及与行线344交叉的多个列线342。忆阻存储器元件346位于行线344与列线342的每个交叉点处。每个忆阻元件346接收用于表示矩阵内的值的编程向量信号、参考向量信号、以及用于表示要乘以矩阵的向量值的操作向量信号。在这方面,交叉开关阵列322的行线344耦接到DAC 324以根据存储在存储器缓冲器310中的输入值向行线344提供输入电压348,从而形成输入向量信号。进一步地,每个列线342耦接到采样与保持单元326以从列线342接收电流。采样与保持单元 326耦接到ADC 330以及移位与加法(shift‑and‑add)单元336以将列线342中的电流转换为电压信号。在DPE的各种示例中,通过将输入电压348施加到行线344并且收集通过列线342的电流并测量输出电压来执行向量和矩阵乘法。 [0057] 因此,可以对交叉开关阵列322执行点积运算,并且将结果发送到ADC 330并聚合在输出寄存器334或输出寄存器312中。例如,通过sigmoid算子313发送聚合结果并且将该聚合结果存储在存储器缓冲器310中以用于进一步处理。 [0058] 机器学习(ML)算法的增强一直在改进,从而扩展用于实施ML模型中的计算的低精度算术的适用性。如今,低精度处理限制于输入数据集的某些用例(ML模型)和类型,因此在计算场中使用通用加速器在能量效率方面是无效的。 [0059] 而且,存在在计算、功率、内存等方面都“大材小用”的许多神经网络。冗余传统上已被用于通过具有处理元件的备用副本并从出故障的部件切换到其备用副本来提高可靠性。常见的硬件解决方案是使用同步运行的紧密耦接的处理器核心来比较输出以解决伪造错误。常见的软件解决方案是在分布式系统中进行冗余计算以通过选择最快的计算路径来加快ML模型推理。这种冗余通常会导致大量优化,如在不同精度水平上进行量化。还没有系统的优化方式,并且这通常需要再训练模型。而且,能量效率对于一些应用(特别是在电力稀缺的边缘)是期望的,就像一些实时应用中的性能一样。 [0060] 上述问题的解决方案是使用基线(生产)加速器、优化加速器和控制硬件加速器、以及使生产/优化加速器在生产与优化之间交替地切换的操作的实施方式。该实施方式中的切换将是无缝的而没有任何输出故障(glitch),这意味着可以在有效地激活优化加速器的同时冲洗基线。该实施方式可以用动态策略产生服务质量(QoS)的自主调整。客户可以从可(自)重新配置加速器中获益,与针对不同用例购买多个/冗余解决方案相比较这将节省成本,使得硬件减少。此外,适应性有助于管理基础结构,因此可以采用较少的可管理性。 [0061] 参考图4至图6,上述问题的解决方案是使用基线(生产)加速器、优化加速器和控制硬件加速器、以及使生产/优化加速器在生产与优化之间交替地切换的操作的实施方式。 [0062] 在本文公开了示例硬件/软件实施方式,该硬件/软件实施方式即时处理输入数据,可以将类似特性的未来数据路由到支持QoS和服务水平协议(service level agreement,SLA)的相应ML硬件(具有最佳算术精度),并且可以提供能量效率。该实施方式依赖于:a)针对特定时间间隔预处理新数据;b)从具有不同算术精度的加速器获取反馈;和c)针对这种数据推荐最优算术精度和相应的加速器。使用这一点作为参考,匹配类似特性的任何数据将在未来被路由到最优硬件平台。使用一对加速器实施这一点,其中,一个加速器连续地进行评估而另一加速器在生产模式下。 [0063] 通过这个实施方式,并非使加速器保持静态,本公开描述了适应于变化的环境条件以及数据和概念漂移的加速器。通过两个优化/生产加速器,在任一给定时间点,一个加速器进行自适应而另一个加速器处理数据。一旦第二加速器已适应于数据漂移,加速器就会改变其模式,并且可训练的加速器成为“优化的”加速器。加速器不间断地这样做,从而维持冗余,提供预期的QoS,并且适应于数据/概念漂移。 [0064] 通过这个配置(根据例如图4至图6的配置),加速器可以被配置为在处于优化模式下时处理预处理数据。而且,通过这个配置,控制加速器可以被配置为:在处于优化模式下时更改第一加速器的(多个)操作参数(如图5中参考例如权重量化、部分和(partial sum)量化和/或激活量化的操作参数,而(多个)操作参数还可以处于更高的水平,即,更粗的粒度,如处于核心水平或处于阵列水平,或通过经由例如使某些层短路进行重新路由),以确定每个已更改的操作参数对QoS的影响(应注意,参数可以通过使适配器在QoS目标方面比基线表现得更好或更差来影响QoS。或其可以类似地执行。将仅在第一/更好的情况下而不是在第二/更差的情况和第三/类似的情况下考虑到切换);在确定第一加速器的(多个)最优操作参数之后将第一加速器从优化模式切换到生产模式;将第二加速器从生产模式切换到优化模式;并且在处于优化模式下时更改第二加速器的(多个)操作参数以确定每个已更改的操作参数对QoS的影响。从在生产模式下运行一个模型的一个加速器切换并继续优化该另一加速器可以有助于提高准确度以及节能。这个实施方式还实现一组更广义的调整,如精度、功耗、数据重新路由等。 [0065] 现在参考图4,描绘了示例加速器A(即,忆阻交叉开关阵列A)410。加速器A 410通常类似于图3中示出的加速器(忆阻交叉开关阵列322),但包括适应。每个加速器410包括多个行线444以及与行线444交叉的多个列线442。忆阻存储器元件446位于行线444与列线442的每个交叉点处。每个忆阻元件446接收用于表示矩阵内的值的编程向量信号、参考向量信号、以及用于表示要乘以矩阵的向量值的操作向量信号。在这方面,行线444耦接到DAC 424以根据存储在存储器缓冲器(参见图3中的存储器缓冲器310)中的输入值向行线444提供输入电压448,从而形成输入向量信号。进一步地,每个列线442耦接到接口(INT)427以从列线 442接收电流IN。来自INT 427的输出信号输入到复用器429,该复用器组合INT输出信号。来自复用器429的输出耦接到ADC 430和移位加法单元436以将列线442中的电流IN转换为电压信号。在操作期间,通过将输入电压448施加到行线444并且收集通过列线442的电流IN并测量输出电压来执行向量和矩阵乘法。图4还图示了耦接到加速器A 410的适配器/控制器 480。这样的实施方式允许寄存器以精细的粒度测量功率、性能等。该实施方式还允许实现一对加速器,其中有源的加速器在生产模式下并且自适应加速器在优化模式下。可以经由物理或逻辑实施方式来实现对这些加速器模式的控制。可以经由以下各项采用物理实施方式:交叉开关列(参见由图4中的虚线表示的列);交叉开关(参见由图4中的小虚线表示的XBar);或IMA单元、瓦片、芯片、板(由图4中的大虚线表示的)。逻辑实施方式未在附图中呈现,但可以从gxy得到。这样,可以经由逻辑水平层或神经网络采用逻辑实施方式。 [0066] 图5图示了在优化模式下的示例加速器(即,忆阻交叉开关阵列)510。如上文描述的,图5描绘了可以被更改以调整优化加速器的操作参数。因此,加速器510(至少临时地)作为优化加速器操作。加速器510包括图4中示出的加速器410的部件。图5描绘了对多个忆阻元件546执行的权重量化584。权重量化584在ADC 530的输出处实现部分和量化586,这使得在移位加法单元536的输出处实现激活量化588。 [0067] 图6图示了示例自适应加速器系统600,描绘了使用数据标记690对数据进行排序。 图6描绘了数据从基线和优化的加速器两者流动到适配器/控制器中的过程,该适配器/控制器然后决定是否以及何时切换角色。自适应加速器系统600包括基线加速器610a、优化的加速器610b、适配器/控制器680和数据标记部件690。数据标记使得内联(inline)标记进入数据流以实现无缝切换。这是实现恰当排序而没有故障的一个示例方法。通过观察两个加速器上的数据标签并基于标签使它们同步,可以避免故障。另外,标签可以用于其他目的,如将数据分类使得可以更快地实现优化过程,或识别可以用于路由到最优加速器路径(例如,当多个基线加速器可用时)的类似类型的数据。 [0068] 上文参考图4提到的数据预处理可以由加速器中的至少一个执行,或取决于预处理类型由流水线中在加速器之前的其他处理单元执行。存在若干设计模式以进行特征变换(数据预处理)。一个选项将是将变换步骤嵌入到模型图中(或与模型一起部署)。在这种情况下,服务框架负责将变换和ML模型部件放置到适当的部件上(例如,用于预处理的仅加速器或CPU以及用于ML模型的加速器)。 [0069] 另一常见的设计模式是使用专用服务来实施ML模型(特征存储)的版本化 (versioned)数据变换。在后一种情况下,ML模型接受输入数据作为它们被给予的内容,并且无法改变。理论上,在前一种情况下,实际上还可以使数据变换(精度)适应于各种环境条件。因此,如果推理框架提供这种能力,则预处理部件实际上可以部署在定制的加速器上。 在这种情况下,可以调整这些数据变换部件的数据精度。 [0070] 所部署的加速器中的至少一个可以测量整体设备(其在每个时间点由基线加速器表示)的QoS(功率、时延、带宽)以及处于不同粒度水平(从交叉开关到层、到芯片、到端对端神经网络)的ML性能(例如,准确度、精度、召回率等)。就期望的精度信息的粒度类型而言,该信息被处理并用于适配器/控制器中的算法执行。该实施方式与使用哪个类型的精度无关,即,我们可以在物理(在一个配置中,为忆阻器和比特数;或对于可编程超高效基于忆阻器的加速器(Programmable Ultra‑efficient Memristor‑based Accelerator,PUMA)实施方式,为列、交叉开关、芯片、板等)或逻辑水平(层、神经网络)使用不同的精度。因此,加速器本身可以在芯片水平发挥作用,但它们可以替代性地(或附加地)以不同方式分解(break down)逻辑水平。例如,可以在交叉开关水平实现同步闭环。其他实施示例也是可能的。此外,可以共同地或单独地处理输入/权重/激活。 [0071] (以(和/或)软件、硬件、固件等实施的)设备可以动态地适应加速器中所部署的ML模型(例如,神经网络)以在所允许的准确度约束内实现期望的QoS。 [0072] 控制器/适配器测量QoS增量以能够决定何时将加速器从生产模式切换到优化模式或从优化模式切换到生产模式。数据标记可以用于对数据进行排序。 [0073] 实现切换的一些示例包括:当优化加速器在使用输入QoS指定参数的情况下达到优于基线的QoS;当优化独立于指定的QoS而仅仅优于基线时;可以优化可靠性、功率和/或测试的设备的默认QoS策略(这些可以周期性地进行);和/或当基线开始产生误差时。 [0074] 图7是图示了使用自适应加速器系统的方法700的流程图。方法700包括设置基线和优化加速器(框702)。根据一些示例,设置基线和优化加速器可以指代确定哪个加速器最初在基线模式下操作以及哪个加速器最初在优化模式下操作。 [0075] 方法700进一步包括根据接收到的操作参数设置QoS目标(框704)。在一些示例中,设置QoS目标包括在优化加速器所允许的准确度约束内确定期望的QoS目标(例如,准确度、时延、带宽、功率和/或响应性)。根据接收到的操作参数设置QoS目标的结果是识别出QoS阈值。 [0076] 方法700进一步包括根据基线加速器的使用来开始测量QoS(框706)。在一些示例中,开始测量QoS包括测量源自于使用基线加速器的QoS参数,如准确度、时延、带宽、功率和/或响应性。 [0077] 方法700进一步包括确定在基线加速器上是否满足QoS标准(框708)。根据一些示例,确定在基线加速器上是否满足QoS标准可以指代确定所测量的QoS是否优于QoS阈值。如果在基线加速器上满足QoS标准,则方法可以继续进行到框704。在一些示例中,这个循环可以重复以使基线加速器保持在基线模式下(因为继续满足QoS标准)。一旦在基线加速器上不(或不再)满足QoS标准,则方法可以继续进行到框710。在这个示例中,当在基线加速器上不(或不再)满足QoS标准时,期望基线加速器的优化提高使用基线加速器的QoS。将通过使基线加速器切换到优化加速器来实现对使用基线加速器的QoS的改进。 [0078] 方法700进一步包括通过历经各步骤开始优化过程(框710)。根据一些示例,开始优化过程的步骤可以是指由适配器/控制器实现和控制的步骤。开始优化过程的结果是从基线加速器最终切换到优化加速器。 [0079] 方法700进一步包括确定在优化加速器上是否满足QoS标准(框712)。根据一些示例,确定在优化加速器上是否满足QoS标准可以是指确定所测量的QoS是否优于QoS阈值。如果在优化加速器上不(或不再)满足QoS标准,则方法可以继续进行到框710。这意味着仍期望优化,并且因此维持该优化加速器作为优化加速器。一旦在优化加速器上满足QoS标准,则方法可以继续进行到框714。这意味着已完成优化加速器的优化,从而确定应发生优化加速器到基线加速器的切换。 [0080] 方法700进一步包括开始同步基线和优化加速器(框714)。根据一些示例,基线和优化加速器的同步可以确保两个加速器通过其相应的基线/优化模式被恰当地识别,以便在自适应加速器系统中这样使用。基线和优化加速器的同步将避免两个加速器被识别为是同一基线或优化模式的情形。 [0081] 方法700进一步包括确定基线和优化加速器是否同步(框716)。在一些示例中,如果基线和优化加速器不同步,则过程可以继续进行到框714。重复这个循环直到两个加速器同步为止。在一些示例中,如果基线和优化加速器同步,则过程可以继续进行到框718。 [0082] 方法700进一步包括执行加速器的切换(框718)。在一些示例中,这使得从最初在基线模式下操作的加速器切换到适应的优化加速器,并且从最初在优化模式下操作的加速器切换到适应的基线加速器。 [0083] 图8是图示了使用包括数据标记能力的自适应加速器系统的方法800的流程图。方法800包括设置基线和优化加速器(框802)。根据一些示例,设置基线可以是指确定哪个加速器最初在基线模式下操作以及哪个加速器最初在优化模式下操作。 [0084] 方法800进一步包括从接收到的操作参数设置QoS目标(框804)。在一些示例中,设置QoS目标包括在优化加速器所允许的准确度约束内确定期望的QoS目标。从接收到的操作参数设置QoS目标的结果是识别出QoS阈值。 [0085] 方法800进一步包括添加具有数据标签的输入数据(框806)。根据一些示例,添加输入数据标签可以是指向输入数据流添加输入数据标签以用于测量基线加速器上的QoS并选择基线加速器。在一些示例中,当测量基线加速器上的QoS并选择基线加速器时使用数据标签可以使得对数据进行恰当排序而没有故障、将数据分类等。 [0086] 方法800进一步包括开始测量使用基线加速器的QoS(框808)。在一些示例中,开始测量QoS包括测量源自于使用基线加速器的QoS参数,如准确度、时延、带宽、功率和/或响应性。 [0087] 方法800进一步包括确定在基线加速器上是否满足QoS标准(框810)。根据一些示例,确定在基线加速器上是否满足QoS标准可以是指确定所测量的QoS是否优于QoS阈值。如果在基线加速器上满足QoS标准,则保存标签信息以在主要的数据处理期间选择基线加速器(框812)。保存这个标签信息的结果确保了使用基线加速器以用于主要的数据处理(相比于为优化加速器预留的执行优化)。在一些示例中,一旦保存标签信息以在主要数据处理期间选择基线加速器,则方法可以继续进行到框804。在一些示例中,可以重复这个循环以使基线加速器保持在基线模式下(因为继续满足QoS标准)。一旦在基线加速器上不(或不再)满足QoS标准,则方法可以继续进行到框814。在这个示例中,当在基线加速器上不(或不再)满足QoS标准时,期望基线加速器的优化提高使用基线加速器的QoS。将通过使基线加速器切换到优化加速器来实现对使用基线加速器的QoS的改进。 [0088] 方法800进一步包括通过历经各步骤开始优化过程(框814)。根据一些示例,开始优化过程的步骤可以是指由适配器/控制器实现和控制的步骤。开始优化过程的结果是最终分析优化加速器上的QoS标准并选择优化加速器。 [0089] 方法800进一步包括添加输入数据标签(框816)。根据一些示例,添加输入数据标签可以是指将输入数据标签添加到输入数据流以用于分析优化加速器上的QoS标准并选择优化加速器。在一些示例中,当分析优化加速器上的QoS标准并选择优化加速器时使用数据标签可以使得对数据进行恰当排序而没有故障、将数据分类等。 [0090] 方法800进一步包括再次通过历经步骤开始优化过程(框818)。根据一些示例,再次开始优化过程的步骤可以是指由适配器/控制器实现和控制的步骤。再次开始优化过程(这次具有数据标签)的结果是最终分析优化加速器上的QoS标准并选择优化加速器,同时使用数据标签以从对数据进行恰当排序而没有故障、将数据分类等中获益。 [0091] 方法800进一步包括确定在优化加速器上是否满足QoS标准(框820)。根据一些示例,确定在优化加速器上是否满足QoS标准可以是指确定所测量的QoS是否优于QoS阈值。如果在优化加速器上不(或不再)满足QoS标准,则保存数据标签信息以在主要的数据处理期间选择优化加速器(框812)。保存这个数据标签信息的结果确保使用优化加速器以用于执行优化(相比于为基线加速器预留的主要的数据处理)。在一些示例中,一旦保存标签信息以选择优化加速器,则方法可以继续进行到框814。这意味着仍期望优化,并且因此连同所保存的数据标签维持该优化加速器作为优化加速器。一旦在优化加速器上满足QoS标准,则方法可以继续进行到框824。这意味着已完成优化加速器的优化,从而确定应发生优化加速器到基线加速器的切换。 [0092] 方法800进一步包括共享给输入流的数据标签信息以选择优化的加速器(框824)。 这意味着已使用经由数据输入流共享的数据标签信息完成优化加速器的优化,使得识别出应发生从优化加速器到基线加速器的切换。 [0093] 方法800进一步包括开始使用数据标签同步基线和优化加速器(框826)。根据一些示例,基线和优化加速器的同步可以确保两个加速器通过其相应的基线/优化模式被恰当地识别,以便在自适应加速器系统中这样使用。基线和优化加速器的同步将避免两个加速器被识别为是同一基线或优化模式的情形。此外,由于在两个加速器上观察到数据标签,因此使用数据标签同步这些加速器可以使得对数据进行恰当排序而没有故障、将数据分类等。 [0094] 方法800进一步包括确定基线和优化加速器是否同步(框828)。在一些示例中,如果基线和优化加速器不同步,则过程可以继续进行到框826。重复这个循环直到两个加速器同步(在使用数据标签时)为止。在一些示例中,如果基线和优化加速器同步,则过程可以继续进行到框830。 [0095] 方法800进一步包括执行加速器的切换(框830)。在一些示例中,这使得从最初在基线模式下操作的加速器切换到适应的优化加速器,并且从最初在优化模式下操作的加速器切换到适应的基线加速器。 [0096] 自适应加速器 [0097] 自适应加速器的示例实施方式使用基线(生产)加速器(例如,图6中的加速器 610a)、优化加速器(例如,加速器610b)和控制(硬件)加速器(例如,适配器/控制器680)、以及在生产与优化之间切换的操作。两个主加速器(即,生产加速器610a和优化加速器610b)具有相同的能力。主加速器610a之一将在生产模式下,而另一主加速器610b将在优化模式下。在优化加速器610b上进行优化,如微调权重、部分和量化以及绕过瓦片和层,以通过瞄准如准确度性能(例如,时延、带宽)、功率和/或响应性等QoS目标来实现更好的QoS。控制加速器(或适配器/控制器680)观察优化加速器610b的执行并试图学习两个主加速器610a、 610b的行为,以便实现所请求/识别的QoS目标(参见下文的“加速器的切换”章节)。控制加速器680还指示(控制)优化加速器610b如何适应以实现QoS目标。一旦实现了QoS目标,则控制加速器680触发主加速器610a、610b的模式的切换,由此较早的生产加速器610a现在变成了优化加速器610b,并且较早的优化加速器610b现在变成了生产加速器610a。可以通过门控主加速器610a、610b中的一个或另一个的输出来实现切换。然而,理想地将在适当的时刻执行切换以避免流式传输的数据中的故障。 [0098] 可以用术语表达主加速器610a、610b的QoS(其可以是自主调整的),以使控制器/适配器680能够在准确度、功率、带宽、时延、响应性和准确度速度等方面做出决定,同时经由采用关于先前优化如何工作的存储器,采用使用反馈的训练技术,以实现如由适配器/控制器680指示的优化的微调。示例目标规范将是:准确度>80%、功率<20mW、带宽>10MB/s、时延<10ms等;实现目标(如准确度、功率、带宽、时延和/或响应性)的速度。实现这些目标的速度可以表达为所列出的目标中的每一个的达到目标时间。可以以不同的方式实现QoS的测量。准确度可以利用测量其趋势和绝对值的不同方式,被测量为与其自身的准确度进行比较或与基线阈值进行比较。可以测量或计算与主加速器610a、610b一起采用的设备的功率; 可以通过输入与输出之间的相应的差来测量时延和带宽。关于优化趋势(即,优化进程)的反馈用于比较QoS目标在不同时间间隔(近期、中期和长期)内的趋势,以实现对优化的恰当反应。可以表达关于如何达成这些策略的算法(参见下文的“切换算法”章节)。 [0099] QoS的自主调整可以利用动态策略。换句话说,定义性能度量的QoS不需要是恒定的。它可以被人类操作者改变或可以随着内部或外部条件改变而动态地演变/适应。可以用两种方式定义或表示QoS:QoS可以以聚合标准的形式表示,该聚合标准使用单独性能度量的线性组合来组合单独性能度量;或QoS可以使用一个优化度量同时依赖于作为满意度度量的其他优化度量。模型应满足满意度度量,并且然后优化加速器610b可以根据优化度量来进一步进行优化。 [0100] 无论使用选项一还是选项二,单个QoS性能度量可以动态地演变。以下示例因素可能影响QoS变化:可用功率(对于电池电量有限的边缘设备,模型准确度与功耗之间的折衷可以取决于电池状态而改变);外部传感器或致动器的降级(对于更换成本高昂的模型,当外部传感器或致动器降级时,可以放松模型准确度约束);和/或感兴趣的特殊地理区域/位置(当模型发现自己处于高关注度位置中时,这可以增加其性能约束同时放松其功率约束)。 [0101] 加速器的切换 [0102] 适配器/控制器680测量QoS增量以能够决定何时切换。一旦第一次实现QoS目标,则可以切换主加速器610a、610b的模式,但这并不意味着它们将立即切换,即,为了发起切换过程,优化加速器610b可以被标记为switchablecandidate。在这个实例中,可以期望充足的时间以确保实现稳定的QoS目标,使得切换不会引起反向往回切换。一旦保证了稳定性,则优化加速器610b可以被标记为switchablestable。这个方案可以被推广到多个优化加速器(其中之一是例如优化加速器610b),其中的每一个可以在优化状态(switchablecandidate和switchablestable)中的任何一种状态下。 [0103] 为了实现无缝切换而没有任何输出故障,需要冲洗来自基线加速器610a的数据,同时有效地激活优化加速器610b。从盒子外部的观察者来看,在切换过程期间不应存在任何显著的差异,即,切换过程应是无缝的。实现无缝切换的一种方式是将数据从一个主加速器重新引导到另一主加速器的输出。由于两个主加速器610a、610b可以是不同步的,因此更快的主加速器可能必须等待更慢的主加速器追上,使得适配器/控制器680实现流量控制和/或缓冲更慢的主加速器以便将其速度增加到至少更快主加速器的速度。 [0104] 实现对数据进行恰当排序而没有故障的一种方式是通过使用数据标记(参见图6和图8)。通过在基线/优化加速器选择过程期间观察两个主加速器610a、610b上的数据标签并且通过使用数据标签同步主加速器610a、610b,可以避免输出故障。另外,标签可以用于其他目的,如:将数据分类使得可以更快地实现优化过程;以及识别类似类型的数据并将该类似类型的数据路由到最优基线加速器路径(如果多个基线加速器(其中之一是例如基线加速器610a)是可用的)。以这种方式,被确定为最适合处理特定类型的数据的基线加速器被选择作为目的地基线加速器,因此经由使用最优基线加速器使得数据吞吐量更高效。 [0105] 切换算法 [0106] 当与使用基线加速器610a的输入QoS相比,优化加速器610b使得QoS更好时,可能需要通过算法来实现加速器切换。在这种情景下,将期望从优化加速器610b切换到生产加速器610a。指定QoS目标作为被发送到适配器/控制器680的参数。可以在运行时(带内)期间或在管理时间(带外)期间发送这些参数。适配器/控制器680测量使用优化加速器610b的QoS,并且决定何时切换主加速器610a、610b的优化/生产模式。在做出决定时使用的策略可能是复杂的,具体标准包括定时。例如,标准可以取决于功率是否在包络内、是否满足带宽/时延标准等。使用基线加速器610a的QoS也可能漂移变差,使优化随着时间的推移表现得更好,从而导致优化/生产模式的切换。 [0107] 优化加速器610b明显优于基线加速器610a,而与指定的QoS目标/阈值无关。当可优化加速器610b实现其QoS并且优于基线加速器610a的QoS时,主加速器610a、610b切换其模式。在某些情况下,当一个主加速器明显优于另一主加速器时立刻切换主加速器610a、 610b的模式是有意义的。符合这种场景的一个用例是当主加速器从先前低电量状态中恢复时,然后可以使用当前有源主加速器的放松的(relaxed)QoS。不是等待优化加速器610b实现新的目标QoS,而是可以将临时QoS设置为“略优于有源主加速器”。主加速器610a、610b因此可以快速地改变其模式,维持更好的QoS水平。 [0108] 适配器/控制器680的默认QoS策略可以周期性地进行以优化可靠性、功率、测试等。除了优化策略之外,主加速器610a、610b还可以(或替代性地)执行某些测试策略,例如通过针对预定义数据集或数据频谱比较两个主加速器610a、610b的输出。可以对照预定义限值来校准功耗,并且可以评估主加速器610a、610b中的每一个的可靠性。 [0109] 基线加速器610a可能开始产生误差,或可以在短时间段内动态地降低其性能。可能由于硬件或系统软件或固件中的故障而发生这种情况。当发生这种情况时,即使优化加速器610b尚未实现其QoS约束,主加速器610a、610b也可以切换其模式。 [0110] 可以用于执行优化的可能硬件特有变化(软件以外的)的一些示例包括:粗(核心水平)量化与阵列水平量化;重新路由(短路)神经网络的某些层;离线的(在加速器系统的非操作期间)与实时优化(在加速器系统的操作期间);以及训练量化友好的主加速器(例如,主加速器610a、610b),并且扩展训练以对抗其他加速器(硬件)特有损失,如:损失函数加模型(半精度或单精度)以及在硬件上模拟推理;以及实时计算损失使得训练从开始就是硬件友好的。 [0111] 一些示例自适应程度包括:静态(非模式适应)主加速器,其中,被标记的数据然后将重新路由到适当的动态(模式适应)主加速器(例如,其中,使用具有相同模式的多个主加速器(其中之一是例如主加速器610a、610b之一));动态地适应(重新配置)主加速器(其中之一是例如主加速器610a、610b之一)以用于推理目的(例如,用于在硬件上执行推理);动态地适应(重新配置)主加速器(其中之一是例如主加速器610a、610b之一)以用于训练目的;以及分析/学习数据流以重新配置主加速器(其中之一是例如主加速器610a、610b之一)。 [0112] 图9图示了根据本公开的各个方面的可以用于实施动态模块化和可定制的计算系统的示例计算部件。现在参考图9,计算部件900可以是例如服务器计算机、控制器、或者能够处理数据的任何其他类似的计算部件。在图9的示例实施方式中,计算部件900包括硬件处理器902和机器可读存储介质904。在一些示例中,计算部件900可以是与图1的忆阻器交叉开关阵列100相对应的系统的方面。 [0113] 硬件处理器902可以是一个或多个中央处理单元(CPU)、基于半导体的微处理器、和/或适合于取得并执行存储在机器可读存储介质904中的指令的其他硬件设备。硬件处理器902可以提取、解码和执行指令(如指令906至930),以控制用于实施动态模块化和可定制的计算系统的过程或操作。作为取得并执行指令的替代或补充方案,硬件处理器902可以包括一个或多个电子电路,这些电子电路包括用于执行一个或多个指令的功能的电子部件,如现场可编程门阵列(FPGA)、专用集成电路(ASIC)或其他电子电路。 [0114] 机器可读存储介质(如机器可读存储介质904)可以是包含或存储可执行指令的任何电子、磁性、光学或其他物理存储设备。因此,机器可读存储介质904可以是例如随机访问存储器(RAM)、非易失性RAM(NVRAM)、电可擦可编程只读存储器(EEPROM)、存储设备、光盘等。在一些示例中,机器可读存储介质904可以是非暂态存储介质,其中,术语“非暂态”并不涵盖暂态传播信号。如下文详细描述的,机器可读存储介质904可以编码有可执行指令,例如,指令906至930。 [0115] 硬件处理器902可以执行指令906以将预处理数据传输到第一加速器。这意味着第一加速器在处于优化模式下时最初并持续地发挥作用以处理数据(即,作为优化加速器(例如,图6中的加速器610b))。 [0116] 硬件处理器902可以执行指令908以更改第一加速器的至少一个操作参数。这发生在第一加速器的操作期间。 [0117] 硬件处理器902可以执行指令910以监测第一加速器的每个已更改的操作参数对服务质量(QoS)的影响。这意味着监测使用具有已更改的操作参数的第一加速器的QoS。 [0118] 硬件处理器902可以执行指令912以基于第一加速器的每个已更改的操作参数对QoS的监测到的影响来更改第一加速器的至少一个操作参数。这意味着通过进一步更改第一加速器的操作参数来做出提高QoS的尝试。 [0119] 硬件处理器902可以执行指令914以确定QoS是否已满足阈值。阈值的示例可以是QoS(例如,时延、带宽或专用度量,如精度)的百分比(例如,95%)。替代性地,阈值可以被理解为加速器可以容忍多大程度的缺陷。例如,机器学习专家可指定期望的模型准确度水平为例如91%。应注意,硬件专家可预期与忆阻器单元的编程电导率相关联的一定水平的不确定性。例如,91%准确度可转化为例如89%至93%的范围。这意味着在QoS目标为91%的情况下,高于89%的实际准确度是可接受的。在另一可能的情景中,可观察到硬件水平的降级,该降级可以确定交叉开关单元实际上可以被编程的准确度。在这种情况下,假定可以测量或估计降级和其对QoS度量的影响,则当可以容忍例如期望性能与实际性能之间更大的差异时可以增加阈值。例如,在上述示例中,与目标的期望的阈值范围差可以等于2个百分点(其中,91%是目标,而高于89%的实际准确度是可接受的)。然后,随着精确地重新编程交叉开关阵列的能力下降,在更宽的阈值范围差等于例如5个百分点的情况下移动到91%的目标可以是可接受的。通常,硬件高于86%的准确度将是可接受的。 [0120] 一旦确定QoS已满足阈值(意味着第一加速器已被完全优化并且不需要第一加速器的进一步优化),则硬件处理器902可以执行指令916以将非预处理数据路由到第一加速器(其现在将用作基线加速器(例如,图6中的加速器610a)),并且执行指令918以将附加的预处理数据传输到第二加速器(其被设置为优化加速器(例如,加速器610b))。这设置了第二加速器以用于从第二加速器的参数的最终更改中分析由此对QoS的影响。 [0121] 硬件处理器902可以执行指令920以更改第二加速器的至少一个操作参数。这发生在第二加速器的操作期间。 [0122] 硬件处理器902可以执行指令922以监测第二加速器的每个已更改的操作参数对QoS的影响。这意味着监测使用具有已更改的操作参数的第二加速器的QoS。 [0123] 硬件处理器902可以执行指令924以基于第二加速器的每个已更改的操作参数对QoS的监测到的影响来更改第二加速器的至少一个操作参数。这意味着通过进一步更改第二加速器的操作参数来做出提高QoS的尝试。 [0124] 硬件处理器902可以执行指令926以确定QoS是否已满足另一阈值。一旦确定QoS已满足另一阈值(意味着第二加速器已被完全优化并且不需要第二加速器的进一步优化),则硬件处理器902可以执行指令928以将非预处理数据路由到第二加速器(其现在将用作基线加速器(例如,加速器610a)),并且执行指令930以将附加的预处理数据传输到第一加速器(其现在被设置为优化加速器(例如,加速器610b))。 [0125] 在一些示例中,QoS包括以下各项中的至少一项:(i)准确度;(ii)时延;(iii)带宽;(iv)功率;以及(v)响应性。 [0126] 在一些示例中,两个更改步骤包括以下各项中的至少一项:(i)微调权重;(ii)部分和量化;(iii)绕过瓦片;以及(iv)绕过层。 [0127] 在一些示例中,在传输预处理数据步骤、更改步骤和监测步骤二者的期间,第一加速器在优化模式下并且第二加速器在生产模式下;并且在路由步骤和传输附加的预处理数据步骤期间,第一加速器在生产模式下并且第二加速器在优化模式下。 [0128] 在一些示例中,当确定QoS已满足阈值时,第一加速器从优化模式切换到生产模式,并且第二加速器从生产模式切换到优化模式。 [0129] 在一些示例中,当确定QoS已满足另一阈值时,第二加速器从优化模式切换到生产模式,并且第一加速器从生产模式切换到优化模式。 [0130] 在一些示例中,第一加速器和第二加速器具有不同的算术精度。 [0131] 图10描绘了可以在其中实施本文描述的方面中的各个方面的示例计算机系统 1000的框图。计算机系统1000可以用于执行机器可读指令以执行本文描述的过程。在一些示例中,计算机系统1000可以对应于图1的模块化开关系统100或当前配置的开关系统140,但是不应限制于本文提供的部件的公开。 [0132] 计算机系统1000包括总线1002或用于传送信息的其他通信机制、与总线1002耦接以用于处理信息的一个或多个硬件处理器1004。(多个)硬件处理器1004可以是例如一个或多个通用微处理器。 [0133] 计算机系统1000还包括耦接到总线1002的主存储器1006,如随机存取存储器(RAM)、缓存和/或其他动态存储设备,以用于存储信息和要由处理器1004执行的指令。主存储器1006还可以用于在执行要由处理器1004执行的指令期间存储临时变量或其他中间信息。这种指令当存储在处理器1004可访问的存储介质中时使计算机系统1000成为被定制为进行指令中指定的操作的专用机器。 [0134] 计算机系统1000进一步包括耦接到总线1002的只读存储器(ROM)1008或其他静态存储设备,以用于为处理器1004存储静态信息和指令。如磁盘、光盘或USB拇指驱动器(闪速存储器驱动器)等存储设备1010被提供并耦接到总线1002,以用于存储信息和指令。 [0135] 计算机系统1000可以经由总线1002耦接到如液晶显示器(LCD)(或触摸屏)等显示器1012,以用于向计算机用户显示信息。包括字母数字键和其他键的输入设备1014耦接到总线1002,以用于将信息和命令选择传送到处理器1004。另一种类型的用户输入设备是如鼠标、轨迹球或光标方向键等光标控制件1016,以用于将方向信息和命令选择传送到处理器1004并且用于控制在显示器1012上的光标移动。在一些示例中,与光标控制件相同的方向信息和命令选择可以经由在没有光标的情况下接收触摸屏上的触摸来实施。 [0136] 计算系统1000可以包括用于实施GUI的用户界面模块,该GUI可以作为由(多个)计算设备执行的可执行软件代码被存储在大容量存储设备中。通过举例的方式,该模块和其他模块可以包括如软件部件、面向对象的软件部件、类部件和任务部件等部件、进程、函数、属性、程序、子例程、程序代码段、驱动器、固件、微代码、电路、数据、数据库、数据结构、表、数组和变量。 [0137] 通常,如本文所使用的词语“部件”、“引擎”、“系统”、“数据库”、“数据存储区”等可以是指在硬件或固件中实施的逻辑,或者是指以例如Java、C或C++等编程语言编写的、可能具有入口点和出口点的软件指令集合。软件部件可以被编译并链接到可执行程序中,被安装在动态链接库中,或者可以用例如BASIC、Perl或Python等解释性编程语言编写。应当理解的是,软件部件可以从其他部件或从其本身调用,和/或可以响应于检测到的事件或中断而被调用。被配置用于在计算设备上执行的软件部件可以被提供在如光盘、数字视频盘、闪速存储器驱动器、磁盘、或任何其他有形介质等计算机可读介质上,或者可以被提供作为数字下载(并且可以原始地以需要在执行之前安装、解压缩或解密的压缩格式或可安装格式进行存储)。这样的软件代码可以部分或全部地存储在执行计算设备的存储器设备上,以用于由计算设备执行。软件指令可以嵌入在如EPROM等固件中。将进一步理解的是,硬件部件可以包括如门和触发器等连接逻辑单元,和/或可以包括如可编程门阵列或处理器等可编程单元。 [0138] 计算机系统1000可以使用定制的硬接线逻辑、一个或多个ASIC或FPGA、固件和/或程序逻辑来实施本文所描述的技术,这些定制的硬接线逻辑、一个或多个ASIC或FPGA、固件和/或程序逻辑与计算机系统相结合使计算机系统1000成为专用机器或者将其编程为专用机器。根据一个示例,本文的技术由计算机系统1000响应于(多个)处理器1004执行主存储器1006中包含的一个或多个指令的一个或多个序列而执行。这种指令可以从如存储设备 1010等另一存储介质读取到主存储器1006中。包含在主存储器1006中的指令序列的执行使(多个)处理器1004进行本文所描述的过程步骤。在替代示例中,硬接线电路可以用于代替软件指令或与软件指令相组合。 [0139] 如本文所使用的术语“非暂态介质(non‑transitory media)”及类似术语是指存储使机器以特定方式操作的数据和/或指令的任何介质。这种非暂态介质可以包括非易失性介质和/或易失性介质。非易失性介质包括例如光盘或磁盘,如存储设备1010。易失性介质包括动态存储器,如主存储器1006。非暂态介质的常见形式包括例如软盘、软磁盘、硬盘、固态驱动器、磁带或者任何其他磁性数据存储介质、CD‑ROM、任何其他光学数据存储介质、具有孔图案的任何物理介质、RAM、PROM和EPROM、闪速存储器EPROM、NVRAM、任何其他存储器芯片或盒、以及这些介质的联网版本。 [0140] 非暂态介质不同于传输介质但可以与传输介质结合使用。传输介质参与非暂态介质之间的信息传送。例如,传输介质包括同轴电缆、铜线和光纤,包括包含总线1002的导线。 传输介质还可以采用声波或光波的形式,如在无线电波和红外数据通信期间生成的那些声波或光波。 [0141] 计算机系统1000还包括耦接到总线1002的通信接口1018。通信接口1018提供耦接到一个或多个网络链路的双向数据通信,该一个或多个网络链路连接到一个或多个本地网络。例如,通信接口1018可以是综合业务数字网(ISDN)卡、电缆调制解调器、卫星调制解调器、或用于向对应类型的电话线提供数据通信连接的调制解调器。作为另一示例,通信接口 1018可以是用于提供到兼容LAN(或与WAN通信的WAN部件)的数据通信连接的局域网(LAN)卡。还可以实施无线链路。在任何这种实施方式中,通信接口1018发送和接收携带表示各种类型信息的数字数据流的电信号、电磁信号或光信号。 [0142] 网络链路通常提供通过一个或多个网络到其他数据设备的数据通信。例如,网络链路可以提供通过本地网络到主计算机或到由因特网服务提供商(ISP)操作的数据设备的连接。ISP进而通过现在通常被称为“因特网”的全球分组数据通信网络来提供数据通信服务。本地网络和因特网两者都使用携带数字数据流的电信号、电磁信号或光信号。通过各种网络的信号以及网络链路上的信号和通过通信接口1018的信号(其将数字数据携带到计算机系统1000和从该计算机系统携带数字数据)是传输介质的示例形式。 [0143] 计算机系统1000可以通过(多个)网络、网络链路和通信接口1018发送消息和接收包括程序代码的数据。在因特网示例中,服务器可以通过因特网、ISP、本地网络和通信接口 1018来传输应用程序的请求代码。 [0144] 接收到的代码可以在被接收到时由处理器1004执行和/或存储在存储设备1010或其他非易失性存储装置中以供稍后执行。 [0145] 在前面章节中描述的过程、方法和算法中的每一个均可以在由包括计算机硬件的一个或多个计算机系统或计算机处理器执行的代码部件中实施并且由这些代码部件全部或部分地进行自动化。该一个或多个计算机系统或计算机处理器还可以操作以支持“云计算”环境中相关操作的执行,或者作为“软件即服务(software as a service,SaaS)”来操作。这些过程和算法可以在专用电路中部分地或全部地实施。上文所描述的各种特征和过程可以彼此独立地使用,或者可以以各种方式进行组合。不同的组合和子组合旨在落入本公开的范围内,并且在一些实施方式中可以省略某些方法框或过程框。本文所描述的方法和过程也不限于任何特定的顺序,并且与这些方法和过程相关的框或状态可以以适当的其他顺序执行、或者可以并行执行、或者以某种其他方式执行。可以向所公开的示例中添加框或状态或从中移除框或状态。可以将某些操作或过程的执行分发到计算机系统或计算机处理器之中,使其不是仅驻留在单一机器内,而是跨多个机器部署。 [0146] 如本文所使用的,电路可以利用任何形式的硬件、软件或其组合来实施。例如,可以实施一个或多个处理器、控制器、ASIC、PLA、PAL、CPLD、FPGA、逻辑部件、软件例程或其他机制以构成电路。在实施方式中,本文所描述的各种电路可以被实施为分立电路,或者所描述的功能和特征可以在一个或多个电路间部分地或全部地共享。尽管各种特征或功能元件可以作为单独的电路单个地描述或主张,但这些特征和功能也可以在一个或多个公共电路之中共享,并且这种描述不应要求或暗示需要单独的电路来实施这样的特征或功能。在使用软件来全部或部分地实施电路的情况下,这种软件可以被实施以便与能够执行关于该软件所描述的功能的计算系统或处理系统(如计算机系统800)一起操作。 [0147] 如本文所使用的,术语“或”可以以包括性或者排他性的意义来解释。此外,不应将对单数形式的资源、操作或结构的描述理解为排除复数。除非另有明确陈述,或者在如所使用的上下文内另有理解,否则条件语言(除其他外,如“可以(can)”、“可能(could)”、“可能(might)”或“可以(may)”)一般地旨在传达本公开的某些示例包括而其他示例不包括某些特征、元件和/或步骤。 [0148] 除非另外明确说明,否则本文档中使用的术语和短语及其变体应被解释为开放式的而不是限制性的。如“传统(conventional)”、“惯例(traditional)”、“正常(normal)”、“标准(standard)”、“已知(known)”等形容词和类似含义的术语不应被解释为将所描述的项限制为给定时间段或在给定时间之前可用的项,而是应当被理解为涵盖可能现在或将来的任何时候都可用或已知的传统、惯例、正常或标准技术。在一些情况下,宽泛词语和短语(如“一个或多个”、“至少”、“但不限于”或其他相似的短语)的存在不应被理解为意指在此类宽泛短语可能不存在的情况下意图或要求更窄的情况。