图解 · 运行过程 · 工程取舍
数据搬到GPU,改变的是位置而不是含义
“装得下”和“算得快”为什么不是同一回事?
配套正文:F06基础课
动态图解 · F06
数据搬到GPU,改变的是位置而不是含义
“装得下”和“算得快”为什么不是同一回事?
CPU与GPU可先理解成不同的计算场地。数据必须到达实际执行算子的设备,才能参与运算;搬过去并不自动变聪明。数据类型决定每个数怎样存、可表示范围和精度,不能只看“数字还是原来那个数字”。
字节内存占用的计量单位。
精度数值表示的细致程度;低精度会有舍入。
带宽每秒最多能搬多少数据。
输入与适用条件:只计算B=2、T=3、d=4的一份编号/特征张量,不计算模型总内存、驱动开销和GPU实测速度。
1 / 4 · 先数对象
第1步,共4步
窄屏可左右滑动图形,或点击“放大图形”。文字解释紧随图后。
编号表与特征表不是同一种数据:这里6个整数编号、24个浮点特征。
本步状态由图形与说明共同给出。6×8=48;24×4=96
默认静止。用“下一步”看完解释再继续;播放到最后一步自动停止。键盘聚焦播放器后,可用左右键逐步查看、空格播放/暂停。图中颜色辅助区分,含义同时用文字注明。
逐步说明与计算记录
以下解释全部展开,与播放器使用同一份数据;不是另换输入的第二个算例。
1.先数对象
编号表与特征表不是同一种数据:这里6个整数编号、24个浮点特征。
6×8=48;24×4=96
2.再指定每数几字节
教学约定编号int64每数8字节;特征float32每数4字节。分别是48和96字节。
6×8=48;24×4=96
3.只改特征精度
把24个特征改成每数2字节,其存储变成48字节;ID仍用原来的48字节。
24×2=48;只计这一份张量
4.计算还有别的内存
模型参数、临时激活和KV缓存都另外占空间。不要用这份96字节特征表代替整个模型的内存账。
24×2=48;只计这一份张量
为什么需要
当速度被搬运限制时,继续加计算核心可能收益很小。
怎样实现
分开数参数、激活、缓存和传输;再测算子与数据传输耗时。
可能的代价与误解
低精度不保证所有算子更快;异步GPU未同步时的计时还会低估真实耗时。
如何判断是否做对
核对字节数、数据类型、设备位置,并用正确的同步方式测量。