作者kaltu (ka)
看板DataScience
標題[問題] 大型(高記憶體)網路訓練
時間Sat Nov 3 20:35:44 2018
作業系統:(ex:mac,win10,win8,win7,linux,etc...)
Ubuntu
問題類別:(ex:ML,SVM,RL,DL,RNN,CNN,NLP,BD,Vis,etc...)
CNN
使用工具:(ex:python,Java,C++,tensorflow,keras,MATLAB,etc...)
PyTorch
問題內容:
想問大家在train超大型網路時連一個batch都塞不進VRAM的狀況
有沒有什麼心得或技巧?
目前的狀況是想把cycleGAN改成3D的好用醫學影像來訓練
因為cycleGAN的cycle consistency對醫學應用來說非常有趣
但是cycleGAN本身的架構就是由4個中大型CNN組成
原作者公開的implementation 2D版本batch size=1的時候就會吃掉大約3GB的RAM
要換成3D的話trainable parameter直接暴增一個dimension
目前是用超小的patch size下去跑,不然的話…
只能指望用NVlink的Quadro GV100了
想到的蠢方法是用CPU跑
插八條32GB RAM就有256G了
但速度……
困擾了很久,好像也沒什麼討論度
是不是這問題太蠢了所以沒什麼人討論workaround呢
還是真的只能用錢堆了
-----
Sent from JPTT on my Asus ASUS_Z01KDA.
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 42.72.114.83
※ 文章網址: https://www.ptt.cc/bbs/DataScience/M.1541248547.A.51F.html
→ Mchord: 3D data還是做2D convolution的話,也只有第一層跟輸出層 11/03 22:02
→ Mchord: 參數量有影響 11/03 22:02
→ kaltu: 那這樣跟手動把3D volume切成stack of 2D slices然後直接用 11/03 23:59
→ kaltu: 原始的2D網路有差別嗎? 11/03 23:59
推 AmibaGelos: slice共用網路的話是類似 但這樣slice間沒有做conv哦 11/04 00:12
→ AmibaGelos: 好奇3d image有多大 128*128*128*64ch*4B就0.5G了orz 11/04 00:12
推 yiefaung: 有一種方法是forward完把前面drop掉 每backward一層重新 11/04 17:24
→ yiefaung: 算到那一層的forward 11/04 17:24
推 yiefaung: 但基本上就是用運算量跟時間換空間 11/04 17:26
推 michellehot: 把資料送給google用cloud tpu算吧 11/04 19:29
→ michellehot: 花點錢省時間省空間 11/04 19:30
→ michellehot: 另外感謝分享醫學影像的資訊 11/04 19:31