batchsize 与worker

假如我有1 块 显卡
worker 的数量就是开启的使用CPU 加载数据的线程数,每个worker都会加载 batchsize个图片,然后等待进程来取。进程取完worker0的数据,worker0就开始重新读取数据,然后进程开始运算woker0的数据。运算完之后再去worker1去取,循环往复。 所以每次进入 显卡的 都是batchsize个数据。所以爆不爆显存(cuda out of memory)看的是batchsize。而 worker越大,batchsize越大,就会使得加载的数据占用的内存越大,所以爆不爆内存(Dataloader 的报错)看这两个参数,所以如果使用docker ,在创建容器时 会有一个共享内存参数需要设置一下 ,例如–shm-size=“1g” 。
如果是2块显卡。
下面是我猜的,每个worker还是加载batchsize个数据,但是两个进程来取数据的时候,就把一个batch分成两半,一个进程一半,所以此时每个显卡的显存都会比单个显卡的时候少一半。那么想充分利用显卡,就可以把batch扩大一倍,batch扩大一倍之后显存利用提高,但是worker加载数据速度会变慢,为了使显卡来取数据的时候,不需要等待worker加载数据,就可以增加worker的数量(比如扩大一倍)。 而 worker变大了,batch也变大了,所需要的内存也要更大,如果batch和worker都扩大一倍,那么需要分配的内存是原来的四倍左右。
如果显卡本来就没有在等worker,那么是不是不需要增加worker数量呢? 因为虽然worker加载数据更慢了,但是给显卡的数据也更多了,所以显卡会不会也耗费更多的时间处理数据,而多耗费的时间正好让worker去加载数据? 这个我没验证过。
我之前训练看到内存用了3个G多,都扩大一倍之后发现使用了13个G ,幸好我当时创建容器的时候分配了15个G ,刚开始还觉得大材小用了,现在觉得还好。
然后因为是使用CPU 去加载数据,所以CPU 的利用率自然很高,有时候会达到2400% 之类的,应该是有24个核 使用了100%的意思吧?我猜的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值