[发明专利]一种神经网络的内存分配方法有效
申请号: | 202010618681.3 | 申请日: | 2020-06-30 |
公开(公告)号: | CN111814971B | 公开(公告)日: | 2022-08-05 |
发明(设计)人: | 郑迪;任俊林;刘祥有;凌云 | 申请(专利权)人: | 杭州国芯科技股份有限公司 |
主分类号: | G06N3/063 | 分类号: | G06N3/063;G06F9/50;G06F12/02 |
代理公司: | 杭州君度专利代理事务所(特殊普通合伙) 33240 | 代理人: | 杨舟涛 |
地址: | 310012 浙江省杭州市文*** | 国省代码: | 浙江;33 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 神经网络 内存 分配 方法 | ||
本发明公开了一种神经网络的内存分配方法。传统的动态内存分配方法存有较大浪费,而手动分配内存方法需要花费较多人工时间。本发明方法首先获取计算图中的计算单元,并按计算顺序对每个计算单元依次编号;然后获取模型中所有计算单元的内存可重用张量的计算编号集合;确定内存可重用张量的最终内存分配方式,并获取模型所需可重用内存的总大小和每个内存可重用张量的分配出来的内存地址。本发明方法可以有效减少神经网络模型申请和释放内存时产生的内存碎片,降低神经网络模型所需的总内存大小,可以方便地在实际工程中使用。
技术领域
本发明属于计算机技术领域,尤其是人工智能技术领域,具体涉及一种神经网络的内存分配方法。
背景技术
人工智能这几年来迅猛发展,而深度学习和神经网络正是人工智能发展的基础。由于神经网络往往层数较多且张量大小较大,会消耗较多内存。并且,近年来把神经网络部署到嵌入式设备上的需求越来越强烈。因此对内存分配的优化至关重要。
一种内存优化的方法是采用传统的动态内存分配方法,如C语言标准库中malloc函数的内存分配。但这种动态分配方法未从更全局的角度去分配内存,容易产生较多的内存碎片,导致实际分配的内存有较多浪费。
另一种内存优化的方法是采用手动分配内存,由软件工程师手动分配每个操作单元的内存地址。这种方式可以较好地提高内存使用率,但是会花费很多人工时间,不适合在实际工程中使用。
发明内容
本发明的目的就是提供了一种神经网络的内存分配方法,可以有效地减少内存分配和释放过程中产生的内存碎片,从而降低神经网络模型运行时所需的内存大小。
本发明方法包括如下步骤:
S1.获取计算图中的计算单元,并按计算顺序对每个计算单元依次编号;
S2.获取模型中所有计算单元的内存可重用张量的计算编号集合;
S3.确定内存可重用张量的最终内存分配方式;
S4.获取模型所需可重用内存的总大小和每个内存可重用张量的分配出来的内存地址。
进一步,步骤S1具体是:
S11.遍历神经网络计算图,去除输入张量和输出张量在内存中数据存储完全一致的操作单元,得到实际需要计算的计算单元;
S12.对所有的计算单元的按照计算顺序进行排序,使前面计算单元的输入张量不依赖于后面计算单元的输出张量;
S13.按排序后的计算单元依次编号,K个计算单元的编号依次为1,2,…,K。
进一步,步骤S2具体是:
S21.确定模型中的内存可重用张量:
模型中的张量包括模型输入张量、模型输出张量、模型权重张量、模型数据张量;其中,模型输入张量和模型数据张量的内存可重复使用,即为内存可重用张量;
S22.确定计算单元的内存可重用张量:
每个计算单元的张量包括单元输入张量和单元输出张量;对于计算单元,单元输入张量可能为模型输入张量、模型权重张量或模型数据张量,单元输出张量可能为模型输出张量或模型数据张量;
如果单元输入张量为模型输入张量或模型数据张量,则该单元输入张量为计算单元的内存可重用张量;
如果单元输出张量为模型数据张量,则该单元输出张量为计算单元的内存可重用张量;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于杭州国芯科技股份有限公司,未经杭州国芯科技股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202010618681.3/2.html,转载请声明来源钻瓜专利网。