云服务器内容精选

  • 解决方法 ModelArts权限管理的委托权限不足,导致创建失败? 解决方法请参见ModelArts创建委托授权。 申请的资源中包含受限购买的资源规格,导致购买失败? 当前modelarts.bm.npu.arm.8snt9b3.d为受限购买,需要提前联系ModelArts运营或提工单申请开通资源规格。 图2 报错信息 E CS 、EVS配额不足,导致创建失败? 集群所需的ECS实例数、内存大小、CPU核数和EVS硬盘大小资源会超出华为云默认提供的资源配额,因此需要申请扩大配额。解决方法请参见申请扩大资源配额。 图3 报错信息(1) 图4 报错信息(2) 资源售罄或容量不足,导致创建失败? 减少资源池节点数量,或提工单给ModelArts申请更多资源。 图5 报错信息 ECS、BMS节点创建失败? 查看资源池失败报错信息: 包含错误码,如:Ecs.0000时,可查看弹性云服务器 ECS_错误码查看详细的错误信息及处理措施。 包含错误码,如:BMS.0001时,可查看裸金属服务器 BMS_错误码查看详细的错误信息及处理措施。 包含错误码,如:CCE.01400001时,可查看云容器引擎 CCE_错误码查看详细的错误信息及处理措施 其他报错请提工单联系ModelArts运维进一步定位解决。 集群纳管节点失败? 查看资源池失败报错信息: 查看资源池失败报错信息,包含错误码,如:CCE.01400001时,可查看云容器引擎 CCE_错误码查看详细的错误信息及处理措施。 其他报错请提工单联系ModelArts运维进一步定位解决。 集群容器网段不足,导致创建失败? 图6 报错信息 用户可根据实际业务场景和节点规模,自定义配置容器网段,配置方式如下: ModelArts Standard池,资源池创建阶段指定容器网段,根据实际需要设置更大的容器网段。 图7 设置容器网段 ModelArts Lite池,选择/创建具有更大容器网段的CCE集群。CCE容器网段配置参见网络规划。 账号冻结导致创建失败? 查看资源池失败报错信息,存在"frozen deposit fail",表示账号冻结导致资源创建失败。检查账号状态和资源欠费情况,账号解冻后重新购买资源。 订单取消导致资源创建失败? 查看资源池失败报错信息,存在"the operation is canceled by customer",表示资源池对应订单已取消,取消原因可能为超时未支付、用户自主取消,需重新购买。 其他错误 可通过F12查看浏览器请求信息,选择标红的pools接口,查看响应里的详细报错信息,如下图所示。通过错误提示修正输入参数后再次提交订单。 图8 报错信息 如CCE集群不可用,请检查CCE集群版本和状态。报错信息如下: { "error_code": "ModelArts.50004000", "error_msg": "Bad request. spec.clusters[0].providerId: Invalid value: \"77f6f112-a631-11eb-8dae-0255ac100b0d\": the cluster 77f6f112-a631-11eb-8dae-0255ac100b0d is not available" }
  • 操作步骤 拉取镜像。本测试镜像为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资源池支持镜像预热功能,镜像预热可实现将镜像提前在资源池节点上拉取好,在推理及大规模分布式训练时有效缩短镜像拉取时间。
  • Lite Cluster资源管理介绍 在ModelArts控制台,您可以对已创建的资源进行管理。通过单击资源池名称,可以进入到资源池详情页,您可以在详情页进行下述操作。 管理Lite Cluster节点:节点是容器集群组成的基本元素,您可以对资源池内单节点进行替换、删除、重置等操作。 管理Lite Cluster节点池:为帮助您更好地管理Kubernetes集群内的节点,ModelArts支持通过节点池来管理节点。节点池是集群中具有相同配置的一组节点,一个节点池包含一个节点或多个节点,您可以创建、更新和删除节点池。 管理Lite Cluster资源池标签:ModelArts支持为资源池添加标签,用来标识云资源,方便您快速搜索到资源池。 扩缩容Lite Cluster资源池:当Cluster资源池创建完成,使用一段时间后,由于用户AI开发业务的变化,对于资源池资源量的需求可能会产生变化,面对这种场景,ModelArts提供了扩缩容功能,用户可以根据自己的需求动态调整。 升级Lite Cluster资源池驱动:当资源池中的节点含有GPU/Ascend资源时,用户基于自己的业务,可能会有自定义GPU/Ascend驱动的需求,ModelArts面向此类客户提供了自助升级专属资源池GPU/Ascend驱动的能力。 监控Lite Cluster资源:ModelArts支持使用 AOM 和Prometheus对资源进行监控,方便您了解当前的资源使用情况。 释放Lite Cluster资源:针对不再使用的Lite Cluster资源,您可以释放资源。 图1 Lite Cluster资源管理介绍 父主题: Lite Cluster资源管理
  • Lite Cluster使用流程 ModelArts Lite Cluster面向k8s资源型用户,提供托管式k8s集群,并预装主流AI开发插件以及自研的加速插件,以云原生方式直接向用户提供AI Native的资源、任务等能力,用户可以直接操作资源池中的节点和k8s集群。本文旨在帮助您了解Lite Cluster的基本使用流程,帮助您快速上手。 图1 资源池架构图 如图所示为Lite Cluster架构图。Lite Cluster基于CCE服务实现对资源节点的管理,因此,用户首先需要购买一个CCE集群。在ModelArts控制台购买Lite Cluster集群时,ModelArts的资源池会先纳管这个CCE集群,然后根据用户设置的规格创建相应的计算节点(BMS/ECS)。随后,CCE会对这些节点进行纳管,并且ModelArts会在CCE集群中安装npuDriver、os-node-agent等插件。完成Cluster资源池的购买后,您即可对资源进行配置,并将数据上传至存储云服务中。当您需要使用集群资源时,可以使用kubectl工具或k8s API来下发作业。此外,ModelArts还提供了扩缩容、驱动升级等功能,方便您对集群资源进行管理。 图2 使用流程 推荐您根据以下使用流程对Lite Cluster进行使用。 资源开通:您需要开通资源后才可使用Lite Cluster,在开通资源前,请确保完成所有相关准备工作,包括申请开通所需的规格和进行权限配置。随后,在ModelArts控制台上购买Lite Cluster资源。请参考Lite Cluster资源开通。 资源配置:完成资源购买后,需要对网络、存储、驱动进行相关配置。请参考Lite Cluster资源配置。 资源使用:完成资源配置后,您可以使用集群资源运行训练和推理训练,具体案例可参考Lite Cluster资源使用。 资源管理:Lite Cluster提供扩缩容、驱动升级等管理手段,您可在ModelArts控制台上对资源进行管理。请参考Lite Cluster资源管理。 表1 相关名词解释 名词 含义 容器 容器技术起源于Linux,是一种内核虚拟化技术,提供轻量级的虚拟化,以便隔离进程和资源。尽管容器技术已经出现很久,却是随着Docker的出现而变得广为人知。Docker是第一个使容器能在不同机器之间移植的系统。它不仅简化了打包应用的流程,也简化了打包应用的库和依赖,甚至整个操作系统的文件系统能被打包成一个简单的可移植的包,这个包可以被用来在任何其他运行Docker的机器上使用。 Kubernetes Kubernetes是一个开源的容器编排部署管理平台,用于管理云平台中多个主机上的容器化应用。Kubernetes的目标是让部署容器化的应用简单并且高效,Kubernetes提供了应用部署、规划、更新、维护的一种机制。使用Lite Cluster需要用户具备一定的Kubernetes知识背景,您可参考Kubernetes基础知识。 CCE 云容器引擎(Cloud Container Engine,简称CCE)是一个企业级的Kubernetes集群托管服务,支持容器化应用的全生命周期管理,为您提供高度可扩展的、高性能的云原生应用部署和管理方案。CCE官网文档可参考云容器引擎。 BMS 裸金属服务器(Bare Metal Server)是一款兼具虚拟机弹性和物理机性能的计算类服务,为您和您的企业提供专属的云上物理服务器,为核心数据库、关键应用系统、高性能计算、大数据等业务提供卓越的计算性能以及数据安全。 ECS 弹性云服务器(Elastic Cloud Server)是一种可随时自助获取、可弹性伸缩的云服务器,可帮助您打造可靠、安全、灵活、高效的应用环境,确保服务持久稳定运行,提升运维效率。 os-node-agent ModelArts Lite k8s Cluster节点默认会安装os-node-agent插件,用于对节点进行管理,例如: 驱动升级:通过os-node-agent插件下载驱动文件并进行驱动版本升级、回退。 故障检测:通过os-node-agent插件在系统内周期性巡检故障特征,及时发现节点故障。 指标采集:通过os-node-agent插件采集GPU/NPU利用率指标等重要的观测数据,上报到租户侧AOM。 节点运维:授权后,通过os-node-agent插件执行诊断脚本,进行故障定位定界。 父主题: Lite Cluster使用前必读
  • 配置流程 图1 k8s Cluster资源配置流程图 表1 k8s Cluster资源配置流程 配置顺序 配置分类 配置任务 使用场景说明 是否必选操作 1 网络 配置外网访问(EIP) 外网用户通过EIP访问集群资源中的k8s master。 必选。(二选一) 配置外网访问(NAT) 外网用户通过公网NAT访问集群资源,入DNAT;集群内的节点通过NAT访问外网,出SNAT。 创建相同帐户下的VPC对等连接 通过对等连接可以实现同一个区域下的不同VPC之间的云上内网通信。 当资源分配在租户名下时,需要参考本章节操作,实现相同帐户下的VPC对等连接。 可选。 2 存储 容器中挂载存储 指导如何选择和使用存储服务。 可选。 3 连接集群 配置kubectl工具 指导如何配置kubectl工具。 必选。 4 容器镜像 容器镜像拉取 介绍如何拉取容器镜像。 必选。(二选一) 镜像预热 介绍如何开启镜像预热功能。 5 日志监控 使用ModelArts监控自定义指标 介绍如何使用ModelArts监控自定义指标。 可选。 使用ModelArts的exporter功能在Prometheus查看监控数据 介绍如何使用ModelArts的exporter功能在Prometheus查看监控数据。 可选。
  • 修复节点 当前修复节点功能为白名单邀测阶段,如果您有试用需求,请联系技术支持。 若资源池节点发生硬件故障,可在资源池详情页的“节点管理”页签,查看对应故障节点。在对应节点的操作列的“更多”按钮中,修复按钮变为可单击状态,此时可单击“修复”按钮,对节点进行修复,待修复完成后,节点状态会变为“可用”。 当前支持“换件维修”和“重部署”两种修复方式: - 换件维修:通过更换硬件实现原地修复,修复耗时较长,对于非本地盘类故障,本地盘数据可以保留。 - 重部署:通过更换为新服务器实现修复,修复耗时较短,本地盘数据会丢失。 修复期间实例将无法工作,请确保相关实例业务已离线。如果云服务器上的业务不可停止,请勿修复,并联系技术支持进行处理。 若选择了重部署修复方式,实例会立即关机并迁移到新服务器,本地盘数据会被清空,请提前做好业务迁移和数据备份。 图1 修复节点 父主题: Lite Cluster资源使用