目錄一直很迷,
在給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等。如果想檢驗某檢測模型對於場景文字的檢測效能,可以先使用場景文字的標準資料集訓練,將結果與 中的結果進行比較。由於資料集的大小不一...