华为云用户手册

  • html总览 html中包括总体性能分析(overall)、快慢卡算子性能比对(comparison)和性能问题分析(performance problem analysis)三大模块。overall模块包含对单卡或者集群的性能统计数据,comparison模块包含目标集群profiling与标杆集群profiling或目标集群内部快慢卡的算子比对数据,performance problem analysis模块包含计算(computation)、下发(schedule)、通信(communication)、内存(memory)和数据加载(dataloader)五个维度的具体分析。用户首先需要查看overall模块初步明确是否存在计算维度的慢卡和下发维度慢卡,然后再重点关注performance problem analysis中对应维度的各项分析及其优先级。 红色为高优先级,黄色为中等优先级,绿色为低优先级。参考html进行分析调优时,请按照优先级从高到低依次进行并测试调优后性能,快速解决重点问题。 图1 html报告总览-三大模块 当前advisor的performance problem analysis中包含如下分析项。 表1 性能分析能力概览 分析维度 分析项 释义 overall overall summary 对于单卡profiling进行性能拆解,获取单步计算、下发和通信耗时。 slow rank 对于集群profiling进行性能统计,获取每张卡不同step的计算、下发和通信耗时。 slow link 对于集群profiling进行性能统计,获取每张卡不同step的带宽信息。 environment variable 识别错误配置且会影响性能的环境变量,如P LOG 日志级别,HCCL相关环境变量,依赖24年930版本的pta。 comparison kernel compare 两张卡NPU侧计算算子对比。 api compare 两张卡CPU侧torch aten算子下发对比。 performance problem analysis computation - AI CORE frequency 计算维度,识别降频的节点,节点降频会导致flash attention和matmul类算子计算性能变差。 computation - AICPU 计算维度,识别AICPU算子,部分AICPU算子计算性能较差。 computation - operator dynamic shape 计算维度,检测动态shape,动态shape会触发频繁的算子编译。 computation - operator bound 计算维度,算子计算性能分析,例如算子是否充分使用AICORE核数。 schedule - synchronize stream 下发维度,异常同步流分析,过多同步流会打断CPU侧任务异步下发。 schedule - garbage collection(GC) 下发维度,识别异常耗时的垃圾回收,垃圾回收会造成大段空闲。 schedule - operator dispatch 下发维度,算子下发时编译分析,大量算子编译会导致整体训练性能变差。 schedule - syncBatchNorm 下发维度,NPU上分布式训练使用syncBN性能较差。 schedule - affinity api 下发维度,自动识别可替换的亲和API(融合算子API如rms_norm,亲和优化器如NpuFusedAdamw)。 communication - small packet 通信维度,识别因batch过小或者梯度累积较少导致的未充分利用机内通信带宽。 communication - bandwidth contention 通信维度,识别计算和通信相互掩盖,可能会抢占通信带宽。 communication - retransmission 通信维度,识别通信重传问题,单次重传耗时4秒以上。 memory 内存维度,识别异常内存算子。 dataloader 数据加载维度,异常耗时的数据读取将会导致明显的训练性能劣化。
  • overall模块介绍 单卡overall summary 下图展示了单卡上一个step的端到端耗时为1353ms,其中计算耗时(昇腾硬件上算子执行耗时)是57ms,未掩盖通信耗时为0ms,空闲耗时(硬件上没有进行计算和通信的其他时间)为1295ms。基于这三项数据可以初步判断当前训练任务的主要耗时瓶颈为空闲耗时。空闲耗时通常是任务下发(schedule)、数据加载(dataloader)和内存(memory)三个维度问题导致的,因此可以重点关注performance problem analysis中对应三个维度的分析。同理如果计算耗时占比较大,则应该重点关注计算维度的分析。 图2 单卡性能拆解总体描述 图3 单卡性能拆解详情 多卡slow rank & slow link 下图展示了多卡profiling分析的overall模块,包含集群快慢卡统计数值(slow rank,用于分析计算和任务下发的快慢卡)和集群带宽统计数值(slow link,用于分析集群中的网络通信慢链路)。点开slow rank模块,html中会基于表格展示每张卡不同step的计算耗时、通信耗时和空闲耗时。基于该表格,通常关注计算耗时(compute)和空闲耗时(free)这两列,可以初步分析当前瓶颈点是计算还是任务下发,以及是否存在计算快慢卡和下发快慢卡。如下图所示,可以看到8号卡的计算耗时明显大于其他卡,因此8号卡的“短板效应”将会拖慢集群的整体训练速度,后续性能分析需要重点关注8号卡的计算维度。 图4 多卡不同step计算、下发和通信耗时统计值 图5 多卡不同step通信带宽统计值 环境变量Environment Variable Issues 识别模型训练环境中设置的昇腾相关环境变量并给出建议。 图6 环境变量分析 表2 当前支持的环境变量 环境变量名称 释义 ASCEND_GLOBAL_LOG_LEVEL plog日志级别,推荐设置为2(warning级别),低级别日志等级会导致cpu侧性能问题。 HCCL_RDMA_TC HCCL通信相关环境变量,通常无需设置该环境变量,建议unset该环境变量。具体参考拥塞控制与纠错配置策略 HCCL_RDMA_SL HCCL通信相关环境变量,通常无需设置该环境变量,建议unset该环境变量。具体参考拥塞控制与纠错配置策略 ACLNN_CACHE_LIMIT 用于缓存cann侧的aclnn算子,当空闲时间(free)较大时,可以尝试设置一个较大的数值,如export ACLNN_CACHE_LIMIT=100000 HOST_CACHE_CAPACITY 用于动态shape缓存,当存在动态shape时,设置一个非零正整数,如export HOST_CACHE_CAPACITY=20 ASCEND_ENHANCE_ENABLE 使能HCCL的FFTS+模式,export ASCEND_ENHANCE_ENABLE=1 PYTORCH_NPU_ALLOC_CONF 控制缓存分配,当存在内存碎片时,执行export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True ASCEND_LAUNCH_BLOCKING 是否启动同步下发,同步下发会导致严重的性能劣化,建议执行unset ASCEND_LAUNCH_BLOCKING
  • comparison模块介绍 当同时指定目标集群profiling和标杆集群profiling或者目标集群内部存在快慢卡时,advisor会针对计算和下发性能存在差异的卡(快慢卡)进行算子级的对比。 如下图所示,当分析时显式指定了标杆集群profiling数据,advisor识别到两次训练任务中0号卡的step12存在计算性能差异,则会对目标集群的0号卡step12与标杆集群的0号卡step12进行kernel(npu侧计算的算子)性能对比。基于该对比数据,可以判断两张卡上的npu算子是否存在计算性能差异。 图7 目标集群profiling数据与标杆集群profiling数据的kernel算子对比 如下图所示,当分析时显式指定了标杆集群profiling数据,advisor识别到两次训练任务中6号卡的step16存在api下发性能差异,对目标集群的6号卡step16与标杆集群的6号卡step16进行了api(cpu侧的torch aten算子任务下发)的性能对比。基于该对比数据,可以判断两张卡上的aten算子是否存在下发性能差异。 图8 目标集群profiling数据与标杆集群profiling数据的api下发对比 如下图所示,分析时并没有指定标杆集群profiling数据,但advisor识别到目标集群存在任务下发快慢卡(16和19号卡)现象,因此对比了16号卡step175和19号卡step172的api下发性能。 图9 目标集群(无标杆集群profiling)内部快慢卡api下发对比
  • 操作步骤 创建Notebook实例。 在ModelArts控制台创建一个Notebook实例,选择要使用的AI框架,创建Notebook时可以选择任意镜像。具体参见创建Notebook实例。 创建成功后,Notebook实例的状态为“运行中”,单击操作列的“打开”,访问JupyterLab。 图1 打开Notebook实例 进入JupyterLab页面后,自动打开Launcher页面,如下图所示。 图2 JupyterLab主页 不同AI引擎的Notebook,打开后Launcher页面呈现的Notebook和Console内核及版本均不同,图2仅作为示例,请以实际控制台为准。 单击Launcher页面的“Performance Advisor”图标,界面将如下图所示 图3 Performance Adviso主页面 提交性能诊断任务 如果您的NPU性能数据存放在OBS上,Source选择OBS,Path输入OBS地址,格式如obs://bucket1/profiling_dir1,单击Submit按钮。界面参考下图。 图4 分析OBS上的性能数据 如果您的NPU性能数据存放在Notebook上,Source选择Local,Path输入Notebook的绝对或相对路径(相对于/home/ma-user/work),格式如/home/ma-user/work/profiling_dir1或者./profiling_dir1,单击Submit按钮。界面参考下图。 图5 分析Notebook本地的性能数据 如果您有两份性能数据想进行对比,可以点开Compared Profiling Data选项开关,然后分别在NPU Profiling Data和Compared Profiling Data项中输入性能数据所在的Notebook本地或OBS路径,单击Submit按钮。界面参考下图。 图6 对比两份性能数据 性能诊断插件支持设置高级参数,当前支持的高级参数列表如下表所示。 表1 高级参数介绍 序号 键 默认值 是否必填 说明 1 cann_version 8.0.RC1 否 可选值包括6.3.RC2、7.0.RC1、7.0.0和8.0.RC1。当运行环境实际cann版本与可选值不匹配时选择大版本相近的可选值即可。主要影响亲和api分析和aicpu算子分析。 2 torch_version 2.1.0 否 可选值包括1.11.0和2.1.0,当运行环境实际torch版本与可选值不匹配时选择大版本相近的可选值即可。主要有影响亲和api分析。 3 analysis_dimensions computation, communication, schedule, memory 否 默认进行计算、通信、下发和内存的全维度分析。可以指定默认值中任意单维度进行分析,如仅指定computation进行计算维度分析,仅指定schedule进行下发维度分析。推荐不填写该参数,即使用默认值进行分析。 4 advisor_analyze_processes 1 否 advisor分析进程数,可选范围为1-8的任意整数。当LLM类模型训练的流水并行参数pp大于1时,advisor会对不同pp stage的训练profilingg数据进行分析。通过设置更大的进程数可以使能并行分析从而加快分析速度,但也会增大分析占用的cpu资源。通常单进程需要占用1U的cpu和一定cpu memory(取决于模型大小),请根据实际分析环境的资源规格调整该参数,避免因cpu资源占用过大或者OOM类问题导致的notebook实例异常。 5 disable_profiling_comparison False 否 关闭快慢卡算子比对。对于集群任务的profiling分析,如果存在快慢卡问题则会自动进行集群内部快慢卡的算子性能比对,包括npu侧计算的算子比对和cpu侧torch算子下发比对。当模型较大时,算子比对将会比较耗时,建议设置为True来提升分析速度。 6 disable_affinity_api False 否 关闭亲和算子(融合算子、亲和优化器)API分析。对于首次从gpu迁移至npu的训练任务性能分析,建议保留该参数,替换亲和算子API通常能获得一定性能收益。对于完成迁移后在npu上长训的训练任务,如果出现性能问题,建议设置为True来提升分析速度。 7 output_path /home/ma-user/work 否 advisor分析结果输出路径,包含html和xlsx两个文件。 如果您想修改参数配置,可以点开Advanced Settings选项开关,然后对参数进行新增或修改。界面参考下图。 图7 修改高级参数 查看性能诊断任务结果。 单击Performance Advisor页面的Report选项,可以看到已提交的性能诊断任务详情。 图8 查看性能诊断任务结果 当前支持的状态有“分析中(Analyzing)、成功(Success)和失败(Failed)”。分析中的任务根据性能诊断数据量大小预计将在1~10分钟内完成;成功的任务可单击Report列的View链接查看详细的诊断报告,如下图所示,失败的任务可将鼠标放到Failed字段上,将弹出具体的失败原因。诊断报告详细介绍请查看advisor分析报告html文件详解。 图9 查看性能诊断报告 Report页面将每隔5s自动刷新一次。
  • 操作步骤 明确性能问题类型,准确采集性能劣化时刻的profiling数据。 对于固定step出现性能劣化,如固定在16步出现性能劣化,则需要合理配置profiling参数,确保能采集到16步的数据。 对于所有step稳定劣化的场景,避免采集第一个step的profiling即可,可以采集任意step如第15个step即可。 对于偶现且劣化现象出现的step数不固定的场景,则需要确保能采集到该不固定的step。 profiling数据采集请参考Ascend PyTorch Profiler接口采集。文档中包含torch_npu.profiler.profile、dynamic_profile等多种采集方式。任意torch_npu版本均支持torch_npu.profiler.profile方式,而其他采集方式则要求特定版本的torch_npu(2024年0630之后版本)。推荐升级torch_npu后使用dynamic_profile方式进行采集,如果升级成本过高,也可以使用torch_npu.profiler.profile。 当不明确性能劣化的可能原因时,profiling关键参数配置请务必复用如下设置: # torch_npu.profiler._ExperimentalConfig aic_metrics=torch_npu.profiler.AiCMetrics.PipeUtilization profiler_level=torch_npu.profiler.ProfilerLevel.Level1 data_simplification=True # torch_npu.profiler.profile activities=[torch_npu.profiler.ProfilerActivity.CPU, torch_npu.profiler.ProfilerActivity.NPU] with_stack=False torch_npu.profiler.profile采集方式介绍 配置完如图1所示代码后需要启动训练作业触发采集且只能采集指定的step,对于已经明确需要采集step的场景可以使用该采集方式,此时需要重点关注图1中schedule参数以确保采集到需要的step数据。对于schedule参数,请参考图2。skip_first用于跳过指定的前n个step。wait、warmup和active三个参数构成了一次完整的采集,repeat参数表示重复多少次完整的采集。wait参数表示重复执行采集过程中每次采集跳过的step轮数,warmup表示预热的step轮数(推荐设置为1),active表示实际采集的连续m个step。 参数示例: skip_first=10,wait=3, warmup=1, active=3, repeat=2 采集时会先跳过前10个step(从step0开始)。然后完整的一次采集过程包括等待3个step,预热1个step和连续采集3个step(step14-step16)的profiling数据。这一次采集的step14-step16的profiling数据会保存在同一个json文件中。由于设置了repeat=2,则会再次重复一次采集过程,那么实际会二次采集step21-step23这三个连续step的profiling数据并保存至一个新的json文件中。 图1 torch_npu.profiler.profile 图2 torch_npu.profiler.profile schedule参数释义 dynamic_profile采集方式介绍 对于上述提到的性能劣化且出现step不固定的场景,优先考虑使用动态profiling方式进行采集。如图3中所示"if step==5"处,需要在业务代码中添加如下判断逻辑:记录每一个step的耗时,如果某个step的耗时出现异常,即大于正常step耗时或者均值耗时的20%(根据训练日志的实际step耗时来确定异常耗时阈值),则认为出现性能劣化,从而执行'dp.start'触发profiling采集。 图3 dynamic_profile 存储profiling数据。 多机场景如果没有挂载共享存储如SFS Turbo,需要将多机上的profiling复制至同一个目录下才能进行性能分析,这个操作相对较为繁琐且耗时。使用ModelArts时推荐挂载共享网盘如sfs turbo,既能加快训练数据的读取速度又能用于存放性能profiling数据。如果没有共享网盘,profiling数据默认保存到ModelArts训练容器中,则请参考创建ModelArts训练作业中的配置训练参数部分配置好输出参数,训练过程中会自动将训练容器中输出路径下的数据回传至指定的OBS上。 创建performance advisor分析环境。 采集完profiling后如果ModelArts训练作业已经停止,则推荐参照创建Notebook并执行性能诊断任务创建cpu规格的notebook进行性能分析,节省NPU计算资源。完成分析后,可以查看生成的html文件来进行快速的调优,html文件详情请参考advisor分析报告html文件详解。 下面以开发环境Notebook为例介绍一个典型的性能调优案例。 64卡训练任务,模型为GPT MOE,tensor parallel(tp)为8,pipeline parallel(pp)为4。训练过程中发现每个step耗时均显著增大,基于dynamic_profile方式采集profiling并上传至OBS。选择任意镜像如PyTorch,创建一个2U8GB CPU规格(如果CPU资源充足,建议创建8U32G的分析环境)的notebook开发环境。在notebook中使用performance advisor插件进行性能分析,源数据选择OBS并指定profiling所在的OBS路径。由于pp参数为4,考虑到不同pp stage的计算量存在差异,advisor会自动对不同stage进行计算维度的分析,因此在Advanced Setting中设置分析进程为2(不建议设置太大,避免占用过多CPU资源导致OOM类问题)使能并行分析,加快分析速度,如下图4所示。 图4 基于performance advisor进行性能劣化分析 完成分析后单击下图图5中view查看报告。html(图6)中显示计算维度存在高优先级的AICORE降频问题,分别为pp stage0的8号卡和pp stage3的60号卡。查看对8号卡的降频分析(图7)可以发现节点降频主要影响了FlashAttention和MatMul两类算子,导致这两类算子的计算性能劣化,从而影响了整体的训练性能。按照html中给出的建议,需要检查8号卡和60号卡对应节点的温度和最大功率。 图5 性能分析报告展示 图6 计算维度节点降频问题 图7 节点降频及其影响算子
  • 昇腾性能自动诊断工具使用说明 昇腾性能自动诊断工具msprof-analyze已发布至官方pypi源中,支持在任意环境上手动安装msprof-analyze分析调优工具,执行命令“pip install msprof-analyze”即可完成安装。 本文旨在帮助您了解msprof-analyze工具在ModelArts的基本使用方法。 ModelArts Standard平台的开发环境和模型训练集成了自动诊断工具msprof-analyze,能快速分析和诊断昇腾场景下PyTorch性能劣化问题并给出相关调优建议。在过往性能调优场景中,如果性能profiling数据在OBS上,通常需要将TB或者GB级别的profiling数据下载至本地后才能使用msprof-analyze进行分析,大量数据的下载耗时以及对本地大规格存储盘的要求容易导致分析受阻。基于本章节的分析插件,自动串联高性能挂载OBS至ModelArts环境(秒级)和advisor分析,免去数据下载耗时的同时还提升了挂载文件的读取速度,加快了advisor分析速度。 父主题: 基于advisor的昇腾训练性能自助调优指导
  • 场景介绍 对于ModelArts专属资源池的用户,不允许使用公共资源池创建训练作业、创建Notebook实例或者部署推理服务时,可以通过权限控制限制用户使用公共资源池。 涉及配置的自定义权限策略项如下; modelarts:notebook:create:此策略项表示创建Notebook实例。 modelarts:trainJob:create:此策略项表示创建训练作业。 modelarts:service:create:此策略项表示创建推理服务。
  • 子账号启动其他用户的SSH实例 子账号可以看到所有用户的Notebook实例后,如果要通过SSH方式远程连接其他用户的Notebook实例,需要将SSH密钥对更新成自己的,否则会报错ModelArts.6786。更新密钥对具体操作请参见修改Notebook SSH远程连接配置。具体的错误信息提示:ModelArts.6789: 在E CS 密钥对管理中找不到指定的ssh密钥对xxx,请更新密钥对并重试。
  • 场景描述 以使用Notebook进行项目开发为例,管理员账号需要拥有ModelArts专属资源池的完全控制权限,以及Notebook所有实例的访问和操作权限。 普通开发者使用开发环境,只需关注对自己Notebook实例的操作权限,包括对自己实例的创建、启动、停止、删除等权限以及周边依赖服务的权限。普通开发者不需要ModelArts专属资源池的操作权限,也不需要查看其他用户的Notebook实例。 图1 账号关系示意图
  • Step3 为用户配置ModelArts的委托访问授权 配置完 IAM 权限之后,需要在ModelArts页面为子账号设置ModelArts访问授权,允许ModelArts访问OBS、SWR、IEF等依赖服务。 此方式只允许主用户为子账号进行配置。因此,本示例中,管理员账号需为所有用户完成访问授权的配置。 使用主用户的账号登录ModelArts服务管理控制台。请注意选择左上角的区域,例如“华南-广州”。 在左侧导航栏单击“权限管理”,进入“权限管理”页面。 单击“添加授权”。在“授权”页面,在“授权对象类型”下面选择“所有用户”,选择“新增委托 ”,为该主用户下面的所有子账号配置委托访问授权。 普通用户:普通用户的委托权限包括了用户使用ModelArts完成AI开发的所有必要功能权限,如数据的访问、训练任务的创建和管理等。一般用户选择此项即可。 自定义:如果对用户有更精细化的权限管理需求,可使用自定义模式灵活按需配置ModelArts创建的委托权限。可以根据实际需在权限列表中勾选要配置的权限。 勾选“我已经详细阅读并同意《ModelArts服务声明》”,单击“创建”,完成委托授权配置。 父主题: 配置ModelArts基本使用权限
  • Step1 创建用户组并加入用户 主用户账号下面可以创建多个子账号,并对子账号的权限进行分组管理。此步骤介绍如何创建用户组、子账号、并将子账号加入用户组中。 主用户登录管理控制台,单击右上角用户名,在下拉框中选择“ 统一身份认证 ”,进入IAM服务。 图1 统一身份认证 创建用户组。在左侧菜单栏中,选择“用户组”。单击右上角“创建用户组”,在“用户组名称”中填入“用户组02”,然后单击“确定”完成用户组创建。 创建完成后,返回用户组列表。通过用户组管理,将已有子账号加入到用户组中。如果没有子用户账号,可以创建子账号并加入用户组。 创建子用户账号并加入用户组。在IAM左侧菜单栏中,选择“用户”,单击右上角“创建用户”,在“创建用户”页面中,添加多个用户。 请根据界面提示,填写必选参数,然后单击“下一步”。 在“加入用户组”步骤中,选择“用户组02”,然后单击“创建用户”。 系统将逐步创建好前面设置的2个用户。 父主题: 配置ModelArts基本使用权限
  • 约束与限制 只有主账号可以使用委托授权,可以为当前账号授权,也可以为当前账号下的所有IAM用户授权。 多个IAM用户或账号,可使用同一个委托。 一个账号下,最多可创建50个委托。 对于首次使用ModelArts新用户,请直接新增委托即可。一般用户新增普通用户权限即可满足使用要求。如果有精细化权限管理的需求,可以自定义权限按需设置。 如果未获得委托授权,当打开“访问授权”页面时,ModelArts会提醒您当前用户未配置授权,需联系此IAM用户的管理员账号进行委托授权。
  • 工作空间 ModelArts的用户需要为不同的业务目标开发算法、管理和部署模型,此时可以创建多个工作空间,把不同应用开发过程的输出内容划分到不同工作空间中,便于管理和使用。 工作空间支持3种访问控制: PUBLIC:租户(主账号和所有子账号)内部公开访问。 PRIVATE:仅创建者和主账号可访问。 INTERNAL:创建者、主账号、指定IAM子账号可访问当授权类型为INTERNAL时需要指定可访问的子账号的账号名,可选择多个。 每个账号每个IAM项目都会分配1个默认工作空间,默认工作空间的访问控制为PUBLIC。 通过工作空间的访问控制能力,可限制仅允许部分人访问对应的工作空间。通过此功能可实现类似如下场景: 教育场景:老师可给每个学生分配1个INTERNAL的工作空间并且限制该工作空间被指定学生访问,这样可使得学生可独立完成在ModelArts上的实验。 企业场景:管理者可创建用于生产任务的工作空间并限制仅让运维人员使用,用于日常调试的工作空间并限制仅让开发人员使用。通过这种方式让不同的企业角色只能在指定工作空间下使用资源。 目前工作空间功能是“受邀开通”状态,作为企业用户您可以通过您对口的技术支持申请开通。 父主题: 权限控制方式
  • ModelArts资源类型 管理员可以按ModelArts的资源类型选择授权范围。ModelArts支持的资源类型如下表: 表4 ModelArts资源类型(角色与策略授权) 资源类型 说明 notebook 开发环境的Notebook实例 exemlProject 自动学习项目 exemlProjectInf 自动学习项目的在线推理服务 exemlProjectTrain 自动学习项目的训练作业 exemlProjectVersion 自动学习项目的版本 workflow Workflow项目 pool 专属资源池 network 专属资源池网络连接 trainJob 训练作业 trainJobLog 训练作业的运行日志 trainJobInnerModel 系统预置模型 model 模型 service 在线服务 nodeservice 边缘服务 workspace 工作空间 dataset 数据集 dataAnnotation 数据集的标注信息 aiAlgorithm 训练算法 image 镜像 devserver 弹性裸金属
  • 角色与策略权限管理 ModelArts服务支持角色与策略授权。默认情况下,管理员创建的IAM用户没有任何权限,需要将其加入用户组,并给用户组授予策略或角色,才能使得用户组中的用户获得对应的权限,这一过程称为授权。授权后,用户就可以基于被授予的权限对云服务进行操作。 ModelArts部署时通过物理区域划分,为项目级服务。授权时,“授权范围”需要选择“指定区域项目资源”,然后在指定区域(如华北-北京1)对应的项目(cn-north-1)中设置相关权限,并且该权限仅对此项目生效;如果“授权范围”选择“所有资源”,则该权限在所有区域项目中都生效。访问ModelArts时,需要先切换至授权区域。 如表1所示,包括了ModelArts的所有系统策略权限。如果系统预置的ModelArts权限,不满足您的授权要求,可以创建自定义策略,可参考策略JSON格式字段介绍。 表1 ModelArts系统策略 策略名称 描述 类型 ModelArts FullAccess ModelArts管理员用户,拥有所有ModelArts服务的权限。 系统策略 ModelArts CommonOperations ModelArts操作用户,拥有所有ModelArts服务操作权限除了管理专属资源池的权限。 系统策略 ModelArts Dependency Access ModelArts服务的常用依赖服务的权限。 系统策略 ModelArts对其他云服务有依赖关系,因此在ModelArts控制台的各项功能需要配置相应的服务权限后才能正常查看或使用,依赖服务及其预置的权限如下。 表2 ModelArts控制台依赖服务的角色或策略 控制台功能 依赖服务 需配置角色/策略 数据管理(数据集/ 数据标注/数据处理) 对象存储服务 OBS OBS Administrator 数据湖探索 DLI DLI FullAccess MapReduce服务 MRS MRS Administrator 数据仓库 服务 GaussDB (DWS) DWS Administrator 云审计 服务 CTS CTS Administrator AI开发平台 ModelArts ModelArts CommonOperations ModelArts Dependency Access 开发环境Notebook/镜像管理/弹性节点Server 对象存储服务OBS OBS Administrator 凭据管理服务C SMS CSMS ReadOnlyAccess 云审计服务CTS CTS Administrator 弹性 云服务器ECS ECS FullAccess 容器镜像服务 SWR SWR Admin 弹性文件服务SFS SFS Turbo FullAccess 应用运维管理 服务 AOM AOM FullAccess 密钥管理服务KMS KMS CMKFullAccess AI开发平台ModelArts ModelArts CommonOperations ModelArts Dependency Access 算法管理/训练管理/Workflow/自动学习 对象存储服务OBS OBS Administrator 消息通知 服务 SMN SMN Administrator 云审计服务CTS CTS Administrator 企业项目管理服务EPS EPS FullAccess 弹性文件服务SFS SFS ReadOnlyAccess 容器 镜像服务 SWR SWR Admin 应用运维管理服务AOM AOM FullAccess 密钥管理服务KMS KMS CMKFullAccess 虚拟私有云服务VPC VPC FullAccess AI开发平台ModelArts ModelArts CommonOperations ModelArts Dependency Access 模型管理/在线服务/批量服务/边缘服务/边缘部署专属资源池 对象存储服务OBS OBS Administrator 云监控服务 CES CES ReadOnlyAccess 消息通知服务SMN SMN Administrator 企业项目管理服务EPS EPS FullAccess 云审计服务CTS CTS Administrator 云日志服务LTS LTS FullAccess 虚拟私有云VPC VPC FullAccess 容器镜像服务SWR SWR Admin AI开发平台ModelArts ModelArts CommonOperations ModelArts Dependency Access AI Gallery 对象存储服务OBS OBS Administrator 云审计服务CTS CTS Administrator 容器镜像服务SWR SWR Admin AI开发平台ModelArts ModelArts CommonOperations ModelArts Dependency Access 弹性集群Cluster(包含Standard资源池和Lite资源池) 云审计服务CTS CTS Administrator 云容器引擎CCE CCE Administrator 裸金属服务器BMS BMS FullAccess 镜像服务IMS IMS FullAccess 数据加密 服务DEW DEW KeypairReadOnlyAccess 虚拟私有云VPC VPC FullAccess 弹性云服务器ECS ECS FullAccess 弹性文件服务SFS SFS Turbo FullAccess 对象存储服务OBS OBS Administrator 应用运维管理服务AOM AOM FullAccess 标签管理服务TMS TMS FullAccess AI开发平台ModelArts ModelArts CommonOperations ModelArts Dependency Access 费用中心 BSS Administrator 如果系统预置的权限,不满足您的授权要求,可以创建自定义策略。自定义策略中可以添加的授权项(Action)请参考ModelArts资源权限项。 目前支持以下两种方式创建自定义策略: 可视化视图创建自定义策略:无需了解策略语法,按可视化视图导航栏选择云服务、操作、资源、条件等策略内容,可自动生成策略。 JSON视图创建自定义策略:可以在选择策略模板后,根据具体需求编辑策略内容;也可以直接在编辑框内编写JSON格式的策略内容。 具体创建步骤请参见:创建自定义策略。下面为您介绍常用的ModelArts自定义策略样例。 示例1:授权镜像管理的权限。 { "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "modelarts:image:register", "modelarts:image:listGroup" ] } ] } 示例2:拒绝用户创建、更新、删除专属资源池。 拒绝策略需要同时配合其他策略使用,否则没有实际作用。用户被授予的策略中,一个授权项的作用如果同时存在Allow和Deny,则遵循Deny优先原则。 { "Version": "1.1", "Statement": [ { "Action": [ "modelarts:*:*" ], "Effect": "Allow" }, { "Action": [ "swr:*:*" ], "Effect": "Allow" }, { "Action": [ "smn:*:*" ], "Effect": "Allow" }, { "Action": [ "modelarts:pool:create", "modelarts:pool:update", "modelarts:pool:delete" ], "Effect": "Deny" } ] } 示例3:多个授权项策略。 一个自定义策略中可以包含多个授权项,且除了可以包含本服务的授权项外,还可以包含其他服务的授权项,可以包含的其他服务必须跟本服务同属性,即都是项目级服务或都是全局级服务。多个授权语句策略描述如下: { "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "modelarts:service:*" ] }, { "Effect": "Allow", "Action": [ "lts:logs:list" ] } ] }
  • IAM权限简介 如果您需要为企业中的员工设置不同的权限访问ModelArts资源,以达到不同员工之间的权限隔离,您可以使用统一身份认证服务(Identity and Access Management,简称IAM)进行精细的权限管理。该服务提供用户身份认证、权限分配、访问控制等功能,可以帮助您安全的控制云服务资源的访问。如果华为账号已经能满足您的要求,不需要通过IAM对用户进行权限管理,您可以跳过本章节,不影响您使用ModelArts服务的其他功能。 IAM是提供权限管理的基础服务,无需付费即可使用,您只需要为您账号中的资源进行付费。 通过IAM,您可以通过授权控制用户对服务资源的访问范围。例如您的员工中有负责软件开发的人员,您希望这些用户拥有ModelArts的使用权限,但是不希望这些用户拥有删除ModelArts等高危操作的权限,那么您可以使用IAM进行权限分配,通过授予用户仅能使用ModelArts,但是不允许删除ModelArts的权限,控制用户对ModelArts资源的使用范围。 关于IAM的详细介绍,请参见IAM产品介绍。
  • ModelArts权限管理 默认情况下,管理员创建的IAM用户没有任何权限,需要将其加入用户组,并给用户组授予策略,才能使得用户组中的用户获得对应的权限,这一过程称为授权。授权后,用户就可以基于授予的权限对云服务进行操作。 ModelArts部署时通过物理区域划分,为项目级服务,授权时“选择授权范围方案”可以选择“指定区域项目资源”,如果授权时指定了区域(如华北-北京4)对应的项目(cn-north-4),则该权限仅对此项目生效;简单的做法是直接选择“所有资源”。 ModelArts也支持企业项目,所以选择授权范围方案时,也可以指定企业项目。具体操作参见《创建用户组并授权》。 IAM在对用户组授权的时候,并不是直接将具体的某个权限进行赋权,而是需要先将权限加入到“策略”当中,再把策略赋给用户组。为了方便用户的权限管理,各个云服务都提供了一些预置的“系统策略”供用户直接使用。如果预置的策略不能满足您的细粒度权限控制要求,则可以通过“自定义策略”来进行精细控制。 表1列出了ModelArts的所有预置系统策略。 表1 ModelArts系统策略 策略名称 描述 类型 ModelArts FullAccess ModelArts管理员用户,拥有所有ModelArts服务的权限 系统策略 ModelArts CommonOperations ModelArts操作用户,拥有所有ModelArts服务操作权限除了管理专属资源池的权限 系统策略 ModelArts Dependency Access ModelArts服务的常用依赖服务的权限 系统策略 通常来讲,只给管理员开通“ModelArts FullAccess”,如果不需要太精细的控制,直接给所有用户开通“ModelArts CommonOperations”即可满足大多数小团队的开发场景诉求。如果您希望通过自定义策略做深入细致的权限控制,请阅读ModelArts的IAM权限控制详解。 ModelArts的权限不会凌驾于其他服务的权限之上,当您给用户进行ModelArts赋权时,系统不会自动对其他相关服务的相关权限进行赋权。这样做的好处是更加安全,不会出现预期外的“越权”,但缺点是,您必须同时给用户赋予不同服务的权限,才能确保用户可以顺利完成某些ModelArts操作。 举例,如果用户需要用OBS中的数据进行训练,当已经为IAM用户配置ModelArts训练权限时,仍需同时为其配置对应的OBS权限(读、写、列表),才可以正常使用。其中OBS的列表权限用于支持用户从ModelArts界面上选择要进行训练的数据路径;读权限主要用于数据的预览以及训练任务执行时的数据读取;写权限则是为了保存训练结果和日志。 对于个人用户或小型组织,一个简单做法是为IAM用户配置“作用范围”为“全局级服务”的“Tenant Administrator”策略,这会使用户获得除了IAM以外的所有用户权限。在获得便利的同时,由于用户的权限较大,会存在相对较大的安全风险,需谨慎使用。(对于个人用户,其默认IAM账号就已经属于admin用户组,且具备Tenant Administrator权限,无需额外操作) 当您需要限制用户操作,仅为ModelArts用户配置OBS相关的最小化权限项,具体操作请参见OBS权限管理。对于其他云服务,也可以进行精细化权限控制,具体请参考对应的云服务文档。
  • 严格授权模式 严格授权模式是指在IAM中创建的子账号必须由账号管理员显式在IAM中授权,才能访问ModelArts服务,管理员用户可以通过授权策略为普通用户精确添加所需使用的ModelArts功能的权限。 相对的,在非严格授权模式下,子账号不需要显式授权就可以使用ModelArts,管理员需要在IAM上为子账号配置Deny策略来禁止子账号使用ModelArts的某些功能。 账号的管理员用户可以在“权限管理”页面修改授权模式。 如无特殊情况,建议优先使用严格授权模式。在严格授权模式下,子账号要使用ModelArts的功能都需经过授权,可以更精确的控制子账号的权限范围,达成权限最小化的安全策略。
  • 理解ModelArts的权限与委托 图1 权限管理抽象 ModelArts与其他服务类似,功能都通过IAM的权限来进行控制。比如,用户(此处指IAM子账号,而非租户)希望在ModelArts创建训练作业,则该用户必须拥有 "modelarts:trainJob:create" 的权限才可以完成操作(无论界面操作还是API调用)。关于如何给一个用户赋权(准确讲是需要先将用户加入用户组,再面向用户组赋权),可以参考IAM的文档《权限管理》。 而ModelArts还有一个特殊的地方在于,为了完成AI计算的各种操作,AI平台在任务执行过程中需要访问用户的其他服务,典型的就是训练过程中,需要访问OBS读取用户的训练数据。在这个过程中,就出现了ModelArts“代表”用户去访问其他云服务的情形。从安全角度出发,ModelArts代表用户访问任何云服务之前,均需要先获得用户的授权,而这个动作就是一个“委托”的过程。用户授权ModelArts再代表自己访问特定的云服务,以完成其在ModelArts平台上执行的AI计算任务。 综上,对于图1 权限管理抽象可以做如下解读: 用户访问任何云服务,均是通过标准的IAM权限体系进行访问控制。用户首先需要具备相关云服务的权限(根据您具体使用的功能不同,所需的相关服务权限亦有差异)。 权限:用户使用ModelArts的任何功能,亦需要通过IAM权限体系进行正确权限授权。 委托:ModelArts上的AI计算任务执行过程中需要访问其他云服务,此动作需要获得用户的委托授权。
  • 用工作空间限制资源访问 工作空间是ModelArts面向企业用户提供的一个高阶功能,用于进一步将用户的资源划分在多个逻辑隔离的空间中,并支持以空间维度进行访问的权限限定。目前工作空间功能是“受邀开通”状态,作为企业用户您可以通过您对口的技术支持经理申请开通。 在开通工作空间后,系统会默认为您创建一个“default”空间,您之前所创建的所有资源,均在该空间下。当您创建新的工作空间之后,相当于您拥有了一个新的“ModelArts分身”,您可以通过菜单栏的左上角进行工作空间的切换,不同工作空间中的工作互不影响。 创建工作空间时,必须绑定一个企业项目。多个工作空间可以绑定到同一个企业项目,但一个工作空间不可以绑定多个企业项目。借助工作空间,您可以对不同用户的资源访问和权限做更加细致的约束,具体为如下两种约束: 只有被授权的用户才能访问特定的工作空间(在创建、管理工作空间的页面进行配置),这意味着,像数据集、算法等AI资产,均可以借助工作空间做访问的限制。 在前文提到的权限授权操作中,如果“选择授权范围方案”时设定为“指定企业项目资源”,那么该授权仅对绑定至该企业项目的工作空间生效。 工作空间的约束与权限授权的约束是叠加生效的,意味着对于一个用户,必须同时拥有工作空间的访问权和训练任务的创建权限(且该权限覆盖至当前的工作空间),他才可以在这个空间里提交训练任务。 对于已经开通企业项目但没有开通工作空间的用户,其所有操作均相当于在“default”企业项目里进行,请确保对应权限已覆盖了名为default的企业项目。 对于未开通企业项目的用户,不受上述约束限制。
  • 权限清单 权限 表1 管理模型所需权限 业务场景 依赖的服务 依赖策略项 支持的功能 配置建议 管理模型 ModelArts modelarts:model:* 创建、删除、查看、导入AI模型。 建议配置。 仅在严格授权模式开启后,需要显式配置左侧权限。 SWR SWR Admin SWR Admin为SWR最大权限,用于: 从 自定义镜像 导入。 从OBS导入时使用自定义引擎。 按需配置。 OBS obs:bucket:ListAllMybuckets obs:bucket:HeadBucket obs:bucket:ListBucket obs:bucket:GetBucketLocation obs:object:GetObject obs:object:GetObjectVersion obs:object:PutObject obs:object:DeleteObject obs:object:DeleteObjectVersion obs:object:ListMultipartUploadParts obs:object:AbortMultipartUpload obs:object:GetObjectAcl obs:object:GetObjectVersionAcl obs:bucket:PutBucketAcl obs:object:PutObjectAcl 从OBS导入模型。 模型转换指定OBS路径。 按需配置。 表2 部署上线所需权限 业务场景 依赖的服务 依赖策略项 支持的功能 配置建议 部署服务 ModelArts modelarts:service:* 部署、启动、查新、更新模型服务。 建议配置。 仅在严格授权模式开启后,需要显式配置左侧权限。 LTS lts:logs:list 查询和展示LTS日志。 按需配置。 批量服务 OBS obs:object:GetObject obs:object:PutObject obs:bucket:CreateBucket obs:bucket:ListBucket obs:bucket:ListAllMyBuckets 创建批量服务。 按需配置。 边缘服务 CES ces:metricData:list 查看服务的监控指标。 按需配置。 IEF IEF Administrator 管理边缘服务。 按需配置。 创建自定义策略时,建议将项目级云服务和全局级云服务拆分为两条策略,便于授权时设置最小授权范围。 委托 表3 部署上线所需委托 业务场景 依赖的服务 委托授权项 说明 配置建议 在线服务 LTS lts:groups:create lts:groups:list lts:topics:create lts:topics:delete lts:topics:list 在线服务配置LTS日志上报。 按需配置。 批量服务 OBS obs:bucket:ListBucket obs:object:GetObject obs:object:PutObject 运行批量服务。 按需配置。 边缘服务 IEF ief:deployment:list ief:deployment:create ief:deployment:update ief:deployment:delete ief:node:createNodeCert ief:iefInstance:list ief:node:list 通过IEF部署边缘服务。 按需配置。
  • 权限清单 权限 表1 训练作业所需权限 业务场景 依赖的服务 依赖策略项 支持的功能 配置建议 训练管理 ModelArts modelarts:trainJob:* modelarts:trainJobLog:* modelarts:aiAlgorithm:* modelarts:image:list modelarts:network:get modelarts:workspace:get 创建训练作业和查看训练日志。 建议配置。 仅在严格授权模式开启后,需要显式配置左侧权限。 modelarts:workspace:getQuotas 查询工作空间配额。如果开通了工作空间功能,则需要配置此权限。 按需配置。 modelarts:tag:list 在训练作业中使用标签管理服务TMS。 按需配置。 IAM iam:credentials:listCredentials iam:agencies:listAgencies 使用配置的委托授权项。 按需配置。 SFS Turbo sfsturbo:shares:getShare sfsturbo:shares:getAllShares 在训练作业中使用SFS Turbo。 按需配置。 SWR swr:repository:listTags swr:repository:getRepository swr:repository:listRepositories 若为企业SWR用户,还需要增加以下权限: swr:repository:getTag swr:instance:createTempCredential swr:repository:listTags swr:repository:getRepository swr:repository:listRepositories 使用自定义镜像运行训练作业。 按需配置。 SMN smn:topic:publish smn:topic:list 通过SMN通知训练作业状态变化事件。 按需配置。 OBS obs:bucket:ListAllMybuckets obs:bucket:HeadBucket obs:bucket:ListBucket obs:bucket:GetBucketLocation obs:object:GetObject obs:object:GetObjectVersion obs:object:PutObject obs:object:DeleteObject obs:object:DeleteObjectVersion obs:object:ListMultipartUploadParts obs:object:AbortMultipartUpload obs:object:GetObjectAcl obs:object:GetObjectVersionAcl obs:bucket:PutBucketAcl obs:object:PutObjectAcl obs:object:ModifyObjectMetaData 使用OBS桶中的数据集运行训练作业。 按需配置。 委托 表2 训练作业所需委托 业务场景 依赖的服务 委托授权项 说明 配置建议 训练作业 OBS obs:bucket:ListBucket obs:object:GetObject obs:object:PutObject 训练作业启动前下载数据、模型、代码。 训练作业运行中上传日志、模型。 建议配置。
  • 权限清单 权限 表1 开发环境所需权限 业务场景 依赖的服务 依赖策略项 支持的功能 配置建议 开发环境实例生命周期管理 ModelArts modelarts:notebook:create modelarts:notebook:list modelarts:notebook:get modelarts:notebook:update modelarts:notebook:delete modelarts:notebook:start modelarts:notebook:stop modelarts:notebook:updateStopPolicy modelarts:image:delete modelarts:image:list modelarts:image:create modelarts:image:get modelarts:pool:list modelarts:tag:list modelarts:network:get aom:metric:get aom:metric:list aom:alarm:list 实例的启动、停止、创建、删除、更新等依赖的权限。 建议配置。 仅在严格授权模式开启后,需要显式配置左侧权限。 动态挂载存储配置 ModelArts modelarts:notebook:listMountedStorages modelarts:notebook:mountStorage modelarts:notebook:getMountedStorage modelarts:notebook:umountStorage 动态挂载存储配置。 按需配置。 OBS obs:bucket:ListAllMyBuckets obs:bucket:ListBucket 镜像管理 ModelArts modelarts:image:register modelarts:image:listGroup 在镜像管理中注册和查看镜像。 按需配置。 保存镜像 SWR SWR Admin SWR Admin为SWR最大权限,用于: 开发环境运行的实例,保存成镜像。 使用自定义镜像创建开发环境Notebook实例。 按需配置。 使用SSH功能 ECS ecs:serverKeypairs:list ecs:serverKeypairs:get ecs:serverKeypairs:delete ecs:serverKeypairs:create 为开发环境Notebook实例配置登录密钥。 按需配置。 DEW kps:domainKeypairs:get kps:domainKeypairs:list kps:domainKeypairs:createkmskey KMS kms:cmk:list 挂载SFS Turbo盘 SFS Turbo SFS Turbo FullAccess 子账号对SFS目录的读写操作权限。专属池Notebook实例挂载SFS(公共池不支持),且挂载的SFS不是当前子账号创建的。 按需配置。 查看所有实例 ModelArts modelarts:notebook:listAllNotebooks ModelArts开发环境界面上,查询所有用户的实例列表,适用于给开发环境的实例管理员配置该权限。 按需配置。 IAM iam:users:listUsers VSCode插件(本地)/ PyCharm Toolkit(本地) ModelArts modelarts:notebook:listAllNotebooks modelarts:trainJob:create modelarts:trainJob:list modelarts:trainJob:update modelarts:trainJobVersion:delete modelarts:trainJob:get modelarts:trainJob:logExport modelarts:workspace:getQuotas(如果开通了工作空间功能,则需要配置此权限。) 从本地VSCode连接云上的Notebook实例、提交训练作业等。 按需配置。 OBS obs:bucket:ListAllMybuckets obs:bucket:HeadBucket obs:bucket:ListBucket obs:bucket:GetBucketLocation obs:object:GetObject obs:object:GetObjectVersion obs:object:PutObject obs:object:DeleteObject obs:object:DeleteObjectVersion obs:object:ListMultipartUploadParts obs:object:AbortMultipartUpload obs:object:GetObjectAcl obs:object:GetObjectVersionAcl obs:bucket:PutBucketAcl obs:object:PutObjectAcl obs:object:ModifyObjectMetaData IAM iam:projects:listProjects 从本地PyCharm查询IAM项目列表,完成连接配置。 VPC接入 VPC VPC ReadOnlyAccess 实例能够挂载在用户的VPC下,实现多网络平面接入。 按需配置。 创建自定义策略时,建议将项目级云服务和全局级云服务拆分为两条策略,便于授权时设置最小授权范围。 委托 表2 开发环境所需委托 业务场景 依赖的服务 委托授权项 说明 配置建议 JupyterLab OBS obs:object:DeleteObject obs:object:GetObject obs:object:GetObjectVersion obs:bucket:CreateBucket obs:bucket:ListBucket obs:bucket:ListAllMyBuckets obs:object:PutObject obs:bucket:GetBucketAcl obs:bucket:PutBucketAcl obs:bucket:PutBucketCORS 通过ModelArts的Notebook,在JupyterLab中使用OBS上传下载数据。 建议配置。 开发环境监控功能 AOM aom:alarm:put 调用AOM的接口,获取Notebook相关的监控数据和事件,展示在ModelArts的Notebook中。 建议配置。 VPC接入 VPC vpc:ports:create vpc:ports:get vpc:ports:delete vpc:subnets:get 实例能够挂载在用户的VPC下,实现多网络平面接入。 按需配置。
  • 在ModelArts Standard使用run.sh脚本实现OBS和训练容器间的数据传输 自定义容器在ModelArts上训练和本地训练的区别如下图: 图1 本地与ModelArts上训练对比 ModelArts上进行训练比本地训练多了一步OBS和容器环境的数据迁移工作。 增加了和OBS交互工作的整个训练流程如下: 建议使用OBSutil作为和OBS交互的工具,如何在本机安装obsutil可以参考安装和配置OBS命令行工具。 训练数据、代码、模型下载。(本地使用硬盘挂载或者docker cp,在ModelArts上使用OBSutil) 启动脚本,用法无切换,一般就是到达执行目录,然后python xxx.py。 训练结果、日志、checkpoints上传。(本地使用硬盘挂载或者docker cp,在ModelArts上使用OBSutil) 可以用一个run脚本把整个流程包起来。run.sh脚本的内容可以参考如下示例: #!/bin/bash ##认证用的AK和SK硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全。 ##本示例以AK和SK保存在环境变量中来实现身份验证为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。 ##安装obsutil,完成AKSK配置。建议在基础镜像里做好。 #mkdir -p /opt && cd /opt #wget https://obs-community.obs.cn-north-1.myhuaweicloud.com/obsutil/current/obsutil_linux_amd64.tar.gz #tar -xzvf obsutil_linux_amd64.tar.gz && mv obsutil_linux_amd64_*/ utils #alias obsutil='/opt/utils/obsutil' #obsutil config -i=${HUAWEICLOUD_SDK_AK} -k=${HUAWEICLOUD_SDK_SK} -e=obs.cn-north-4.myhuaweicloud.com ##训练输入复制到容器镜像本地。 #/cache目录的容量较大。 DATA_URL=`echo ${DLS_DATA_URL} | sed /s/s3/obs/` mkdir –p /cache/data /opt/utils/obsutil cp –r –f ${DATA_URL} /cache/data ##执行训练作业。 #涉及conda env切换时。 source /xxxxx/etc/profile.d/conda.sh conda activate xxxenv conda info --envs #启动训练脚本。 cd xxxx python xxx.py ##复制输出结果到OBS目录。 TRAIN_URL=`echo ${DLS_TRAIN_URL} | sed /s/s3/obs/` /opt/utils/obsutil cp –r –f /cache/out ${TRAIN_URL} 把run.sh放到/opt目录,在实际启动任务的时候,使用以下命令启动任务即可: bash –x /opt/run.sh 把run.sh放到/root目录,可以在原镜像里增加一层,这一层就只是COPY这个run脚本。在基础镜像里可以一起把obsutil安装、配置好。参考如下dockerfile: FROM $your_docker_image_tag RUN mkdir -p /opt && cd /opt && \ wget https://obs-community.obs.cn-north-1.myhuaweicloud.com/obsutil/current/obsutil_linux_amd64.tar.gz && \ tar -xzvf obsutil_linux_amd64.tar.gz && mv obsutil_linux_amd64_*/ utils && \ /opt/utils/obsutil config -i=${HUAWEICLOUD_SDK_AK} -k=${HUAWEICLOUD_SDK_SK} -e=obs.cn-north-4.myhuaweicloud.com COPY run.sh /opt/run.sh ModelArts的容器会有一个/cache目录,这个目录挂载的硬盘容量最大。建议下载数据和中间数据都存到这个目录中,防止因硬盘占满导致任务失败。 父主题: 基于ModelArts Standard运行GPU训练作业
  • 在ECS服务器挂载SFS Turbo存储 在ECS服务器挂载SFS Turbo存储后,支持将训练所需的数据通过ECS上传至SFS Turbo。 检查云服务环境。 ECS服务器和SFS的共享硬盘在相同的VPC或者对应VPC能够互联。 ECS服务器基础镜像用的是Ubuntu 18.04。 ECS服务器和SFS Turbo在同一子网中。 在ECS服务器中设置华为云镜像源。 sudo sed -i "s@http://.*archive.ubuntu.com@http://repo.huaweicloud.com@g" /etc/apt/sources.list sudo sed -i "s@http://.*security.ubuntu.com@http://repo.huaweicloud.com@g" /etc/apt/sources.list 安装NFS客户端,挂载对应盘。 sudo apt-get update sudo apt-get install nfs-common 获取SFS Turbo的挂载命令。 进入弹性文件服务SFS管理控制台。 选择“SFS Turbo”进入文件系统列表,单击文件系统名称,进入详情页面。 在“基本信息”页签获取并记录“Linux挂载命令”。 在ECS服务器中挂载NFS存储。 确认对应目录存在后,输入对应指令,命令如下。 mkdir -p /mnt/sfs_turbo mount -t nfs -o vers=3,nolock 192.168.0.169:/ /mnt/sfs_turbo
  • 在ECS中设置ModelArts用户可读权限 在ModelArts训练平台使用自定义镜像时,默认用户为ma-user、默认用户组为ma-group。如果在训练时调用ECS中的文件,需要修改文件权限改为ma-user可读,否则会出现Permission denied错误。 在Terminal中执行以下命令,在ECS中提前创建好ma-user和ma-group。 default_user=$(getent passwd 1000 | awk -F ':' '{print $1}') || echo "uid: 1000 does not exist" && \ default_group=$(getent group 100 | awk -F ':' '{print $1}') || echo "gid: 100 does not exist" && \ if [ ! -z ${default_group} ] && [ ${default_group} != "ma-group" ]; then \ groupdel -f ${default_group}; \ groupadd -g 100 ma-group; \ fi && \ if [ -z ${default_group} ]; then \ groupadd -g 100 ma-group; \ fi && \ if [ ! -z ${default_user} ] && [ ${default_user} != "ma-user" ]; then \ userdel -r ${default_user}; \ useradd -d /home/ma-user -m -u 1000 -g 100 -s /bin/bash ma-user; \ chmod -R 750 /home/ma-user; \ fi && \ if [ -z ${default_user} ]; then \ useradd -d /home/ma-user -m -u 1000 -g 100 -s /bin/bash ma-user; \ chmod -R 750 /home/ma-user; \ fi && \ # set bash as default rm /bin/sh && ln -s /bin/bash /bin/sh 执行以下命令,查看创建的用户信息。 id ma-user 如果出现以下信息则表示创建成功。 uid=1000(ma-user) gid=100(ma-group) groups=100(ma-group)
  • (可选)工作空间配置 ModelArts支持设置子账号的细粒度权限、不同工作空间之间资源隔离。ModelArts工作空间帮您实现项目资源隔离、多项目分开结算等功能。 如果你开通了企业项目管理服务的权限,可以在创建工作空间的时候绑定企业项目ID,并在企业项目下添加用户组,为不同的用户组设置细粒度权限供组里的用户使用。 如果你未开通企业项目管理服务的权限,也可以在ModelArts创建自己独立的工作空间,但是无法使用跟企业项目相关的功能。 工作空间为白名单功能,使用该功能需要提工单申请开通。
  • 创建专属资源池 ModelArts提供独享的计算资源,可用于Notebook、训练作业、部署模型。专属资源池不与其他用户共享,更加高效。在使用专属资源池之前,您需要先创建一个专属资源池,操作指导请参考创建Standard专属资源池。 配置“网络”时需要选择已打通VPC的网络。如果需要新建网络和打通VPC可以参考配置Standard专属资源池可访问公网。 “规格类型”和“节点数量”根据训练计划使用的资源选择。
  • 购买服务资源 表1 购买服务资源 服务 使用说明 参考文档 弹性文件服务SFS 弹性文件服务默认为按需计费,即按购买的存储容量和时长收费。您也可以购买包年包月套餐,提前规划资源的使用额度和时长。在欠费时,您需要及时(15天之内)续费以避免您的文件系统资源被清空。 购买的SFS可以用于存储数据和代码。 如何购买弹性文件服务? 容器镜像服务SWR 容器镜像服务分为企业版和共享版。共享版计费项包括存储空间和流量费用,目前均免费提供给您。企业版支持按需计费模式。 购买的SWR可以用于上传自定义镜像。 使用容器引擎客户端上传镜像 对象存储服务OBS 对象存储服务提供按需计费和包年包月两种计费模式,用户可以根据实际需求购买OBS服务。 OBS服务支持以下两种存储方式,单机单卡场景使用文件系统,多机多卡场景使用普通OBS桶。 创建普通OBS桶 创建并行文件系统 虚拟私有云VPC 虚拟私有云可以为您构建隔离的、用户自主配置和管理的虚拟网络环境。 通过打通专属资源池的VPC,可以方便用户跨VPC使用资源,提升资源利用率。 创建虚拟私有云和子网 弹性云服务器ECS 如果您需要在服务器上部署相关业务,较之物理服务器,弹性云服务器的创建成本较低,并且可以在几分钟之内快速获得基于云服务平台的弹性云服务器设施,并且这些基础设施是弹性的,可以根据需求伸缩。 购买的ECS服务可以用于挂载SFS Turbo存储。 说明: 购买时需注意,ECS需要和SFS买到同一个VPC才能挂载SFS存储。 购买弹性云服务器 数据加密服务DEW 在使用Notebook进行代码调试时,如果要开启“SSH远程开发”功能,需要选择密钥对,便于用户登录弹性云服务器时使用密钥对方式进行身份认证,提升通信安全。密钥对可免费创建。 如何创建密钥对?
  • 在ModelArts Standard上运行GPU训练作业的场景介绍 不同AI模型训练所需要的数据量和算力不同,在训练时选择合适的存储及训练方案可提升模型训练效率与资源性价比。ModelArts Standard支持单机单卡、单机多卡和多机多卡的训练场景,满足不同AI模型训练的要求。 ModelArts Standard提供了公共资源池和专属资源池,专属资源池不与其他用户共享资源,更加高效。针对企业多用户场景,推荐使用专属资源池开展AI模型训练。 本文提供了端到端案例指导,帮助您快速了解如何在ModelArts Standard上选择合适的训练方案并进行模型训练。 针对不同的数据量和算法情况,推荐以下训练方案: 单机单卡:小数据量(1G训练数据)、低算力场景(1卡Vnt1),存储方案推荐使用“OBS的并行文件系统(存放数据和代码)”。 单机多卡:中等数据量(50G左右训练数据)、中等算力场景(8卡Vnt1),存储方案推荐使用“SFS(存放数据和代码)”。 多机多卡:大数据量(1T训练数据)、高算力场景(4台8卡Vnt1),存储方案推荐使用“SFS(存放数据)+普通OBS桶(存放代码)”,采用分布式训练。 当使用SFS+OBS的存储方案可以实现存储加速,该方案的端到端实践案例请参见面向AI场景使用OBS+SFS Turbo的存储加速实践。 表1 不同场景所需服务及购买推荐 场景 OBS SFS SWR DEW ModelArts VPC ECS EVS 单机单卡 按需购买(并行文件系统) × 免费 免费 包月购买 免费 × 按需购买 单机多卡 × 包月购买 (HPC型500G) 免费 免费 包月购买 免费 包月购买 (Ubuntu 18.04,建议不小于2U8G,本地存储空间100G,带EIP全动态BGP,按流量10M带宽) × 多机多卡 按需购买 (普通OBS桶) 包月购买 (HPC型500G) 免费 免费 包月购买 免费 包月购买 (Ubuntu 18.04,建议不小于2U8G,本地存储空间100G,带EIP全动态BGP,按流量10M带宽) × 表2 开源数据集训练效率参考 算法及数据 资源规格 Epoch数 预计运行时长(hh:mm:ss) 算法:PyTorch官方针对ImageNet的样例 数据:ImageNet分类数据子集 1机1卡Vnt1 10 0:05:03 算法:YOLOX 数据:COCO2017 1机1卡Vnt1 10 03:33:13 1机8卡Vnt1 10 01:11:48 4机8卡Vnt1 10 0:36:17 算法:Swin-Transformer 数据:ImageNet21K 1机1卡Vnt1 10 197:25:03 1机8卡Vnt1 10 26:10:25 4机8卡Vnt1 10 07:08:44 表3 训练各步骤性能参考 步骤 说明 预计时长 镜像下载 首次下载镜像的时间(25G)。 8分钟 资源调度 点创建训练作业开始到变成运行中的时间(资源充足、镜像已缓存)。 20秒 训练列表页打开 已有50条训练作业,单击训练模块后的时间。 6秒 日志加载 作业运行中,已经输出1兆的日志文本,单击训练详情页面需要多久加载出日志。 2.5秒 训练详情页 作业运行中,没有用户日志情况下,在ModelArts控制台主页面单击训练详情页面后加载页面内容。 2.5秒 JupyterLab页面 进入JupyterLab页面后加载页面内容。 0.5秒 Notebook列表页 已有50个Notebook实例,在ModelArts控制台主页面单击开发环境后的时间。 4.5秒 镜像下载时间受节点规格、节点硬盘类型(高IO/普通IO)、是否SSD等因素影响,以上数据仅供参考。 父主题: 基于ModelArts Standard运行GPU训练作业
共100000条