CN114764613B - 一种神经网络运算控制方法、系统及计算机可读存储介质 - Google Patents
一种神经网络运算控制方法、系统及计算机可读存储介质 Download PDFInfo
- Publication number
- CN114764613B CN114764613B CN202210329955.6A CN202210329955A CN114764613B CN 114764613 B CN114764613 B CN 114764613B CN 202210329955 A CN202210329955 A CN 202210329955A CN 114764613 B CN114764613 B CN 114764613B
- Authority
- CN
- China
- Prior art keywords
- neural network
- kernel
- data
- fpga board
- core
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000013528 artificial neural network Methods 0.000 title claims abstract description 108
- 238000000034 method Methods 0.000 title claims abstract description 59
- 238000012545 processing Methods 0.000 claims description 13
- 230000006870 function Effects 0.000 claims description 9
- 239000000284 extract Substances 0.000 claims description 7
- 230000008676 import Effects 0.000 claims description 5
- 230000009286 beneficial effect Effects 0.000 abstract description 2
- 230000008569 process Effects 0.000 description 10
- 238000010586 diagram Methods 0.000 description 6
- 239000008186 active pharmaceutical agent Substances 0.000 description 5
- 238000013527 convolutional neural network Methods 0.000 description 4
- 238000004891 communication Methods 0.000 description 3
- 238000003062 neural network model Methods 0.000 description 3
- 230000006978 adaptation Effects 0.000 description 2
- 238000004422 calculation algorithm Methods 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 238000010606 normalization Methods 0.000 description 1
- 238000011176 pooling Methods 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24552—Database cache management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44505—Configuring for program initiating, e.g. using registry, configuration files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Life Sciences & Earth Sciences (AREA)
- Health & Medical Sciences (AREA)
- Computational Linguistics (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Evolutionary Computation (AREA)
- Artificial Intelligence (AREA)
- Neurology (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Image Analysis (AREA)
Abstract
本发明提供一种神经网络运算控制方法,其中主机端仅需向FPGA板卡下发一次运算数据以及执行一次板卡启动操作即可,而FPGA板卡内的控制内核可自动控制运算内核获取神经网络每层所需的运算数据,以及保存每一层对应的运算结果,无需主机端参与,可有效避免额外的运算数据下发及启动操作对FPGA板卡执行神经网络运算的干扰,进而可提升神经网络运算任务的执行效率。本发明还提供一种神经网络运算控制系统和计算机可读存储介质,具有上述有益效果。
Description
技术领域
本发明涉及机器学习领域,特别涉及一种神经网络运算控制方法、系统及计算机可读存储介质。
背景技术
FPGA(Field Programmable Gate Array,现场可编程逻辑门阵列)由于具有可编程的特点,同时拥有强大的并行计算能力,因此常用于执行神经网络运算任务。相关技术中,神经网络模型通常具有多个神经网络层,而在FPGA中的运算内核执行每一网络层的计算之前,都需要主机端下发运算数据并启动运算内核,而运算数据的反复下发及运算内核的反复启动将消耗大量时间,进而导致FPGA难以高效地执行神经网络运算任务。
发明内容
本发明的目的是提供一种神经网络运算控制方法、系统及计算机可读存储介质,可由FPGA板卡自行完成运算数据的获取及保存,而主机端仅需执行一次运算参数下发及板卡启动即可,可有效提升神经网络运算任务的执行效率。
为解决上述技术问题,本发明提供一种神经网络运算控制方法,包括:
主机端将FPGA板卡的缓存区域对应的缓存首地址写入所述FPGA板卡的运算内核,并启动所述运算内核和所述FPGA板卡中的控制内核;
所述控制内核在启动时获取预设的初始层数和结束层数,将所述初始层数设置为当前索引,并将所述当前索引发送至所述运算内核;
所述运算内核根据所述当前索引和所述缓存首地址在所述缓存区域获取中间运算数据及确定数据写入地址,利用所述中间运算数据进行当前神经网络层的运算内容,并根据所述数据写入地址将得到的中间运算结果写入所述缓存区域;
所述控制内核在确定所述运算内核完成运算时更新所述当前索引,并进入所述将所述当前索引发送至所述运算内核的步骤,直至更新后的当前索引等于所述结束层数时,将最后得到的中间运算结果输出至所述主机端。
可选地,在启动所述运算内核和所述FPGA板卡中的控制内核之前,还包括:
所述主机端利用每一神经网络层对应的层数及标量参数生成标量参数索引表,并将所述标量参数索引表添加至所述运算内核;
相应的,所述运算内核根据所述当前索引和所述缓存首地址在所述缓存区域获取中间运算数据及确定数据写入地址,利用所述中间运算数据进行当前神经网络层的运算内容,并根据所述数据写入地址将得到的中间运算结果写入所述缓存区域,包括:
所述运算内核根据所述当前索引从所述标量参数索引表中读取对应的目标标量参数,并从所述目标标量参数中提取内存偏移值;
根据所述当前索引、所述缓存首地址和所述内存偏移值确定数据读取地址和所述数据写入地址,并根据所述数据读取地址从所述缓存区域中读取所述中间运算数据;
利用所述目标标量参数和所述中间运算数据进行所述当前神经网络层的运算内容,并根据所述数据写入地址将所述中间运算结果写入所述缓存区域。
可选地,所述将所述标量参数索引表添加至所述运算内核,包括:
所述主机端将所述标量参数索引表添加至头文件,并控制所述运算内核导入所述头文件。
可选地,在启动所述运算内核和所述FPGA板卡中的控制内核之前,还包括:
所述主机端向首张FPGA板卡的缓存区域写入首轮中间运算数据,并在完成写入后进入所述启动所述运算内核和所述FPGA板卡中的控制内核的步骤;
相应的,在获取预设的初始层数和结束层数之前,还包括:
所述控制内核判断所述缓存区域中是否存有中间运算数据;
若是,则进入所述获取预设的初始层数和结束层数的步骤;
若否,则在接收到上一FPGA板卡发送的中间运算数据时进入所述获取预设的初始层数和结束层数的步骤;
相应的,在将最后得到的中间运算结果输出至所述主机端之前,还包括:
所述控制内核判断是否需要向下一FPGA板卡输出所述最后得到的中间运算结果;
若是,则将所述最后得到的中间运算结果发送至所述下一FPGA板卡;
若否,则进入所述将最后得到的中间运算结果输出至所述主机端的步骤。
可选地,所述将所述当前索引发送至所述运算内核,包括:
所述控制内核通过预设API接口或OpenCL管道将所述当前索引发送至所述运算内核。
可选地,在启动所述运算内核和所述FPGA板卡中的控制内核之前,还包括:
所述主机端获取所述FPGA板卡的板卡数量和每一神经网络层对应的运算时间;
根据所述板卡数量及所述运算时间为每一所述FPGA板卡分配连续的神经网络层处理范围,以使各所述神经网络层处理范围对应的总运行时间之间的差值最小;
将所述神经网络层处理范围对应的初始层数和结束层数写入所述初始层数和结束层数对应FPGA板卡的控制内核中。
可选地,所述主机端获取所述FPGA板卡的板卡数量和每一神经网络层对应的运算时间,包括:
所述主机端利用预设函数记录所述运算内核完成每一所述神经网络层所需的所述运算时间。
本发明还提供一种神经网络运算控制系统,包括:主机端和FPGA板卡,所述FPGA板卡包括控制内核和运算内核,其中,
所述主机端,用于将所述FPGA板卡的缓存区域对应的缓存首地址写入所述运算内核,并启动所述运算内核和所述控制内核;接收所述控制内核发送的中间运算结果;
所述控制内核,用于在启动时获取预设的初始层数和结束层数,将所述初始层数设置为当前索引,并将所述当前索引发送至所述运算内核;在确定所述运算内核完成运算时更新所述当前索引,并进入所述将所述当前索引发送至所述运算内核的步骤,直至更新后的当前索引等于所述结束层数时,将最后得到的中间运算结果输出至所述主机端;
所述运算内核,用于根据所述当前索引和所述缓存首地址在所述缓存区域获取中间运算数据及确定数据写入地址,利用所述中间运算数据进行当前神经网络层的运算内容,并根据所述数据写入地址将得到的中间运算结果写入所述缓存区域。
可选地,
所述主机端,还用于利用每一神经网络层对应的层数及标量参数生成标量参数索引表,并将所述标量参数索引表添加至所述运算内核;
相应的,所述运算内核,还用于根据所述当前索引从所述标量参数索引表中读取对应的目标标量参数,并从所述目标标量参数中提取内存偏移值;根据所述当前索引、所述缓存首地址和所述内存偏移值确定数据读取地址和所述数据写入地址,并根据所述数据读取地址从所述缓存区域中读取所述中间运算数据;利用所述目标标量参数和所述中间运算数据进行所述当前神经网络层的运算内容,并根据所述数据写入地址将所述中间运算结果写入所述缓存区域。
本发明还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机可执行指令,所述计算机可执行指令被处理器加载并执行时,实现如上述所述的神经网络运算控制方法。
本发明提供一种神经网络运算控制方法,包括:主机端将FPGA板卡的缓存区域对应的缓存首地址写入所述FPGA板卡的运算内核,并启动所述运算内核和所述FPGA板卡中的控制内核;所述控制内核在启动时获取预设的初始层数和结束层数,将所述初始层数设置为当前索引,并将所述当前索引发送至所述运算内核;所述运算内核根据所述当前索引和所述缓存首地址在所述缓存区域获取中间运算数据及确定数据写入地址,利用所述中间运算数据进行当前神经网络层的运算内容,并根据所述数据写入地址将得到的中间运算结果写入所述缓存区域;所述控制内核在确定所述运算内核完成运算时更新所述当前索引,并进入所述将所述当前索引发送至所述运算内核的步骤,直至更新后的当前索引等于所述结束层数时,将最后得到的中间运算结果输出至所述主机端。
可见,本发明中的主机端仅需在FPGA板卡首次启动时,将板卡内部的缓存区域对应的缓存首地址写入板卡内部的运算内核,并启动运算内核和板卡中的控制内核即可;控制内核在启动之后,将会获取预设的初始层数和结束层数,并在以上述层数构成的索引范围内,向运算内核循环发送当前索引,以控制运算内核根据当前索引和缓存首地址在缓存区域内查找所需的中间运算数据,以及根据当前索引和缓存首地址确定本轮运算结果在缓存区域内的数据写入地址,并在完成当前神经网络层的运算后,依照数据写入地址将得到的中间运算结果写入缓存区域;在确定当前索引已被更新至等于结束层数的状态时,控制内核可自动将最后得到的中间运算结果发送至主机端。换而言之,在本发明中,主机端仅需执行向FPGA板卡执行一次运算数据下发及启动即可,而每轮运算数据的获取及保存均可在控制内核的管控下在FPGA板卡内部自行完成,无需主机端参与,可有效避免额外的运算数据下发及启动操作对FPGA板卡的干扰,进而可提升神经网络运算任务的执行效率。本发明还提供一种神经网络运算控制系统和计算机可读存储介质,具有上述有益效果。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本发明实施例所提供的一种神经网络运算控制方法的流程图;
图2为本发明实施例所提供的一种控制内核控制运算内核的示意图;
图3为本发明实施例所提供的一种双板卡环境的示意图;
图4为本发明实施例所提供的一种神经网络运算控制系统的结构框图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
相关技术中,神经网络模型通常具有多个神经网络层,而在FPGA中的运算内核执行每一网络层的计算之前,都需要主机端下发运算数据并启动运算内核,而运算数据的反复下发及运算内核的反复启动将消耗大量时间,进而导致FPGA难以高效地执行神经网络运算任务。有鉴于此,本发明提供了一种神经网络运算控制方法,可由FPGA板卡自行完成运算数据的获取及保存,而主机端仅需执行一次运算参数下发及板卡启动即可。请参考图1,图1为本发明实施例所提供的一种神经网络运算控制方法的流程图,该方法可以包括:
S101、主机端将FPGA板卡的缓存区域对应的缓存首地址写入FPGA板卡的运算内核,并启动运算内核和FPGA板卡中的控制内核。
需要指出的是,在神经网络各网络层的运算中,通常会出现两类数据,即中间运算数据及标量参数,其中,中间运算数据为相邻网络层之间需要交换的数据,如上一网络层输出的中间运算结果作为下一网络层所要输入的中间运算数据;而标量参数则为网络层中固定的运算数据,不需要在网络层之间交换。本发明实施例首先对FPGA板卡内用于存放中间运算数据的存储区域进行了优化。具体的,在相关技术中,由于主机端需为每一网络层下发运算参数,因此FPGA板卡需要为每一网络层单独设置缓存区域,且主机端也需反复将缓存区域的地址下发至FPGA板卡,以便板卡内的运算内核获取中间运算数据。而在本发明实施例中,则是将各网络层零散的缓存区域整合为一个完整的缓存区域,并利用偏移值对后者进行了分割。经过本发明实施例的优化之后,循环执行运算任务的运算内核仅需根据当前网络层的索引值在完整缓存区域上进行偏移,便可以在正确的位置上进行数据读取或数据写入;而主机端仅需将这一完整缓存区域的首地址写入运算内核即可,无需反复执行首地址写入操作,即上述优化可向FPGA板卡提供独立读写数据的能力,进而提升FPGA板卡执行神经网络运算任务的效率。可以理解的是,在完成缓存首地址写入之后,主机端便可启动FPGA板卡内的运算内核及控制内核,以使两内核开始工作。
需要说明的是,本发明实施例并不限定缓存区域的具体大小,也不限定上述缓存区域在FPGA板卡中的具体设置位置,可根据实际应用需求进行设定。此外,可以理解的是,为启动运算内核的循环计算,该缓存区域中应当存放有首轮中间运算数据。本发明实施例并不限定由哪一主体将首轮中间运算数据存放在该缓存区域中,既可以由主机端存放,也可以由另一张FPGA板卡存放,例如在由多张板卡分批次执行神经网络运算任务时,本FPGA板卡中的首轮中间运算数据也可以由上一个执行神经网络运算任务的FPGA板卡存放。当然,可以理解的是,若本板卡为多张板卡中首个执行神经网络运算任务的板卡,则本板卡所需的首轮中间运算数据需要由主机端下发。
在一种可能的情况中,在启动运算内核和FPGA板卡中的控制内核之前,还可以包括:
步骤11:主机端向首张FPGA板卡的缓存区域写入首轮中间运算数据,并在完成写入后进入启动运算内核和FPGA板卡中的控制内核的步骤。
需要说明的是,此处的首张FPGA板卡即为上述多张板卡中首个执行神经网络运算任务的板卡。另外,应当指出的是,无论在面对单张板卡还是多张板卡时,主机端都需要向所有FPGA板卡执行步骤S101的内容。
S102、控制内核在启动时获取预设的初始层数和结束层数,将初始层数设置为当前索引,并将当前索引发送至运算内核。
在本发明实施例中,控制内核主要负责循环向运算内核发送当前网络层的索引,以使后者根据该索引进行数据读写。应当指出的是,初始层数和结束层数均由主机端预先设置,控制内核仅需在启动时根据预设值进行工作即可。需要说明的是,本发明实施例并不限定初始层数及结束层数的具体数值,可根据实际应用需求进行设定。本发明实施例也不限定主机端为各FPGA板卡分配初始层数和结束层数的具体方式,例如可自由设定,也可依照层数、运算时间等进行平均分配,可根据实际应用需求进行设定。
当然,由于控制内核的首要目的在于引导运算内核进行数据读写,因此前者应当首先确保缓存区域内有可供读写的中间运算数据。换而言之,控制内核在首次启动时,可首先确定缓存区域中是否存放有中间运算数据,若有则可开始执行获取预设初始层数及结束层数的动作;若没有,则需要等待上一FPGA板卡完成神经网络运算任务,并将中间运算结果发送至本FPGA板卡。
在一种可能的情况中,在获取预设的初始层数和结束层数之前,还可以包括:
步骤21:控制内核判断缓存区域中是否存有中间运算数据;若是,则进入步骤22;若否,则进入步骤23;
步骤22:进入获取预设的初始层数和结束层数的步骤;
步骤23:在接收到上一FPGA板卡发送的中间运算数据时进入获取预设的初始层数和结束层数的步骤。
应当指出的是,此处的上一FPGA板卡即为在本FPGA板卡之前执行神经网络运算任务的FPGA板卡。
进一步,需要说明的是,本发明实施例并不限定控制内核与运算内核间通信的具体方式,例如可采用OpenCL规范所定义的管道(pipe),也可以采用厂商所提供的API接口(Application Programming Interface,应用程序编程接口),例如英特尔所提供的Channel接口,其中OpenCL(Open Computing Language,开放计算语言)为异构系统中常用的一种开发语言。
在一种可能的情况中,将当前索引发送至运算内核,可以包括:
步骤31:控制内核通过预设API接口或OpenCL管道将当前索引发送至运算内核。
S103、运算内核根据当前索引和缓存首地址在缓存区域获取中间运算数据及确定数据写入地址,利用中间运算数据进行当前神经网络层的运算内容,并根据数据写入地址将得到的中间运算结果写入缓存区域。
在本发明实施例中,运算内核可根据得到的当前索引及缓存首地址在缓存区域中获取所需的中间运算数据,并确定本轮运算的中间运算结果在缓存区域中的数据写入地址。具体的,运算内核可利用预设的内存偏移值、当前索引值及缓存首地址计算出当前网络层对应的数据读取地址和数据写入地址,进而可依照这两个地址进行相应的数据读写操作。可以理解的是,内存偏移值属于固定参数,即属于标量参数;此外还需指出的是,在运算内核的运算过程中还会使用到其他标量参数,且每一网络层所对应的标量参数并不相同,因此为避免反复下发标量参数,主机端可将这些参数固化至FPGA板卡中。具体的,主机端可提取神经网络模型各网络层对应的标量参数及索引值,并利用标量参数及索引值共同生成一个标量参数索引表;此后,主机端可将该索引表固化控制内核中,而该内核则可根据每次接收到的索引,在该索引表中获取到所需的目标标量参数。
在一种可能的情况中,在启动运算内核和FPGA板卡中的控制内核之前,还可以包括:
步骤41:主机端利用每一神经网络层对应的层数及标量参数生成标量参数索引表,并将标量参数索引表添加至运算内核;
相应的,运算内核根据当前索引和缓存首地址在缓存区域获取中间运算数据及确定数据写入地址,利用中间运算数据进行当前神经网络层的运算内容,并根据数据写入地址将得到的中间运算结果写入缓存区域,包括:
步骤51:运算内核根据当前索引从标量参数索引表中读取对应的目标标量参数,并从目标标量参数中提取内存偏移值;
步骤52:根据当前索引、缓存首地址和内存偏移值确定数据读取地址和数据写入地址,并根据数据读取地址从缓存区域中读取中间运算数据;
步骤53:利用目标标量参数和中间运算数据进行当前神经网络层的运算内容,并根据数据写入地址将中间运算结果写入缓存区域。
具体的,主机端可将标量参数索引表写入头文件,并控制运算模块导入该头文件,以此将该索引表写入运算模块。
在一种可能的情况中,将标量参数索引表添加至运算内核,可以包括:
步骤61:主机端将标量参数索引表添加至头文件,并控制运算内核导入头文件。
需要说明的是,本发明实施例并不限定具体的标量参数,可参考神经网络的相关技术。
进一步,需要说明的是,本发明实施例并不限定运算内核的数量,也不限定每一运算内核对应的神经网络运算内容,可参考神经网络的相关技术,并结合实际应用需求进行设定。应当指出的是,无论运算内核的数量是一个还是多个,控制内核都应当将当前索引输入至所有运算内核中。请参考图2,图2为本发明实施例所提供的一种控制内核控制运算内核的示意图,其中内存读取层(memRead)、核心卷积层(coreConv)、批量归一化层(batchNorm)、最大池化层(maxPool)、内存写入层(memWrite)、运算层(eltwise)分别对应一个运算内核,这些运算内核都是CNN(Convolutional Neural Network,卷积神经网络)中常见的运算模块,而控制内核(Control)需要将当前索引(layer_index)写入这些运算内核。
S104、控制内核在确定运算内核完成运算时更新当前索引,并进入将当前索引发送至运算内核的步骤,直至更新后的当前索引等于结束层数时,将最后得到的中间运算结果输出至主机端。
可以理解的是,控制内核在确定运算内核完成运算后,便可对当前索引进行更新(例如递增),并在确定更新后的当前索引不等于结束层数之前,将更新后的当前索引发送至运算内核,以使运算内核开始下一轮计算;而在确定更新后的当前索引等于结束层数时,控制内核则需将运算内核在最后一轮神经网络运算之后得到的中间运算结果发送至主机端。当然,在多张FPGA板卡分批次执行同一神经网络运算任务的场景中,控制内核在确定更新后的当前索引等于结束层数时,也可进一步判断是否需要将最后一轮中间运算结果发送至下一FPGA板卡,若需要则发送至后者,反之则发送给主机端,以此来维持多板卡间的协同工作。
在一种可能的情况中,在将最后得到的中间运算结果输出至主机端之前,还可以包括:
步骤71:控制内核判断是否需要向下一FPGA板卡输出最后得到的中间运算结果;若是,则进入步骤72;若否,则进入步骤73;
步骤72:将最后得到的中间运算结果发送至下一FPGA板卡;
步骤73:进入将最后得到的中间运算结果输出至主机端的步骤。
需要说明的是,本发明实施例并不限定FPGA板卡间的通信方式,例如可采用以太网进行通信。本发明也不限定本FPGA板卡确定下一FPGA板卡的具体方式,可参考多FPGA板卡协同工作的相关技术。为便于理解多FPGA板卡间的协同工作方式,可参考图3,图3为本发明实施例所提供的一种双板卡环境的示意图。
基于上述实施例,本发明中的主机端仅需在FPGA板卡首次启动时,将板卡内部的缓存区域对应的缓存首地址写入板卡内部的运算内核,并启动运算内核和板卡中的控制内核即可;控制内核在启动之后,将会获取预设的初始层数和结束层数,并在以上述层数构成的索引范围内,向运算内核循环发送当前索引,以控制运算内核根据当前索引和缓存首地址在缓存区域内查找所需的中间运算数据,以及根据当前索引和缓存首地址确定本轮运算结果在缓存区域内的数据写入地址,并在完成当前神经网络层的运算后,依照数据写入地址将得到的中间运算结果写入缓存区域;在确定当前索引已被更新至等于结束层数的状态时,控制内核可自动将最后得到的中间运算结果发送至主机端。换而言之,在本发明中,主机端仅需执行向FPGA板卡执行一次运算数据下发及启动即可,而每轮运算数据的获取及保存均可在控制内核的管控下在FPGA板卡内部自行完成,无需主机端参与,可有效避免额外的运算数据下发及启动操作对FPGA板卡的干扰,进而可提升神经网络运算任务的执行效率。
基于上述实施例,下面对主机端为各FPGA板卡分配初始层数及结束层数的具体方式进行介绍。在一种可能的情况中,在启动运算内核和FPGA板卡中的控制内核之前,还可以包括:
S201、主机端获取FPGA板卡的板卡数量和每一神经网络层对应的运算时间。
多FPGA板卡通常以流水线的方式工作。理想状态下,上一板卡在完成一轮数据运算时,下一板卡也刚好完成一轮数据运算,此时上一板卡的运算结果便可直接写入下一板卡开始下一轮运算,即板卡间不存在等待时间。而相关技术中,主机端通常依照层数为各FPGA板卡分配所需处理的网络层数,例如当卷积神经网络包含8个网络层,而FPGA板卡有两张时,主机端会为每一FPGA板卡分配4个网络层。然而,每一网络层的执行时间并不相同,通常是前半部分的网络层所对应的执行时间会大于后半部分的网络层所对应的执行时间,而这容易导致前一板卡还未完成本轮运算,但后一FPGA板卡则已经完成了本轮运算,需要等待前一板卡完成运算后才能开始下一轮运算。显然,这容易增加FPGA板卡流水线的等待时延,不利于完全发挥FPGA板卡流水线的性能。因此,在本发明实施例中,将采用根据运算时间平均分配的方式为各FPGA板卡分配所需处理的网络层数,以尽量平均每张卡对应的总运算时间,进而减少板卡间的等待时间,进一步提升FPGA板卡的运算效率。具体的,由于神经网络运算任务由FPGA板卡运行,因此每一网络层对应的运算时间基本固定,不会随运算参数的改变而改变,而主机端可提前获取神经网络各网络层对应的运算时间,以便后续分配。需要说明的是,本发明实施例并不限定主机端如何获取上述运输时间,例如可利用预设函数记录运算内核执行各网络层所需的时间,而该预设函数可以为OpenCL原生支持的clGetEventProfilingInfo函数配合CL_PROFILING_COMMAND_START、CL_PROFILING_COMMAND_END函数实现;此外,也可使用FPGA厂商提供的封装层次更高的API,例如英特尔公司提供的getKernelStartEntTime函数等。
在一种可能的情况中,主机端获取FPGA板卡的板卡数量和每一神经网络层对应的运算时间,可以包括:
步骤71:主机端利用预设函数记录运算内核完成每一神经网络层所需的运算时间。
S202、根据板卡数量及运算时间为每一FPGA板卡分配连续的神经网络层处理范围,以使各神经网络层处理范围对应的总运行时间之间的差值最小。
在本发明实施例中,主机端的分配目标为:各FPGA板卡的神经网络层处理范围对应的总运行时间之间的差值应当最小。例如,假设卷积神经网络共有8层,每层的计算时间为:Ti={19,18,16,13,11,10,7,6},当板卡数量为3时,理想情况下,对应的平均每块板卡的延时为33.3,此时流水线的性能可被最大化,而实际分配情况可以为:第一张板卡处理1~2层,对应总运行时间为37;第二张板卡处理3~4层,对应总运行时间为29;而第三张板卡处理5~8层,对应总运行时间为34。此时,三张板卡中的最长的总运行时间为37,则理论性能损耗约为(37-33.3)/33.3=11%。
S203、将神经网络层处理范围对应的初始层数和结束层数写入初始层数和结束层数对应FPGA板卡的控制内核中。
基于上述实施例,本发明实施例可采用根据运算时间平均分配的方式为各FPGA板卡分配所需处理的网络层数,以尽量平均每张卡对应的总运算时间,进而减少板卡间的等待时间,进一步提升FPGA板卡的运算效率。
下面对本发明实施例提供的神经网络运算控制系统及计算机可读存储介质进行介绍,下文描述的神经网络运算控制系统及计算机可读存储介质与上文描述的神经网络运算控制方法可相互对应参照。
请参考图4,图4为本发明实施例所提供的一种神经网络运算控制系统的结构框图,该系统可以包括:主机端410和FPGA板卡420,FPGA板卡420包括控制内核和421运算内核422,其中,
主机端410,用于将FPGA板卡420的缓存区域对应的缓存首地址写入运算内核422,并启动运算内核422和控制内核421;接收控制内核421发送的中间运算结果;
控制内核421,用于在启动时获取预设的初始层数和结束层数,将初始层数设置为当前索引,并将当前索引发送至运算内核422;在确定运算内核422完成运算时更新当前索引,并进入将当前索引发送至运算内核422的步骤,直至更新后的当前索引等于结束层数时,将最后得到的中间运算结果输出至主机端410;
运算内核422,用于根据当前索引和缓存首地址在缓存区域获取中间运算数据及确定数据写入地址,利用中间运算数据进行当前神经网络层的运算内容,并根据数据写入地址将得到的中间运算结果写入缓存区域。
可选地,
主机端410,还用于利用每一神经网络层对应的层数及标量参数生成标量参数索引表,并将标量参数索引表添加至运算内核422;
相应的,运算内核422,还用于根据当前索引从标量参数索引表中读取对应的目标标量参数,并从目标标量参数中提取内存偏移值;根据当前索引、缓存首地址和内存偏移值确定数据读取地址和数据写入地址,并根据数据读取地址从缓存区域中读取中间运算数据;利用目标标量参数和中间运算数据进行当前神经网络层的运算内容,并根据数据写入地址将中间运算结果写入缓存区域。
可选地,
主机端410,还用于将标量参数索引表添加至头文件,并控制运算内核422导入头文件。
可选地,
主机端410,还用于向首张FPGA板卡420的缓存区域写入首轮中间运算数据,并在完成写入后进入启动运算内核422和FPGA板卡420中的控制内核421的步骤;
相应的,在获取预设的初始层数和结束层数之前,还包括:
控制内核421,还用于判断缓存区域中是否存有中间运算数据;若是,则进入获取预设的初始层数和结束层数的步骤;若否,则在接收到上一FPGA板卡420发送的中间运算数据时进入获取预设的初始层数和结束层数的步骤;
相应的,在将最后得到的中间运算结果输出至主机端410之前,还包括:
控制内核421,还用于判断是否需要向下一FPGA板卡420输出最后得到的中间运算结果;若是,则将最后得到的中间运算结果发送至下一FPGA板卡420;若否,则进入将最后得到的中间运算结果输出至主机端410的步骤。
可选地,
控制内核421,还用于通过预设API接口或OpenCL管道将当前索引发送至运算内核422。
可选地,
主机端410,还用于获取FPGA板卡420的板卡数量和每一神经网络层对应的运算时间;根据板卡数量及运算时间为每一FPGA板卡420分配连续的神经网络层处理范围,以使各神经网络层处理范围对应的总运行时间之间的差值最小;将神经网络层处理范围对应的初始层数和结束层数写入初始层数和结束层数对应FPGA板卡420的控制内核421中。
可选地,
主机端410,还用于利用预设函数记录运算内核422完成每一神经网络层所需的运算时间。
本发明实施例还提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现上述任意实施例的神经网络运算控制方法的步骤。
由于计算机可读存储介质部分的实施例与神经网络运算控制方法部分的实施例相互对应,因此存储介质部分的实施例请参见神经网络运算控制方法部分的实施例的描述,这里不再赘述。
说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
以上对本发明所提供的一种神经网络运算控制方法、系统及计算机可读存储介质进行了详细介绍。本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。
Claims (10)
1.一种神经网络运算控制方法,其特征在于,包括:
主机端将FPGA板卡的缓存区域对应的缓存首地址写入所述FPGA板卡的运算内核,并启动所述运算内核和所述FPGA板卡中的控制内核;
所述控制内核在启动时获取预设的初始层数和结束层数,将所述初始层数设置为当前索引,并将所述当前索引发送至所述运算内核;
所述运算内核根据所述当前索引和所述缓存首地址在所述缓存区域获取中间运算数据及确定数据写入地址,利用所述中间运算数据进行当前神经网络层的运算内容,并根据所述数据写入地址将得到的中间运算结果写入所述缓存区域;
所述控制内核在确定所述运算内核完成运算时更新所述当前索引,并进入所述将所述当前索引发送至所述运算内核的步骤,直至更新后的当前索引等于所述结束层数时,将最后得到的中间运算结果输出至所述主机端。
2.根据权利要求1所述的神经网络运算控制方法,其特征在于,在启动所述运算内核和所述FPGA板卡中的控制内核之前,还包括:
所述主机端利用每一神经网络层对应的层数及标量参数生成标量参数索引表,并将所述标量参数索引表添加至所述运算内核;
相应的,所述运算内核根据所述当前索引和所述缓存首地址在所述缓存区域获取中间运算数据及确定数据写入地址,利用所述中间运算数据进行当前神经网络层的运算内容,并根据所述数据写入地址将得到的中间运算结果写入所述缓存区域,包括:
所述运算内核根据所述当前索引从所述标量参数索引表中读取对应的目标标量参数,并从所述目标标量参数中提取内存偏移值;
根据所述当前索引、所述缓存首地址和所述内存偏移值确定数据读取地址和所述数据写入地址,并根据所述数据读取地址从所述缓存区域中读取所述中间运算数据;
利用所述目标标量参数和所述中间运算数据进行所述当前神经网络层的运算内容,并根据所述数据写入地址将所述中间运算结果写入所述缓存区域。
3.根据权利要求2所述的神经网络运算控制方法,其特征在于,所述将所述标量参数索引表添加至所述运算内核,包括:
所述主机端将所述标量参数索引表添加至头文件,并控制所述运算内核导入所述头文件。
4.根据权利要求1所述的神经网络运算控制方法,其特征在于,在启动所述运算内核和所述FPGA板卡中的控制内核之前,还包括:
所述主机端向首张FPGA板卡的缓存区域写入首轮中间运算数据,并在完成写入后进入所述启动所述运算内核和所述FPGA板卡中的控制内核的步骤;
相应的,在获取预设的初始层数和结束层数之前,还包括:
所述控制内核判断所述缓存区域中是否存有所述中间运算数据;
若是,则进入所述获取预设的初始层数和结束层数的步骤;
若否,则在接收到上一FPGA板卡发送的中间运算数据时进入所述获取预设的初始层数和结束层数的步骤;
相应的,在将最后得到的中间运算结果输出至所述主机端之前,还包括:
所述控制内核判断是否需要向下一FPGA板卡输出所述最后得到的中间运算结果;
若是,则将所述最后得到的中间运算结果发送至所述下一FPGA板卡;
若否,则进入所述将最后得到的中间运算结果输出至所述主机端的步骤。
5.根据权利要求1所述的神经网络运算控制方法,其特征在于,所述将所述当前索引发送至所述运算内核,包括:
所述控制内核通过预设API接口或OpenCL管道将所述当前索引发送至所述运算内核。
6.根据权利要求1至5任一项所述的神经网络运算控制方法,其特征在于,在启动所述运算内核和所述FPGA板卡中的控制内核之前,还包括:
所述主机端获取所述FPGA板卡的板卡数量和每一神经网络层对应的运算时间;
根据所述板卡数量及所述运算时间为每一所述FPGA板卡分配连续的神经网络层处理范围,以使各所述神经网络层处理范围对应的总运行时间之间的差值最小;
将所述神经网络层处理范围对应的初始层数和结束层数写入所述初始层数和结束层数对应FPGA板卡的控制内核中。
7.根据权利要求6所述的神经网络运算控制方法,其特征在于,所述主机端获取所述FPGA板卡的板卡数量和每一神经网络层对应的运算时间,包括:
所述主机端利用预设函数记录所述运算内核完成每一所述神经网络层所需的所述运算时间。
8.一种神经网络运算控制系统,其特征在于,包括:主机端和FPGA板卡,所述FPGA板卡包括控制内核和运算内核,其中,
所述主机端,用于将所述FPGA板卡的缓存区域对应的缓存首地址写入所述运算内核,并启动所述运算内核和所述控制内核;接收所述控制内核发送的中间运算结果;
所述控制内核,用于在启动时获取预设的初始层数和结束层数,将所述初始层数设置为当前索引,并将所述当前索引发送至所述运算内核;在确定所述运算内核完成运算时更新所述当前索引,并进入所述将所述当前索引发送至所述运算内核的步骤,直至更新后的当前索引等于所述结束层数时,将最后得到的中间运算结果输出至所述主机端;
所述运算内核,用于根据所述当前索引和所述缓存首地址在所述缓存区域获取中间运算数据及确定数据写入地址,利用所述中间运算数据进行当前神经网络层的运算内容,并根据所述数据写入地址将得到的中间运算结果写入所述缓存区域。
9.根据权利要求8所述的神经网络运算控制系统,其特征在于,
所述主机端,还用于利用每一神经网络层对应的层数及标量参数生成标量参数索引表,并将所述标量参数索引表添加至所述运算内核;
相应的,所述运算内核,还用于根据所述当前索引从所述标量参数索引表中读取对应的目标标量参数,并从所述目标标量参数中提取内存偏移值;根据所述当前索引、所述缓存首地址和所述内存偏移值确定数据读取地址和所述数据写入地址,并根据所述数据读取地址从所述缓存区域中读取所述中间运算数据;利用所述目标标量参数和所述中间运算数据进行所述当前神经网络层的运算内容,并根据所述数据写入地址将所述中间运算结果写入所述缓存区域。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机可执行指令,所述计算机可执行指令被处理器加载并执行时,实现如权利要求1至7任一项所述的神经网络运算控制方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210329955.6A CN114764613B (zh) | 2022-03-31 | 2022-03-31 | 一种神经网络运算控制方法、系统及计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210329955.6A CN114764613B (zh) | 2022-03-31 | 2022-03-31 | 一种神经网络运算控制方法、系统及计算机可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114764613A CN114764613A (zh) | 2022-07-19 |
CN114764613B true CN114764613B (zh) | 2024-07-30 |
Family
ID=82365430
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210329955.6A Active CN114764613B (zh) | 2022-03-31 | 2022-03-31 | 一种神经网络运算控制方法、系统及计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114764613B (zh) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109219805A (zh) * | 2017-05-08 | 2019-01-15 | 华为技术有限公司 | 一种多核系统内存访问方法、相关装置、系统及存储介质 |
CN111160545A (zh) * | 2019-12-31 | 2020-05-15 | 北京三快在线科技有限公司 | 人工神经网络处理系统及其数据处理方法 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108416422B (zh) * | 2017-12-29 | 2024-03-01 | 国民技术股份有限公司 | 一种基于fpga的卷积神经网络实现方法及装置 |
CN111860810A (zh) * | 2020-06-30 | 2020-10-30 | 浪潮(北京)电子信息产业有限公司 | 一种基于fpga的神经网络运算方法、装置及设备 |
CN113296718B (zh) * | 2021-07-27 | 2022-01-04 | 阿里云计算有限公司 | 数据处理方法以及装置 |
-
2022
- 2022-03-31 CN CN202210329955.6A patent/CN114764613B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109219805A (zh) * | 2017-05-08 | 2019-01-15 | 华为技术有限公司 | 一种多核系统内存访问方法、相关装置、系统及存储介质 |
CN111160545A (zh) * | 2019-12-31 | 2020-05-15 | 北京三快在线科技有限公司 | 人工神经网络处理系统及其数据处理方法 |
Also Published As
Publication number | Publication date |
---|---|
CN114764613A (zh) | 2022-07-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110705705B (zh) | 卷积神经网络模型同步训练方法、集群及可读存储介质 | |
CN103020620B (zh) | 基于cpu和gpu协同处理的遥感影像正射校正方法 | |
US9274831B2 (en) | Information processing apparatus, information processing method, and storage medium | |
US8615770B1 (en) | System and method for dynamically spawning thread blocks within multi-threaded processing systems | |
CN114003392A (zh) | 一种数据加速计算方法及相关装置 | |
CN114153500A (zh) | 指令调度方法、指令调度装置、处理器及存储介质 | |
US8006238B2 (en) | Workload partitioning in a parallel system with hetergeneous alignment constraints | |
CN117056255A (zh) | 一种原子操作装置、方法、设备及介质 | |
CN114764613B (zh) | 一种神经网络运算控制方法、系统及计算机可读存储介质 | |
CN112947932B (zh) | 对编译过程中的向量化进行优化的方法、装置及电子设备 | |
CN112148668B (zh) | 基于片上缓存的数据保存方法及装置、存储介质 | |
CN110515872A (zh) | 直接内存存取方法、装置、专用计算芯片及异构计算系统 | |
CN109522102B (zh) | 一种基于i/o调度的多任务外存模式图处理方法 | |
CN112650561A (zh) | 事务管理方法、系统、网络设备和可读存储介质 | |
CN113806250B (zh) | 通用处理器核心与向量部件的协同方法、接口及处理器 | |
JP6817827B2 (ja) | アクセラレータ処理管理装置、ホスト装置、アクセラレータ処理実行システム、方法およびプログラム | |
CN111459634B (zh) | 任务调度方法、装置、终端及存储介质 | |
CN100410898C (zh) | 与填写中的快取线平行使用的可存取缓冲区及其控制方法 | |
US11609785B2 (en) | Matrix data broadcast architecture | |
KR20230059536A (ko) | 프로세스 스케줄링 방법 및 장치 | |
CN114780460A (zh) | 一种dma控制器和方法 | |
CN113935570A (zh) | 订单处理方法、装置、设备及存储介质 | |
TW202119215A (zh) | 共用代碼之系統與代碼共用方法 | |
CN117806988B (zh) | 任务执行方法、任务配置方法、板卡、服务器 | |
WO2023241417A1 (zh) | 处理器以及用于数据处理的方法、设备和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |