云服务器内容精选

  • 场景描述 ranktable路由规划是一种用于分布式并行训练中的通信优化能力,在使用NPU的场景下,支持对节点之间的通信路径根据交换机实际topo做网络路由亲和规划,进而提升节点之间的通信速度。 本案例介绍如何在ModelArts Lite场景下使用ranktable路由规划完成Pytorch NPU分布式训练任务,训练任务默认使用Volcano job形式下发到Lite资源池集群。 图1 任务示意图
  • 约束与限制 该功能只支持贵阳一区域,如果要在其他区域使用请联系技术支持。 ModelArts Lite资源池对应的CCE集群需要安装1.10.12及以上版本的华为云版Volcano插件。Volcano调度器的安装升级请参见Volcano调度器。仅华为云版Volcano插件支持开启路由加速特性。 训练使用的Python版本是3.7或3.9,否则无法实现ranktable路由加速。 训练作业的任务节点数要大于或等于3,否则会跳过ranktable路由加速。建议在大模型场景(512卡及以上)使用ranktable路由加速。 脚本执行目录不能是共享目录,否则ranktable路由加速会失败。 路由加速的原理是改变rank编号,所以代码中对rank的使用要统一,如果rank的使用不一致会导致训练异常。
  • 操作步骤 拉取镜像。本测试镜像为bert_pretrain_mindspore:v1,已经把测试数据和代码打进镜像中。 docker pull swr.cn-southwest-2.myhuaweicloud.com/os-public-repo/bert_pretrain_mindspore:v1 docker tag swr.cn-southwest-2.myhuaweicloud.com/os-public-repo/bert_pretrain_mindspore:v1 bert_pretrain_mindspore:v1 在主机上新建config.yaml文件。 config.yaml文件用于配置pod,本示例中使用sleep命令启动pod,便于进入pod调试。您也可以修改command为对应的任务启动命令(如“python train.py”),任务会在启动容器后执行。 config.yaml内容如下: apiVersion: v1 kind: ConfigMap metadata: name: configmap1980-yourvcjobname # 前缀使用“configmap1980-”不变,后接vcjob的名字 namespace: default # 命名空间自选,需要和下边的vcjob处在同一命名空间 labels: ring-controller.cce: ascend-1980 # 保持不动 data: #data内容保持不动,初始化完成,会被volcano插件自动修改 jobstart_hccl.json: | { "status":"initializing" } --- apiVersion: batch.volcano.sh/v1alpha1 # The value cannot be changed. The volcano API must be used. kind: Job # Only the job type is supported at present. metadata: name: yourvcjobname # job名字,需要和configmap中名字保持联系 namespace: default # 和configmap保持一致 labels: ring-controller.cce: ascend-1980 # 保持不动 fault-scheduling: "force" spec: minAvailable: 1 # The value of minAvailable is 1 in a single-node scenario and N in an N-node distributed scenario. schedulerName: volcano # 保持不动,Use the Volcano scheduler to schedule jobs. policies: - event: PodEvicted action: RestartJob plugins: configmap1980: - --rank-table-version=v2 # 保持不动,生成v2版本ranktablefile env: [] svc: - --publish-not-ready-addresses=true maxRetry: 3 queue: default tasks: - name: "yourvcjobname-1" replicas: 1 # The value of replicas is 1 in a single-node scenario and N in an N-node scenario. The number of NPUs in the requests field is 8 in an N-node scenario. template: metadata: labels: app: mindspore ring-controller.cce: ascend-1980 # 保持不动,The value must be the same as the label in ConfigMap and cannot be changed. spec: affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: volcano.sh/job-name operator: In values: - yourvcjobname topologyKey: kubernetes.io/hostname containers: - image: bert_pretrain_mindspore:v1 # 镜像地址,Training framework image, which can be modified. imagePullPolicy: IfNotPresent name: mindspore env: - name: name # The value must be the same as that of Jobname. valueFrom: fieldRef: fieldPath: metadata.name - name: ip # IP address of the physical node, which is used to identify the node where the pod is running valueFrom: fieldRef: fieldPath: status.hostIP - name: framework value: "MindSpore" command: - "sleep" - "1000000000000000000" resources: requests: huawei.com/ascend-1980: "1" # 需求卡数,key保持不变。Number of required NPUs. The maximum value is 16. You can add lines below to configure resources such as memory and CPU. limits: huawei.com/ascend-1980: "1" # 限制卡数,key保持不变。The value must be consistent with that in requests. volumeMounts: - name: ascend-driver #驱动挂载,保持不动 mountPath: /usr/local/Ascend/driver - name: ascend-add-ons #驱动挂载,保持不动 mountPath: /usr/local/Ascend/add-ons - name: localtime mountPath: /etc/localtime - name: hccn #驱动hccn配置,保持不动 mountPath: /etc/hccn.conf - name: npu-smi #npu-smi mountPath: /usr/local/sbin/npu-smi nodeSelector: accelerator/huawei-npu: ascend-1980 volumes: - name: ascend-driver hostPath: path: /usr/local/Ascend/driver - name: ascend-add-ons hostPath: path: /usr/local/Ascend/add-ons - name: localtime hostPath: path: /etc/localtime # Configure the Docker time. - name: hccn hostPath: path: /etc/hccn.conf - name: npu-smi hostPath: path: /usr/local/sbin/npu-smi restartPolicy: OnFailure 根据config.yaml创建pod。 kubectl apply -f config.yaml 检查pod启动情况,执行下述命令。如果显示“1/1 running”状态代表启动成功。 kubectl get pod -A 进入容器,{pod_name}替换为您的pod名字(get pod中显示的名字),{namespace}替换为您的命名空间(默认为default)。 kubectl exec -it {pod_name} bash -n {namespace} 查看卡信息,执行以下命令。 npu-smi info kubernetes会根据config.yaml文件中配置的卡数分配资源给pod,如下图所示由于配置了1卡因此在容器中只会显示1卡,说明配置生效。 图2 查看卡信息 修改pod的卡数。由于本案例中为分布式训练,因此所需卡数修改为8卡。 删除已创建的pod。 kubectl delete -f config.yaml 将config.yaml文件中“limit”和“request”改为8。 vi config.yaml 图3 修改卡数 重新创建pod。 kubectl apply -f config.yaml 进入容器并查看卡信息,{pod_name}替换为您的pod名字,{namespace}替换为您的命名空间(默认为default)。 kubectl exec -it {pod_name} bash -n {namespace} npu-smi info 如图所示为8卡,pod配置成功。 图4 查看卡信息 查看卡间通信配置文件,执行以下命令。 cat /user/config/jobstart_hccl.json 多卡训练时,需要依赖“rank_table_file”做卡间通信的配置文件,该文件自动生成,pod启动之后文件地址。为“/user/config/jobstart_hccl.json”,“/user/config/jobstart_hccl.json”配置文件生成需要一段时间,业务进程需要等待“/user/config/jobstart_hccl.json”中“status”字段为“completed”状态,才能生成卡间通信信息。如下图所示。 图5 卡间通信配置文件 启动训练任务。 cd /home/ma-user/modelarts/user-job-dir/code/bert/ export MS_ENABLE_GE=1 export MS_GE_TRAIN=1 python scripts/ascend_distributed_launcher/get_distribute_pretrain_cmd.py --run_script_dir ./scripts/run_distributed_pretrain_ascend.sh --hyper_parameter_config_dir ./scripts/ascend_distributed_launcher/hyper_parameter_config.ini --data_dir /home/ma-user/modelarts/user-job-dir/data/cn-news-128-1f-mind/ --hccl_config /user/config/jobstart_hccl.json --cmd_file ./distributed_cmd.sh bash scripts/run_distributed_pretrain_ascend.sh /home/ma-user/modelarts/user-job-dir/data/cn-news-128-1f-mind/ /user/config/jobstart_hccl.json 图6 启动训练任务 训练任务加载需要一定时间,在等待若干分钟后,可以执行下述命令查看卡信息。如下图可见,8张卡均被占用,说明训练任务在进行中 npu-smi info 图7 查看卡信息 若想停止训练任务,可执行下述命令关闭进程,查询进程后显示已无运行中python进程。 pkill -9 python ps -ef 图8 关闭训练进程 limit/request配置cpu和内存大小,已知单节点Snt9B机器为:8张Snt9B卡+192u1536g,请合理规划,避免cpu和内存限制过小引起任务无法正常运行。
  • 场景介绍 当专属资源池中的节点含有GPU/Ascend资源时,用户基于自己的业务,可能会有自定义GPU/Ascend驱动的需求,ModelArts面向此类客户提供了自助升级专属资源池GPU/Ascend驱动的能力。 驱动升级有两种升级方式:安全升级、强制升级。 安全升级:不影响正在运行的业务,开始升级后会先将节点进行隔离(不能再下发新的作业),待节点上的存量作业运行完成后再进行升级,因需要等待作业完成,故升级周期可能比较长。 强制升级:忽略资源池中正在运行的作业,直接进行驱动升级,可能会导致运行中作业失败,需谨慎选择。
  • 配置流程 图1 Lite Cluster资源配置流程图 表1 Cluster资源配置流程 配置顺序 配置任务 场景说明 1 配置Lite Cluster网络 购买资源池后,需要弹性公网IP并进行网络配置,配置网络后可通过公网访问集群资源。 2 配置kubectl工具 kubectl是Kubernetes集群的命令行工具,配置kubectl后,您可通过kubectl命令操作Kubernetes集群。 3 配置Lite Cluster存储 如果没有挂载任何外部存储,此时可用存储空间根据dockerBaseSize的配置来决定,可访问的存储空间比较小,因此建议通过挂载外部存储空间解决存储空间受限问题。容器中挂载存储有多种方式,不同的场景下推荐的存储方式不一样,您可根据业务实际情进行选择。 4 (可选)配置驱动 当专属资源池中的节点含有GPU/Ascend资源时,为确保GPU/Ascend资源能够正常使用,需要配置好对应的驱动。如果在购买资源池时,没配置自定义驱动,默认驱动不满足业务要求,可通过本章节将驱动升级到指定版本。 5 (可选)配置镜像预热 Lite Cluster资源池支持镜像预热功能,镜像预热可实现将镜像提前在资源池节点上拉取好,在推理及大规模分布式训练时有效缩短镜像拉取时间。
  • Step5 购买CCE集群 购买Cluster资源池时,需要选择CCE集群,若您没有可用的CCE集群,可参考购买Standard/Turbo集群进行购买,集群配套版本请参考不同机型的对应的软件配套版本。 创建Cluster资源池时,请确保CCE集群为“运行中”状态。 当前仅支持CCE集群1.23&1.25&1.28版本。 若您没有可用的CCE集群,可先创建CCE集群。CCE 1.28集群版本支持通过控制台、API方式创建,CCE 1.23和CCE 1.25版本支持通过API方式创建。不同版本的CCE集群创建方式请见Kubernetes版本策略。 若您已有CCE集群,但CCE集群版本低于1.23,则可参考升级集群的流程和方法,建议将集群升级至1.28版本。
  • Step2 基础权限开通 基础权限开通需要登录管理员账号,为子用户账号开通使用资源池所需的基础权限。 登录 统一身份认证 服务管理控制台。 单击目录左侧“用户组”,然后在页面右上角单击“创建用户组”。 填写“用户组名称”并单击“确定”。 在操作列单击“用户组管理”,将需要配置权限的用户加入用户组中。 单击用户组名称,进入用户组详情页。 在权限管理页签下,单击“授权”。 图2 “配置权限” 在搜索栏输入“ModelArts FullAccess”,并勾选“ModelArts FullAccess”。 图3 ModelArts FullAccess 以相同的方式,依次添加如下权限: ModelArts FullAccess CTS Administrator CCE Administrator BMS FullAccess IMS FullAccess DEW KeypairReadOnlyAccess VPC FullAccess E CS FullAccess SFS Turbo FullAccess OBS Administrator AOM FullAccess TMS FullAccess BSS Administrator 单击“下一步”,授权范围方案选择“所有资源”。 单击“确认”,完成基础权限开通。
  • Step3 在ModelArts上创建委托授权 新建委托 第一次使用ModelArts时需要创建委托授权,授权允许ModelArts代表用户去访问其他云服务。使用ModelArts Lite的资源池需要授权允许ModelArts代表用户访问云容器引擎服务CCE、裸金属服务BMS、 镜像服务 IMS和密钥管理服务DEW。 进入到ModelArts控制台的“全局配置”页面,单击“添加授权”,根据提示进行操作。 图4 添加授权 更新委托 如果之前给ModelArts创过委托授权,此处可以更新授权。 进入到ModelArts控制台的“专属资源池”页面,查看是否存在授权缺失的提示。 如果有授权缺失,根据提示,单击“此处”更新委托。根据提示选择“追加至已有授权”,单击“确定”,系统会提示权限更新成功。
  • 集群资源开通流程 开通集群资源过程中用户侧需要完成的任务流程如下图所示。 图1 用户侧任务流程 表1 Cluster资源开通流程 任务 说明 Step1 申请开通资源规格 当前部分规格为受限购买,需要提前联系客户经理申请开通资源规格,预计1~3个工作日内开通(若无客户经理可提交工单反馈)。 Step2 基础权限开通 为子用户开通使用资源池所需要的权限。 Step3 在ModelArts上创建委托授权 第一次使用ModelArts时需要创建委托授权,授权允许ModelArts代表用户去访问其他云服务。 如果之前已经创建过委托授权,需要更新委托相应的权限。 Step4 申请扩大资源配额 集群所需的ECS实例数、内存大小、CPU核数和EVS硬盘大小等资源会超出华为云默认提供的资源配额,因此需要申请扩大配额。 具体的配额方案请联系客户经理获取。 配额需大于要开通的资源,且在购买开通前完成配额提升,否则会导致资源开通失败。 Step5 购买CCE集群 购买Cluster资源池时,需要选择CCE集群,若您没有可用的CCE集群需要提前在CCE控制台购买。 Step6 购买Cluster资源 在ModelArts控制台上购买Cluster资源。
  • 子账号启动其他用户的SSH实例 子账号可以看到所有用户的Notebook实例后,如果要通过SSH方式远程连接其他用户的Notebook实例,需要将SSH密钥对更新成自己的,否则会报错ModelArts.6786。更新密钥对具体操作请参见修改Notebook SSH远程连接配置。具体的错误信息提示:ModelArts.6789: 在ECS密钥对管理中找不到指定的ssh密钥对xxx,请更新密钥对并重试。
  • Step7 远程调试 单击本地IDE右下角interpreter,选择Notebook的python解释器。 图9 选择Python解释器 像本地运行代码一样,直接单击运行按钮运行代码即可,此时虽然是在本地IDE点的运行按钮,实际上运行的是云端Notebook里的代码,日志可以回显在本地的日志窗口。 图10 查看运行日志 也可以单击本地IDE右上角的Run/Debug Configuration按钮来设置运行参数。 图11 设置运行参数(1) 选择远程连接到云上开发环境实例对应的Python解释器。 图12 设置运行参数(2) 当需要调试代码时,可以直接打断点,然后使用debug方式运行程序。 图13 使用debug方式运行程序 此时可以进入debug模式,代码运行暂停在该行,且可以查看变量的值。 图14 Debug模式下查看变量值
  • Step6 同步上传本地文件至Notebook 本地文件中的代码直接复制至本地IDE中即可,本地IDE中会自动同步至云上开发环境。 初始化同步: 在本地IDE的Project目录下,单击右键,选择“Deployment”,单击“Upload to xxx”(Notebook名称),将本地工程文件上传至指定的Notebook。 图7 同步本地文件至Notebook 后续同步: 只需修改代码后保存(ctrl+s),即可进行自动同步。 插件安装完成后在本地IDE中开启了“Automatic Upload”,本地目录中的文件会自动上传至云端开发环境Notebook。如果未开启,请参考下图开启自动上传。 图8 开启自动上传
  • 使用限制 当前仅支持2019.2-2023.2之间(包含2019.2和2023.2)版本,包括社区版和专业版。 使用PyCharm ToolKit远程连接Notebook开发环境,仅限PyCharm专业版。 使用PyCharm ToolKit提交训练作业,社区版和专业版都支持,PyCharm ToolKit latest版本仅限提交新版训练作业。 PyCharm ToolKit工具仅支持Windows版本的PyCharm。 表1 ToolKit(latest)功能列表 支持的功能 说明 对应操作指导 SSH远程连接 支持SSH远程连接ModelArts的Notebook开发环境。 配置PyCharm ToolKit远程连接Notebook 训练模型 支持将本地开发的代码,快速提交至ModelArts并自动创建新版训练作业,在训练作业运行期间获取训练日志并展示到本地。 使用PyCharm ToolKit创建并调试训练作业 OBS上传下载 上传本地文件或文件夹至OBS,从OBS下载文件或文件夹到本地。 使用PyCharm上传数据至Notebook
  • 快速查找创建好的项目 在自动学习总览页,您可以通过搜索框,根据自动学习的属性类型(项目名称)快速搜索过滤到相应的工作流,可节省您的时间。 登录ModelArts管理控制台,在左侧导航栏选择自动学习,进入自动学习总览页面。 在自动学习列表上方的搜索框中,根据您需要的属性类型,例如,名称、状态、项目类型、当前节点、标签等,过滤出相应的工作流。 单击搜索框右侧的按钮,可选择自动学习的基础设置,需要的显示列。 表格内容折行:默认为关闭状态,启用此能力可让表格内容自动折行,禁用此功能可截断文本。 操作列:默认为关闭状态,启用此能力可让操作列固定在最后一列永久可见。 自定义显示列:默认所有显示项全部勾选,您可以根据实际需要定义您的显示列。 图1 表格显示设置 单击“确定”即可按照设置好的显示列进行显示。 同时可支持对自动学习项目显示页进行排序,单击表头中的箭头,就可对该列进行排序。
  • 创建项目 登录ModelArts管理控制台,在左侧导航栏单击“自动学习”,进入新版自动学习页面。 在您需要的自动学习项目列表中。例如选择预测分析项目,单击“创建项目”,进入创建自动学习项目界面。 在创建自动学习项目页面,计费模式默认“按需计费”,参考表1填写相应参数。 表1 参数说明 参数 说明 “名称” 项目的名称。 名称只能包含数字、字母、下划线和中划线,长度不能超过64位且不能为空。 名称请以字母开头。 名称不允许重复。 “描述” 对项目的简要描述。 “数据集” 可在右侧下拉框选择已有数据集,或单击“创建数据集”前往新建数据集。 已有数据集:在“数据集”右侧的下拉框中选择,仅展示同类型的数据集供选择。 创建数据集:前往创建数据集页面创建一个新的数据集。具体操作请参考创建数据集。 “标签列” 可自行选择您需要预测的列名。 标签列是预测模型的输出。模型训练步骤将使用全部信息训练预测模型,该模型以其他列的数据为输入,以标签列的预测值为输出。模型部署步骤将使用预测模型发布在线预测服务。 “输出路径” 选择自动学习数据输出的统一OBS路径。 说明: “输出路径”是存储自动学习在运行过程中所有产物的路径。 “训练规格” 选择自动学习训练节点所使用的资源规格,以实际界面显示为准,将会根据不同的规格计费。 说明: 只有北京四区域支持限时免费规格。 如果您购买了套餐包,可优先选择您对应规格的套餐包,在“配置费用”处会显示您的套餐余量,以及超出的部分如何计费,请您关注,避免造成不必要的资源浪费。 单击“创建项目”,预测分析项目创建成功后页面自动跳转到“自动学习工作流”。 预测分析项目的工作流,将依次运行如下节点: 数据集版本发布:将已完成确认的数据进行版本发布。 数据校验:对您的数据集的数据进行校验,是否存在数据异常。 预测分析:将发布好的数据集版本进行训练,生成对应的模型。 模型注册:将训练后的结果注册到模型管理中。 服务部署:将生成的模型部署为在线服务。