其他分享
首页 > 其他分享> > nnunet(一)

nnunet(一)

作者:互联网

 

https://github.com/MIC-DKFZ/nnUNet/blob/master/documentation/common_problems_and_solutions.md

Introduction

  1. 推荐使用32G内存、6核12线程CPU、2080ti GPU、SSD存储数据

Benchmark Details

  1. 2d3d_fullres、3d_fullres_large。
  2. Task002_HeartTask005_Prostate 和Task003_Liver数据集能够较好的反应spectrum of dataset properties。
  3. nnUNetTrainerV2_5epochs做为trainer,不进行验证,值运行5个epochs,列出最快的时间做为epoch time
  4. nnUNetTrainerV2_5epochs_dummyLoad的trainer不载入数据,会自己模拟数据,绕过CPU(数据扩增)和I/O瓶颈。
  5. 所有训练都使用混合精度模型。

How to run the benchmark

  1. 找到预处理数据保存的文件夹和对应task的plans文件,如:/home/fabian/data/nnUNet_preprocessed/Task002_Heart
  2. 创建3d_fullres_large配置,注意这里需要GPUs显存在16G以上。
    from batchgenerators.utilities.file_and_folder_operations import *
    plans = load_pickle('nnUNetPlansv2.1_plans_3D.pkl')
    stage = max(plans['plans_per_stage'].keys())
    plans['plans_per_stage'][stage]['batch_size'] *= 3
    save_pickle(plans, 'nnUNetPlansv2.1_bs3x_plans_3D.pkl')
  3. 运行benchmarks,每条命令大概需要几分钟。可以在输出窗或者RESULTS_FOLDER对应的log日志文件中找到epoch time。trainers运行5个epochs,然后选择最快的那个座位benchmark time。
    nnUNet_train 2d nnUNetTrainerV2_5epochs TASKID 0
    nnUNet_train 3d_fullres nnUNetTrainerV2_5epochs TASKID 0
    nnUNet_train 3d_fullres nnUNetTrainerV2_5epochs_dummyLoad TASKID 0
    nnUNet_train 3d_fullres nnUNetTrainerV2_5epochs TASKID 0 -p nnUNetPlansv2.1_bs3x # optional, only for GPUs with more than 16GB of VRAM

Results

作者的epoch time

V100 32GB SXM3 (DGX2) 350WV100 32GB SXM2 300WV100 32GB PCIe 250WTitan RTX 24GB 280WRTX 2080 ti 11GB 250WTitan Xp 12GB 250W
Task002_Heart 2d65.6369.0773.2282.2799.39183.71
Task003_Liver 2d71.8073.4478.6386.11103.89187.30
Task005_Prostate 2d69.6870.0776.8588.04106.97187.38
Task002_Heart 3d_fullres156.13166.32177.91142.74174.60499.65
Task003_Liver 3d_fullres137.08144.83157.05114.78146.90500.74
Task005_Prostate 3d_fullres119.82126.20135.72106.01135.08463.21
Task002_Heart 3d_fullres dummy153.41160.44172.28136.90163.52497.51
Task003_Liver 3d_fullres dummy135.63139.76147.33110.61146.37495.55
Task005_Prostate 3d_fullres dummy115.65121.48130.71102.03129.16464.14
Task002_Heart 3d_fullres large317.63338.79349.91371.94OOMOOM
Task003_Liver 3d_fullres large271.54285.41295.42324.74OOMOOM
Task005_Prostate 3d_fullres large280.30296.37304.16289.22OOMOOM

 

Troubleshooting

  1. 确保cuDNN安装正确,且支持混合精度。测试pytorch是不是安装正确。输出是8002以上就可以了。
    python -c 'import torch;print(torch.backends.cudnn.version())'
    

Identifying the bottleneck

  1. nvidia-smi查看GPU,watch -n 0.1表示每隔0.1s刷新一次,GPU利用率稳定在90%~100%,表示充分利用了GPU资源。电压基本稳定在峰值237W / 250 W。
  2. htop显示CPU的使用情况,nnunet使用12个线程做数据扩增,以及1个主线程,索引应该同时存在13条主线程。
1、htop 
2、watch -n 0.1 nvidia-smi

GPU bottleneck

如果nvidia-smi显示利用率稳定在90%~100%,且电压稳定接近峰值,说明GPU充分利用起来了。

CPU bottleneck

  1. htop显示nnunet大概关联10个左右线程。
  2. nvidia-smi中显示GPU利用率偶尔到0.

 

  1. 如果训练数据的模态越多,需要的线程越多,大多数数据集需要12线程以上,如果数据集模态在4种以上,就需要将nnUNet_n_proc_DA设置12以上的线程数。
  2. 如果CPU没有12线程,可能需要将nnUNet_n_proc_DA设置在12以下了。
  3. CPU升级。

I/O bottleneck

可以通过LED反应。

  1. nvidia-smi没有显示GPU跳跃到0
  2. htop显示CPU占用线程比较少。
  3. I/O LED闪屏或者卡着不动。

 

  1. 换SSD直连。
  2. SATA SSD 只能喂饱1~2个GPUs。更多的GPUs可能需要升级nvme驱动,确保是PCIe接口。

 

标签:fullres,plans,nnUNet,nnunet,线程,GPU,3d
来源: https://blog.csdn.net/fanre/article/details/115355875