Q A pytorch中的worker如何工作的

2022-06-24 21:24:11 字數 1327 閱讀 2485

目錄一直很迷,

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

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

worker的使用場景:

from 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。缺點當然是速度更慢。

MFC的work執行緒

首先可以 在 vc中 新建乙個class 是以 cwinthread為 基類 class cproducerthread public cwinthread afx virtual implementation public void m parent protected generated mes...

RabbitMQ的使用(二)work模式

昨天通宵上線 白天睡了一天,下午7.00才醒,做個飯繼續學習。接著上文最普通的佇列乙個生產者推送,乙個消費者消費,如果乙個生產者有多個消費者那會是什麼樣呢。今天我用乙個for迴圈生產50個訊息來讓消費者消費 package com.hc.work import com.hc.mqutil.mquti...

如何判斷深度學習的網路是否work?

1.使用標準資料集進行訓練並測試 以場景文字檢測為例,公開的資料集有icdar2011,icdar2013,icdar2015,coco text,msra td500等。如果想檢驗某檢測模型對於場景文字的檢測效能,可以先使用場景文字的標準資料集訓練,將結果與 中的結果進行比較。由於資料集的大小不一...