源碼
# Divide the mini-batch to different GPUs.
batch_size = 32
accum_batch_size = 32
iter_size = accum_batch_size / batch_size
solver_mode = P.Solver.CPU
device_id = 0
batch_size_per_device = batch_size
if num_gpus > 0:
batch_size_per_device = int(math.ceil(float(batch_size) / num_gpus))
iter_size = int(math.ceil(float(accum_batch_size) / (batch_size_per_device * num_gpus)))
solver_mode = P.Solver.GPU
device_id = int(gpulist[0])
說明
- batch_size:每次進(jìn)入網(wǎng)絡(luò)的圖片數(shù)
- iter_size:迭代一次需要將進(jìn)入網(wǎng)絡(luò)的圖片跑多少次
- accum_batch_size:batch_size和iter_size的乘積
在運(yùn)算資源有限的情況下免钻,可以通過改變batch_size和iter_size降低計算資源。要注意的一點(diǎn)是在使用多張顯卡跑網(wǎng)絡(luò)的時候,每張顯卡都是并行運(yùn)行的,還是一個batch_size的圖片輸入培漏,所以并不會使緩存降下來修陡,但它在理論上是可以將運(yùn)行的時間成顯卡數(shù)量的倍數(shù)縮短。
示例
舉例來說爸邢,在ssd_pascal.py中官硝,每次進(jìn)入網(wǎng)絡(luò)的圖片為32張诅挑,然后每次迭代只要跑一次這32張圖片四敞。然而我們在實(shí)際的操作中用一張NV TITAN會out of memory,所以我們將batch_size改為4拔妥,iter_size改成4,相當(dāng)于每次進(jìn)入網(wǎng)絡(luò)4張圖片达箍,迭代一次需要將這4張圖片跑4次没龙,所以在原來的配置中跑完這個網(wǎng)絡(luò)總共需要迭代120000次,而為了達(dá)到這個效果我們需要增加到240000次缎玫。雖說這樣理論上可以達(dá)到同樣的效果硬纤,但是實(shí)際中還是會有細(xì)小的差別≡吣ィ總而言之筝家,顯卡資源有限真!滴邻辉!傷溪王!