transformers 混合精度一定需要 Ampere 架构的 gpu 吗?

2023-05-24 18:50:30 +08:00
 buaacss
看 transformers 的源码,判断能否使用 bf16 混合精度的时候需要 Ampere 架构的 GPU ,不太明白是为什么。

改了下代码试试 2080ti 能不能跑出来,如果可以的话再给大家汇报。

如果有人知道是什么原因以及效果如何也请留言告知,不胜感激。
2009 次点击
所在节点    程序员
5 条回复
ShadowPower
2023-05-24 18:54:09 +08:00
用 fp16 也是混合精度
Ampere 架构才支持 bf16 ,更早的显卡硬件不支持,跑的时候实际上转回 fp32 ,更慢了
Turing 架构有 Tensor Core ,可以跑 fp16 和 int8 ,相比 fp32 还快很多
buaacss
2023-05-24 19:01:24 +08:00
@ShadowPower 我使用的是 2080ti ,是 Turing 架构的。从我目前的测试上看,使用 fp16 会溢出,使用 bf16 按您的说法是会转回 fp32 ,会更慢。但是我确实看到加速了不少而且显存也下降了。

使用单精度,我 bs 最多只能设置到 8 ,需要大约 32 个小时训练
使用 bf16 ,我 bs 可以设置到 16 ,需要大约 16 个小时完成训练
使用 fp16 ,会直接溢出
ShadowPower
2023-05-24 19:48:18 +08:00
@buaacss 也许是因为权重数据尺寸小了,有显存带宽方面的优势。
bf16 和 fp32 类型转换还挺简单的。bf16 只是 fp32 上截断了低位,估计对性能的影响很小。
nethard
2023-05-25 00:43:17 +08:00
turing 架构不支持 bf16 ,ampere 才支持的,到现在很多 op 比如 interpolate 对 bf16 都还不支持

turing 和 ampere 都有 tensor core 但是 turing 的 tensor core 只支持 fp16 ,ampere 的支持 bf16 ,fp16 还有 tf32 ,但是 bf16 的 tensor core 其实速度和 tf16 差不多,当然 memory bandwidth 压力会小很多,另外就是对 pytoch 来说,bf16 ,tf32 到底怎么 dispatch 还和 cudnn 、pytoch 版本( 1.11 、1.12 、1.13 每个版本都有点不一样)有关,这里面就不详细说了。细节实在太多
nethard
2023-05-25 00:44:15 +08:00
@nethard 上面 tf16 是写错了笔误是 tf32

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/942664

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX