環境變量
環境可以修改MXNet的一些設置。一般情況下,你不需要修改這些設置。本節將它們羅列出來,用於參考。
設置線程數目
- MXNET_GPU_WORKER_NTHREADS (默認值=2)
- 每個GPU上,進行計算的最大線程數
- MXNET_GPU_COPY_NTHREADS (默認值=1)
- 每個GPU上,內存複製的最大線程數
- MXNET_CPU_WORKER_NTHREADS (默認值=1)
- CPU上的計算任務的最大線程數
- MXNET_CPU_PRIORITY_NTHREADS (默認值=4)
- 優先的CPU任務的線程數
內存選項
- MXNET_EXEC_ENABLE_INPLACE (默認值=true)
- 在符號計算中,是否使用原地(計算)優化。
- MXNET_EXEC_MATCH_RANGE (默認值=10)
- 符號計算內存分配器中的粗略匹配規模
- 如果不想使用(圖的)節點間共享內存(用於調試時),可以將該環境變量設置爲0。
- MXNET_EXEC_NUM_TEMP (默認值=1)
- 每個設備上分配的臨時工作空間的最大數目
- 將它設置成比較小的數字,可以節省GPU內存。它也可能會降低並行度,但這通常是可接受的。
- MXNET_GPU_MEM_POOL_RESERVE (默認值=5)
- 分配給非GPU數組的GPU內存的比例,比如內核啓動器或cudnn句柄空間。
- 如果在迭代多次之後,看到一個來自內核啓動器的內存溢出錯誤,嘗試增大該環境變量的值。
Engine Type
- MXNET_ENGINE_TYPE (默認值=ThreadedEnginePerDevice)
- MXNet的實質執行引擎的類型。
- 可選值:
- NaiveEngine: 非常簡單的引擎,使用主線程來計算。
- ThreadedEngine: 使用全局線程池來調度作業。
- ThreadedEnginePerDevice: 每個GPU上分配線程。
控制數據通信
- MXNET_KVSTORE_REDUCTION_NTHREADS (默認值=4)
- 用於大數組求和的CPU線程數
- MXNET_KVSTORE_BIGARRAY_BOUND (默認值=1e6)
- 大數組的最小尺寸
- 當數組的容量大於該閾值時,將使用線程
MXNET_KVSTORE_REDUCTION_NTHREADS
進行規約。
- MXNET_ENABLE_GPU_P2P (默認值=1)
- 如果爲True,MXNet嘗試使用GPU的 peer-to-peer 通信(前提是P2P可用),當 kvstore 的類型是
device
時。
- 如果爲True,MXNet嘗試使用GPU的 peer-to-peer 通信(前提是P2P可用),當 kvstore 的類型是
Memonger
- MXNET_BACKWARD_DO_MIRROR (默認值=0)
- 在訓練過程中,是否執行
mirror
以節省設備存儲。 - 當設置成1時,在前向傳播過程中,圖計算器將會對一些層的特徵圖進行
mirror
操作,並拋棄它們;但當需要時,會重新計算這些拋棄的特徵圖。MXNET_BACKWARD_DO_MIRROR=1
時,將會節省 30%~50% 的設備內存,同時保持 95% 的運行速度。 - 在MXNet中,
mirror
的一個拓展叫做 memonger technology,它可以在保持75%運行速度的同時節省 O(sqrt(N)) 內存。
- 在訓練過程中,是否執行
其它環境變量
- MXNET_CUDNN_AUTOTUNE_DEFAULT (默認值=0)
- 用於卷積層的cudnn_tune的默認值。
- Auto tuning 默認是關閉的。For benchmarking, set this to 1 to turn it on by default.
設置最小內存使用
- 務必確保
min(MXNET_EXEC_NUM_TEMP, MXNET_GPU_WORKER_NTHREADS) = 1
- 默認設置滿足這個條件。
設置更多的GPU並行
- 將
MXNET_GPU_WORKER_NTHREADS
設置成一個較大的數(比如 2)- 爲了減少內存的使用,考慮設置
MXNET_EXEC_NUM_TEMP
- 爲了減少內存的使用,考慮設置
- 這可能不會加速,尤其是圖像任務。因爲GPU通常會被充分利用(甚至在序列化作業中)。