主要观点总结
本文主要介绍了神经网络模型的内存占用分析,包括模型参数内存、激活内存、数据存储内存等部分,并以征程6模型为例,说明了模型推理过程中的内存占用及监控方法。
关键观点总结
关键观点1: 神经网络模型的内存占用主要包括模型参数内存、激活内存和数据存储内存。
模型参数内存是指神经网络的权重和偏置等参数所占用的内存;激活内存是指网络各层的中间结果所占用的内存;数据存储内存则包括输入数据和输出数据所占用的内存。
关键观点2: 征程6模型推理过程中的内存占用主要来自于input tensor memory、output tensor memory和model memory。
其中,model memory主要是模型文件的大小以及运行时指令运行时所需的内存,可以等效理解为模型参数内存和激活内存。此外,模型加载过程中会有额外的内存用于模型的解析,该申请的内存在初始化完成后会释放。
关键观点3: 使用OpenExplorer中的hrt_ucp_monitor工具可以监控内存信息。
该工具可以默认开启所有硬件IP监控,以交互模式运行,并且可以修改默认参数来适应不同的需求。在模型推理时,主要关注的是carveout的内存使用情况,可以通过查看系统文件来得知对应进程的内存占用情况。
文章预览
01 内存占用 神经网络模型常见的内存占用可以分为以下几个部分: 1.1 模型参数内存 定义: 神经网络的权重和偏置等参数会占用内存。 计算方法: 参数总量 = 各层参数数量的总和。 每个参数的大小取决于数据类型(如 float32 为 4 字节,float16 为 2 字节,int8 为 1 字节)。 公式: 参数内存=参数总数×每个参数的字节数。 示例: 一个全连接层 输入维度=1024,输出维度=512,数据类型为 float32,则:参数量=1024×512+512 (偏置项)=524,800
参数内存:524,800×4 Bytes≈2.1 MB。 1.2 激活内存 定义: 网络各层的中间结果(激活)占用内存。 计算方法: 激活值总量 = 每层输出的维度之和。 数据类型通常与模型参数一致(如 float32)。 公式: 激活内存=每层激活值数量×每个激活值的字节数。 示例(卷积层): 输入特征图大小为 64×64(宽 × 高),通道数为 128
………………………………