TAO v5.5.0

TAO Launcher

TAO 封装了 DNN 训练管道,这些管道可以在不同的训练平台上开发。为了从 TAO 用户那里抽象出细节,TAO 现在与启动器 CLI 打包在一起。CLI 是一个 python3 wheel 包,可以使用 python-pip 安装。安装后,启动器 CLI 将用户从必须实例化和运行多个 TAO 容器并相应地映射命令中抽象出来。

在本 TAO 版本中,TAO 包包括多个基于每个训练框架的底层 Docker 容器。每个 Docker 容器都包含运行与其相关的子任务的任务入口点。容器中的任务被分组到不同的 task_groups 中,这些组分为以下几类

  • 模型

  • 数据集

  • 部署

model 下的任务包含在 TAO 支持的任何数量的 DNN 模型之一上执行 trainevaluateinference 的例程。dataset 下的任务包含操作数据集的例程,例如 augmentauto_label,而 deploy 下的任务则优化模型并将其部署到 TensorRT。

任务大致分为模型、部署和数据集。例如,DetectNet_v2 是 TAO 中用于对象检测的计算机视觉任务,它支持诸如 trainpruneevaluateexport 等子任务。当用户执行命令时,例如 tao model detectnet_v2 train --help,TAO Launcher 会执行以下操作

  1. 拉取带有 DetectNet_v2 入口点的所需 TAO 容器

  2. 创建容器的实例

  3. 使用 train 子任务运行 detectnet_v2 入口点

当为 DetectNet_v2 模型运行训练和评估时,您可以可视化 TAO Launcher 的用户交互图,如下所示

tao_tf_user_interaction.jpg

同样,训练 DINO 模型的交互图如下所示

tao_pt_user_interaction.jpg

以下部分介绍支持的命令和配置启动器。

NGC 上 TAO Getting started resourcetao_launcher_starter_kit 目录中的示例 jupyter 笔记本涵盖了安装启动器 CLI 的步骤。

安装启动器后,运行启动器的工作流程如下所示。

  1. 列出工具包中支持的 task_groups

    安装启动器后,您现在可以列出 TAO Launcher 中支持的任务。tao model --help 命令的输出如下

    复制
    已复制!
                

    usage: tao model [-h] {list,stop,info,dataset,deploy,model} ... Launcher for TAO Toolkit. optional arguments: -h, --help show this help message and exit task_groups: {list,stop,info,dataset,deploy,model}


  2. 列出 task_group 下支持的 tasks

    列出作为工具包一部分包含的 task_groups 后,您可以使用级联的 --help 选项列出与此组关联的 task。例如,要列出 model 下的 task,您可以运行以下命令 tao model --help

    复制
    已复制!
                

    usage: tao model [-h] {list,stop,info,dataset,deploy,model} ... {action_recognition,classification_pyt,deformable_detr,dino,mal,ml_recog,ocdnet,ocrnet,optical_inspection,pointpillars,pose_classification,re_identification,re_identification_transformer,segformer} ... optional arguments: -h, --help show this help message and exit task_groups: {list,stop,info,dataset,deploy,model} task: {action_recognition,classification_pyt,deformable_detr,dino,mal,ml_recog,ocdnet,ocrnet,optical_inspection,pointpillars,pose_classification,re_identification,re_identification_transformer,segformer}


  3. 配置启动器实例。

    运行深度神经网络意味着处理大型数据集。这些数据集通常存在于具有明显更高存储容量的网络共享驱动器中。由于 TAO Launcher 在后台使用 docker 容器,因此这些驱动器/挂载点需要映射到 docker。启动器实例可以在 ~/.tao_mounts.json 文件中配置。

    启动器配置文件包含三个部分

    • 挂载

    • 环境变量

    • Docker 选项

    Mounts 参数定义本地计算机中的路径,这些路径应映射到 docker。这是一个 json 字典列表,其中包含本地计算机中的 source 路径和为 TAO 命令映射的 destination 路径。

    Envs 参数定义要设置为相应 TAO docker 的环境变量。这也是一个字典列表。每个字典条目都定义了 2 个键值对。

    • variable:您要设置的环境变量的名称

    • value:环境变量的值

    DockerOptions 参数定义调用 docker 实例时要设置的选项。此参数是一个字典,其中包含要设置的参数和选项的键值对。目前,TAO Launcher 仅允许用户配置以下参数。

    • shm_size:定义 docker 的共享内存大小。如果未设置此参数,则 TAO 实例默认分配 64MB。我们建议将其设置为 "16G",从而分配 16GB 的共享内存。

    • ulimits:定义 docker 中的用户限制。此参数对应于 /etc/security/limits.conf 中的 ulimit 参数。我们建议用户将 memlock 设置为 -1,并将 stack 设置为 67108864

    • user:定义要在 docker 中运行命令的用户的用户 ID 和组 ID。默认情况下,如果 ~/.tao_mounts.json 中未定义此参数,则为 root 用户的 uid 和 gid。但是,这意味着 TAO docker 创建的目录将被设置为 root 权限。如果您希望将 docker 中的用户设置为与主机用户相同,请将此参数设置为 “UID:GID”,其中 UID 和 GID 可以通过运行命令行命令 id -uid -g 获得。

    • ports:此参数定义要挂载到主机的 docker 中的端口。

      您可以将此参数指定为字典,其中包含 docker 中的端口与主机计算机中的端口之间的映射。例如,如果您希望公开端口 8888 和端口 8000,则此参数将如下所示

      复制
      已复制!
                  

      "ports":{ "8888":"8888", "8000":"8000" }

    请使用以下代码块作为 ~/.tao_mounts.json 文件的示例。在此挂载示例中,我们定义了 3 个驱动器,一个名为 CUDA_DEVICE_ORDER 的环境变量。对于 DockerOptions,我们设置了 16G 的共享内存大小、用户限制并设置了主机用户的权限。我们还将端口 8888 从 docker 绑定到主机。

    复制
    已复制!
                

    { "Mounts": [ { "source": "/path/to/your/data", "destination": "/workspace/tao-experiments/data" }, { "source": "/path/to/your/local/results", "destination": "/workspace/tao-experiments/results" }, { "source": "/path/to/config/files", "destination": "/workspace/tao-experiments/specs" } ], "Envs": [ { "variable": "CUDA_DEVICE_ORDER", "value": "PCI_BUS_ID" } ], "DockerOptions": { "shm_size": "16G", "ulimits": { "memlock": -1, "stack": 67108864 }, "user": "1000:1000", "ports": { "8888": 8888 } } }

    同样,包含 2 个挂载点且没有 docker 选项的示例配置文件如下所示。

    复制
    已复制!
                

    { "Mounts": [ { "source": "/path/to/your/experiments", "destination": "/workspace/tao-experiments" }, { "source": "/path/to/config/files", "destination": "/workspace/tao-experiments/specs" } ] }


  4. 运行任务。

    安装 TAO Launcher 后,您现在可以使用以下命令格式运行 TAO Toolkit 支持的任务。

    复制
    已复制!
                

    tao model <task_group> <task> <subtask> <cli_args>

    要查看特定任务支持的子任务,您可以按照模板运行命令

    例如:列出 detectnet_v2 的任务,输出如下

    复制
    已复制!
                

    $ tao model detectnet_v2 --help usage: detectnet_v2 [-h] [--num_processes NUM_PROCESSES] [--gpus GPUS] [--gpu_index GPU_INDEX [GPU_INDEX ...]] [--use_amp] [--log_file LOG_FILE] {train,prune,inference,export,evaluate,dataset_convert,calibration_tensorfile} ... TAO Toolkit optional arguments: -h, --help show this help message and exit --num_processes NUM_PROCESSES, -np NUM_PROCESSES The number of horovod child processes to be spawned. Default is -1(equal to --gpus). --gpus GPUS The number of GPUs to be used for the job. --gpu_index GPU_INDEX [GPU_INDEX ...] The indices of the GPU's to be used. --use_amp Flag to enable Auto Mixed Precision. --log_file LOG_FILE Path to the output log file. tasks: {train,prune,inference,export,evaluate,dataset_convert,calibration_tensorfile} 2023-06-01 08:52:50,522 [INFO] nvidia_tao_cli.components.docker_handler.docker_handler 326: Stopping container.

    TAO Launcher 还支持与每个任务关联的 run 命令,以允许您在 docker 中运行自定义脚本。这为您提供了引入您自己的数据预处理脚本的机会,并利用 TAO docker 中预构建的依赖项和隔离的开发环境。

    例如,假设您有一个 shell 脚本将 COCO 数据集下载并预处理为 MaskRCNN 的 TFRecords,这需要 TensorFlow 作为依赖项。您只需使用下面的步骤 4 中提到的步骤将包含该脚本的目录映射到 docker,并使用 ~/.tao_mounts.json 运行它,如下所示

    复制
    已复制!
                

    tao model mask_rcnn run /path/to/download_and_preprocess_coco.sh <script_args>


  1. tao 启动器 CLI 允许您在与您希望运行的任务关联的 docker 内交互式运行命令。这对于调试 docker 内的命令以及查看容器内部的文件系统非常有用,而不是查看主机系统中的最终输出。要调用交互式会话,请运行带有任务的 tao 命令,不带其他参数。例如,要在包含 detectnet_v2 任务的 docker 内运行交互式命令,请运行以下命令

    复制
    已复制!
                

    tao model detectnet_v2

    此命令在 tao-toolkit-tf docker 内打开一个交互式会话。

    注意

    交互式命令使用 ~/.tao_mounts.json 文件来配置启动器并将主机文件系统中的挂载路径挂载到 docker。

    进入交互式会话后,您可以通过调用 <task> <subtask> <cli_args> 命令(不带 tao 前缀)来运行命令任务及其关联的子任务。

    例如,要在交互式会话中训练 detectnet_v2 模型,请在使用 tao model detectnet_v2 调用交互式会话后运行以下命令

    复制
    已复制!
                

    detectnet_v2 train -e /path/to/experiment_spec.txt -k <key> -r /path/to/train/output --gpus <number of GPUs>

TAO Launcher 允许用户列出主机上 TAO Launcher 实例启动的所有进程,并使用 liststop 命令终止用户可能认为不必要的任何作业。

  1. 列出 TAO 启动的进程

    list 命令顾名思义,打印出正在运行的进程的表格列表,其中包含用于调用进程的命令。

    当您有 2 个进程运行时,tao model list 命令的示例输出如下所示。

    复制
    已复制!
                

    ============== ================== ============================================================================================================================================================================================= container_id container_status command ============== ================== ============================================================================================================================================================================================= 5316a70139 running detectnet_v2 train -e /workspace/tao-experiments/detectnet_v2/experiment_dir_unpruned/experiment_spec.txt -k tlt_encode -r /workspace/tao-experiments/detectnet_v2/experiment_dir_unpruned ============== ================== =============================================================================================================================================================================================


  2. 终止正在运行的 TAO 实例

    如果用户希望中止相应的会话,tao stop 命令有助于终止正在运行的容器。tao stop 命令的用法如下所述。

    复制
    已复制!
                

    usage: tao stop [-h] [--container_id CONTAINER_ID [CONTAINER_ID ...]] [--all] {info,list,stop,augment,classification,classifynet,detectnet_v2,dssd,emotionnet,faster_rcnn,fpenet,gazenet,heartratenet,intent_slot_classification,lprnet,mask_rcnn,punctuation_and_capitalization,question_answering,retinanet,speech_to_text,ssd,text_classification,converter,token_classification,yolo_v3,yolo_v4,yolo_v4_tiny} ... optional arguments: -h, --help show this help message and exit --container_id CONTAINER_ID [CONTAINER_ID ...] Ids of the containers to be stopped. --all Kill all TAO running TAO containers. tasks: {info,list,stop,augment,classification,classifynet,detectnet_v2,dssd,emotionnet,faster_rcnn,fpenet,gazenet,heartratenet,intent_slot_classification,lprnet,mask_rcnn,punctuation_and_capitalization,question_answering,retinanet,speech_to_text,ssd,text_classification,converter,token_classification,yolo_v3,yolo_v4,yolo_v4_tiny}

    使用 tao stop,您可以选择

    1. 通过向启动器的 --container_id 参数提供多个容器 ID,来终止 tao model list 命令显示的容器子集

    运行 tao stop --container_id 5316a70139 后,tao model list 命令的示例输出如下所示。

    复制
    已复制!
                

    ============== ================== ============================================================================================================================================================================================= container_id container_status command ============== ================== ============================================================================================================================================================================================= 5316a70139 running detectnet_v2 train -e /workspace/tao-experiments/detectnet_v2/experiment_dir_unpruned/experiment_spec.txt -k tlt_encode -r /workspace/tao-experiments/detectnet_v2/experiment_dir_unpruned ============== ================== =============================================================================================================================================================================================

    1. 使用 tao stop --all 命令强制终止所有容器。

    运行 tao stop --all 命令后,tao model list 命令的示例输出如下所示。

    复制
    已复制!
                

    ============== ================== ========= container_id container_status command ============== ================== ========= ============== ================== =========


  3. 检索底层 TAO 组件的信息

    tao info 命令允许用户检索有关启动器中底层组件的信息。要检索 tao info 命令的选项,您可以使用 tao info --help 命令。该命令的示例用法如下

    复制
    已复制!
                

    usage: tao info [-h] [--verbose] {info,list,stop,info,augment,classification,detectnet_v2, ... ,converter,token_classification,unet,yolo_v3,yolo_v4,yolo_v4_tiny} ... optional arguments: -h, --help show this help message and exit --verbose Print information about the TAO instance. tasks: {info,list,stop,info,augment,classification,detectnet_v2,dssd,emotionnet,faster_rcnn,fpenet,gazenet,gesturenet,heartratenet,intent_slot_classification,lprnet,mask_rcnn,punctuation_and_capitalization,question_answering,retinanet,speech_to_text,ssd,text_classification,converter,token_classification,unet,yolo_v3,yolo_v4,yolo_v4_tiny}

    当您运行 tao info 时,启动器会返回有关启动器的简洁信息,即 docker 容器名称、启动器配置的格式版本、TAO 版本和发布日期。

    复制
    已复制!
                

    Configuration of the TAO Instance task_group: ['model', 'dataset', 'deploy'] format_version: 3.0 toolkit_version: 5.0.0 published_date: 05/31/2023

    有关 docker 和 docker 支持的任务的更多信息,您可以使用 tao info 命令的 --verbose 选项。tao info --verbose 命令的示例输出如下所示。

    复制
    已复制!
                

    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 7. ocdnet 8. ocrnet 9. optical_inspection 10. pointpillars 11. pose_classification 12. re_identification 13. segformer 14. 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. yolo_v3 24. yolo_v4 25. yolo_v4_tiny 26. visual_changenet format_version: 3.0 toolkit_version: 5.0.0 published_date: 05/31/2023


TAO Launcher 监视以下环境变量以覆盖某些可配置参数。

  1. LAUNCHER_MOUNTS:此环境变量定义默认启动器配置 .json 文件的路径。如果未设置,则启动器配置路径从 ~/.tao_mounts.json 中选取。

  2. OVERRIDE_REGISTRY:此环境变量定义从中拉取 TAO docker 的注册表。默认情况下,TAO docker 托管在 NGC 中,位于存储库 nvcr.io 下。例如,如果您按如下所示设置 OVERRIDE_REGISTRY 环境变量,

    复制
    已复制!
                

    export OVERRIDE_REGISTRY="dockerhub.io"

    docker 将是

复制
已复制!
            

dockerhub.io/nvidia/tao/tao-toolkit:<docker_tag> dockerhub.io/nvidia/tao/tao-toolkit:<docker_tag>

注意
当使用 OVERRIDE_REGISTRY 变量时,请使用 docker login 命令

登录到此注册表。

复制
已复制!
            

docker login $OVERRIDE_REGISTRY


上一个 概述
下一个 迁移指南
© 版权所有 2024, NVIDIA。 上次更新于 2024 年 10 月 15 日。