ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

nnunet(一)

2021-03-31 18:31:42  阅读:442  来源: 互联网

标签:fullres plans nnUNet nnunet 线程 GPU 3d


 

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有