华为云用户手册

  • 设置训练存储加速 当完成上传数据至OBS并预热到SFS Turbo中步骤后,在ModelArts Standard中创建训练作业时,设置训练“SFS Turbo”,在“文件系统”中选择SFS Turbo实例名称,并指定“存储位置”和“云上挂载路径”。系统会在训练作业启动前,自动将存储位置中的文件目录挂载到训练容器中指定路径。 图2 设置训练“SFS Turbo” 当前训练作业支持挂载多个弹性文件服务SFS Turbo,文件系统支持重复挂载,但挂载路径不可重复。文件系统目录需指定已存在的目录,否则会导致训练作业异常。
  • ModelArts Standard中如何实现增量训练 增量训练是通过Checkpoint机制实现。 Checkpoint的机制是:在模型训练的过程中,不断地保存训练结果(包括但不限于EPOCH、模型权重、优化器状态、调度器状态)。当需要增加新的数据继续训练时,只需要加载Checkpoint,并用Checkpoint信息初始化训练状态即可。用户需要在代码里加上reload ckpt的代码,使能读取前一次训练保存的预训练模型。 在ModelArts训练中实现增量训练,建议使用“训练输出”功能。 在创建训练作业时,设置训练“输出”参数为“train_url”,在指定的训练输出的数据存储位置中保存Checkpoint,且“预下载至本地目录”选择“下载”。选择预下载至本地目录时,系统在训练作业启动前,自动将数据存储位置中的Checkpoint文件下载到训练容器的本地目录。 图1 训练输出设置
  • 什么是增量训练 增量训练(Incremental Learning)是机器学习领域中的一种训练方法,它允许人工智能(AI)模型在已经学习了一定知识的基础上,增加新的训练数据到当前训练流程中,扩展当前模型的知识和能力,而不需要从头开始。 增量训练不需要一次性存储所有的训练数据,缓解了存储资源有限的问题;另一方面,增量训练节约了重新训练中需要消耗大量算力、时间以及经济成本。 增量训练特别适用于以下情况: 数据流更新:在实际应用中,数据可能会持续更新,增量训练允许模型适应新的数据而不必重新训练。 资源限制:如果重新训练一个大型模型成本过高,增量训练可以是一个更经济的选择。 避免灾难性遗忘:在传统训练中,新数据可能会覆盖旧数据的知识,导致模型忘记之前学到的内容。增量训练通过保留旧知识的同时学习新知识来避免这个问题。 增量训练在很多领域都有应用,比如自然语言处理、计算机视觉和推荐系统等。它使得AI系统能够更加灵活和适应性强,更好地应对现实世界中不断变化的数据环境。
  • 训练作业的预置框架介绍 ModelArts中预置的训练基础镜像如下表所示。 表1 ModelArts训练基础镜像列表 引擎类型 版本名称 PyTorch pytorch_1.8.0-cuda_10.2-py_3.7-ubuntu_18.04-x86_64 TensorFlow tensorflow_2.1.0-cuda_10.1-py_3.7-ubuntu_18.04-x86_64 Horovod horovod_0.20.0-tensorflow_2.1.0-cuda_10.1-py_3.7-ubuntu_18.04-x86_64 horovod_0.22.1-pytorch_1.8.0-cuda_10.2-py_3.7-ubuntu_18.04-x86_64 MPI mindspore_1.3.0-cuda_10.1-py_3.7-ubuntu_1804-x86_64 Ascend-Powered-Engine tensorflow_1.15-cann_5.1.0-py_3.7-euler_2.8.3-aarch64 mindspore_1.7.0-cann_5.1.0-py_3.7-euler_2.8.3-aarch64
  • 构建自定义训练镜像 图1 训练作业的自定义镜像制作流程 场景一:预置镜像满足ModelArts训练平台约束,但不满足代码依赖的要求,需要额外安装软件包。 具体案例参考使用预置镜像制作自定义镜像用于训练模型。 场景二:已有本地镜像满足代码依赖的要求,但是不满足ModelArts训练平台约束,需要适配。 具体案例参考已有镜像迁移至ModelArts用于训练模型。 场景三: 当前无可使用的镜像,需要从0制作镜像(既需要安装代码依赖,又需要制作出的镜像满足ModelArts平台约束)。具体案例参考: 从0制作自定义镜像用于创建训练作业(Pytorch+Ascend) 从0制作自定义镜像用于创建训练作业(PyTorch+CPU/GPU) 从0制作自定义镜像用于创建训练作业(MPI+CPU/GPU) 从0制作自定义镜像用于创建训练作业(Tensorflow+GPU) 从0制作自定义镜像用于创建训练作业(MindSpore+Ascend)
  • 训练作业在容器中的挂载点说明 使用自定义镜像训练模型时,训练作业在容器中的挂载点参考如表2所示。 表2 训练作业挂载点介绍 挂载点 是否只读 备注 /xxx 否 专属池使用SFS盘挂载的目录,路径由客户自己指定。 /home/ma-user/modelarts 否 空文件夹,建议用户主要用这个目录。 /cache 否 裸机规格支持,挂载宿主机NVMe的硬盘。 /dev/shm 否 用于PyTorch引擎加速。 /usr/local/nvidia 是 宿主机的nvidia库。
  • 使用Ascend自定义镜像训练时的训练代码适配规范 使用NPU资源创建训练作业时,系统会在训练容器里自动生成Ascend HCCL RANK_TABLE_FILE文件。当使用预置框架创建训练作业时,在训练过程中预置框架会自动解析Ascend HCCL RANK_TABLE_FILE文件,当使用自定义镜像创建训练作业时,就要适配训练代码使得训练过程中在代码里读取解析Ascend HCCL RANK_TABLE_FILE文件。 Ascend HCCL RANK_TABLE_FILE文件说明 Ascend HCCL RANK_TABLE_FILE文件提供Ascend分布式训练作业的集群信息,用于Ascend芯片分布式通信,可以被HCCL集合通信库解析。该文件格式有模板一和模板二两个版本。 ModelArts提供的是模板二格式。ModelArts训练环境的Ascend HCCL RANK_TABLE_FILE文件名为jobstart_hccl.json,获取方式可以通过预置的RANK_TABLE_FILE环境变量实现。 表1 RANK_TABLE_FILE环境变量说明 环境变量 说明 RANK_TABLE_FILE 该环境变量指示Ascend HCCL RANK_TABLE_FILE文件所在目录,值为/user/config。 算法开发者可通过 “${RANK_TABLE_FILE}/jobstart_hccl.json”,路径获取该文件。 ModelArts训练环境jobstart_hccl.json文件内容(模板二)示例: { "group_count": "1", "group_list": [{ "device_count": "1", "group_name": "job-trainjob", "instance_count": "1", "instance_list": [{ "devices": [{ "device_id": "4", "device_ip": "192.1.10.254" }], "pod_name": "jobxxxxxxxx-job-trainjob-0", "server_id": "192.168.0.25" }] }], "status": "completed" } jobstart_hccl.json文件中的status字段的值在训练脚本启动时,并不一定为completed状态。因此需要训练脚本等待status字段的值等于completed之后,再去读取文件的剩余内容。 通过训练脚本,可以使用模板一格式的jobstart_hccl.json文件,在等待status字段的值等于completed之后,将模板二格式jobstart_hccl.json文件转换为模板一格式的jobstart_hccl.json文件。 转换后的jobstart_hccl.json文件格式(模板一)示例: { "server_count": "1", "server_list": [{ "device": [{ "device_id": "4", "device_ip": "192.1.10.254", "rank_id": "0" }], "server_id": "192.168.0.25" }], "status": "completed", "version": "1.0" } 转换功能的实现,可参考从0制作自定义镜像用于创建训练作业(MindSpore+Ascend)中所述的Ascend训练脚本的启动脚本。
  • 常见问题 在训练时发生找不到“$ANACONDA_DIR/envs/$DEFAULT_CONDA_ENV_NAME/lib ”目录下“.so”文件的相关报错如何处理? 如果在训练时发生找不到“$ANACONDA_DIR/envs/$DEFAULT_CONDA_ENV_NAME/lib ”目录下“.so”文件的相关报错,可以尝试将该目录加入到“LD_LIBRARY_PATH”,将以下命令放在上述启动方式命令前: export LD_LIBRARY_PATH=$ANACONDA_DIR/envs/$DEFAULT_CONDA_ENV_NAME/lib:$LD_LIBRARY_PATH; 例如,方式一的启动命令示例此时变为: export LD_LIBRARY_PATH=$ANACONDA_DIR/envs/$DEFAULT_CONDA_ENV_NAME/lib:$LD_LIBRARY_PATH; python /home/ma-user/modelarts/user-job-dir/code/train.py
  • 自定义镜像的启动命令规范 用户遵循ModelArts镜像的规范要求制作镜像,选择自己的镜像,并且通过指定代码目录(可选)和启动命令的方式来创建的训练作业。 图1 创建训练作业选择自定义方式 当使用完全自定义镜像创建训练作业时,“启动命令”必须在“/home/ma-user”目录下执行,否则训练作业可能会运行异常。 对于启动命令,当存在输入管道、输出管道、或是超参的情况下,请保证启动命令的最后一条命令是运行训练脚本,否则执行会报错。 完全使用自定义镜像创建训练作业需要通过指定的“conda env”启动训练。 由于训练作业运行时不是shell环境,因此无法直接使用“conda activate”命令激活指定的 “conda env”,需要使用其他方式以达成使用指定“conda env”来启动训练的效果。假设您的自定义镜像中的“conda”安装于“/home/ma-user/anaconda3”目录“conda env”为“python-3.7.10”,训练脚本位于“/home/ma-user/modelarts/user-job-dir/code/train.py”。可通过以下方式使用指定的“conda env”启动训练: 方式一:为镜像设置正确的“DEFAULT_CONDA_ENV_NAME”环境变量与“ANACONDA_DIR”环境变量。 ANACONDA_DIR=/home/ma-user/anaconda3 DEFAULT_CONDA_ENV_NAME=python-3.7.10 您可以使用Python命令启动训练脚本。启动命令示例如下: python /home/ma-user/modelarts/user-job-dir/code/train.py 方式二:使用“conda env python”的绝对路径。 您可以使用“/home/ma-user/anaconda3/envs/python-3.7.10/bin/python”命令启动训练脚本。启动命令示例如下: /home/ma-user/anaconda3/envs/python-3.7.10/bin/python /home/ma-user/modelarts/user-job-dir/code/train.py 方式三:设置PATH环境变量。 您可以将指定的“conda env bin”目录配置到PATH环境变量中。您可以使用Python命令启动训练脚本。启动命令示例如下: export PATH=/home/ma-user/anaconda3/envs/python-3.7.10/bin:$PATH; python /home/ma-user/modelarts/user-job-dir/code/train.py 方式四:使用“conda run -n”命令。 您可以使用“/home/ma-user/anaconda3/bin/conda run -n python-3.7.10”命令来执行训练命令,启动命令示例如下: /home/ma-user/anaconda3/bin/conda run -n python-3.7.10 python /home/ma-user/modelarts/user-job-dir/code/train.py 启动命令的最后一条命令必须为运行训练脚本命令。 对于启动命令,当存在输入管道、输出管道、或是超参的情况下,请保证启动命令的最后一条命令是运行训练脚本。 原因:系统会将输入管道、输出管道、以及超参添加到启动命令的末尾,如果最后一条命令不是运行训练脚本则会报错。 例如:启动命令的最后一条是python train.py,且存在--data_url超参,系统正常运行会执行python train.py --data_url=/input。但是当启动命令python train.py后面有其他命令时,如下所示: python train.py pwd #反例,启动命令的最后一条命令不是运行训练脚本,而是pwd 此时,如果拼接了输入管道、输出管道、以及超参,系统运行实际执行的是python train.py pwd --data_url=/input,就会报错。
  • 常见问题 在torchrun初始化分布式一致性协商阶段出现“RuntimeError:Socket Timeout”错误时,如何解决? 如果在torchrun初始化分布式一致性协商阶段出现RuntimeError:Socket Timeout错误时,可以通过增加如下环境变量再次创建训练作业以查看torchrun初始化阶段的详细信息,进一步排查问题。 LOG LEVEL=INFO TORCH_CPP_LOG_LEVEL=INFO TORCH_DISTRIBUTED_DEBUG=DETAIL 出现RuntimeError: Socket Timeout错误,一般是因为不同任务执行torchrun命令的时机差距过大导致的。torchrun命令执行时机差距过大,又多是因为在torchrun命令被执行之前任务还有一些初始化动作,例如下载训练数据集、CKPT等。这些初始化动作执行耗时差距过大会直接导致出现Socket Timeout错误。所以遇到Socket Timeout问题时首先需要排查的是各个任务执行torchrun的时间点差距是否在合理范围内,如果时间点差距过大,需要优化执行torchrun命令之前的初始化动作,使其时间点差距在合理范围内。
  • Ascend-Powered-Engine框架启动 在ModelArts创建训练作业界面选择AI框架时,有一个AI框架是“Ascend-Powered-Engine”,它既不是一个AI框架(如:PyTorch、TensorFlow)也不是一个并行执行框架(如:MPI),而是适配加速芯片Ascend的一组AI框架+运行环境+启动方式的集合。 由于主流的Snt9系列Ascend加速卡都跑在ARM CPU规格的机器上,因此上层Docker镜像也都是ARM镜像。相对于GPU场景的镜像中安装了与GPU驱动适配的CUDA(由英伟达推出的统一计算架构)计算库,Ascend-Powered-Engine引擎的镜像中安装了与Ascend驱动适配的CANN(华为针对AI场景推出的异构计算架构)计算库。 提交训练作业后,ModelArts Standard平台会自动运行训练作业的启动文件。 Ascend-Powered-Engine框架单机启动命令和分布式启动命令无区别。 Ascend-Powered-Engine框架支持3种启动方式来启动“启动文件”,默认是基于“RANK_TABLE_FILE”启动,也可以通过配置环境变量“MA_RUN_METHOD”使用其他方式来启动。MA_RUN_METHOD环境变量支持torchrun和msrun。 启动方式一:使用RTF文件启动训练作业 在没有配置环境变量“MA_RUN_METHOD”时,ModelArts Standard平台默认使用rank table file(RTF)文件启动训练作业的“启动文件”。 每个训练作业的启动文件的运行次数取决于任务卡数,即在训练作业运行时,有N个任务卡数训练作业内就会运行N次启动文件。例如,单机1卡,则worker-0任务的启动文件会被运行1次;单机8卡,则worker-0任务的启动文件会被运行8次。因此需要避免在启动文件中进行端口监听。 启动文件会被自动设置如下环境变量: RANK_TABLE_FILE:RTF文件路径。 ASCEND_DEVICE_ID:逻辑device_id,例如单卡训练,该值始终为 0。 RANK_ID:可以理解为训练作业级的device逻辑(顺序)编号。 RANK_SIZE:根据RTF中device的数目设置该值,例如“4 * Snt9b”,则该值即为4。 当需要启动文件仍然在逻辑上仅运行1次时,则可以在启动文件中判断“ASCEND_DEVICE_ID”的值,当值为“0”则执行逻辑,当值为非0则直接退出。 当需要启用ranktable动态路由进行训练网络加速时,则可以添加环境变量“ROUTE_PLAN=true”。详细使用指导请参见训练作业动态路由加速。 Ascend-Powered-Engine框架对应的代码示例“mindspore-verification.py”,请参见训练mindspore-verification.py文件。 启动方式二:使用torchrun命令启动训练作业 当环境变量“MA_RUN_METHOD=torchrun”时,表示ModelArts Standard平台使用torchrun命令启动训练作业的“启动文件”。 要求PyTorch版本大于等于1.11.0。 单机时,ModelArts Standard平台使用如下命令启动训练作业的“启动文件”。 torchrun --standalone --nnodes=${MA_NUM_HOSTS} --nproc_per_node=${MA_NUM_GPUS} ${MA_EXTRA_TORCHRUN_PA RAM S} "启动文件" {arg1} {arg2} ... 多机时,ModelArts Standard平台使用如下命令启动训练作业的“启动文件”。 torchrun --nnodes=${MA_NUM_HOSTS} --nproc_per_node=${MA_NUM_GPUS} --node_rank=${VC_TASK_INDEX} --master_addr={master_addr} --master_port=${MA_TORCHRUN_MASTER_PORT} --rdzv_id={ma_job_name} --rdzv_backend=static ${MA_EXTRA_TORCHRUN_PARAMS} "启动文件" {arg1} {arg2} ... 参数说明如下: 表2 使用torchrun命令启动训练作业参数说明 参数名 参数解释 standalone 标识为单任务实例作业。 nnodes 任务实例个数。 nproc_per_node 每个任务实例启动的主进程数,设置为任务分配的NPU数相同。 node_rank 任务rank,用于多任务分布式训练。 master_addr 主任务(rank 0)的地址,设置为任务worker-0的通信 域名 。 master_port 在主任务(rank 0)上,用于分布式训练期间通信的端口。默认设置为18888端口。当遇到master_port冲突问题时,可通过设置MA_TORCHRUN_MASTER_PORT环境变量值修改端口配置。 rdzv_id Rendezvous标识,设置为带有训练作业ID的值。 rdzv_backend Rendezvous后端,固定设置为static,即不使用Rendezvous,而是使用master_addr和master_port配置。 另外,可通过设置MA_EXTRA_TORCHRUN_PARAMS环境变量值,以增加额外的torchrun命令参数,或是覆盖预设的torchrun命令参数。例如配置torchrun命令中rdzv_conf参数的训练作业API环境变量的部分示例如下: "environments": { "MA_RUN_METHOD": "torchrun", "MA_EXTRA_TORCHRUN_PARAMS": "--rdzv_conf=timeout=7200" } 如果在torchrun初始化分布式一致性协商阶段出现“RuntimeError:Socket Timeout”错误时,可以查看常见问题1,进一步排查问题。 启动方式三:使用msrun命令启动训练作业 当环境变量“MA_RUN_METHOD=msrun”时,表示ModelArts Standard平台使用msrun命令启动训练作业的“启动文件”。 要求MindSpore版本大于等于2.3.0。 该方案支持动态组网和基于rank table file文件组网两种方式。当配置了环境变量MS_RANKTABLE_ENABLE="True",则msrun会读取rank table file文件内容进行组网。否则默认使用动态组网。 msrun使用如下命令启动训练作业的“启动文件”。 msrun --worker_num=${msrun_worker_num} --local_worker_num=${MA_NUM_GPUS} --master_addr=${msrun_master_addr} --node_rank=${VC_TASK_INDEX} --master_port=${msrun_master_port} --log_dir=${msrun_log_dir} --join=True --cluster_time_out=${MSRUN_CLUSTER_TIME_OUT} --rank_table_file=${msrun_rank_table_file} "启动文件" {arg1} {arg2} ... 参数说明如下: 表3 msrun命令启动训练作业参数说明 参数名 参数解释 worker_num 所有进程个数。因为一个卡起一个进程,所以也表示使用总卡数。 local_worker_num 当前节点进程个数,即当前节点使用的卡数。 master_addr msrun组网调度进程所在节点的IP地址,单机场景无需配置。 master_port msrun组网调度进程的端口。 node_rank msrun组网调度进程的端口。 log_dir msrun组网和各个进程的日志输出地址。 join 训练进程拉起后,msrun进程是否仍存在,默认配置为“True”,等待所有进程退出后再退出。 cluster_time_out 集群组网超时时间,默认是“600s”,可通过环境变量“MSRUN_CLUSTER_TIME_OUT”控制。 rank_table_file rank table file文件地址,如果配置了环境变量“MS_RANKTABLE_ENABLE="True"”,启动时会增加该参数。
  • 构建自定义训练镜像 图1 训练作业的自定义镜像制作流程 场景一:预置镜像满足ModelArts训练平台约束,但不满足代码依赖的要求,需要额外安装软件包。 具体案例参考使用预置镜像制作自定义镜像用于训练模型。 场景二:已有本地镜像满足代码依赖的要求,但是不满足ModelArts训练平台约束,需要适配。 具体案例参考已有镜像迁移至ModelArts用于训练模型。 场景三: 当前无可使用的镜像,需要从0制作镜像(既需要安装代码依赖,又需要制作出的镜像满足ModelArts平台约束)。具体案例参考: 从0制作自定义镜像用于创建训练作业(Pytorch+Ascend) 从0制作自定义镜像用于创建训练作业(PyTorch+CPU/GPU) 从0制作自定义镜像用于创建训练作业(MPI+CPU/GPU) 从0制作自定义镜像用于创建训练作业(Tensorflow+GPU) 从0制作自定义镜像用于创建训练作业(MindSpore+Ascend)
  • 训练框架的自定义镜像约束 推荐自定义镜像使用ubuntu-18.04的操作系统,避免出现版本不兼容的问题。 自定义镜像的大小推荐15GB以内,最大不要超过资源池的容器引擎空间大小的一半。镜像过大会直接影响训练作业的启动时间。 ModelArts公共资源池的容器引擎空间为50G,专属资源池的容器引擎空间的默认为50G,支持在创建专属资源池时自定义容器引擎空间。 自定义镜像的默认用户必须为“uid”为“1000”的用户。 自定义镜像中不能安装GPU或Ascend驱动程序。当用户选择GPU资源运行训练作业时,ModelArts后台自动将GPU驱动程序放置在训练环境中的 /usr/local/nvidia目录;当用户选择Ascend资源运行训练作业时,ModelArts后台自动将Ascend驱动程序放置在/usr/local/Ascend/driver目录。 X86 CPU架构和ARM CPU架构的自定义镜像分别只能运行于对应CPU架构的规格中。 执行如下命令,查看自定义镜像的CPU架构。 docker inspect {自定义镜像地址} | grep Architecture ARM CPU架构的自定义镜像,上述命令回显如下。 "Architecture": "arm64" 规格中带有ARM字样的显示,为ARM CPU架构。 规格中未带有ARM字样的显示,为X86 CPU架构。 ModelArts后台暂不支持下载开源安装包,建议用户在自定义镜像中安装训练所需的依赖包。 自定义镜像需上传至 容器镜像服务 (SWR)才能在ModelArts上用于训练。
  • 如何防止Cloud Shell的Session断开 如果需要长时间运行某一个任务,为避免在期间连接断开导致任务失败,可通过使用screen命令使得任务在远程终端窗口运行。 如果镜像中未安装screen,则执行“apt-get install screen”安装。 创建screen终端。 # 使用 -S 创建一个叫name的screen终端 screen -S name 显示已创建的screen终端。 screen -ls There are screens on: 2433.pts-3.linux (2013年10月20日 16时48分59秒) (Detached) 2428.pts-3.linux (2013年10月20日 16时48分05秒) (Detached) 2284.pts-3.linux (2013年10月20日 16时14分55秒) (Detached) 2276.pts-3.linux (2013年10月20日 16时13分18秒) (Detached) 4 Sockets in /var/run/screen/S-root. 连接“screen_id”为“2276”的screen终端。 screen -r 2276 按下“Ctrl”+“a”+“d”键离开screen终端。离开后,screen会话仍将是活跃的,之后可以随时重新连接。 更多Screen使用说明可参考Screen User's Manual。
  • 出错的任务如何卡在运行中状态 创建训练作业时,启动命令末尾新增"|| sleep 5h",并启动训练作业,例如下方的cmd为您的启动命令: cmd || sleep 5h 如果训练失败,则会执行sleep命令,此时可通过Cloud Shell登录容器镜像中调试。 在Cloud Shell中调试多节点训练作业时,需要在Cloud Shell中切换work0、work1来实现对不同节点下发启动命令,否则任务会处于等待其他节点的状态。
  • 训练日志失败分析 在ModelArts Standard中训练作业遇到问题时,可首先查看日志,多数场景下的问题可以通过日志报错信息直接定位。 ModelArts Standard提供了训练作业失败定位与分析功能,如果训练作业运行失败,ModelArts会自动识别导致作业失败的原因,在训练日志界面上给出提示。提示包括三部分:失败的可能原因、推荐的解决方案以及对应的日志(底色标红部分)。 图1 训练故障识别 ModelArts Standard会对部分常见训练错误给出分析建议,目前还不能识别所有错误,提供的失败可能原因仅供参考。针对分布式作业,只会显示当前节点的一个分析结果,作业的失败需要综合各个节点的失败原因做一个综合判断。 常见训练问题定位思路如下: 根据日志界面提示中提供的分析建议解决。 参考案例解决:会提供当前故障对应的指导文档链接,请参照文档中的解决方案修复问题。 复制作业:建议复制作业进行重试,大概率能修复问题。 上一步不能解决问题时,可以尝试分析日志中提示的错误信息,定位并解决问题。 也可以前往ModelArts论坛中查看是否有同类问题。Ascend训练场景可以前往昇腾论坛查看或提问。 最后,如果以上均不能解决问题,可以提工单进行人工咨询。 父主题: 模型训练高可靠性
  • 步骤二:生成Summary数据 在开发环境中使用TensorBoard可视化功能,需要生成Summary数据。以下是一个简单的线性回归训练示例,展示如何生成和记录Summary数据。如果需要了解如何生成Summary数据,请参考PyTorch官方文档。 import torch from torch.utils.tensorboard import SummaryWriter writer = SummaryWriter() x = torch.arange(-5, 5, 0.1).view(-1, 1) y = -5 * x + 0.1 * torch.randn(x.size()) model = torch.nn.Linear(1, 1) criterion = torch.nn.MSELoss() optimizer = torch.optim.SGD(model.parameters(), lr = 0.1) def train_model(iter): for epoch in range(iter): y1 = model(x) loss = criterion(y1, y) writer.add_scalar("Loss/train", loss, epoch) optimizer.zero_grad() loss.backward() optimizer.step() train_model(10) writer.flush()
  • 步骤四:查看看板中的可视化数据 可视化看板是TensorBoard的可视化组件的重要组成部分,看板标签包含:标量可视化、图像可视化和计算图可视化等。 更多功能介绍和用法请参见TensorBoard官网资料。 由于Chrome等浏览器的安全限制导致无法从iframe下载数据,当前不支持可视化数据的Download data按钮。 如果可视化面板一直未展示数据,请检查可视化数据目录是否选择正确以及目录下的数据是否完整(请勿随意手工调整或删除部分训练打点产生的summary数据,否则可能无法正常可视化)。 如果数据正确但一直未成功展示数据(右上角刷新按钮一直在转圈),请打开一个terminal窗口,使用top命令查看CPU占用率等信息,可能是由于数据量过大导致CPU/Memory超负荷,建议减少数据量或者更换更大的Notebook实例规格。 如果偶尔显示数据未成功加载,可稍等片刻后单击右上角的刷新按钮,通常情况下可再次正常显示相关数据。
  • 步骤三:上传Summary数据 您可以将生成好的Summary数据,通过如下两种方式上传到Notebook中: Summary数据如果在本地,可以在Notebook左侧文件导航栏下新建目录,并通过拖拽等方式将本地数据上传到Notebook该新建目录中,具体请参见上传本地文件至JupyterLab。 Summary数据如果存储在OBS中,请确保该OBS路径与Notebook实例在同一区域。并通过动态挂载功能将该OBS路径挂载至Notebook中,具体请参见动态挂载OBS并行文件系统。 图1 Notebook中的待可视化的数据 建议将需要可视化的数据上传到单独目录下,如果使用OBS挂载功能,建议只挂载可视化数据所在层级的OBS路径到Notebook,而不是将整个桶都挂载上来进行可视化,避免混杂其他数据导致TensorBoard加载变慢,甚至无法正常可视化。
  • 步骤三:启动TensorBoard 在开发环境的JupyterLab中打开Launcher页面,然后单击TensorBoard图标。 图2 打开Launcher界面 图3 在Launcher中打开TensorBoard 首次单击TensorBoard会进入到一个默认的初始化面板,可以从该面板创建TensorBoard实例。 在Log Dir中填写可视化数据所在的目录,该路径为/home/ma-user/work下的相对路径,填写好后单击右侧“Create TensorBoard”按钮,如图2 打开Launcher界面所示。非首次进入则会直接进入到第一个活跃的TensorBoard实例。 图4 TensorBoard插件界面 参数介绍如下: Log Dir:默认是单击TensorBoard时当前侧边栏的目录,也可以手动填写对应目录,这里建议目录尽可能的细化,目录内容比较少的话会提高初始化速度。 Multi LogDir:支持输入多个目录参数,用逗号分隔,对应原生TensorBoard的--logdir_spec参数。TensorBoard官方对该功能支持不完善,不推荐使用。 Reload Interval:TensorBoard多久对相应目录进行一次重新扫描,这个选项是默认是关闭的,日常使用选择手动Reload即可(设置Reload Interval之后,TensorBoard后端持续扫描目录会对JupyterLab的稳定性和文件系统都产生一定的影响)。 关于该插件的更多功能介绍请参考jupyterlab_tensorboard_pro官网。 创建好后的Tensorboard可视化展示面板如图5所示。 单击图5中数字1所示按钮,可以在单独的浏览器页签展示可视化面板。 图5数字2中提供了实例管理相关功能,包括重启Tensorboard实例(Reload),关闭Tensorboard实例(Destory),复制一个前端可视化面板(Duplicated),创建一个新的Tensorboard实例(New)。 图5数字3处,可以使用JupyterLab的Kernel管理面板管理实例,提供跳转至对应实例和删除等功能。 图5 创建后的可视化界面 不建议打开Reload Interval,避免后台频繁刷新导致Notebook实例产生卡顿甚至无法正常使用,需要查看新数据时单击右上角刷新按钮即可。 不建议使用New按钮创建多个TensorBoard实例,该操作可能会导致CPU/Memory占用过大,导致Notebook实例卡顿甚至无法正常使用等问题。当需要可视化新的目录时,可以先将当前TensorBoard实例关闭,再指定新目录创建一个新的TensorBoard实例。
  • Step2 上传Summary数据 在开发环境中使用MindInsight可视化功能,需要用到Summary数据。 Summary数据可以直接传到开发环境的这个路径下/home/ma-user/work/,也可以放到OBS并行文件系统中。 Summary数据上传到Notebook路径/home/ma-user/work/下的方式,请参见上传数据至Notebook。 Summary数据如果是通过OBS并行文件系统挂载到Notebook中,请将模型训练时产生的Summary文件先上传到OBS并行文件系统,并确保OBS并行文件系统与ModelArts在同一区域。在Notebook中启动MindInsight时,Notebook会自动从挂载的OBS并行文件系统目录中读取Summary数据。
  • 准备工作 数据已完成准备:已在ModelArts中创建可用的数据集,或者您已将用于训练的数据集上传至OBS目录。 请准备好训练脚本,并上传至OBS目录。训练脚本开发指导参见开发用于预置框架训练的代码。 在训练代码中,用户需打印搜索指标参数。 已在OBS创建至少1个空的文件夹,用于存储训练输出的内容。 由于训练作业运行需消耗资源,确保账户未欠费。 确保您使用的OBS目录与ModelArts在同一区域。
  • 背景信息 如果用户使用的AI引擎为pytorch_1.8.0-cuda_10.2-py_3.7-ubuntu_18.04-x86_64和tensorflow_2.1.0-cuda_10.1-py_3.7-ubuntu_18.04-x86_64,并且优化的超参类型为float类型,ModelArts支持用户使用超参搜索功能。 在0代码修改的基础下,实现算法模型的超参搜索。需要完成以下步骤: 准备工作 创建算法 创建训练作业 查看超参搜索作业详情
  • 创建算法 进入ModelArts控制台,参考创建算法操作指导,创建自定义算法。镜像应该满足pytorch_1.8.0-cuda_10.2-py_3.7-ubuntu_18.04-x86_64或tensorflow_2.1.0-cuda_10.1-py_3.7-ubuntu_18.04-x86_64引擎。 对于用户希望优化的超参,需在“超参”设置中定义,可以给定名称、类型、默认值、约束等,具体设置方法可以参考表6。 单击勾选“自动搜索”,为算法设置算法搜索功能。自动搜索作业运行过程中,ModelArts后台通过指标正则表达式获取搜索指标参数,朝指定的优化方向进行超参优化。用户需要在代码中打印搜索参数并在控制台配置以下参数。 图1 设置算法搜索功能 搜索指标 搜索指标为目标函数的值,通常可以设置为loss、accuracy等。通过优化搜索指标的目标值超优化方向收敛,找到最契合的超参,提高模型精度和收敛速度。 表1 搜索指标参数 参数 说明 名称 搜索指标的名称。需要与您在代码中打印的搜索指标参数保持一致。 优化方向 可选“最大化”或者“最小化”。 指标正则 填入正则表达式。您可以单击智能生成功能自动获取正则表达式。 设置自动化搜索参数 从已设置的“超参”中选择可用于搜索优化的超参。优化的超参仅支持float类型,选中自动化搜索参数后,需设置取值范围。 搜索算法配置 ModelArts内置三种超参搜索算法,用户可以根据实际情况选择对应的算法,支持多选。对应的算法和参数解析请参考以下: bayes_opt_search:贝叶斯优化(SMAC) tpe_search:TPE算法 anneal_search:模拟退火算法(Anneal) 提交创建算法完成后即可执行下一步,创建训练作业。
  • 模拟退火算法(Anneal) 模拟退火算法即Anneal算法,是随机搜索中一个简单但有效的变体,它利用了响应曲面中的平滑度。退火速率不自适应。Anneal算法从先前采样的一个试验点作为起点,然后从与先验分布相似的分布中采样每组超参数,但其密度更集中在选择的试验点周围。随着时间推移,算法会倾向于从越来越接近最佳点处采样。在采样过程中,算法可能绘制一个次佳试验作为最佳试验,以一定概率跳出局部最优解。 表3 模拟退火算法的参数说明 参数 说明 取值参考 num_samples 搜索尝试的超参组数 int,一般在10-20之间,值越大,搜索时间越长,效果越好 avg_best_idx 要探索试验的几何分布平均,从按照分数排序的试验中选择 float,一般不建议用户修改 shrink_coef 随着更多的点被探索,邻域采样大小的减少率 float,一般不建议用户修改
  • TPE算法 TPE算法全称Tree-structured Parzen Estimator,是一种利用高斯混合模型来学习超参模型的算法。在每次试验中,对于每个超参,TPE为与最佳目标值相关的超参维护一个高斯混合模型l(x),为剩余的超参维护另一个高斯混合模型g(x),选择l(x)/g(x)最大化时对应的超参作为下一组搜索值。 表2 TPE算法的参数说明 参数 说明 取值参考 num_samples 搜索尝试的超参组数 int,一般在10-20之间,值越大,搜索时间越长,效果越好 n_initial_points 采用TPE接近目标函数之前,对目标函数的随机评估数 int,一般不建议用户修改 gamma TPE算法的一定分位数,用于划分l(x)和g(x) float,范围(0,1),一般不建议用户修改
  • 贝叶斯优化(SMAC) 贝叶斯优化假设超参和目标函数存在一个函数关系。基于已搜索超参的评估值,通过高斯过程回归来估计其他搜索点处目标函数值的均值和方差。根据均值和方差构造采集函数(Acquisition Function),下一个搜索点为采集函数的极大值点。相比网格搜索,贝叶斯优化会利用之前的评估结果,从而降低迭代次数、缩短搜索时间;缺点是不容易找到全局最优解。 表1 贝叶斯优化的参数说明 参数 说明 取值参考 num_samples 搜索尝试的超参组数 int,一般在10-20之间,值越大,搜索时间越长,效果越好 kind 采集函数类型 string,默认为'ucb',可能取值还有'ei'、'poi',一般不建议用户修改 kappa 采集函数ucb的调节参数,可理解为上置信边界 float,一般不建议用户修改 xi 采集函数poi和ei的调节参数 float,一般不建议用户修改
  • ModelArts Standard中如何实现断点续训练 在ModelArts Standard训练中实现断点续训练或增量训练,建议使用“训练输出”功能。 在创建训练作业时,设置训练“输出”参数为“train_url”,在指定的训练输出的数据存储位置中保存Checkpoint,且“预下载至本地目录”选择“下载”。选择预下载至本地目录时,系统在训练作业启动前,自动将数据存储位置中的Checkpoint文件下载到训练容器的本地目录。 图1 训练输出设置 断点续训练建议和训练容错检查(即自动重启)功能同时使用。在创建训练作业页面,开启“自动重启”开关。训练环境预检测失败、或者训练容器硬件检测故障、或者训练作业失败时会自动重新下发并运行训练作业。
  • 什么是断点续训练 断点续训练是指因为某些原因(例如容错重启、资源抢占、作业卡死等)导致训练作业还未完成就被中断,下一次训练可以在上一次的训练基础上继续进行。这种方式对于需要长时间训练的模型而言比较友好。 断点续训练是通过checkpoint机制实现。 checkpoint的机制是:在模型训练的过程中,不断地保存训练结果(包括但不限于EPOCH、模型权重、优化器状态、调度器状态)。即便模型训练中断,也可以基于checkpoint接续训练。 当需要从训练中断的位置接续训练,只需要加载checkpoint,并用checkpoint信息初始化训练状态即可。用户需要在代码里加上reload ckpt的代码,使能读取前一次训练保存的预训练模型。
  • 前提条件 由于训练作业运行需消耗资源,为了避免训练失败请确保账户未欠费。 已经将用于训练作业的数据上传至OBS目录。 已经在OBS目录下创建了至少1个空的文件夹,用于存储训练输出的内容。 ModelArts不支持加密的OBS桶,创建OBS桶时,请勿开启桶加密。 确保使用的OBS目录与ModelArts在同一区域。 检查是否配置了访问授权。如果未配置,请参见快速配置ModelArts委托授权完成操作。
共100000条
提示

您即将访问非华为云网站,请注意账号财产安全