CUDA-MODE课程笔记 第6课: 如何优化PyTorch中的优化器

我的课程笔记,欢迎关注:https://github.com/BBuf/how-to-optim-algorithm-in-cuda/tree/master/cuda-mode

CUDA-MODE课程笔记 第6课: 如何优化PyTorch中的优化器

课程内容

上面三张Slides讲述了运行时间(runtime)和内存使用(memory usage)之间的权衡关系。

第一张Slides:

  • 介绍了运行时间和内存使用通常是相互矛盾的。
  • 展示了两种运输车辆:一辆小卡车(代表低内存使用但速度慢)和一辆大卡车(代表高内存使用但速度快)。
  • 提出了一个问题:如果要运送512辆车,应该选择哪种卡车?

第二张Slides:

  • 在第一张图的基础上增加了一个新的限制条件:途中有一座低通桥。
  • 这代表了在某些情况下,我们可能无法简单地选择高内存使用的方案(大卡车),因为存在硬件或系统限制。

第三张Slides:

  • 明确表示"今天我们专注于速度!"
  • 显示了小卡车被划掉,表明选择了大卡车(高内存使用但速度快的方案)。
  • 同时提醒"这确实意味着内存会受到影响,免责声明"。

这张Slides展示了一个naive的优化器实现,核心要点是假设有M个参数,对于每个参数有N个操作,那么遍历所有参数并处理完共需要M * N个操作。

这张Slides介绍了一种称为"horizontally fused optimizer"(水平融合优化器)的优化方法,可以把naive的优化器实现中的for循环fuse掉。

这张Slides介绍了实际上我们可以把整个优化器的操作fuse成一个cuda kernel。

这张Slides传达的核心信息是:在CUDA编程中,通过减少kernel启动的次数可以提高程序的执行效率。这是因为每次启动CUDAkernel都会有一定的开销,如果能够将多个操作合并到更少的kernel中,就可以减少这些开销,从而提高整体性能。水平融合和垂直融合是实现这一目标的两种主要策略:水平融合合并了相似的并行操作;垂直融合则进一步合并了不同的计算步骤。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值