V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
buaacss
V2EX  ›  程序员

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

  •  
  •   buaacss ·
    roodkcab · 309 天前 · 1500 次点击
    这是一个创建于 309 天前的主题,其中的信息可能已经有所发展或是发生改变。
    看 transformers 的源码,判断能否使用 bf16 混合精度的时候需要 Ampere 架构的 GPU ,不太明白是为什么。

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

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

    使用单精度,我 bs 最多只能设置到 8 ,需要大约 32 个小时训练
    使用 bf16 ,我 bs 可以设置到 16 ,需要大约 16 个小时完成训练
    使用 fp16 ,会直接溢出
    ShadowPower
        3
    ShadowPower  
       309 天前
    @buaacss 也许是因为权重数据尺寸小了,有显存带宽方面的优势。
    bf16 和 fp32 类型转换还挺简单的。bf16 只是 fp32 上截断了低位,估计对性能的影响很小。
    nethard
        4
    nethard  
       309 天前
    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
        5
    nethard  
       309 天前
    @nethard 上面 tf16 是写错了笔误是 tf32
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5400 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 06:58 · PVG 14:58 · LAX 23:58 · JFK 02:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.