如何运行具有奇点的NGC深度学习容器
如何運行具有奇點的NGC深度學習容器
How to Run NGC Deep Learning Containers with Singularity
高性能計算機和人工智能的融合使新的科學突破成為可能。現在需要在同一個系統上同時部署HPC和AI工作負載。
支持HPC和AI工作負載所需的軟件環境的復雜性是巨大的。應用軟件依賴于許多相互依賴的軟件包。僅僅獲得一個成功的構建是一個挑戰,更不用說確保構建得到優化,以利用最新的硬件和軟件功能。
容器是一種廣泛采用的降低HPC和AI軟件部署復雜性的方法。整個軟件環境,從深度學習框架本身,到性能所必需的數學和通信庫,都打包成一個包。由于容器中的工作負載總是使用相同的環境,因此性能是可復制和可移植的。
NGC是一個GPU優化軟件的注冊中心,通過提供定期更新和驗證的HPC和AI應用程序容器,使科學家和研究人員受益匪淺。NGC最近宣布從19.11版開始,支持在Singularity容器運行時使用deep learning 容器。這大大簡化了使用奇點的HPC站點采用人工智能方法的過程。
這文說明了NGC和Singularity是如何極大地簡化在HPC系統上部署深度學習工作負載的。
Training ResNet-50 with TensorFlow
ResNet首次用于贏得2015年ImageNet比賽,至今仍是一種流行的圖像分類模型,被廣泛用作深度學習訓練的基準。在幾個簡單的步驟中,將演示如何使用TensorFlow和ImageNet數據庫中的圖像訓練ResNet-50v1.5模型。盡管目前ResNet模型的訓練幾乎是微不足道的,但這里所示的相同方法可以用于擴展更大模型的訓練,也可以用于其深度學習框架。
Figure 1: ResNet-50 architecture (source)
除了作為一個容器注冊表,NGC還提供完整的人工智能工作流,包括預先訓練的模型和腳本。一個例子是TensorFlow的ResNet-50v1.5模型;對于這個例子,嚴格遵循快速入門指南。
該示例使用Singularity版本3,并假設已經從集群資源管理器中獲得了交互式節點分配。
- 下載并提取ImageNet數據集,如《快速入門指南》的步驟2“下載數據”所述。請注意,ResNet-50的總體性能對用于存儲映像的文件系統的性能敏感,因此總體性能將有所不同。在運行中,使用了一個本地SSD。
2.NGC TensorFlow 19.11容器映像已經包含ResNet-50模型腳本,位于/workspace/nvidia examples/resnet50v1.5中,所以使用了。或者,可以從NGC模型腳本頁面下載模型腳本。
3. 使用奇點拉動NGC TensorFlow容器。這是一個簡單的命令,可以作為非特權用戶運行。(注意:如果IT管理員已經設置了NGC容器復制器,則TensorFlow容器可能已經位于系統中。)
$ singularity pull tensorflow-19.11-tf1-py3.sif docker://nvcr.io/nvidia/tensorflow:19.11-tf1-py3
- 容器下載完成后,第四步也是最后一步是訓練模型。讓從使用一個GPU和FP16開始。NGC模型腳本頁的Performance選項卡上的相應Python命令行需要包裝在命令中,以啟動在上一步中下載的Singularity容器圖像。
$ singularity run --nv -B /local/imagenet:/data/imagenet pytorch-19.11-tf1-py3.sif python/workspace/nvidia-examples/resnet50v1.5/main.py --mode=training_benchmark --use_tf_amp --warmup_steps=200 --batch_size=256 --data_dir=/data/imagenet–results_dir=/tmp/resnet
使用了兩個具有奇點的選項,-nv和-B。第一個選項,-nv在奇點中啟用NVIDIA GPU支持。第二個,-B,bind將/local/imagenet目錄掛載到提取imagenet數據庫的主機上,掛載到容器中的/data/imagenet位置。修改此項以使用提取ImageNet數據庫的位置。python命令取自1gpu/FP16案例的NGC模型腳本頁面,只需稍作修改即可使用NGC容器中包含的模型腳本。
在運行中,使用Singularity獲得了大約每秒980張圖像,Docker的結果幾乎相同,都使用了一個NVIDIA V100 GPU和19.11 TensorFlow NGC容器圖像。
Multi-node Training with TensorFlow and Horovod
分布式計算是高性能計算的重要組成部分。像Horovod這樣的框架支持分布式深度學習。TensorFlow NGC容器包括Horovod,以實現多節點的開箱即用訓練。在本節中,將展示Singularity作為HPC容器運行時的起源如何使執行多節點訓練變得容易。在這里,從集群資源管理器中分配了兩個集群節點,每個節點都有4xV100 gpu。
使用Singularity擴展MPI工作負載的通常方法是使用容器外部的MPI運行時在容器實例內部啟動分布式任務(也稱為“outside in”或“hybrid”)。與運行本機MPI工作負載相比,此方法所需的更改最少,但確實需要主機上的MPI運行時與容器中的MPI庫兼容。19.11 NGC TensorFlow映像捆綁了OpenMPI版本3.1.4,因此任何大于3.0的主機OpenMPI版本都應該可以工作,但是版本越接近匹配越好。
啟動一個兩節點的訓練運行,每個節點使用4xgpu的奇點和NGC容器是很簡單的。像往常一樣使用mpirun并使用命令從上面啟動Singularity容器。實際上,與上一個示例中的單個GPU命令行相比,唯一的區別是使用mpirun啟動。
$ mpirun singularity run --nv -B /local/imagenet:/data/imagenet
tensorflow-19.11-tf1-py3.sif python /workspace/nvidia-examples/resnet50v1.5/main.py --mode=training_benchmark
–use_tf_amp --warmup_steps=200 --batch_size=256 --data_dir=/data/imagenet --results_dir=/tmp/resnet
注意:在這種情況下,主機上的MPI運行時可以識別資源管理器,因此不需要手動指定要啟動多少MPI列組或如何放置。MPI運行時能夠從交互式SLURM作業分配(srun–nodes 2–ntasks 8–pty–time=15:00bash-i)中推斷出此信息。如果MPI運行時不是這樣設置的,或者集群使用不同的資源管理器,則需要手動告訴MPI運行時使用兩個節點,每個節點具有4個列組/GPU,例如mpirun-n 8–n per node 4–hostfile hostfile其中hostfile包含已分配的節點的名稱,每行一個,或者mpirun-n 8-H node1:4,node2:4,用分配給節點的名稱替換node1和node2。
應該注意到,在兩個節點上已使用總共8個GPU(每個節點4個GPU)啟動了8個訓練任務。在使用的特定系統上,分布式訓練性能大約為每秒6800個圖像,相對于單個GPU,大約加速6.9倍。使用XLA(-use-XLA)和/或DALI(-use-DALI)可以進一步提高性能,這兩個都包含在NGC容器圖像中。
使用Singularity擴展MPI工作負載的另一種方法是在容器中使用MPI運行時(也稱為“inside out”或“self-contained”)。這消除了對兼容主機MPI運行時的依賴,但需要額外的配置來手動指定作業的大小和形狀,以及在容器中啟動所有任務。這兩種方法,以及優缺點,在網絡研討會“用奇點擴展NGC工作負載”中有更詳細的描述。
前面的示例假設有一個交互式會話,但是也可以通過一個可以提交給資源管理器的作業腳本(例如,使用SLURM的sbatch)來部署訓練。
#!/bin/bash #SBATCH -J resnet50#SBATCH -t 15:00#SBATCH -N 2#SBATCH -n 8 # site specificmodule load singularity openmpi/3.1.0 # dataset staging, if necessary# … mpirun singularity run --nv -B /local/imagenet:/data/imagenet tensorflow-19.11-tf1-py3.sif python /workspace/nvidia-examples/resnet50v1.5/main.py --mode=training_benchmark --use_tf_amp --warmup_steps=200 --batch_size=256 --data_dir=/data/imagenet --results_dir=/tmp/resnet
立即快速部署人工智能工作負載
NGC提供的容器圖像經過驗證、優化,并定期更新為所有流行的深度學習框架的最新版本。隨著奇點支持的增加,NGC容器現在可以更廣泛地部署,包括HPC中心,個人GPU支持的工作站,以及喜歡的云。
下載一個NGC容器并運行
總結
以上是生活随笔為你收集整理的如何运行具有奇点的NGC深度学习容器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于NVIDIA GPUs的深度学习训练
- 下一篇: 通过Mellanox ConnectX