TAO v5.5.0

使用容器

TAO 封装了可能跨不同训练框架开发的 DNN 训练管道。为了隔离依赖项和训练环境,这些 DNN 应用程序被安置在不同的容器中。TAO Launcher 抽象了哪个网络与哪个容器关联的细节。但是,它要求您从一个环境运行 TAO,在该环境中,docker 容器可以由 launcher 实例化。这需要提升的用户权限或 Docker IN Docker (DIND) 设置,才能从容器内部调用 Docker。在某些情况下,这可能并不理想,例如:

  • 在远程集群上运行,其中 SLURM 在已配置的集群节点上实例化容器

  • 在没有提升用户权限的机器上运行

  • 运行多节点训练作业

  • 在多实例 GPU (MiG) 实例上运行

要从多个封闭容器之一运行 DNN,您首先需要知道哪些网络被安置在哪个容器中。获取此信息的一个简单方法是在您的本地机器上安装 TAO Launcher 并运行 tao info –verbose,它包含在多个容器中。

以下是 TAO 5.0.1 的示例输出

复制
已复制!
            

Configuration of the TAO Instance task_group: model: dockers: nvidia/tao/tao-toolkit: 5.0.0-tf2.9.1: docker_registry: nvcr.io tasks: 1. classification_tf2 2. efficientdet_tf2 5.0.0-tf1.15.5: docker_registry: nvcr.io tasks: 1. bpnet 2. classification_tf1 3. converter 4. detectnet_v2 5. dssd 6. efficientdet_tf1 7. faster_rcnn 8. fpenet 9. lprnet 10. mask_rcnn 11. multitask_classification 12. retinanet 13. ssd 14. unet 15. yolo_v3 16. yolo_v4 17. yolo_v4_tiny 5.0.0-pyt: docker_registry: nvcr.io tasks: 1. action_recognition 2. centerpose 3. classification_pyt 4. deformable_detr 5. dino 6. mal 7. ml_recog 8. ocdnet 9. ocrnet 10. optical_inspection 11. pointpillars 12. pose_classification 13. re_identification 14. re_identification_transformer 15. segformer 16. visual_changenet dataset: dockers: nvidia/tao/tao-toolkit: 5.0.0-dataservice: docker_registry: nvcr.io tasks: 1. augmentation 2. auto_label 3. annotations 4. analytics deploy: dockers: nvidia/tao/tao-toolkit: 5.0.0-deploy: docker_registry: nvcr.io tasks: 1. centerpose 2. classification_pyt 3. classification_tf1 4. classification_tf2 5. deformable_detr 6. detectnet_v2 7. dino 8. dssd 9. efficientdet_tf1 10. efficientdet_tf2 11. faster_rcnn 12. lprnet 13. mask_rcnn 14. ml_recog 15. multitask_classification 16. ocdnet 17. ocrnet 18. optical_inspection 19. retinanet 20. segformer 21. ssd 22. unet 23. visual_changenet 24. yolo_v3 25. yolo_v4 26. yolo_v4_tiny format_version: 3.0 toolkit_version: 5.0.0 published_date: 05/31/2023

与任务关联的容器名称可以推导为 $DOCKER_REGISTRY/$DOCKER_NAME:$DOCKER_TAG。例如,从上面的日志中,运行 detectnet_v2 的 Docker 名称可以按如下方式推导出来:

复制
已复制!
            

export DOCKER_REGISTRY="nvcr.io" export DOCKER_NAME="nvidia/tao/tao-toolkit" export DOCKER_TAG="5.0.0-tf1.15.5" export DOCKER_CONTAINER=$DOCKER_REGISTRY/$DOCKER_NAME:$DOCKER_TAG

一旦您有了 Docker 名称,就可以通过运行网络定义的命令来调用容器,不带 :code:`tao` 前缀。例如,以下命令将运行一个使用 4 个 GPU 的 detectnet_v2 训练作业

复制
已复制!
            

docker run -it --rm --gpus all \ -v /path/in/host:/path/in/docker \ $DOCKER_CONTAINER \ detectnet_v2 train -e /path/to/experiment/spec.txt \ -r /path/to/results/dir \ -k $KEY --gpus 4

从 3.0-21.11 开始,TAO 支持以下 CV 模型的多节点训练:

  • 图像分类

  • 多任务分类

  • Detectnet_v2

  • FasterRCNN

  • SSD

  • DSSD

  • YOLOv3

  • YOLOv4

  • YOLOv4-Tiny

  • RetinaNet

  • MaskRCNN

  • EfficientDet

  • UNet

对于这些网络,唯一可以运行多节点训练的任务是 train。要调用多节点训练,只需将 --multi-node 参数添加到 train 命令。

例如,上面给出的多 GPU 训练命令可以作为多节点命令发出

复制
已复制!
            

detectnet_v2 train -e /path/to/experiment/spec.txt \ -r /path/to/results/dir \ -k $KEY \ --gpus 4 \ --multi-node

TAO 使用 OPEN-MPI + HOROVOD 来编排多 GPU 和多节点训练。默认情况下,以下参数将附加到 mpirun 命令

复制
已复制!
            

-x NCCL_IB_HCA=mlx5_4,mlx5_6,mlx5_8,mlx5_10 -x NCCL_SOCKET_IFNAME=^lo,docker

要向 mpirun 命令添加更多参数,请将它们添加到 train 命令的 --mpirun-arg 中,如下例所示

注意

运行多节点训练时,整个数据集必须对运行训练的所有节点可见。如果数据不存在,训练作业可能会崩溃,并显示数据找不到的错误。

例如,如果您有一个 .tar 数据集,该数据集已下载到具有两个节点且每个节点有八个 GPU 的多节点作业中的一个节点(rank 0),则提取数据的一个简单方法是使用 mpirun 将其作为多节点进程运行:。

复制
已复制!
            

mpirun -np 16 --allow-run-as-root bash -c 'if [[ $OMPI_COMM_WORLD_LOCAL_RANK -eq 0 ]]; then set -x && tar -xf dataset.tar -C /raid; fi '

NVIDIA 多实例 GPU (MIG) 扩展了数据中心级 GPU(即 NVIDIA H100、A100 和 A30 Tensor Core GPU)的性能和价值,它允许用户将单个 GPU 分区为最多七个实例,每个实例都有其自己完全隔离的高带宽内存、缓存和计算核心。有关设置 MIG 的更多信息,请参阅 NVIDIA 多实例 GPU 用户指南

注意

阅读 MIG 文档 中支持的配置,以了解拆分和提高利用率的最佳方法。

以下示例命令在启用 MIG 的 GPU 上运行 DetectNet_v2 训练会话。

复制
已复制!
            

docker run -it --rm --runtime=nvidia \ -e NVIDIA_VISIBLE_DEVICES="MIG-<DEVICE_UUID>,MIG-<DEVICE_UUID>" \ -v /path/in/host:/path/in/container \ nvcr.io/nvidia/tao/tao-toolkit:5.0.0-tf1.15.5 \ detectnet_v2 train -e /path/to/experiment.txt \ -k <key> \ -r /path/to/store/results \ -n <name of trained model>

注意

您必须将 --runtime=nvidia 标志添加到 docker 命令,并导出具有 GPU 实例 UUID 的 NVIDIA_VISIBLE_DEVICES 环境变量。您可以通过运行 nvidia-smi -L 命令来获取特定 MIG 实例的 UUID。

通过 TAO Launcher 运行 TAO 需要用户安装 docker-ce,因为 launcher 与本地主机上的 Docker 服务交互以运行命令。安装 Docker 需要提升的用户权限才能以 root 身份运行。如果您在计算机器上没有提升的用户权限,则可以使用 Singularity 运行 TAO。这需要您绕过 tao-launcher 并直接与组件 docker 容器交互。有关哪些任务在不同的 Docker 中实现的信息,请运行 tao info --verbose 命令。一旦您推导出任务到 Docker 的映射,您可以使用以下步骤运行任务

  1. 使用以下 singularity 命令拉取所需的 Docker

    复制
    已复制!
                

    singularity pull tao-toolkit-tf:5.0.0-tf1.15.5 py3.sif docker://nvcr.io/nvidia/tao/tao-toolkit:5.0.0-tf1.15.5 .. Note:: For this command to work, the latest version of singularity must be installed.

  2. 使用以下命令实例化 Docker

    复制
    已复制!
                

    singularity run --nv -B /path/to/workspace:/path/to/workspace tao-toolkit-tf:5.0.0-tf1.15.5.sif

  3. 在容器内部运行命令,不带 tao 前缀。例如,要在 tao-toolkit-tf 容器中运行 detectnet_v2 训练,请使用以下命令

复制
已复制!
            

detectnet_v2 train -e /path/to/workspace/specs/file.txt \ -k $KEY \ -r /path/to/workspace/results \ -n name_of_final_model \ --gpus $NUM_GPUS


上一步 从 TAO 5.3.0 迁移到 TAO API
下一步 入门指南
© 版权所有 2024, NVIDIA。 上次更新于 2024 年 10 月 15 日。