云服务器内容精选

  • 模型训练使用流程 AI模型开发的过程,称之为Modeling,一般包含两个阶段: 开发阶段:准备并配置环境,调试代码,使代码能够开始进行深度学习训练,推荐在ModelArts开发环境中调试。 实验阶段:调整数据集、调整超参等,通过多轮实验,训练出理想的模型,推荐在ModelArts训练中进行实验。 两个过程可以相互转换。如开发阶段代码稳定后,则会进入实验阶段,通过不断尝试调整超参来迭代模型;或在实验阶段,有一个可以优化训练的性能的想法,则会回到开发阶段,重新优化代码。 图1 模型开发过程 ModelArts提供了模型训练的功能,方便您查看训练情况并不断调整您的模型参数。您还可以基于不同的数据,选择不同规格的资源池用于模型训练。 请参考以下指导在ModelArts Standard上训练模型。 图2 ModelArts Standard模型训练流程 表1 Standard模型训练流程 操作任务 子任务 说明 准备工作 准备训练代码 模型训练必备要素包括训练代码、训练框架、训练数据。 训练代码包含训练作业的启动文件或启动命令、训练依赖包等内容。 当使用预置框架创建训练作业时,训练代码的开发规范可以参考开发用于预置框架训练的代码。 当使用 自定义镜像 创建训练作业时,训练代码的开发规范可以参考开发用于自定义镜像训练的代码。 准备训练框架(即训练镜像) 模型训练有多种训练框架来源,具体可以参考准备模型训练镜像。 ModelArts Standard平台提供了模型训练常用的预置框架,可以直接使用。 当预置框架不满足训练要求时,支持用户构建自定义镜像用于训练。 准备训练数据 训练数据除了训练数据集,也可以是预测模型。在创建训练作业前,需要先准备好训练数据。 当训练数据可以直接使用,无需二次处理时,可以直接将数据上传至OBS桶。在创建训练作业时,训练的输入参数位置可以直接填写OBS桶路径。 当训练数据集的数据未标注或者需要进一步的数据预处理,可以先将数据导入ModelArts数据管理模块进行数据预处理。在创建训练作业时,训练的输入参数位置可以选择数据管理模块的数据集。 创建调试训练作业 调试训练作业 模型训练前,一般会先对代码进行调试,ModelArts提供多种方式创建调试训练作业。 ModelArts提供了云化版本的JupyterLab,无需关注安装配置,即开即用。 ModelArts也提供了本地IDE的方式开发模型,通过开启SSH远程开发,本地IDE可以远程连接到调试训练作业中,进行调试和运行代码。本地IDE方式不影响用户的编码习惯,并且调试完成的代码可以零成本直接创建生产训练作业。支持的本地IDE请参考使用PyCharm ToolKit创建并调试训练作业。 创建算法 创建算法 创建生产训练作业之前,需要先准备算法,可以是用户自己准备的算法,也可以使用从AI Gallery订阅的算法。 创建生产训练作业 训练作业基础功能 ModelArts Standard支持通过Console控制台的可视化界面创建训练作业,创建时基于算法来源和训练框架又区分多种创建方式,具体请参见表2。 ModelArts Standard也支持通过调用API接口创建训练作业,请参见以PyTorch框架创建训练作业。 训练作业进阶功能 ModelArts Standard还支持以下训练进阶功能,例如: 增量训练 分布式训练 训练加速 训练高可靠性 查看训练结果和日志 查看训练作业详情 训练作业运行中或运行结束后,可以在训练作业详情页面查看训练作业的参数设置,训练作业事件等。 查看训练作业日志 训练日志用于记录训练作业运行过程和异常信息,可以通过查看训练作业日志定位作业运行中出行的问题。 表2 训练作业的创建方式介绍 创建方式 适用场景 使用预置框架创建训练作业 如果您已在本地使用一些常用框架完成算法开发,您可以选择常用框架,创建训练作业来构建模型 使用自定义镜像创建训练作业 如果您开发算法时使用的框架并不是常用框架,您可以将算法构建为一个自定义镜像,通过自定义镜像创建训练作业。 使用已有算法创建训练作业 算法管理中,管理了用户自己创建的算法和AI Gallery订阅的算法,您可以使用算法管理中的算法,快速创建训练作业,构建模型。 使用订阅算法创建训练作业 AI Gallery中提供了现成的算法,供用户使用,您可以直接订阅AI Gallery中的算法,快速创建训练作业,构建模型。 父主题: 使用ModelArts Standard训练模型
  • 定义超参 创建算法时,ModelArts Standard支持用户自定义超参,方便用户查阅或修改。定义超参后会体现在启动命令中,以命令行参数的形式传入您的启动文件中。 导入超参 您可以单击“增加超参”手动添加超参。 编辑超参 为保证数据安全,请勿输入敏感信息,例如明文密码。 超参的参数说明参见表6。 表6 超参编辑参数 参数 说明 名称 填入超参名称。 超参名称支持64个以内字符,仅支持大小写字母、数字、下划线和中划线。 类型 填入超参的数据类型。支持String、Integer、Float和Boolean。 默认值 填入超参的默认值。创建训练作业时,默认使用该值进行训练。 约束 单击“约束”。在弹出对话框中,支持用户设置默认值的取值范围或者枚举值范围。 必须 选择是或否。 选择否,则在使用该算法创建训练作业时,支持在创建训练作业页面删除该超参。 选择是,则在使用该算法创建训练作业时,不支持在创建训练作业页面删除该超参。 描述 填入超参的描述说明。 超参描述支持大小写字母、中文、数字、空格、中划线、下划线、中英文逗号和中英文句号。
  • 支持的策略 ModelArts Stanard支持用户使用自动化搜索功能。自动化搜索功能在零代码修改的前提下,自动找到最合适的超参,有助于提高模型精度和收敛速度。详细的参数配置请参考创建自动模型优化的训练作业。 自动搜索目前仅支持“tensorflow_2.1.0-cuda_10.1-py_3.7-ubuntu_18.04-x86_64”和“pytorch_1.8.0-cuda_10.2-py_3.7-ubuntu_18.04-x86_64”镜像
  • 输入输出管道设置 训练过程中,算法需要从OBS桶或者数据集中获取数据进行模型训练,训练产生的输出结果也需要存储至OBS桶中。用户的算法代码中需解析输入输出参数实现ModelArts后台与OBS的数据交互,用户可以参考准备模型训练代码完成适配ModelArts训练的代码开发。 创建基于预置框架的算法时,用户需要配置算法代码中定义的输入输出参数。 输入配置 表4 输入配置 参数 参数说明 参数名称 根据实际代码中的输入数据参数定义此处的名称。此处设置的代码路径参数必须与算法代码中解析的训练输入数据参数保持一致,否则您的算法代码无法获取正确的输入数据。 例如,算法代码中使用argparse解析的data_url作为输入数据的参数,那么创建算法时就需要配置输入数据的参数名称为“data_url”。 描述 输入参数的说明,用户可以自定义描述。 获取方式 输入参数的获取方式,默认使用“超参”,也可以选择“环境变量”。 输入约束 开启后,用户可以根据实际情况限制数据输入来源。输入来源可以选择“数据存储位置”或者“ModelArts数据集”。 如果用户选择数据来源为ModelArts数据集,还可以约束以下三种: 标注类型。数据类型请参考标注数据。 数据格式。可选“Default”和“CarbonData”,支持多选。其中“Default”代表Manifest格式。 数据切分。仅“图像分类”、“物体检测”、“文本分类”和“声音分类”类型数据集支持进行数据切分功能。 可选“仅支持切分的数据集”、“仅支持未切分数据集”和“无限制”。数据切分详细内容可参考发布数据版本。 添加 用户可以根据实际算法添加多个输入数据来源。 输出配置 表5 输出配置 参数 参数说明 参数名称 根据实际代码中的训练输出参数定义此处的名称。此处设置的代码路径参数必须与算法代码中解析的训练输出参数保持一致,否则您的算法代码无法获取正确的输出路径。 例如,算法代码中使用argparse解析的train_url作为训练输出数据的参数,那么创建算法时就需要配置输出数据的参数名称为“train_url”。 描述 输出参数的说明,用户可以自定义描述。 获取方式 输出参数的获取方式,默认使用“超参”,也可以选择“环境变量”。 添加 用户可以根据实际算法添加多个输出数据路径。
  • 设置算法启动方式(自定义) 选择“预置框架”+“自定义”镜像创建算法。 图3 完全使用自定义镜像创建算法 表3 启动方式参数说明 参数 说明 “启动方式” 选择“自定义”。 “镜像” 用户制作的镜像需要提前上传到SWR,才可以在这里选择。制作镜像的方式请参见训练作业的自定义镜像制作流程。 “代码目录” 算法代码存储的OBS路径。训练代码、依赖安装包或者预生成模型等训练所需文件上传至该代码目录下。如果自定义镜像中不含训练代码则需要配置该参数,如果自定义镜像中已包含训练代码则不需要配置。 请注意不要将训练数据放在代码目录路径下。训练数据比较大,训练代码目录在训练作业启动后会下载至后台,可能会有下载失败的风险。 训练作业启动时,ModelArts会将训练代码目录及其子目录下载至训练后台容器中。 例如:OBS路径“obs://obs-bucket/training-test/demo-code”作为代码目录,OBS路径下的内容会被自动下载至训练容器的“${MA_JOB_DIR}/demo-code”目录中,demo-code为OBS存放代码路径的最后一级目录,用户可以根据实际修改。 说明: 训练代码编程语言不限。训练启动文件必须为Python语言。 文件数(含文件、文件夹数量)小于或等于1000个。 文件总大小要小于或等于5GB。 文件深度要小于或等于32 “启动命令” 必填,镜像的启动命令。 运行训练作业时,当“代码目录”下载完成后,“启动命令”会被自动执行。 如果训练启动脚本用的是py文件,例如“train.py”,则启动命令如下所示。 python ${MA_JOB_DIR}/demo-code/train.py 如果训练启动脚本用的是sh文件,例如“main.sh”,则启动命令如下所示。 bash ${MA_JOB_DIR}/demo-code/main.sh 启动命令支持使用“;”和“&&”拼接多条命令,命令中的“demo-code”为存放代码目录的最后一级OBS目录,以实际情况为准。 训练支持的自定义镜像使用说明请参考使用自定义镜像创建训练作业。 完全使用自定义镜像场景下,指定的“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 如果在训练时发生找不到“$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
  • 设置算法启动方式(预置框架+自定义) 选择“预置框架”+“自定义”镜像创建算法。 图2 使用预置框架+自定义镜像创建算法 用户需根据实际算法代码情况设置“镜像”、“代码目录”和“启动文件”。选择的AI镜像和编写算法代码时选择的框架必须一致。例如编写算法代码使用的是TensorFlow,则在创建算法时也要选择TensorFlow镜像。 表2 启动方式参数说明 参数 说明 “启动方式” 选择“预置框架”。 预置框架的引擎版本选择“自定义”。 “镜像” 用户制作的镜像需要提前上传到SWR,才可以在这里选择。制作镜像的方式请参见训练作业的自定义镜像制作流程。 “代码目录” 算法代码存储的OBS路径。训练代码、依赖安装包或者预生成模型等训练所需文件上传至该代码目录下。 请注意不要将训练数据放在代码目录路径下。训练数据比较大,训练代码目录在训练作业启动后会下载至后台,可能会有下载失败的风险。 训练作业启动时,ModelArts会将训练代码目录及其子目录下载至训练后台容器中。 例如:OBS路径“obs://obs-bucket/training-test/demo-code”作为代码目录,OBS路径下的内容会被自动下载至训练容器的“${MA_JOB_DIR}/demo-code”目录中,demo-code为OBS存放代码路径的最后一级目录,用户可以根据实际修改。 说明: 训练代码编程语言不限。训练启动文件必须为Python语言。 文件数(含文件、文件夹数量)小于或等于1000个。 文件总大小要小于或等于5GB。 文件深度要小于或等于32 “启动文件” 必须为“代码目录”下的文件,且以“.py”结尾,即ModelArts目前只支持使用Python语言编写的启动文件。 代码目录路径中的启动文件为训练启动的入口。 选择预置框架+自定义时,该功能的后台行为与直接基于预置框架运行训练作业相同,例如: 系统将会自动注入一系列环境变量 PATH=${MA_HOME}/anaconda/bin:${PATH} LD_LIBRARY_PATH=${MA_HOME}/anaconda/lib:${LD_LIBRARY_PATH} PYTHONPATH=${MA_JOB_DIR}:${PYTHONPATH} 您选择的启动文件将会被系统自动以python命令直接启动,因此请确保镜像中的Python命令为您预期的Python环境。注意到系统自动注入的PATH环境变量,您可以参考下述命令确认训练作业最终使用的Python版本: export MA_HOME=/home/ma-user; docker run --rm {image} ${MA_HOME}/anaconda/bin/python -V docker run --rm {image} $(which python) -V 系统将会自动添加预置框架关联的超参
  • 选择算法的实现方式 ModelArts提供如下方式实现模型训练前的算法准备。 使用订阅算法 ModelArts的AI Gallery提供了可以直接订阅的算法,不需要进行代码开发,即可使用现成的算法进行模型构建。 使用预置框架 如果您需要使用自己开发的算法,可以选择使用ModelArts预置框架。ModelArts支持了大多数主流的AI引擎,详细请参见预置训练引擎。这些预置引擎预加载了一些额外的python包,例如numpy等;也支持您通过在代码目录中使用“requirements.txt”文件安装依赖包。使用预置框架创建训练作业请参考开发用于预置框架训练的代码指导。 使用预置框架 + 自定义镜像: 如果先前基于预置框架且通过指定代码目录和启动文件的方式来创建的算法;但是随着业务逻辑的逐渐复杂,您期望可以基于预置框架修改或增加一些软件依赖的时候,此时您可以使用预置框架 + 自定义镜像的功能,即选择预置框架名称后,在预置框架版本下拉列表中选择“自定义”。 此功能与直接基于预置框架创建算法的区别仅在于,镜像是由用户自行选择的。用户可以基于预置框架制作自定义镜像。基于预置框架制作自定义镜像可参考使用基础镜像构建新的训练镜像章节。 完全自定义镜像: 订阅算法和预置框架涵盖了大部分的训练场景。针对特殊场景,ModelArts支持用户构建自定义镜像用于模型训练。用户遵循ModelArts镜像的规范要求制作镜像,选择自己的镜像,并且通过指定代码目录(可选)和启动命令的方式来创建的训练作业。 自定义镜像需上传至 容器镜像服务 (SWR),才能用于ModelArts上训练,请参考使用自定义镜像训练模型。由于自定义镜像的制作要求用户对容器相关知识有比较深刻的了解,除非订阅算法和预置引擎无法满足需求,否则不推荐使用。 当使用完全自定义镜像创建训练作业时,“启动命令”必须在“/home/ma-user”目录下执行,否则训练作业可能会运行异常。
  • 设置算法启动方式(预置框架) 选择“预置框架”创建算法。 图1 使用预置框架创建算法 用户需根据实际算法代码情况设置“镜像”、“代码目录”和“启动文件”。选择的AI镜像和编写算法代码时选择的框架必须一致。例如编写算法代码使用的是TensorFlow,则在创建算法时也要选择TensorFlow镜像。 表1 启动方式参数说明 参数 说明 “启动方式” 选择“预置框架”。 选择算法使用的预置框架引擎和引擎版本。 “代码目录” 算法代码存储的OBS路径。训练代码、依赖安装包或者预生成模型等训练所需文件上传至该代码目录下。 请注意不要将训练数据放在代码目录路径下。训练数据比较大,训练代码目录在训练作业启动后会下载至后台,可能会有下载失败的风险。 训练作业创建完成后,ModelArts会将代码目录及其子目录下载至训练后台容器中。 例如:OBS路径“obs://obs-bucket/training-test/demo-code”作为代码目录,OBS路径下的内容会被自动下载至训练容器的“${MA_JOB_DIR}/demo-code”目录中,demo-code为OBS存放代码路径的最后一级目录,用户可以根据实际修改。 说明: 编程语言不限。 文件数(含文件、文件夹数量)小于或等于1000个。 文件总大小小于或等于5GB。 “启动文件” 必须为“代码目录”下的文件,且以“.py”结尾,即ModelArts目前只支持使用Python语言编写的启动文件。 代码目录路径中的启动文件为训练启动的入口。
  • 构建自定义训练镜像 当基础镜像里的软件无法满足您的程序运行需求时,您还可以基于这些基础镜像制作一个新的镜像并进行训练。镜像制作流程如图1所示。 图1 训练作业的自定义镜像制作流程 场景一:预置镜像满足ModelArts训练平台约束,但不满足代码依赖的要求,需要额外安装软件包。 具体案例参考使用预置镜像制作自定义镜像用于训练模型。 场景二:已有本地镜像满足代码依赖的要求,但是不满足ModelArts训练平台约束,需要适配。 具体案例参考已有镜像迁移至ModelArts用于训练模型。 场景三: 当前无可使用的镜像,需要从0制作镜像(既需要安装代码依赖,又需要制作出的镜像满足ModelArts平台约束)。具体案例参考: 从0制作自定义镜像用于创建训练作业(PyTorch+CPU/GPU) 从0制作自定义镜像用于创建训练作业(MPI+CPU/GPU) 从0制作自定义镜像用于创建训练作业(Tensorflow+GPU) 从0制作自定义镜像用于创建训练作业(MindSpore+Ascend)
  • 训练作业的预置框架介绍 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
  • ModelArts Standard中如何实现增量训练 增量训练是通过Checkpoint机制实现。 Checkpoint的机制是:在模型训练的过程中,不断地保存训练结果(包括但不限于EPOCH、模型权重、优化器状态、调度器状态)。当需要增加新的数据继续训练时,只需要加载Checkpoint,并用Checkpoint信息初始化训练状态即可。用户需要在代码里加上reload ckpt的代码,使能读取前一次训练保存的预训练模型。 在ModelArts训练中实现增量训练,建议使用“训练输出”功能。 在创建训练作业时,设置训练“输出”参数为“train_url”,在指定的训练输出的数据存储位置中保存Checkpoint,且“预下载至本地目录”选择“下载”。选择预下载至本地目录时,系统在训练作业启动前,自动将数据存储位置中的Checkpoint文件下载到训练容器的本地目录。 图1 训练输出设置
  • 什么是增量训练 增量训练(Incremental Learning)是机器学习领域中的一种训练方法,它允许人工智能(AI)模型在已经学习了一定知识的基础上,增加新的训练数据到当前训练流程中,扩展当前模型的知识和能力,而不需要从头开始。 增量训练不需要一次性存储所有的训练数据,缓解了存储资源有限的问题;另一方面,增量训练节约了重新训练中需要消耗大量算力、时间以及经济成本。 增量训练特别适用于以下情况: 数据流更新:在实际应用中,数据可能会持续更新,增量训练允许模型适应新的数据而不必重新训练。 资源限制:如果重新训练一个大型模型成本过高,增量训练可以是一个更经济的选择。 避免灾难性遗忘:在传统训练中,新数据可能会覆盖旧数据的知识,导致模型忘记之前学到的内容。增量训练通过保留旧知识的同时学习新知识来避免这个问题。 增量训练在很多领域都有应用,比如 自然语言处理 、计算机视觉和推荐系统等。它使得AI系统能够更加灵活和适应性强,更好地应对现实世界中不断变化的数据环境。