1
ShadowPower 2023-05-24 18:54:09 +08:00 1
用 fp16 也是混合精度
Ampere 架构才支持 bf16 ,更早的显卡硬件不支持,跑的时候实际上转回 fp32 ,更慢了 Turing 架构有 Tensor Core ,可以跑 fp16 和 int8 ,相比 fp32 还快很多 |
2
buaacss OP @ShadowPower 我使用的是 2080ti ,是 Turing 架构的。从我目前的测试上看,使用 fp16 会溢出,使用 bf16 按您的说法是会转回 fp32 ,会更慢。但是我确实看到加速了不少而且显存也下降了。
使用单精度,我 bs 最多只能设置到 8 ,需要大约 32 个小时训练 使用 bf16 ,我 bs 可以设置到 16 ,需要大约 16 个小时完成训练 使用 fp16 ,会直接溢出 |
3
ShadowPower 2023-05-24 19:48:18 +08:00
@buaacss 也许是因为权重数据尺寸小了,有显存带宽方面的优势。
bf16 和 fp32 类型转换还挺简单的。bf16 只是 fp32 上截断了低位,估计对性能的影响很小。 |
4
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 每个版本都有点不一样)有关,这里面就不详细说了。细节实在太多 |