pytorch中的worker如何工作的

2021-10-10 20:44:02 字數 1324 閱讀 3533

一直很迷,

在給dataloader設定worker數量(num_worker)時,到底設定多少合適?這個worker到底怎麼工作的?

如果將num_worker設為0(也是預設值),就沒有worker了嗎?

worker的使用場景:

rom torch.utils.data import dataloader

train_loader = dataloader(dataset=train_data, batch_size=train_bs, shuffle=true, num_worker=4)

valid_loader = dataloader(dataset=valid_data, batch_size=valid_bs, num_worker=4)

每每輪到dataloader載入資料時:

for epoch in range(start_epoch, end_epoch):

for i, data in enumerate(trainloader):

dataloader一次性建立num_worker個worker,(也可以說dataloader一次性建立num_worker個工作程序,worker也是普通的工作程序),

並用batch_sampler將指定batch分配給指定worker,worker將它負責的batch載入進ram。

然後,dataloader從ram中找本輪迭代要用的batch,如果找到了,就使用。如果沒找到,就要num_worker個worker繼續載入batch到記憶體,直到dataloader在ram中找到目標batch。一般情況下都是能找到的,因為batch_sampler指定batch時當然優先指定本輪要用的batch。

num_worker設定得大,好處是尋batch速度快,因為下一輪迭代的batch很可能在上一輪/上上一輪...迭代時已經載入好了。壞處是記憶體開銷大,也加重了cpu負擔(worker載入資料到ram的程序是cpu複製的嘛)。num_workers的經驗設定值是自己電腦/伺服器的cpu核心數,如果cpu很強、ram也很充足,就可以設定得更大些。

如果num_worker設為0,意味著每一輪迭代時,dataloader不再有自主載入資料到ram這一步驟(因為沒有worker了),而是在ram中找batch,找不到時再載入相應的batch。缺點當然是速度更慢。

Q A pytorch中的worker如何工作的

目錄一直很迷,在給dataloader設定worker數量 num worker 時,到底設定多少合適?這個worker到底怎麼工作的?如果將num worker設為0 也是預設值 就沒有worker了嗎?worker的使用場景 from torch.utils.data import datalo...

Tensorflow訓練中Worker如何動態伸縮

tensorflow對於大部分演算法使用者來說能夠滿足使用需求 但是在日常使用過程中也發現有一些bug導致日常生產過程中的訓練異常中斷,影響使用 尤其是在離線集群進行大規模訓練時,集群網路負載大,機器環境惡劣,導致故障頻發,影響使用者體驗。因此對於tensorflow的穩定性改造,在大規模生產中是一...

關於celery的worker執行過程中卡住的問題

celery兩種解決方式 1.如果確認是因為當前worker的併發是prefork 多程序 並且可能是由於死鎖原因造成!那麼可以使用 celeryd force true 這樣可以有效防止死鎖。即使不是這個原因造成的,也盡量加上。注意 這種處理方式在4.0之後的版本不支援了,使用時需檢查版本,也可採...