深度學習 訓練吃顯示卡 在深度學習中餵飽GPU

2021-10-12 13:35:31 字數 1359 閱讀 9314

新智元推薦

前段時間訓練了不少模型,發現並不是大力出奇蹟,顯示卡越多越好,有時候 1 張 v100 和 2 張 v100 可能沒有什麼區別,後來發現瓶頸在其他地方,寫篇文章來總結一下自己用過的一些小 trick,最後的效果就是在 cifar 上面跑 vgg 的時間從一天縮到了乙個小時,imagenet 上跑 mobilenet 模型只需要 2 分鐘每個 epoch。(文章末尾有**啦)

先說下跑 cifar 的時候,如果只是用 torchvision 的 dataloader (用最常見的 padding/crop/flip 做資料增強) 會很慢,大概速度是下面這種,600 個 epoch 差不多要一天多才能跑完,並且速度時快時慢很不穩定。

我最初以為是 io 的原因,於是掛載了一塊記憶體盤,改了一下路徑接著用 torchvision 的 dataloader 來跑,速度基本沒啥變化。。。

然後開啟資源使用率看了下發現 cpu 使用率幾乎已經滿了(只能申請 2cpu 和一張 v100...),但是 gpu 的使用率非常低,這基本可以確定瓶頸是在 cpu 的處理速度上了。

後來查了一些資料發現 nvidia 有乙個庫叫 dali 可以用 gpu 來做影象的前處理,從輸入,解碼到 transform 的一整套 pipeline,看了下常見的操作比如 pad/crop 之類的還挺全的,並且支援 pytorch/caffe/mxnet 等各種框架。

可惜在官方文件中沒找到 cifar 的 pipeline,於是自己照著 imagenet 的版本寫了個,最初踩了一些坑(為了省事找了個 cifar 的 jpeg 版本來解碼,發現精度掉得很多還找不到原因,還得從 cifar 的二進位制檔案來讀取),最後總歸是達到了同樣的精度,再來看一看速度和資源使用率,總時間直接從一天縮短為一小時,並且 gpu 使用率高了很多。

再說下 imagenet 的訓練加速,最初也是把整個資料集拷到了掛載的記憶體盤裡面(160g 大概夠用了,從拷貝到解壓完成大概 10 分鐘不到),發現同樣用 torchvision 的 dataloader 訓練很不穩定,於是直接照搬了 dali 官方的 dataloader 過來,速度也是同樣起飛 hhhh(找不到當時訓練的了),然後再配合 apex 的混合精度和分布式訓練,申請 4 塊 v100,gpu 使用率可以穩定在 95 以上,8 塊 v100 可以穩定在 90 以上,最後直接上到 16 張 v100 和 32cpu,大概也能穩定在 85 左右(看資源使用率發現 cpu 到頂了,不然估計 gpu 也能到 95 以上),16 塊 v100 在 imagenet 上跑 mobilenet 只需要 2 分鐘每個 epoch。

寫的 dataloader 放到了 github 上,我測試的精度跟 torchvision 的版本差不多,不過速度上會比 torchvision 快很多,後面有空也會寫一些其他常用 dataloader 的 dali 版本放上去。

深度學習 訓練吃顯示卡 學習深度學習,如何選購顯示卡?

學習深度學習,顯示卡 gpu 可以說是比不可少的投資。本文試圖 哪個gpu才是學習入門價效比最高的?為什麼深度學習需要gpu?我們先來比較一下cpu和gpu的不同,下圖是乙個簡化的處理器內部結構圖dram即動態隨機訪問儲存器,是常見的系統記憶體。cache儲存器 電腦中作高速緩衝儲存器,是位於cpu...

深度學習雙顯示卡配置 學習深度學習,如何選購顯示卡?

學習深度學習,顯示卡 gpu 可以說是比不可少的投資。本文試圖 哪個gpu才是學習入門價效比最高的?我們先來比較一下cpu和gpu的不同,下圖是乙個簡化的處理器內部結構圖 1 其中 我們可以很明顯地看出,gpu擁有更多alu,能夠進行強大的計算。cpu是乙個有多種功能的優秀領導者,優點在於排程 管理...

深度學習 如何訓練網路

目的 快速 有效地擬合。手段 隨機批處理 學習率 批規範化 模型優化演算法 遷移學習。隨機批處理,mini batch,一種在模型每輪 epoch 訓練進行前將訓練資料集隨機打亂 shuffle 的 訓練機制。可以防止被模型猜到 出樣本順序 作用 防過擬合。學習率,learning rate,控制模...