性能概念
性能在本文中,指机器(GPU、NPU或其他平台)在指定模型和输入数据的背景下,完成一次端到端训练所需要花费的时间,考虑到不同模型的训练数据量和训练轮次(epoch)差异,此处定义的性能是在完成一个batch训练所需花费的时间。而这里的端到端,我们通常是指完成一个人工智能模型单步训练的过程,也就是说,本文所讨论的性能的衡量和性能的优化,都是站在模型角度上。
对于一个batch而言,时间主要由以下部分构成:
单batch总时间 = 数据加载时间 + 模型前反向时间 + 优化器时间 + 模型后处理时间 + 通信时间 + 调度时间
各组成成分介绍如下:
- 数据加载时间:模型在加载自身所需要的数据(如图片、视频和文本等)的时间,包括将数据从硬件存储设备读取到CPU(Central Processing Unit)中、CPU中数据的预处理(编解码等操作)、CPU数据放到Device上的时间。对于一些需要切分在若干张卡上的模型,数据加载还包括从数据加载卡广播到其他卡上的时间。
- 模型前反向时间:深度学习模型的前向过程和反向过程的时间,即Forward和Backward过程,包含前向的数据计算和反向的数据微分求导的时间。
- 优化器时间:模型参数更新时间。
- 模型后处理时间:优化器更新后的时间,包括数据的后处理或者一些必要的同步操作,通常取决于模型特有操作。
- 通信时间:单节点时卡之间和多节点时节点之间的通信时间。由于PyTorch的特殊机制,在通信和计算可以并行的情况下,表示未被计算掩盖的通信时间。
- 调度时间:模型从CPU的指令到调用NPU侧的核(Kernel)所需要的时间。
父主题: 性能概述