CN114237918A - 一种面向神经网络模型计算的图执行方法和装置 - Google Patents
一种面向神经网络模型计算的图执行方法和装置 Download PDFInfo
- Publication number
- CN114237918A CN114237918A CN202210183223.0A CN202210183223A CN114237918A CN 114237918 A CN114237918 A CN 114237918A CN 202210183223 A CN202210183223 A CN 202210183223A CN 114237918 A CN114237918 A CN 114237918A
- Authority
- CN
- China
- Prior art keywords
- memory
- executive body
- executor
- executive
- data
- 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.)
- Granted
Links
Images
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
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
- G06N3/098—Distributed learning, e.g. federated learning
-
- 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/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/5038—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration
-
- 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/542—Event management; Broadcasting; Multicasting; Notifications
-
- 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/546—Message passing systems or structures, e.g. queues
-
- 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/04—Architecture, e.g. interconnection topology
-
- 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/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- 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/08—Learning methods
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/547—Messaging middleware
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/548—Queue
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- Evolutionary Computation (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Artificial Intelligence (AREA)
- Neurology (AREA)
- Multimedia (AREA)
- Devices For Executing Special Programs (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种面向神经网络模型计算的图执行方法和装置,包括根据深度学习框架编译生成的物理计算图,创建本机上的任务执行体,通过设计为每个任务执行体分配多个空闲内存块的方案,实现整张计算图以流水并行的方式同时参与到不同批次数据的深度学习训练任务中,本发明公开的面向神经网络模型计算的图执行方法和装置,以算子核函数的执行体为基本单元,以生产和消费的张量作为整个计算图中流动的数据,执行体以流水并行的方式实现模型的训练过程。在大规模深度神经网络的分布式应用场景下,本发明对用户的使用门槛较低,并且能够使模型学习到大量分批次流入神经网络的数据的内在关联,从而获得对应场景中的“智能”感知与判断能力。
Description
技术领域
本发明涉及深度学习技术领域,特别涉及一种面向神经网络模型计算的图执行方法和装置。
背景技术
随着人工智能产业化应用的快速发展,实际应用场景对大模型的需求变得越来越紧迫。已有深度学习框架大多数为单个设备上的面向神经网络模型计算的表达和神经网络模型的训练提供了高效的接口。然而,在面向新型的大规模深度神经网络模型训练的分布式设备时,已有的深度学习操作系统可能不够灵活和有效,因为分布式设备需要比单设备更复杂的并行性。另外已经开发的分布式训练接口加强了已有深度学习框架的模型的并行性,但使得分布式深度学习的使用和实现复杂化。
发明内容
本发明的目的在于提供一种面向神经网络模型计算的图执行方法和装置,以克服现有技术中的不足。
为实现上述目的,本发明提供如下技术方案:
本发明公开了一种面向神经网络模型计算的图执行方法,包括根据深度学习框架编译生成的物理计算图,创建本机上的任务执行体,通过设计为每个任务执行体分配多个空闲内存块的方案,实现整张计算图以流水并行的方式同时参与到不同批次数据的深度学习训练任务中,具体步骤如下:
S1:创建任务执行体,以将运行不同算子的算子核函数视作不同的计算任务,构造各核函数分别对应的任务执行体来运行该算子核函数,所述任务执行体包括当前执行体、与当前执行体通信连接的下游执行体和与当前执行体通信连接的上游执行体;
S2:当前执行体生产该当前执行体的张量数据;
S3:当前执行体将该当前执行体生产的张量数据打包成消息;
S4:当前执行体向下游执行体发送所述消息;
S5:当前执行体向上游执行体发送所述消息;
S6:下游执行体准备张量数据:下游执行体根据接收上述当前执行体发送来的消息来准备张量数据;
S7:下游执行体准备存储该下游执行体生产的张量数据所需的空的张量存储单元;
S8:下游执行体运行其内部自身的算子核函数任务并生产输出张量数据;
S9:构建任务执行体之间的数据并行方式,具体子步骤如下:
S91:分配各任务执行体的内存空闲块;
S92:启动运行时的任务执行体;
S93:并行运行整张计算图。
作为优选的,所述步骤S1具体子步骤如下:
S11:创建算子核函数的任务队列:将当前算子核函数的计算任务依次加入当前核函数的任务队列,计算图通过当前算子核函数的计算任务按照拓扑顺序依次加入当前核函数任务队列,直至将整张计算图添加到任务队列中;
S12:创建任务执行体的线程:任务执行体的线程从所述任务队列中依次获取当前待处理任务;
S13:创建算子核函数的任务执行体:根据当前待处理任务和当前线程的上下文信息创建用于算子核函数计算的任务执行体,并使用所述任务执行体运行任务队列中的对应算子核函数的计算任务;
S14: 创建事件召回队列:当处理完所述任务队列中的全部任务执行体时,创建事件召回队列,依次将所述任务执行体处理完的计算任务添加到事件召回队列中;
S15:创建事件召回队列的线程:所述事件召回队列的线程用于将事件召回队列中已处理的任务依次取出并返回。
作为优选的,所述步骤S2具体过程如下:当前执行体加载其内部的算子核函数计算任务,执行核函数计算,生成核函数计算任务的输出张量数据。
作为优选的,所述步骤S3具体过程如下:将所述当前执行体生产所得的张量数据存储到空的存储单元中,再将存储单元的地址和当前执行体对应的下游执行体的身份标识号打包成消息,当前执行体准备发送消息到当前执行体对应的下游执行体。
作为优选的,所述步骤S4具体过程如下:当前执行体完成自己核函数的计算任务,并准备好发往下游执行体的消息时,当前执行体开始向需要消费当前执行体生产的张量数据的下游执行体发送消息,告知对应的下游执行体可以来读取当前执行体生产的数据。
作为优选的,所述步骤S5具体过程如下:当前执行体还需要将消费完的来自上游执行体的张量数据的存储单元返还给其上游执行体们,表示当前执行体用完了上游执行体的数据,上游执行体可以对其输出张量数据的存储单元进行回收。
作为优选的,所述步骤S6具体过程如下:下游执行体从消息中解析出上述当前执行体生产的张量数据,所述张量数据将作为下游执行体运行其算子核函数时的输入张量。
作为优选的,所述步骤S7具体过程如下:下游执行体申请其执行对应的算子核函数计算任务时生成的输出张量数据的存储单元。
作为优选的,所述步骤S8具体子步骤如下:
S81:下游执行体收到上述当前执行体消息后,并且判断当前是否满足执行条件:a) 下游执行体需要读取的张量数据是否准备就绪;b) 是否有空闲的存储单元可以用来存储下游执行体运行对应的算子核函数时生产输出的张量数据;
S82:直至满足执行条件以后,下游执行体开始调用自己内部的算子核函数,读取上述当前执行体发送来的张量数据,执行下游执行体内部算子的核函数计算任务,将生产所得的输出张量写入上述空的张量存储单元中。
作为优选的,所述步骤S91具体子步骤如下:
S911:构建由若干个具有生产和消费关系的算子构成的物理计算图,所述算子标记为算子a、算子b、算子c……算子i,分别根据各个算子创建运行自身核函数的执行体,构成由若干个具有生产和消费关系的执行体A、执行体B、执行体C……执行体I组成的执行计算图,分别为每个执行体分配其生产和消费的张量内存空闲块;
S912:喂入不同批次的输入数据,为执行体A运行算子a的核函数产出的张量数据分配内存:第0批次数据对应的内存空闲块为内存a0,第1批次数据对应的内存空闲块为内存a1,第2批次数据对应的内存空闲块为内存a2……第i批次数据对应的内存空闲块为内存ai;
为执行体B运行算子b的核函数产出的张量数据分配内存:第0批次数据对应的内存空闲块为内存b0,第1批次数据对应的内存空闲块为内存b1,第2批次数据对应的内存空闲块为内存b2……第i批次数据对应的内存空闲块为内存bi;
为执行体C运行算子c的核函数产出的张量数据分配内存:第0批次数据对应的内存空闲块为内存c0,第1批次数据对应的内存空闲块为内存c1,第2批次数据对应的内存空闲块为内存c2……第i批次数据对应的内存空闲块为内存ci;
直至以上述步骤S911和步骤S912为执行体I运行算子i的核函数产出的张量数据分配内存。
作为优选的,所述步骤S9具体过程如下:在T0时刻,输入第0批次数据,执行体A运行算子a的核函数,将运行结果的输出张量写入内存空闲块a0,下游的执行体B、执行体C……执行体I由于没有可读的输入张量数据,均处在等待状态。
作为优选的,所述步骤S93具体过程如下:
在T1时刻,执行体A通知执行体B读取执行体A产出的内存块a0,执行体B收到消息,并检查自己生产的内存块b是否有空闲内存块可用,发现有可用的空闲内存块b0,执行体B执行算子b的核函数计算任务,读取内存块a0,执行体B将执行生成的输出张量结果写入内存块b0,同时执行体A还会检查自己是否有空闲块可写,发现有,T1时刻执行体A也在执行第1批次输入数据,将执行结果写入内存空闲块a1,使得执行体A和执行体B开始并行工作,下游的执行体C……执行体I由于没有数据可读,仍在等待;
在T2时刻,执行体B 生产出内存块b0后,给下游的消费者执行体C发消息通知执行体C读取执行体B产出的内存块b0,同时给上游的生产者执行体A发消息通知执行体A执行体B用完了执行体A的内存块a0,此时执行体A 已经把训练第1批次输入数据生产的内存块a1又发给了执行体B,执行体B检查自己仍有内存块b1空闲,于是执行体B开始读内存块a1,写入空闲内存块b1;执行体C收到内存块b0,发现自己有内存块c0空闲,于是执行体C开始执行,读内存块b0, 写入内存块c0;执行体A收到了执行体B用完还回来的内存块a0,检查内存块a0所有的消费者都用完了,于是将内存块a0回收,标记为空闲块,同时执行体A还可以继续执行,写内存块a2;
T2时刻,执行体A、B、C都在工作,在深度学习训练任务中,T2时刻内存块b0、内存块c0存放的是训练第0批次的数据,内存块a1、内存块b1存放的是训练第1批次的数据,内存块a2存放的是训练第2批次的数据,以上述步骤S93流水并行多个执行体。
本发明还公开了一种面向神经网络模型计算的图执行装置,其特征在于:包括以下模块:
任务执行体构造模块:用于创建算子核函数的任务队列、创建任务执行体的线程、创建核函数的任务执行体、创建事件召回队列、创建事件召回队列的线程;
任务执行体内部工作模块:用于当前执行体生产该当前执行体的张量数据并打包成消息、当前执行体向上下游执行体发送所述消息、下游执行体准备张量数据、下游执行体准备存储该下游执行体生产数据所需的空的张量存储单元、 下游执行体运行其内部自身的算子核函数任务并生产输出张量数据;
任务执行体流水并行模块:用于分配各任务执行体的内存空闲块、启动运行时的任务,执行体、并行运行整张计算图。
作为优选的,所述任务执行体构造模块的具体工作过程如下:
步骤1:创建算子核函数的任务队列:将当前算子核函数的计算任务依次加入当前核函数的任务队列,计算图通过当前算子核函数的计算任务按照拓扑顺序依次加入当前核函数任务队列,直至将整张计算图添加到任务队列中;
步骤2:创建任务执行体的线程:所述任务执行体的线程负责从所述任务队列中依次获取当前待处理任务;
步骤3:创建算子核函数的任务执行体:根据当前待处理任务和当前线程的上下文信息创建用于算子核函数计算的任务执行体,并使用所述任务执行体运行任务队列中的对应算子核函数的计算任务;
步骤4:创建事件召回队列:当处理完所述任务队列中的全部任务执行体时,创建事件召回队列,依次将所述任务执行体处理完的计算任务添加到事件召回队列中;
步骤5:创建事件召回队列的线程:创建事件召回队列的线程,所述事件召回队列的线程用于将事件召回队列中已处理的任务依次取出并返回。
作为优选的,所述任务执行体内部工作模块的具体工作过程如下:
步骤1: 当前执行体生产该当前执行体的张量数据:当前执行体加载其内部的算子核函数计算任务,执行核函数计算,生成核函数计算任务的输出张量数据;
步骤2:当前执行体将该当前执行体生产的张量数据打包成消息:将所述当前执行体生产所得的张量数据存储到空的存储单元中,再将存储单元的地址和当前执行体对应的下游执行体的身份标识号打包成消息,当前执行体准备发送消息到当前执行体对应的下游执行体;
步骤3: 当前执行体向下游执行体发送所述消息:当前执行体完成自己核函数的计算任务,并准备好发往下游执行体的消息时,当前执行体开始向需要消费当前执行体生产的张量数据的下游执行体发送消息,告知对应的下游执行体可以来读取当前执行体生产的数据;
步骤4: 当前执行体向上游执行体发送所述消息:当前执行体还需要将消费完的来自上游执行体的张量数据的存储单元返还给其上游执行体们,表示当前执行体用完了上游执行体的数据,上游执行体可以对其输出张量数据的存储单元进行回收;
步骤5: 下游执行体准备张量数据:下游执行体根据接收上述当前执行体发送来的消息来准备张量数据,下游执行体从消息中解析出上述当前执行体生产的张量数据,所述张量数据将作为下游执行体运行其算子核函数时的输入张量;
步骤6:下游执行体准备存储该下游执行体生产的张量数据所需的空的张量存储单元:下游执行体申请其执行对应的算子核函数计算任务时生成的输出张量数据的存储单元;
步骤7: 下游执行体运行其内部自身的算子核函数任务并生产输出张量数据:下游执行体收到上述当前执行体消息后,并且判断当前是否满足执行条件:a) 下游执行体需要读取的张量数据是否准备就绪;b) 是否有空闲的存储单元可以用来存储下游执行体运行对应的算子核函数时生产输出的张量数据;直至满足执行条件以后,下游执行体就开始调用自己内部的算子核函数,读取上述当前执行体发送来的张量数据,执行下游执行体内部算子的核函数计算任务,将生产所得的输出张量写入上述申请的空的张量存储单元中。
作为优选的,所述任务执行体流水并行模块的具体工作过程如下:
步骤1:构建由若干个具有生产和消费关系的算子构成的物理计算图,所述算子标记为算子a、算子b、算子c……算子i,分别根据各个算子创建运行自身核函数的执行体,构成由若干个具有生产和消费关系的执行体A、执行体B、执行体C……执行体I组成的执行计算图,分别为每个执行体分配其生产和消费的张量内存空闲块;
喂入不同批次的输入数据,为执行体A运行算子a的核函数产出的张量数据分配内存:第0批次数据对应的内存空闲块为内存a0,第1批次数据对应的内存空闲块为内存a1,第2批次数据对应的内存空闲块为内存a2……第i批次数据对应的内存空闲块为内存ai;
为执行体B运行算子b的核函数产出的张量数据分配内存:第0批次数据对应的内存空闲块为内存b0,第1批次数据对应的内存空闲块为内存b1,第2批次数据对应的内存空闲块为内存b2……第i批次数据对应的内存空闲块为内存bi;
为执行体C运行算子c的核函数产出的张量数据分配内存:第0批次数据对应的内存空闲块为内存c0,第1批次数据对应的内存空闲块为内存c1,第2批次数据对应的内存空闲块为内存c2……第i批次数据对应的内存空闲块为内存ci;
直至为执行体I运行算子i的核函数产出的张量数据分配内存;
步骤2:启动运行时的执行体:在T0时刻,输入第0批次数据,执行体A运行算子a的核函数,将运行结果的输出张量写入内存空闲块a0,下游的执行体B、执行体C……执行体I由于没有可读的输入张量数据,均处在等待状态;
步骤3:并行运行整张计算图:在T1时刻,执行体A通知执行体B读取执行体A产出的内存块a0,执行体B收到消息,并检查自己生产的内存块b是否有空闲内存块可用,发现有可用的空闲内存块b0,执行体B执行算子b的核函数计算任务,读取内存块a0,执行体B将执行生成的输出张量结果写入内存块b0,同时执行体A还会检查自己是否有空闲块可写,发现有,T1时刻执行体A也在执行第1批次输入数据,将执行结果写入内存空闲块a1,使得执行体A和执行体B开始并行工作,下游的执行体C……执行体I由于没有数据可读,仍在等待;
在T2时刻,执行体B 生产出内存块b0后,给下游的消费者执行体C发消息通知执行体C读取执行体B产出的内存块b0,同时给上游的生产者执行体A发消息通知执行体A执行体B用完了执行体A的内存块a0,此时执行体A 已经把训练第1批次输入数据生产的内存块a1又发给了执行体B,执行体B检查自己仍有内存块b1空闲,于是执行体B开始读内存块a1,写入空闲内存块b1;执行体C收到内存块b0,发现自己有内存块c0空闲,于是执行体C开始执行,读内存块b0, 写入内存块c0;执行体A收到了执行体B用完还回来的内存块a0,检查内存块a0所有的消费者都用完了,于是将内存块a0回收,标记为空闲块,同时执行体A还可以继续执行,写内存块a2;
T2时刻,执行体A、B、C都在工作,在深度学习训练任务中,T2时刻内存块b0、内存块c0存放的是训练第0批次的数据,内存块a1、内存块b1存放的是训练第1批次的数据,内存块a2存放的是训练第2批次的数据,以上述步骤3流水并行多个执行体。
本发明还公开了一种面向神经网络模型计算的图执行装置,其特征在于:所述装置包括存储器和一个或多个处理器,所述存储器中存储有可执行代码,所述一个或多个处理器执行所述可执行代码时,用于实现所述的面向神经网络模型计算的图执行方法。
本发明的有益效果:
本发明公开的面向神经网络模型计算的图执行方法和装置,以算子核函数的执行体为基本单元,以生产和消费的张量作为整个计算图中流动的数据,执行体以流水并行的方式实现模型的训练过程。在大规模深度神经网络的分布式应用场景下,本发明对用户的使用门槛较低,并且能够使模型学习到大量分批次流入神经网络的数据的内在关联,从而获得对应场景中的“智能”感知与判断能力。本发明为深度学习相关的算法工程师提供了一套简洁易用的神经网络模型的运行装置,使之能方便的训练深度学习模型。。
附图说明
图1是本发明实施例面向神经网络模型计算的图执行方法的流程图;
图2是本发明实施例面向神经网络模型计算的图执行方法的架构图;
图3是本发明实施例创建管理任务执行体线程模块的流程图;
图4是本发明实施例构建任务执行体内部工作模式的过程;
图5是本发明实施例执行体流水并行的执行过程;
图6是本发明实施例面向神经网络模型计算的图执行装置示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明了,下面通过附图及实施例,对本发明进行进一步详细说明。但是应该理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限制本发明的范围。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本发明的概念。
如图1所示,本发明实施例提供了一种面向神经网络模型计算的图执行方法,根据深度学习框架编译生成的物理计算图,创建本机上的任务执行体,通过设计为每个任务执行体分配多个空闲内存块的方案,实现整张计算图以流水并行的方式同时参与到不同批次数据的深度学习训练任务中,具体步骤如下:
步骤一:创建任务执行体,以将运行不同算子的算子核函数视作不同的计算任务,构造各核函数分别对应的任务执行体来运行该算子核函数,所述任务执行体包括当前执行体、与当前执行体通信连接的下游执行体和与当前执行体通信连接的上游执行体;
步骤二:当前执行体生产该当前执行体的张量数据;
步骤三:当前执行体将该当前执行体生产的张量数据打包成消息;
步骤四:当前执行体向下游执行体发送所述消息;
步骤五:当前执行体向上游执行体发送所述消息;
步骤六:下游执行体准备张量数据:下游执行体根据接收上述当前执行体发送来的消息来准备张量数据;
步骤七:下游执行体准备存储该下游执行体生产的张量数据所需的空的张量存储单元;
步骤八:下游执行体运行其内部自身的算子核函数任务并生产输出张量数据;
步骤九:构建任务执行体之间的数据并行方式。
所述上游执行体与所述下游执行体是指与所述当前执行体有生产、消费关系的执行体,当前执行体消费上游执行体生产的张量数据,当前执行体生产的张量数据流向下游执行体。
如图2所示,所述一种面向神经网络模型计算的图执行方法的架构图。将训练数据分批次喂入神经网络模型,根据深度学习框架编译生成的物理计算图创建本机上的图执行体,为每个图执行体分配多个空闲内存块,使得整张计算图以流水并行的方式同时参与深度学习训练任务中。
步骤一:创建任务执行体,具体步骤如下:
步骤1. 创建算子核函数的任务队列:将当前算子核函数的计算任务依次加入当前核函数的任务队列,计算图通过当前算子核函数的计算任务按照拓扑顺序依次加入当前核函数任务队列,直至将整张计算图添加到任务队列中;
步骤2. 创建任务执行体的线程:创建任务执行体的线程。所述任务执行体的线程负责从所述任务队列中依次获取当前待处理任务;
步骤3. 创建算子核函数的任务执行体:根据当前待处理任务和当前线程的上下文信息创建用于算子核函数计算的任务执行体,并使用所述任务执行体运行任务队列中的对应算子核函数的计算任务。
步骤4. 创建事件召回队列:当处理完所述任务队列中的全部任务执行体时,创建事件召回队列,依次将所述任务执行体处理完的计算任务添加到事件召回队列中;
步骤5: 创建事件召回队列的线程: 创建事件召回队列的线程。所述事件召回队列的线程用于将事件召回队列中已处理的任务依次取出并返回。
如图3所示,创建管理任务执行体线程模块的流程图。所述任务执行体的线程从所述任务队列中依次获取当前待处理任务i,根据当前待处理的任务i创建用于当前算子核函数计算任务的任务执行体,并使用所述的任务执行体运行任务i。当已处理完任务i-1时,将任务i-1添加到事件召回队列中,事件召回队列的线程再从队列中取出已处理任务i-1,并返回。
步骤二:当前执行体生产该当前执行体的张量数据:
当前执行体加载其内部的算子核函数计算任务,执行核函数计算,生成核函数计算任务的输出张量数据。
步骤三:当前执行体将该当前执行体生产的张量数据打包成消息:
将所述当前执行体生产所得的张量数据存储到空的存储单元中,再将存储单元的地址和当前执行体对应的下游执行体的身份标识号打包成消息。当前执行体准备发送消息到其目标执行体,所述目标执行体就是当前执行体对应的下游执行体,所述消息是使用谷歌的ProtoBuf 数据格式类型,所述消息包括存储单元的地址字段、当前执行体对应的下游执行体的身份标识号字段。
步骤四:当前执行体向下游执行体发送所述消息:
当前执行体完成自己核函数的计算任务时,而且也准备好发往下游执行体的消息时,当前执行体就向需要消费当前执行体生产的张量数据的那些下游执行体发送消息,表示所述下游执行体可以来读取当前执行体生产的数据了。
步骤五:当前执行体向上游执行体发送所述消息:
当前执行体还需要把它消费完的来自上游执行体的张量数据的存储单元返还给那些上游的生产者执行体们,表示当前执行体用完了上游执行体的数据,上游执行体可以回收其输出张量数据的存储单元了。
步骤六:下游执行体准备张量数据:
下游执行体根据接收上述当前执行体发送来的消息来准备张量数据,下游执行体从消息中解析出上述当前执行体生产的张量数据,所述张量数据将作为下游执行体运行其算子核函数时的输入张量。
步骤七:下游执行体准备存储该下游执行体生产的张量数据所需的空的张量存储单元:
下游执行体申请其执行对应的算子核函数计算任务时生成的输出张量数据的存储单元。
步骤八:下游执行体运行其内部自身的算子核函数任务并生产输出张量数据:
下游执行体收到上述当前执行体消息后,并且判断当前是否满足执行条件:a) 下游执行体需要读取的张量数据是否准备就绪;b) 是否有空闲的存储单元可以用来存储下游执行体运行对应的算子核函数时生产输出的张量数据。当满足执行条件以后,下游执行体就开始调用自己内部的算子核函数,读取上述当前执行体发送来的张量数据,执行下游执行体内部算子的核函数计算任务,将生产所得的输出张量写入上述申请的空的张量存储单元中。图4展示了所述构建任务执行体内部工作模式的过程。
步骤九:构建任务执行体之间的数据并行方式:
所述的构建任务执行体之间的数据并行方式包括如下步骤:
步骤1:分配各任务执行体的内存空闲块:
构建物理计算图由算子a→算子b→算子c→……算子i组成,分别根据各个算子创建运行自身核函数的执行体,构成执行体A→执行体B→执行体C→……执行体I的执行计算图,其中箭头表示下游算子或执行体消费上游算子或执行体生产的张量数据。分别为每个执行体分配其生产和消费的张量内存空闲块。喂入不同批次的输入数据,为执行体A运行算子a的核函数产出的张量数据分配内存:第0批次数据对应的内存空闲块为内存a0,第1批次数据对应的内存空闲块为内存a1,第2批次数据对应的内存空闲块为内存a2,……,第i批次数据对应的内存空闲块为ai。为执行体B运行算子b的核函数产出的张量数据分配内存:第0批次数据对应的内存空闲块为内存b0,第1批次数据对应的内存空闲块为内存b1,……,第i批次数据对应的内存空闲块为bi。为执行体C运行算子c的核函数产出的张量数据分配内存:第0批次数据对应的内存空闲块为内存c0,第1批次数据对应的内存空闲块为内存c1,……,第i批次数据对应的内存空闲块为ci;直至为执行体I运行算子i的核函数产出的张量数据分配内存。
步骤2:启动运行时的任务执行体:
在T0时刻,输入第0批次数据,执行体a运行算子a的核函数,将运行结果的输出张量写入内存空闲块a0,下游的执行体B、执行体C……执行体I由于没有可读的输入张量数据,均处在等待状态。
步骤3: 并行运行整张计算图:
执行体A通知执行体B读取执行体A产出的内存块a0,执行体B收到消息,并检查自己生产的内存块b是否有空闲内存块可用,发现有可用的空闲内存块b0,执行体B执行算子b的核函数计算任务,读取内存块a0,执行体B将执行生成的输出张量结果写入内存块b0,同时执行体A还会检查自己是否有空闲块可写,发现有,T1时刻执行体A也在执行第1批次输入数据,将执行结果写入内存空闲块a1,使得执行体A和执行体B开始并行工作,下游的执行体C……执行体I由于没有数据可读,仍在等待;
在T2时刻,执行体B 生产出内存块b0后,给下游的消费者执行体C发消息通知执行体C读取执行体B产出的内存块b0,同时给上游的生产者执行体A发消息通知执行体A执行体B用完了执行体A的内存块a0,此时执行体A 已经把训练第1批次输入数据生产的内存块a1又发给了执行体B,执行体B检查自己仍有内存块b1空闲,于是执行体B开始读内存块a1,写入空闲内存块b1;执行体C收到内存块b0,发现自己有内存块c0空闲,于是执行体C开始执行,读内存块b0, 写入内存块c0;执行体A收到了执行体B用完还回来的内存块a0,检查内存块a0所有的消费者都用完了,于是将内存块a0回收,标记为空闲块,同时执行体A还可以继续执行,写内存块a2;
到了T2时刻,执行体a、b、c都在工作,在深度学习训练任务中,T2时刻内存块b0、内存块c0存放的是训练第0批次的数据,内存块a1、内存块b1存放的是训练第1批次的数据,内存块a2存放的是训练第2批次的数据。通过多个空闲内存块的设计,执行体就实现了流水并行。图5 展示了执行体流水并行的执行过程。
利用所述的面向神经网络模型计算的图执行装置作为深度学习框架的运行引擎,下面将以面向神经网络模型计算的图执行装置的实施过程为例对本发明的技术方案做进一步的详细描述。
所述一种面向神经网络模型计算的图执行装置的实施过程包括如下步骤:
步骤一:任务执行体构造模块:所述创建任务执行体模块包括如下过程:
步骤1.创建算子核函数的任务队列:将当前算子核函数的计算任务依次加入当前核函数的任务队列,计算图通过当前算子核函数的计算任务按照拓扑顺序依次加入当前核函数任务队列,直至将整张计算图添加到任务队列中;
步骤2. 创建任务执行体的线程:创建任务执行体的线程。所述任务执行体的线程负责从所述任务队列中依次获取当前待处理任务;
步骤3. 创建算子核函数的任务执行体:根据当前待处理任务和当前线程的上下文信息创建用于算子核函数计算的任务执行体,并使用所述任务执行体运行任务队列中的对应算子核函数的计算任务;
步骤4. 创建事件召回队列:当处理完所述任务队列中的全部任务执行体时,创建事件召回队列,依次将所述任务执行体处理完的计算任务添加到事件召回队列中;
步骤5: 创建事件召回队列的线程: 创建事件召回队列的线程。所述事件召回队列的线程负责将事件召回队列中已处理的任务依次取出并返回。
步骤二、任务执行体内部工作模块:所述任务执行体内部工作模块包括如下过程:
步骤1: 当前执行体生产该当前执行体的张量数据:当前执行体加载其内部的算子核函数计算任务,执行核函数计算,生成核函数计算任务的输出张量数据;
步骤2:当前执行体将该当前执行体生产的张量数据打包成消息:将所述当前执行体生产所得的张量数据存储到空的存储单元中,再将存储单元的地址和当前执行体对应的下游执行体的身份标识号打包成消息,当前执行体准备发送消息到当前执行体对应的下游执行体;
步骤3: 当前执行体向下游执行体发送所述消息:当前执行体完成自己核函数的计算任务,并准备好发往下游执行体的消息时,当前执行体开始向需要消费当前执行体生产的张量数据的下游执行体发送消息,告知对应的下游执行体可以来读取当前执行体生产的数据;
步骤4: 当前执行体向上游执行体发送所述消息:当前执行体还需要将消费完的来自上游执行体的张量数据的存储单元返还给其上游执行体们,表示当前执行体用完了上游执行体的数据,上游执行体可以对其输出张量数据的存储单元进行回收;
步骤5: 下游执行体准备张量数据:下游执行体根据接收上述当前执行体发送来的消息来准备张量数据,下游执行体从消息中解析出上述当前执行体生产的张量数据,所述张量数据将作为下游执行体运行其算子核函数时的输入张量;
步骤6:下游执行体准备存储该下游执行体生产的张量数据所需的空的张量存储单元:下游执行体申请其执行对应的算子核函数计算任务时生成的输出张量数据的存储单元;
步骤7: 下游执行体运行其内部自身的算子核函数任务并生产输出张量数据:下游执行体收到上述当前执行体消息后,并且判断当前是否满足执行条件:a) 下游执行体需要读取的张量数据是否准备就绪;b) 是否有空闲的存储单元可以用来存储下游执行体运行对应的算子核函数时生产输出的张量数据;直至满足执行条件以后,下游执行体就开始调用自己内部的算子核函数,读取上述当前执行体发送来的张量数据,执行下游执行体内部算子的核函数计算任务,将生产所得的输出张量写入上述申请的空的张量存储单元中。
步骤三、任务执行体流水并行模块:所述任务执行体流水并行模块包括如下过程:
步骤1:分配执行体的内存空闲块:构建物理计算图由算子a→算子b→算子c→……算子i组成,分别根据各个算子创建运行自身核函数的执行体,构成执行体A→执行体B→执行体C→……执行体I的执行计算图,其中箭头表示下游算子或执行体消费上游算子或执行体生产的张量数据。分别为每个执行体分配其生产和消费的张量内存空闲块。喂入不同批次的输入数据,为执行体A运行算子a的核函数产出的张量数据分配内存:第0批次数据对应的内存空闲块为内存a0,第1批次数据对应的内存空闲块为内存a1,第2批次数据对应的内存空闲块为内存a2,……,第i批次数据对应的内存空闲块为ai。为执行体B运行算子b的核函数产出的张量数据分配内存:第0批次数据对应的内存空闲块为内存b0,第1批次数据对应的内存空闲块为内存b1,……,第i批次数据对应的内存空闲块为bi。为执行体C运行算子c的核函数产出的张量数据分配内存:第0批次数据对应的内存空闲块为内存c0,第1批次数据对应的内存空闲块为内存c1,……,第i批次数据对应的内存空闲块为ci;直至为执行体I运行算子i的核函数产出的张量数据分配内存。
步骤2:启动运行时的执行体:在T0时刻,输入第0批次数据,执行体a运行算子a的核函数,将运行结果的输出张量写入内存空闲块a0,下游的执行体B、执行体C……执行体I由于没有可读的输入张量数据,均处在等待状态。
步骤3: 并行运行整张计算图:执行体A通知执行体B读取执行体A产出的内存块a0,执行体B收到消息,并检查自己生产的内存块b是否有空闲内存块可用,发现有可用的空闲内存块b0,执行体B执行算子b的核函数计算任务,读取内存块a0,执行体B将执行生成的输出张量结果写入内存块b0,同时执行体A还会检查自己是否有空闲块可写,发现有,T1时刻执行体A也在执行第1批次输入数据,将执行结果写入内存空闲块a1,使得执行体A和执行体B开始并行工作,下游的执行体C……执行体I由于没有数据可读,仍在等待。
在T2时刻,执行体B 生产出内存块b0后,给下游的消费者执行体C发消息通知执行体C读取执行体B产出的内存块b0,同时给上游的生产者执行体A发消息通知执行体A执行体B用完了执行体A的内存块a0,此时执行体A 已经把训练第1批次输入数据生产的内存块a1又发给了执行体B,执行体B检查自己仍有内存块b1空闲,于是执行体B开始读内存块a1,写入空闲内存块b1;执行体C收到内存块b0,发现自己有内存块c0空闲,于是执行体C开始执行,读内存块b0, 写入内存块c0;执行体A收到了执行体B用完还回来的内存块a0,检查内存块a0所有的消费者都用完了,于是将内存块a0回收,标记为空闲块,同时执行体A还可以继续执行,写内存块a2。
到了T2时刻,执行体a、b、c都在工作,在深度学习训练任务中,T2时刻内存块b0、内存块c0存放的是训练第0批次的数据,内存块a1、内存块b1存放的是训练第1批次的数据,内存块a2存放的是训练第2批次的数据。通过多个空闲内存块的设计,执行体就实现了流水并行。图5 展示了执行体流水并行的执行过程。
参见图6,本发明实施例还提供的一种面向神经网络模型计算的中间表示生成装置,还包括存储器和一个或多个处理器,存储器中存储有可执行代码,所述一个或多个处理器执行所述可执行代码时,用于实现上述实施例中的面向神经网络模型计算的中间表示生成方法。
本发明一种面向神经网络模型计算的中间表示生成装置的实施例可以应用在任意具备数据处理能力的设备上,该任意具备数据处理能力的设备可以为诸如计算机等设备或装置。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在任意具备数据处理能力的设备的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图6所示,为本发明一种面向神经网络模型计算的中间表示生成装置所在任意具备数据处理能力的设备的一种硬件结构图,除了图6所示的处理器、内存、网络接口、以及非易失性存储器之外,实施例中装置所在的任意具备数据处理能力的设备通常根据该任意具备数据处理能力的设备的实际功能,还可以包括其他硬件,对此不再赘述。上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本发明方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
本发明实施例还提供一种计算机可读存储介质,其上存储有程序,该程序被处理器执行时,实现上述实施例中的面向神经网络模型计算的中间表示生成方法。
所述计算机可读存储介质可以是前述任一实施例所述的任意具备数据处理能力的设备的内部存储单元,例如硬盘或内存。所述计算机可读存储介质也可以是任意具备数据处理能力的设备的外部存储设备,例如所述设备上配备的插接式硬盘、智能存储卡(Siart iedia Card,SiC)、SD卡、闪存卡(Flash Card)等。进一步的,所述计算机可读存储介质还可以既包括任意具备数据处理能力的设备的内部存储单元也包括外部存储设备。所述计算机可读存储介质用于存储所述计算机程序以及所述任意具备数据处理能力的设备所需的其他程序和数据,还可以用于暂时地存储已经输出或者将要输出的数据。
经过上述步骤,完成了所述面向神经网络模型计算的图执行装置实施的全过程。下面对面向神经网络模型计算的图执行装置进行评测。
所述评测选择了经典主流的深度学习模型Resiet-50 v1.5,其中Resiet-50是计算机视觉领域最主流的深度学习模型,所述测试环境共有4台机器,每台机器配置了8张V100 GPU显卡。针对深度学习框架的神经网络模型,测试其分布式环境下的吞吐率。所述吞吐率表示了深度学习框架的处理速度,吞吐率越高,则训练一个深度学习模型所需的时间越短,深度学习框架的性能就越高。所述吞吐率具体指训练过程中深度学习框架每秒处理的样例个数。对于图片分类任务而言,表示每秒处理多少张图片。
测试结果如下:
表格1. 面向神经网络模型计算的中间表示生成装置测试。
评测结果表明:在Resiet50 模型中,所述面向神经网络模型计算的中间表示生成装置的性能表现优于其他已有的主流深度学习框架。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换或改进等,均应包含在本发明的保护范围之内。
Claims (17)
1.一种面向神经网络模型计算的图执行方法,其特征在于:包括根据深度学习框架编译生成的物理计算图,创建本机上的任务执行体,通过设计为每个任务执行体分配多个空闲内存块的方案,实现整张计算图以流水并行的方式同时参与到不同批次数据的深度学习训练任务中,具体步骤如下:
S1:创建任务执行体,以将运行不同算子的算子核函数视作不同的计算任务,构造各核函数分别对应的任务执行体来运行该算子核函数,所述任务执行体包括当前执行体、与当前执行体通信连接的下游执行体和与当前执行体通信连接的上游执行体;
S2:当前执行体生产该当前执行体的张量数据;
S3:当前执行体将该当前执行体生产的张量数据打包成消息;
S4:当前执行体向下游执行体发送所述消息;
S5:当前执行体向上游执行体发送所述消息;
S6:下游执行体准备张量数据:下游执行体根据接收上述当前执行体发送来的消息来准备张量数据;
S7:下游执行体准备存储该下游执行体生产的张量数据所需的空的张量存储单元;
S8:下游执行体运行其内部自身的算子核函数任务并生产输出张量数据;
S9:构建任务执行体之间的数据并行方式,具体子步骤如下:
S91:分配各任务执行体的内存空闲块;
S92:启动运行时的任务执行体;
S93:并行运行整张计算图。
2.如权利要求1所述的一种面向神经网络模型计算的图执行方法,其特征在于:所述步骤S1具体子步骤如下:
S11:创建算子核函数的任务队列:将当前算子核函数的计算任务依次加入当前核函数的任务队列,计算图通过当前算子核函数的计算任务按照拓扑顺序依次加入当前核函数任务队列,直至将整张计算图添加到任务队列中;
S12:创建任务执行体的线程:任务执行体的线程从所述任务队列中依次获取当前待处理任务;
S13:创建算子核函数的任务执行体:根据当前待处理任务和当前线程的上下文信息创建用于算子核函数计算的任务执行体,并使用所述任务执行体运行任务队列中的对应算子核函数的计算任务;
S14: 创建事件召回队列:当处理完所述任务队列中的全部任务执行体时,创建事件召回队列,依次将所述任务执行体处理完的计算任务添加到事件召回队列中;
S15:创建事件召回队列的线程:所述事件召回队列的线程用于将事件召回队列中已处理的任务依次取出并返回。
3.如权利要求1所述的一种面向神经网络模型计算的图执行方法,其特征在于:所述步骤S2具体过程如下:当前执行体加载其内部的算子核函数计算任务,执行核函数计算,生成核函数计算任务的输出张量数据。
4.如权利要求1所述的一种面向神经网络模型计算的图执行方法,其特征在于:所述步骤S3具体过程如下:将所述当前执行体生产所得的张量数据存储到空的存储单元中,再将存储单元的地址和当前执行体对应的下游执行体的身份标识号打包成消息,当前执行体准备发送消息到当前执行体对应的下游执行体。
5.如权利要求1所述的一种面向神经网络模型计算的图执行方法,其特征在于:所述步骤S4具体过程如下:当前执行体完成自己核函数的计算任务,并准备好发往下游执行体的消息时,当前执行体开始向需要消费当前执行体生产的张量数据的下游执行体发送消息,告知对应的下游执行体可以来读取当前执行体生产的数据。
6.如权利要求1所述的一种面向神经网络模型计算的图执行方法,其特征在于:所述步骤S5具体过程如下:当前执行体还需要将消费完的来自上游执行体的张量数据的存储单元返还给其上游执行体们,表示当前执行体用完了上游执行体的数据,上游执行体可以对其输出张量数据的存储单元进行回收。
7.如权利要求1所述的一种面向神经网络模型计算的图执行方法,其特征在于:所述步骤S6具体过程如下:下游执行体从消息中解析出上述当前执行体生产的张量数据,所述张量数据将作为下游执行体运行其算子核函数时的输入张量。
8.如权利要求1所述的一种面向神经网络模型计算的图执行方法,其特征在于:所述步骤S7具体过程如下:下游执行体申请其执行对应的算子核函数计算任务时生成的输出张量数据的存储单元。
9.如权利要求1所述的一种面向神经网络模型计算的图执行方法,其特征在于:所述步骤S8具体子步骤如下:
S81:下游执行体收到上述当前执行体消息后,并且判断当前是否满足执行条件:a) 下游执行体需要读取的张量数据是否准备就绪;b) 是否有空闲的存储单元可以用来存储下游执行体运行对应的算子核函数时生产输出的张量数据;
S82:直至满足执行条件以后,下游执行体开始调用自己内部的算子核函数,读取上述当前执行体发送来的张量数据,执行下游执行体内部算子的核函数计算任务,将生产所得的输出张量写入上述空的张量存储单元中。
10.如权利要求1所述的一种面向神经网络模型计算的图执行方法,其特征在于:所述步骤S91具体子步骤如下:
S911:构建由若干个具有生产和消费关系的算子构成的物理计算图,所述算子标记为算子a、算子b、算子c……算子i,分别根据各个算子创建运行自身核函数的执行体,构成由若干个具有生产和消费关系的执行体A、执行体B、执行体C……执行体I组成的执行计算图,分别为每个执行体分配其生产和消费的张量内存空闲块;
S912:喂入不同批次的输入数据,为执行体A运行算子a的核函数产出的张量数据分配内存:第0批次数据对应的内存空闲块为内存a0,第1批次数据对应的内存空闲块为内存a1,第2批次数据对应的内存空闲块为内存a2……第i批次数据对应的内存空闲块为内存ai;
为执行体B运行算子b的核函数产出的张量数据分配内存:第0批次数据对应的内存空闲块为内存b0,第1批次数据对应的内存空闲块为内存b1,第2批次数据对应的内存空闲块为内存b2……第i批次数据对应的内存空闲块为内存bi;
为执行体C运行算子c的核函数产出的张量数据分配内存:第0批次数据对应的内存空闲块为内存c0,第1批次数据对应的内存空闲块为内存c1,第2批次数据对应的内存空闲块为内存c2……第i批次数据对应的内存空闲块为内存ci;
直至以上述步骤S911和步骤S912为执行体I运行算子i的核函数产出的张量数据分配内存。
11.如权利要求10所述的一种面向神经网络模型计算的图执行方法,其特征在于:所述步骤S92具体过程如下:在T0时刻,输入第0批次数据,执行体A运行算子a的核函数,将运行结果的输出张量写入内存空闲块a0,下游的执行体B、执行体C……执行体I由于没有可读的输入张量数据,均处在等待状态。
12.如权利要求10所述的一种面向神经网络模型计算的图执行方法,其特征在于:所述步骤S93具体过程如下:
在T1时刻,执行体A通知执行体B读取执行体A产出的内存块a0,执行体B收到消息,并检查自己生产的内存块b是否有空闲内存块可用,发现有可用的空闲内存块b0,执行体B执行算子b的核函数计算任务,读取内存块a0,执行体B将执行生成的输出张量结果写入内存块b0,同时执行体A还会检查自己是否有空闲块可写,发现有,T1时刻执行体A也在执行第1批次输入数据,将执行结果写入内存空闲块a1,使得执行体A和执行体B开始并行工作,下游的执行体C……执行体I由于没有数据可读,仍在等待;
在T2时刻,执行体B 生产出内存块b0后,给下游的消费者执行体C发消息通知执行体C读取执行体B产出的内存块b0,同时给上游的生产者执行体A发消息通知执行体A执行体B用完了执行体A的内存块a0,此时执行体A 已经把训练第1批次输入数据生产的内存块a1又发给了执行体B,执行体B检查自己仍有内存块b1空闲,于是执行体B开始读内存块a1,写入空闲内存块b1;执行体C收到内存块b0,发现自己有内存块c0空闲,于是执行体C开始执行,读内存块b0, 写入内存块c0;执行体A收到了执行体B用完还回来的内存块a0,检查内存块a0所有的消费者都用完了,于是将内存块a0回收,标记为空闲块,同时执行体A还可以继续执行,写内存块a2;
T2时刻,执行体A、B、C都在工作,在深度学习训练任务中,T2时刻内存块b0、内存块c0存放的是训练第0批次的数据,内存块a1、内存块b1存放的是训练第1批次的数据,内存块a2存放的是训练第2批次的数据;
以上述步骤S93流水并行全部执行体。
13.一种面向神经网络模型计算的图执行装置,其特征在于:包括以下模块:
任务执行体构造模块:用于创建算子核函数的任务队列、创建任务执行体的线程、创建核函数的任务执行体、创建事件召回队列、创建事件召回队列的线程;
任务执行体内部工作模块:用于当前执行体生产该当前执行体的张量数据并打包成消息、当前执行体向上下游执行体发送所述消息、下游执行体准备张量数据、下游执行体准备存储该下游执行体生产数据所需的空的张量存储单元、 下游执行体运行其内部自身的算子核函数任务并生产输出张量数据;
任务执行体流水并行模块:用于分配各任务执行体的内存空闲块、启动运行时的任务,执行体、并行运行整张计算图。
14.如权利要求13所述的一种面向神经网络模型计算的图执行装置,其特征在于:所述任务执行体构造模块的具体工作过程如下:
步骤1:创建算子核函数的任务队列:将当前算子核函数的计算任务依次加入当前核函数的任务队列,计算图通过当前算子核函数的计算任务按照拓扑顺序依次加入当前核函数任务队列,直至将整张计算图添加到任务队列中;
步骤2:创建任务执行体的线程:所述任务执行体的线程负责从所述任务队列中依次获取当前待处理任务;
步骤3:创建算子核函数的任务执行体:根据当前待处理任务和当前线程的上下文信息创建用于算子核函数计算的任务执行体,并使用所述任务执行体运行任务队列中的对应算子核函数的计算任务;
步骤4:创建事件召回队列:当处理完所述任务队列中的全部任务执行体时,创建事件召回队列,依次将所述任务执行体处理完的计算任务添加到事件召回队列中;
步骤5:创建事件召回队列的线程:创建事件召回队列的线程,所述事件召回队列的线程用于将事件召回队列中已处理的任务依次取出并返回。
15.如权利要求13所述的一种面向神经网络模型计算的图执行装置,其特征在于:所述任务执行体内部工作模块的具体工作过程如下:
步骤1: 当前执行体生产该当前执行体的张量数据:当前执行体加载其内部的算子核函数计算任务,执行核函数计算,生成核函数计算任务的输出张量数据;
步骤2:当前执行体将该当前执行体生产的张量数据打包成消息:将所述当前执行体生产所得的张量数据存储到空的存储单元中,再将存储单元的地址和当前执行体对应的下游执行体的身份标识号打包成消息,当前执行体准备发送消息到当前执行体对应的下游执行体;
步骤3: 当前执行体向下游执行体发送所述消息:当前执行体完成自己核函数的计算任务,并准备好发往下游执行体的消息时,当前执行体开始向需要消费当前执行体生产的张量数据的下游执行体发送消息,告知对应的下游执行体可以来读取当前执行体生产的数据;
步骤4: 当前执行体向上游执行体发送所述消息:当前执行体还需要将消费完的来自上游执行体的张量数据的存储单元返还给其上游执行体们,表示当前执行体用完了上游执行体的数据,上游执行体可以对其输出张量数据的存储单元进行回收;
步骤5: 下游执行体准备张量数据:下游执行体根据接收上述当前执行体发送来的消息来准备张量数据,下游执行体从消息中解析出上述当前执行体生产的张量数据,所述张量数据将作为下游执行体运行其算子核函数时的输入张量;
步骤6:下游执行体准备存储该下游执行体生产的张量数据所需的空的张量存储单元:下游执行体申请其执行对应的算子核函数计算任务时生成的输出张量数据的存储单元;
步骤7: 下游执行体运行其内部自身的算子核函数任务并生产输出张量数据:下游执行体收到上述当前执行体消息后,并且判断当前是否满足执行条件:a) 下游执行体需要读取的张量数据是否准备就绪;b) 是否有空闲的存储单元可以用来存储下游执行体运行对应的算子核函数时生产输出的张量数据;直至满足执行条件以后,下游执行体就开始调用自己内部的算子核函数,读取上述当前执行体发送来的张量数据,执行下游执行体内部算子的核函数计算任务,将生产所得的输出张量写入上述申请的空的张量存储单元中。
16.如权利要求13所述的一种面向神经网络模型计算的图执行装置,其特征在于:所述任务执行体流水并行模块的具体工作过程如下:
步骤1:分配执行体的内存空闲块:构建由若干个具有生产和消费关系的算子构成的物理计算图,所述算子标记为算子a、算子b、算子c……算子i,分别根据各个算子创建运行自身核函数的执行体,构成由若干个具有生产和消费关系的执行体A、执行体B、执行体C……执行体I组成的执行计算图,分别为每个执行体分配其生产和消费的张量内存空闲块;
喂入不同批次的输入数据,为执行体A运行算子a的核函数产出的张量数据分配内存:第0批次数据对应的内存空闲块为内存a0,第1批次数据对应的内存空闲块为内存a1,第2批次数据对应的内存空闲块为内存a2……第i批次数据对应的内存空闲块为内存ai;
为执行体B运行算子b的核函数产出的张量数据分配内存:第0批次数据对应的内存空闲块为内存b0,第1批次数据对应的内存空闲块为内存b1,第2批次数据对应的内存空闲块为内存b2……第i批次数据对应的内存空闲块为内存bi;
为执行体C运行算子c的核函数产出的张量数据分配内存:第0批次数据对应的内存空闲块为内存c0,第1批次数据对应的内存空闲块为内存c1,第2批次数据对应的内存空闲块为内存c2……第i批次数据对应的内存空闲块为内存ci;
直至为执行体I运行算子i的核函数产出的张量数据分配内存;
步骤2:启动运行时的执行体:在T0时刻,输入第0批次数据,执行体A运行算子a的核函数,将运行结果的输出张量写入内存空闲块a0,下游的执行体B、执行体C……执行体I由于没有可读的输入张量数据,均处在等待状态;
步骤3:并行运行整张计算图:在T1时刻,执行体A通知执行体B读取执行体A产出的内存块a0,执行体B收到消息,并检查自己生产的内存块b是否有空闲内存块可用,发现有可用的空闲内存块b0,执行体B执行算子b的核函数计算任务,读取内存块a0,执行体B将执行生成的输出张量结果写入内存块b0,同时执行体A还会检查自己是否有空闲块可写,发现有,T1时刻执行体A也在执行第1批次输入数据,将执行结果写入内存空闲块a1,使得执行体A和执行体B开始并行工作,下游的执行体C……执行体I由于没有数据可读,仍在等待;
在T2时刻,执行体B 生产出内存块b0后,给下游的消费者执行体C发消息通知执行体C读取执行体B产出的内存块b0,同时给上游的生产者执行体A发消息通知执行体A执行体B用完了执行体A的内存块a0,此时执行体A 已经把训练第1批次输入数据生产的内存块a1又发给了执行体B,执行体B检查自己仍有内存块b1空闲,于是执行体B开始读内存块a1,写入空闲内存块b1;执行体C收到内存块b0,发现自己有内存块c0空闲,于是执行体C开始执行,读内存块b0, 写入内存块c0;执行体A收到了执行体B用完还回来的内存块a0,检查内存块a0所有的消费者都用完了,于是将内存块a0回收,标记为空闲块,同时执行体A还可以继续执行,写内存块a2;
T2时刻,执行体A、B、C都在工作,在深度学习训练任务中,T2时刻内存块b0、内存块c0存放的是训练第0批次的数据,内存块a1、内存块b1存放的是训练第1批次的数据,内存块a2存放的是训练第2批次的数据;
以上述步骤3流水并行全部执行体。
17.一种面向神经网络模型计算的图执行装置,其特征在于:所述装置还包括存储器和一个或多个处理器,所述存储器中存储有可执行代码,所述一个或多个处理器执行所述可执行代码时,用于实现权利要求1-12任一项所述的面向神经网络模型计算的图执行方法。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210183223.0A CN114237918B (zh) | 2022-02-28 | 2022-02-28 | 一种面向神经网络模型计算的图执行方法和装置 |
US17/706,734 US11941514B2 (en) | 2022-02-28 | 2022-03-29 | Method for execution of computational graph in neural network model and apparatus thereof |
PCT/CN2022/086575 WO2023082542A1 (zh) | 2022-02-28 | 2022-04-13 | 一种面向神经网络模型计算的图执行方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210183223.0A CN114237918B (zh) | 2022-02-28 | 2022-02-28 | 一种面向神经网络模型计算的图执行方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114237918A true CN114237918A (zh) | 2022-03-25 |
CN114237918B CN114237918B (zh) | 2022-05-27 |
Family
ID=80748331
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210183223.0A Active CN114237918B (zh) | 2022-02-28 | 2022-02-28 | 一种面向神经网络模型计算的图执行方法和装置 |
Country Status (3)
Country | Link |
---|---|
US (1) | US11941514B2 (zh) |
CN (1) | CN114237918B (zh) |
WO (1) | WO2023082542A1 (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114548383A (zh) * | 2022-04-27 | 2022-05-27 | 之江实验室 | 一种面向神经网络模型计算的图执行流水并行方法和装置 |
WO2023082542A1 (zh) * | 2022-02-28 | 2023-05-19 | 之江实验室 | 一种面向神经网络模型计算的图执行方法和装置 |
CN116167461A (zh) * | 2023-04-21 | 2023-05-26 | 之江实验室 | 一种模型训练的方法、装置、存储介质及电子设备 |
CN117472591A (zh) * | 2023-12-27 | 2024-01-30 | 北京壁仞科技开发有限公司 | 用于数据计算的方法、电子设备和存储介质 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109669772A (zh) * | 2018-12-28 | 2019-04-23 | 第四范式(北京)技术有限公司 | 计算图的并行执行方法和设备 |
CN110378479A (zh) * | 2019-06-11 | 2019-10-25 | 平安科技(深圳)有限公司 | 基于深度学习的图片输入方法、装置及终端设备 |
CN111562977A (zh) * | 2019-02-14 | 2020-08-21 | 上海寒武纪信息科技有限公司 | 神经网络模型拆分方法、装置、存储介质和计算机系统 |
CN112085166A (zh) * | 2020-09-10 | 2020-12-15 | 江苏提米智能科技有限公司 | 一种卷积神经网络模型加速训练方法、装置、电子设备及存储介质 |
CN112465108A (zh) * | 2020-11-11 | 2021-03-09 | 上海交通大学 | 一种面向存算一体平台的神经网络编译方法 |
CN112529169A (zh) * | 2019-09-18 | 2021-03-19 | 华为技术有限公司 | 数据处理方法、模型优化装置和模型执行装置 |
CN112767230A (zh) * | 2021-02-26 | 2021-05-07 | 清华大学 | Gpu图神经网络优化方法及装置 |
US20210311994A1 (en) * | 2017-01-19 | 2021-10-07 | Google Llc | Dynamic-length stateful tensor array |
CN113918351A (zh) * | 2021-12-08 | 2022-01-11 | 之江实验室 | 深度学习框架与ai加速卡片内分布式训练适配方法和装置 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10402223B1 (en) | 2017-04-26 | 2019-09-03 | Xilinx, Inc. | Scheduling hardware resources for offloading functions in a heterogeneous computing system |
WO2019191578A1 (en) * | 2018-03-30 | 2019-10-03 | Wave Computing, Inc. | Data flow graph computation for machine learning |
CN109815162A (zh) | 2019-01-28 | 2019-05-28 | Oppo广东移动通信有限公司 | 内存管理方法、装置、移动终端及存储介质 |
CN110347636B (zh) | 2019-07-15 | 2024-04-30 | 北京一流科技有限公司 | 数据执行体及其数据处理方法 |
CN112766470B (zh) | 2019-10-21 | 2024-05-07 | 地平线(上海)人工智能技术有限公司 | 特征数据处理方法、指令序列生成方法、装置及设备 |
CN111488221B (zh) | 2020-06-29 | 2020-10-09 | 北京一流科技有限公司 | 静态网络中的内存空间预配系统及其方法 |
CN112200297B (zh) * | 2020-09-04 | 2024-03-01 | 星宸科技股份有限公司 | 神经网络优化方法、装置及处理器 |
CN114237918B (zh) | 2022-02-28 | 2022-05-27 | 之江实验室 | 一种面向神经网络模型计算的图执行方法和装置 |
-
2022
- 2022-02-28 CN CN202210183223.0A patent/CN114237918B/zh active Active
- 2022-03-29 US US17/706,734 patent/US11941514B2/en active Active
- 2022-04-13 WO PCT/CN2022/086575 patent/WO2023082542A1/zh unknown
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20210311994A1 (en) * | 2017-01-19 | 2021-10-07 | Google Llc | Dynamic-length stateful tensor array |
CN109669772A (zh) * | 2018-12-28 | 2019-04-23 | 第四范式(北京)技术有限公司 | 计算图的并行执行方法和设备 |
CN111562977A (zh) * | 2019-02-14 | 2020-08-21 | 上海寒武纪信息科技有限公司 | 神经网络模型拆分方法、装置、存储介质和计算机系统 |
CN110378479A (zh) * | 2019-06-11 | 2019-10-25 | 平安科技(深圳)有限公司 | 基于深度学习的图片输入方法、装置及终端设备 |
CN112529169A (zh) * | 2019-09-18 | 2021-03-19 | 华为技术有限公司 | 数据处理方法、模型优化装置和模型执行装置 |
CN112085166A (zh) * | 2020-09-10 | 2020-12-15 | 江苏提米智能科技有限公司 | 一种卷积神经网络模型加速训练方法、装置、电子设备及存储介质 |
CN112465108A (zh) * | 2020-11-11 | 2021-03-09 | 上海交通大学 | 一种面向存算一体平台的神经网络编译方法 |
CN112767230A (zh) * | 2021-02-26 | 2021-05-07 | 清华大学 | Gpu图神经网络优化方法及装置 |
CN113918351A (zh) * | 2021-12-08 | 2022-01-11 | 之江实验室 | 深度学习框架与ai加速卡片内分布式训练适配方法和装置 |
Non-Patent Citations (4)
Title |
---|
MD. KHALEDUR RAHMAN; MAJEDUL HAQUE SUJON; ARIFUL AZAD: "FusedMM: A Unified SDDMM-SpMM Kernel for Graph Embedding and Graph Neural Networks", 《IEEE XPLORE》 * |
MD. KHALEDUR RAHMAN; MAJEDUL HAQUE SUJON; ARIFUL AZAD: "FusedMM: A Unified SDDMM-SpMM Kernel for Graph Embedding and Graph Neural Networks", 《IEEE XPLORE》, 28 June 2021 (2021-06-28) * |
张晗,钱育蓉,侯海耀: "CUDA下地质图像边缘检测算法并行优化", 《计算机工程与设计》 * |
张晗,钱育蓉,侯海耀: "CUDA下地质图像边缘检测算法并行优化", 《计算机工程与设计》, vol. 40, no. 3, 31 March 2019 (2019-03-31) * |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023082542A1 (zh) * | 2022-02-28 | 2023-05-19 | 之江实验室 | 一种面向神经网络模型计算的图执行方法和装置 |
US11941514B2 (en) | 2022-02-28 | 2024-03-26 | Zhejiang Lab | Method for execution of computational graph in neural network model and apparatus thereof |
CN114548383A (zh) * | 2022-04-27 | 2022-05-27 | 之江实验室 | 一种面向神经网络模型计算的图执行流水并行方法和装置 |
WO2023082575A1 (zh) * | 2022-04-27 | 2023-05-19 | 之江实验室 | 一种面向神经网络模型计算的图执行流水并行方法和装置 |
CN116167461A (zh) * | 2023-04-21 | 2023-05-26 | 之江实验室 | 一种模型训练的方法、装置、存储介质及电子设备 |
CN116167461B (zh) * | 2023-04-21 | 2023-07-11 | 之江实验室 | 一种模型训练的方法、装置、存储介质及电子设备 |
CN117472591A (zh) * | 2023-12-27 | 2024-01-30 | 北京壁仞科技开发有限公司 | 用于数据计算的方法、电子设备和存储介质 |
CN117472591B (zh) * | 2023-12-27 | 2024-03-22 | 北京壁仞科技开发有限公司 | 用于数据计算的方法、电子设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
US11941514B2 (en) | 2024-03-26 |
WO2023082542A1 (zh) | 2023-05-19 |
CN114237918B (zh) | 2022-05-27 |
US20230274129A1 (en) | 2023-08-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN114237918B (zh) | 一种面向神经网络模型计算的图执行方法和装置 | |
CN110363294B (zh) | 利用网络中的路径来表示神经网络以提高神经网络的性能 | |
CN114186687B (zh) | 一种面向神经网络模型计算的中间表示方法和装置 | |
CN111143174B (zh) | 在共享功率/热约束下操作的硬件的最佳操作点估计器 | |
US20200042856A1 (en) | Scheduler for mapping neural networks onto an array of neural cores in an inference processing unit | |
US11205125B2 (en) | Scheduler and simulator for an area-efficient, reconfigurable, energy-efficient, speed-efficient neural network | |
US20230236888A1 (en) | Memory allocation method, related device, and computer-readable storage medium | |
JP2020518042A (ja) | 処理装置と処理方法 | |
CN114741207B (zh) | 一种基于多维度组合并行的gpu资源调度方法和系统 | |
CN104714785A (zh) | 任务调度装置、方法及并行处理数据的设备 | |
CN112381220B (zh) | 一种神经网络张量处理器 | |
CN108628597B (zh) | 一种机器视觉系统开发方法及装置 | |
WO2023082575A1 (zh) | 一种面向神经网络模型计算的图执行流水并行方法和装置 | |
CN102708009B (zh) | 一种基于cuda实现多任务共享gpu的方法 | |
CN111445003A (zh) | 神经网络生成器 | |
CN110333946A (zh) | 一种基于人工智能cpu数据处理系统及方法 | |
Tagliavini et al. | Adrenaline: An openvx environment to optimize embedded vision applications on many-core accelerators | |
CN112783554A (zh) | 用于程序间数据交换的持久便签内存 | |
CN111831582B (zh) | 用于智能处理器的内存管理装置、方法及电子设备 | |
Amamiya et al. | Datarol: A massively parallel architecture for functional languages | |
US11275661B1 (en) | Test generation of a distributed system | |
CN112200305A (zh) | 一种神经网络加速协处理器、处理系统及处理方法 | |
CN103793208A (zh) | 矢量dsp 处理器和协处理器协同运作的数据处理系统 | |
CN112486807A (zh) | 一种压力测试方法、装置、电子设备和可读存储介质 | |
US20220129755A1 (en) | Incorporating a ternary matrix into a neural network |
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 |