概念
不随版本变化
批量与队列:花显存的做法与不花显存的做法
同样是一次跑多张,批量吃显存、队列不吃。混着用就得排查两遍。
「一次跑多张」有两种做法,代价完全不同,先分清自己用的是哪种,再谈调参。
两个不同的东西
| 做法 | 怎么运作 | 显存 | 适合 |
|---|---|---|---|
| 批量张数 | 同一批一起算,中间数据同时在显存里 | 随张数增长 | 同一组参数下比较多个种子的变化 |
| 队列 | 一张算完再算下一张 | 基本不变 | 一次跑很多张、或者要跑很久 |
批量为什么吃显存
批量是把多张的中间数据同时放在显存里,张数翻倍,占用大致也翻倍。这就是为什么把批量从 4 改成 1,常常立刻就不报显存不足:不是问题消失了,是你把同时驻留的数据从 4 份减到 1 份。
常见误解
- 以为批量越大出图越快
批量确实能摊薄每个模型的加载开销,但它同时把峰值占用抬上去。卡在显存上限时,批量开大反而更慢,因为要反复在显存与内存之间倒腾。 - 把队列当批量用
队列是一张一张算,前后两张之间模型不用重新加载,这是它的好处;但它不会让单张更快,也不会让你在一批里做参数对比。
队列的价值
- 可以把页面关掉去干别的,回来收结果
- 单张失败不会带崩整批
- 适合「参数定了,只换输入」的场景
- 要跑很久的任务(视频、放大),队列比批量更稳
知仓学习社