华为云用户手册

  • 步骤4:(可选)安装MindSpore Lite 当前预置镜像中已安装MindSpore Lite,如果需要替换版本或者使用自己的未预置MindSpore Lite的镜像,可参考如下章节进行安装。 查看容器中是否已安装MS Lite,如果已经显示出mindspore-lite软件信息和版本号,则是已经安装好的: pip show mindspore-lite 如果未安装,则从官网下载包(下载链接),下载whl包和tar.gz包并执行安装,注意替换包名: pip install mindspore_lite-2.1.0-cp37-cp37m-linux_aarch64.whl mkdir -p /usr/local/mindspore-lite tar -zxvf mindspore-lite-2.1.0-linux-aarch64.tar.gz -C /usr/local/mindspore-lite --strip-components 1
  • 原因分析 经过对裸金属服务器排查,发现nvidia-drvier和cuda都已安装,并且正常运行。nvidia-fabricmanager服务可以使单节点GPU卡间互联,在多卡GPU机器上,出现这种问题可能是nvidia-fabricmanger异常导致。 执行以下命令,查看NVIDIA和CUDA的版本,以及nvidia-fabricmanager的状态。 systemctl status nvidia-fabricmanager 发现nvidia-fabricmanager的服务为failed状态,尝试重新启动nvidia-fabricmanager失败,且提示以下信息: nvidia-fabricmanager.service failed because the control process exited with error code 通过命令查看nvidia-fabricmanager的版本,发现nvidia-fabricmanager版本与当前NVIDIA驱动版本不一致。 dpkg -l | grep nvidia-fabricmanager 卸载并重新安装正确版本的nvidia-fabricmanager,验证CUDA成功。
  • 处理方法 查看nvidia-fabricmanager的版本,若nvidia-fabricmanager版本与当前NVIDIA驱动版本不一致则执行下述命令卸载nvidia-fabricmanager。 dpkg -l | grep nvidia-fabricmanager # 若有nvidia-fabricmanager软件,将其卸载 # 若无nvidia-fabricmanager软件,请跳过此命令 sudo apt-get autoremove --purge nvidia-fabricmanager-版本 安装与NVIDIA驱动版本号相等的nvidia-fabricmanager(以515.105.01举例)。 version=515.105.01 main_version=$(echo $version | awk -F '.' '{print $1}') apt-get update apt-get -y install nvidia-fabricmanager-${main_version}=${version}-* 启动nvidia-fabricmanager,确保其服务状态为RUNNING。 systemctl enable nvidia-fabricmanager systemctl start nvidia-fabricmanager systemctl status nvidia-fabricmanager 重新验证cuda状态, 输出为True。 import torch print(torch.cuda.is_available())
  • 原因分析 nvidia-modprobe是一个Linux工具,用于在系统中加载NVIDIA驱动程序及其相关的内核模块。在Linux系统上安装NVIDIA显卡驱动后,需要通过“nvidia-modprobe”命令来加载相应的内核模块,以便让显卡驱动正常工作。 通常情况下,在安装NVIDIA驱动时,会自动执行“nvidia-modprobe”命令,将必要的内核模块加载到系统中。但有时候也可能需要手动执行该命令。例如,在更新了NVIDIA驱动后,需要重新加载新版本的内核模块才能使变更生效。 此外,若使用了多个NVIDIA显卡,每个显卡都需要加载相应的内核模块才能正常工作。在这种情况下,也需要手动执行“nvidia-modprobe”命令来加载所有必要的内核模块。
  • 处理方法 在Euler2.8操作系统,NetworkManagre-config-server是一个无用的软件包,无需安装 。执行以下命令卸载NetworkManagre-config-server,并重启NetworkManager服务,重新尝试SSH连接,验证网络是否恢复。 # 卸载 NetworkManagre-config-server rpm -e NetworkManager-config-server # 重启 NetworkManager 服务 systemctl restart NetworkManager
  • 原因分析 查看yum命令历史,发现执行了“yum update -y”,“yum update -y”命令是用于在Linux操作系统上更新软件包的命令。其中,选项-y表示在更新时自动确认所有提示信息,而不需要手动输入“y”确认。 请注意,使用此命令将会检查您系统中已安装的软件包并更新至最新版本。 图1 yum命令历史 查看NetworkManager配置: NetworkManager --print-config 配置内容如下: # NetworkManager configuration: /etc/NetworkManager/NetworkManager.conf (lib: 00-server.conf) [main] # plugins=ifcfg-rh,ibft # rc-manager=symlink # auth-polkit=true # dhcp=dhclient no-auto-default=* ignore-carrier=* [logging] # backend=journal # audit=false 发现“no-auto-default=*”是打开的状态,“no-auto-default=*”含义是关闭DH Client,无法使用DHCP获取IP。正常情况下裸金属服务器这个参数是被注释的状态。 当服务器有网卡配置文件, NetworkManager.service实现将VPC子网分配的私有IP写入网卡配置文件中。NetworkManager.service会优先读取网卡配置文件中的IP设置为主机IP, 此时无论DH Cient是否关闭,服务器都可以获取分配IP。 当服务器没有网卡配置文件时,DH Client开启,此时服务器会分配私有IP。如果关闭DH Client,则服务器无法获取私有IP。 图2 查看NetworkManager配置 图3 查看网络配置 命令“yum update -y”或“yum update NetworkManagre-config-server”,都会将NetworkManagre-config-server软件升级,高版本的NetworkManagre-config-server会将参数no-auto-default=*是打开的状态,又因当前镜像无网卡配置文件导致ip获取不到,从而使得SSH连接失败。
  • 操作步骤 拉取镜像。本测试镜像为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 inference.py”),任务会在启动容器后执行。 config.yaml内容如下: apiVersion: apps/v1 kind: Deployment metadata: name: yourapp labels: app: infers spec: replicas: 1 selector: matchLabels: app: infers template: metadata: labels: app: infers spec: schedulerName: volcano nodeSelector: accelerator/huawei-npu: ascend-1980 containers: - image: bert_pretrain_mindspore:v1 # Inference image name imagePullPolicy: IfNotPresent name: 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: hccn #驱动hccn配置,保持不动 mountPath: /etc/hccn.conf - name: npu-smi #npu-smi mountPath: /usr/local/bin/npu-smi - name: localtime #The container time must be the same as the host time. mountPath: /etc/localtime volumes: - name: ascend-driver hostPath: path: /usr/local/Ascend/driver - name: ascend-add-ons hostPath: path: /usr/local/Ascend/add-ons - name: hccn hostPath: path: /etc/hccn.conf - name: npu-smi hostPath: path: /usr/local/bin/npu-smi - name: localtime hostPath: path: /etc/localtime 根据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} 激活conda模式。 su - ma-user //切换用户身份 conda activate MindSpore //激活 MindSpore环境 创建测试代码test.py。 from flask import Flask, request import json app = Flask(__name__) @app.route('/greet', methods=['POST']) def say_hello_func(): print("----------- in hello func ----------") data = json.loads(request.get_data(as_text=True)) print(data) username = data['name'] rsp_msg = 'Hello, {}!'.format(username) return json.dumps({"response":rsp_msg}, indent=4) @app.route('/goodbye', methods=['GET']) def say_goodbye_func(): print("----------- in goodbye func ----------") return '\nGoodbye!\n' @app.route('/', methods=['POST']) def default_func(): print("----------- in default func ----------") data = json.loads(request.get_data(as_text=True)) return '\n called default func !\n {} \n'.format(str(data)) # host must be "0.0.0.0", port must be 8080 if __name__ == '__main__': app.run(host="0.0.0.0", port=8080) 执行代码,执行后如下图所示,会部署一个在线服务,该容器即为服务端。 python test.py 图1 部署在线服务 在XShell中新开一个终端,参考步骤5~7进入容器,该容器为客户端。执行以下命令验证自定义镜像的三个API接口功能。当显示如图所示时,即可调用服务成功。 curl -X POST -H "Content-Type: application/json" --data '{"name":"Tom"}' 127.0.0.1:8080/ curl -X POST -H "Content-Type: application/json" --data '{"name":"Tom"}' 127.0.0.1:8080/greet curl -X GET 127.0.0.1:8080/goodbye 图2 访问在线服务 limit/request配置cpu和内存大小,已知单节点Snt9B机器为:8张Snt9B卡+192u1536g,请合理规划,避免cpu和内存限制过小引起任务无法正常运行。
  • Atlas 800训练服务器的网卡配置问题 机头网卡配置是什么? 有以下两类网卡: 四个2*100GE网卡,为RoCE网卡,插在NPU板。 一个4*25GE/10GE,为Hi1822网卡,插在主板上的。 ifconfig能看到的网卡信息吗 能看到主板上的网卡信息,即VPC分配的私有IP。若要看RoCE网卡的命令需要执行“hccn_tools”命令查看,参考Atlas 800 训练服务器 1.0.11 HCCN Tool接口参考中的指导。 NPU上的网卡在哪里可以看到, 会健康检查吗? 8*NPU的网卡为机头上配置的四个2*100GE网卡。华为云有网卡健康状态监控机制。
  • 监控插件安装步骤 当前账户需要给CES授权委托,请参考创建用户并授权使用云监控服务。 当前还不支持在CES界面直接一键安装监控,需要登录到服务器上执行以下命令安装配置Agent。其它region的安装请参考单台主机下安装Agent。 cd /usr/local && curl -k -O https://obs.cn-north-4.myhuaweicloud.com/uniagent-cn-north-4/script/agent_install.sh && bash agent_install.sh 安装成功的标志如下: 图1 安装成功提示 在CES界面查看具体的监控项,加速卡类的监控项必须在主机安装加速卡驱动后才会有相关指标。 图2 监控界面 至此,监控插件已经安装完成,相关指标的采集可以在UI界面直接查看或者根据指标值配置相关告警。
  • 裸金属服务器监控介绍 监控概述请参考BMS官方文档。除文档所列支持的镜像之外,目前还支持Ubuntu20.04。 监控指标采样周期1分钟。当前监控指标项已经包含CPU、内存、磁盘、网络。在主机上安装加速卡驱动后,可以自动采集的如下指标: 表1 指标列表 指标英文名 指标中文名 说明 单位 维度 gpu_status gpu健康状态。 BMS上GPU健康状态,是一个综合指标,0代表健康,1代表亚健康,2代表故障。 - instance_id,gpu gpu_utilization gpu使用率。 该GPU的算力使用率。 % instance_id,gpu memory_utilization 显存使用率。 该GPU的显存使用率。 % instance_id,gpu gpu_performance gpu性能状态。 该GPU的性能状态。 - instance_id,gpu encoder_utilization 编码使用率。 该GPU的编码能力使用率。 % instance_id,gpu decoder_utilization 解码使用率。 该GPU的解码能力使用率。 % instance_id,gpu volatile_correctable 短期可纠正ECC错误数量。 该GPU重置以来可纠正的ECC错误数量,每次重置后归0。 个 instance_id,gpu volatile_uncorrectable 短期不可纠正ECC错误数量。 该GPU重置以来不可纠正的ECC错误数量,每次重置后归0。 个 instance_id,gpu aggregate_correctable 累计可纠正ECC错误数量。 该GPU累计的可纠正ECC错误数量。 个 instance_id,gpu aggregate_uncorrectable 累计不可纠正ECC错误数量。 该GPU累计的不可纠正ECC错误数量。 个 instance_id,gpu retired_page_single_bit retired page single bit错误数量。 retired page single bit错误数量,表示当前卡隔离的单比特页数。 个 instance_id,gpu retired_page_double_bit retired page double bit错误数量。 retired page double bit错误数量,表示当前卡隔离的双比特页的数量。 个 instance_id,gpu
  • 风险操作 当您在CCE、ECS或BMS服务控制台直接操作ModelArts Lite k8s Cluster资源时,可能会导致资源池部分功能异常,下表可帮助您定位异常出现的原因,风险操作包括但不限于以下内容: 表1 操作及其对应风险 类型 操作 风险 集群 升级、修改、休眠集群、删除集群等。 可能影响ModelArts侧基本功能,包括但不限于资源池管理、节点管理、扩缩容、驱动升级等。 节点 退订、移除、关机、污点管理、修改登录密码、修改网络安全组、切换/重装操作系统等。 可能影响ModelArts侧基本功能,包括但不限于节点管理、扩缩容、驱动升级等。 网络 修改/删除集群关联网段。 影响ModelArts侧基本功能,包括但不限于节点管理、扩缩容、驱动升级等。 插件 升级、卸载gpu-beta插件。 可能导致NPU驱动使用异常。 升级、卸载huawei-npu插件。 可能导致NPU驱动使用异常。 升级、卸载volcano插件。 可能导致作业调度异常。 卸载ICAgent插件。 可能导致日志、监控功能异常。 helm 升级、回退、卸载os-node-agent。 可能影响节点故障检测。 升级、回退、卸载rdma-sriov-dev-plugin。 可能影响容器内使用RDMA网卡。 父主题: k8s Cluster资源使用
  • 开启昇腾RoCE网卡网口 查询RoCE网卡的IP,记录address_0地址。 cat /etc/hccn.conf 图1 查询RoCE网卡的IP 由于hccn_tool没有直接up的命令,因此需要执行以下命令,重新配置一个RoCE网卡的IP,address为步骤1查询的IP。 hccn_tool -i -0 -ip -s address 29.29.xx.xx netmask 255.255.0.0 图2 关闭和开启RoCE网卡网口 更多hccn_tool用法,请见HCCN Tool接口参考。
  • 操作步骤 使用以下脚本测得GPU服务器内NVLINK带宽性能。 import torch import numpy as np device = torch.device("cuda") n_gpus = 8 data_size = 1024 * 1024 * 1024 # 1 GB speed_matrix = np.zeros((n_gpus, n_gpus)) for i in range(n_gpus): for j in range(i + 1, n_gpus): print(f"Testing communication between GPU {i} and GPU {j}...") with torch.cuda.device(i): data = torch.randn(data_size, device=device) torch.cuda.synchronize() with torch.cuda.device(j): result = torch.randn(data_size, device=device) torch.cuda.synchronize() with torch.cuda.device(i): start = torch.cuda.Event(enable_timing=True) end = torch.cuda.Event(enable_timing=True) start.record() result.copy_(data) end.record() torch.cuda.synchronize() elapsed_time_ms = start.elapsed_time(end) transfer_rate = data_size / elapsed_time_ms * 1000 * 8 / 1e9 speed_matrix[i][j] = transfer_rate speed_matrix[j][i] = transfer_rate print(speed_matrix) 以Ant8 GPU裸金属服务器为例, 其理论GPU卡间带宽为:NVIDIA*NVLink*Bridge for 2GPUS: 400GB/s。使用上述测试脚本测得带宽性能进行如下分析。 正常模式-NVLINK全互通,带宽约为370GB。基本符合预期,且证明Ant GPU裸金属服务器内部GPU间确实走NVLINK模式,且完全互联。 图2 正常模式带宽性能 异常模式-NVLINK部分互通,出现带宽波动较大的情况。如下图中GPU0和GPU4之间带宽远低于理论值, 存在问题。 图3 异常模式带宽性能 出现这种现象, 可尝试重装nvidia/cuda/nvidia-fabricmanager, 重装后再测试又恢复到了正式模式,GPU0和GPU4之间带宽恢复到370GB/s。 可能原因如下,仅供参考: 驱动程序问题:可能是由于驱动程序没有正确安装或配置,导致NVLINK带宽受限。重新安装nvidia驱动、CUDA和nvidia-fabricmanager等软件后,驱动程序可能已经正确配置,从而解决了这个问题。 硬件问题:如果GPU之间的NVLINK连接存在硬件故障,那么这可能会导致带宽受限。重新安装软件后,重启系统,可能触发了某种硬件自检或修复机制,从而恢复了正常的带宽。 系统负载问题:最初测试GPU卡间带宽时,可能存在其他系统负载,如进程、服务等,这些负载会占用一部分网络带宽,从而影响NVLINK带宽的表现。重新安装软件后,这些负载可能被清除,从而使NVLINK带宽恢复正常。
  • 操作步骤 拉取镜像。本测试镜像为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/bin/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/bin/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卡,说明配置生效。 图1 查看卡信息 修改pod的卡数。由于本案例中为分布式训练,因此所需卡数修改为8卡。 删除已创建的pod。 kubectl delete -f config.yaml 将config.yaml文件中“limit”和“request”改为8。 vi config.yaml 图2 修改卡数 重新创建pod。 kubectl apply -f config.yaml 进入容器并查看卡信息,{pod_name}替换为您的pod名字,{namespace}替换为您的命名空间(默认为default)。 kubectl exec -it {pod_name} bash -n {namespace} npu-smi info 如图所示为8卡,pod配置成功。 图3 查看卡信息 查看卡间通信配置文件,执行以下命令。 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”状态,才能生成卡间通信信息。如下图所示。 图4 卡间通信配置文件 启动训练任务。 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 图5 启动训练任务 训练任务加载需要一定时间,在等待若干分钟后,可以执行下述命令查看卡信息。如下图可见,8张卡均被占用,说明训练任务在进行中 npu-smi info 图6 查看卡信息 若想停止训练任务,可执行下述命令关闭进程,查询进程后显示已无运行中python进程。 pkill -9 python ps -ef 图7 关闭训练进程 limit/request配置cpu和内存大小,已知单节点Snt9B机器为:8张Snt9B卡+192u1536g,请合理规划,避免cpu和内存限制过小引起任务无法正常运行。
  • 操作步骤 确认裸金属服务器规格支持IPV6。需要确保要购买的华为云裸金属服务器规格支持IPV6,只有当该裸金属服务器规格支持IPV6时,才有必要进行后续IPV6依赖项的操作。 确认镜像支持IPV6。如果未支持,需要更新该镜像属性,以支持IPV6。 查询方式请参考查询镜像列表。 调用API传入镜像ID,若响应体中有“__support_ipv6”: "true"内容,则代表支持,否则代表不支持。 图1 查询镜像是否支持IPV6 更新镜像属性,使得镜像支持IPV6。 更新步骤请参考更新镜像信息,关键代码如下: { "op": "add", "path": "/__support_ipv6", "value": "true" } 子网支持IPV6。 单击子网,进入基本信息,在子网IPV6网段处,单击开启IPV6即可。 图2 子网开启IPV6 安全组支持放开IPV6。 安全组默认不支持IPV6放通,因此需要添加规则,使得IPV6出方向和入方向规则都放通IPV6。 图3 安全组支持放开IPV6 IPV6功能支持验证。 当创建成功后,进入到裸金属机器,通过ping6 IP地址,即该裸金属服务器已支持IPV6。 图4 IPV6功能支持验证
  • 操作步骤 多机RoCE网卡带宽测试。 执行以下命令查看昇腾的RoCE IP: cat /etc/hccn.conf 图1 查看昇腾的RoCE IP RoCE测试。 在Session1:在接收端执行 -i卡id。 hccn_tool -i 7 -roce_test reset hccn_tool -i 7 -roce_test ib_send_bw -s 4096000 -n 1000 -tcp 在Session2:在发送端执行 -i卡id,后面的ip为上一步接收端卡的ip。 cd /usr/local/Ascend/ascend-toolkit/latest/tools/hccl_test hccn_tool -i 0 -roce_test reset hccn_tool -i 0 -roce_test ib_send_bw -s 4096000 -n 1000 address 192.168.100.18 -tcp RoCE测试结果如图: 图2 RoCE测试结果(接收端) 图3 RoCE测试结果(服务端) 当某网卡已经开始RoCE带宽测试时,再次启动任务会有如下报错: 图4 报错信息 需要执行下述命令后关闭roce_test任务后再启动任务。 hccn_tool -i 7 -roce_test reset 可执行如下命令查看网卡状态。 for i in {0..7};do hccn_tool -i ${i} -link -g;done 可执行如下命令查看单节点内网卡IP连通性。 for i in $(seq 0 7);do hccn_tool -i $i -net_health -g;done
  • 1、安装NVIDIA驱动 打开NVIDIA官方网站。 根据Ant8的详细信息和您所需的cuda版本选择驱动 图1 驱动选择 选择后会自动出现Driver版本并下载,或者直接。 wget https://cn.download.nvidia.com/tesla/470.182.03/NVIDIA-Linux-x86_64-470.182.03.run 添加权限。 chmod +x NVIDIA-Linux-x86_64-470.182.03.run 运行安装文件。 ./NVIDIA-Linux-x86_64-470.182.03.run 至此NVIDIA-DRIVER驱动安装完成。
  • 配置外网访问(NAT) NAT网关(NAT Gateway)提供公网NAT网关和私网NAT网关。公网NAT网关为VPC内的云主机提供SNAT和DNAT功能,可轻松构建VPC的公网出入口。私网NAT网关为VPC内的云主机提供网络地址转换服务,使多个云主机可以共享私网IP访问用户本地数据中心或其他VPC,并支持云主机面向私网提供服务。 通过公网NAT访问集群的配置方式,具体请参见公网NAT网关。 父主题: 网络
  • 操作步骤 安装PyTorch环境依赖。 pip3 install pyyaml pip3 install wheel pip3 install typing_extensions 安装官方aarch64 torch1.11.0版本包。 # 安装1.11.0版本 wget https://download.pytorch.org/whl/torch-1.11.0-cp37-cp37m-manylinux2014_aarch64.whl pip3 install torch-1.11.0-cp37-cp37m-manylinux2014_aarch64.whl 安装Pytorch Adapter插件torch_npu。 # 安装1.11.0版本 wget https://gitee.com/ascend/pytorch/releases/download/v5.0.rc3-pytorch1.11.0/torch_npu-1.11.0.post4-cp37-cp37m-linux_aarch64.whl pip3 install torch_npu-1.11.0.post4-cp37-cp37m-linux_aarch64.whl 验证命令。 python3 -c "import torch;import torch_npu;print(torch_npu.npu.is_available())" 如下图返回True即为成功 图1 验证成功
  • 场景描述 昇腾为使用PyTorch框架的开发者提供昇腾AI处理器的超强算力,需要安装PyTorch Adapter插件用于适配PyTorch,本文介绍如何安装Pytorch框架和Pytorch Adapter插件。 本文使用ModelArts上的NPU Snt9B裸金属服务器以及其提供的昇腾镜像EulerOS-2.10-Arm-rc3-64bit-for-Snt9B-BareMetal-with-CANN7.0.RC1,具体镜像环境可参考NPU Snt9B裸金属服务器支持的镜像详情。该Snt9B资源中的Python环境为3.7.9,参考昇腾官网文档可知,最高支持PyTorch1.11.0。
  • 处理方法 下文中假设当前服务器的内核版本是为4.18.0-147.5.1.6.h934.eulerosv2r9.x86_64,介绍如何避免操作系统内核自动升级。 操作系统内核升级生效,必然需要服务器重启, 因此重启reboot前需要查看当前默认选择的内核版本: [root@devserver-ddff ~]# grub2-editenv list saved_entry=EulerOS (4.18.0-147.5.1.6.h998.eulerosv2r9.x86_64) 2.0 (SP9x86_64) boot_success=0 [root@devserver-ddff ~]# 如上发现reboot后内核为4.18.0-147.5.1.6.h998.eulerosv2r9.x86_64,和当前内核版本h934不一致,则需要重新设置内核版本与当前版本一致。 查看当前内核版本,并且锁定reboot后默认启动的内核版本,执行如下命令: grub2-set-default 'EulerOS (4.18.0-147.5.1.6.h934.eulerosv2r9.x86_64) 2.0 (SP9x86_64)' 执行后查看默认启动的内核版本是否和上述设置的相同: [root@devserver-ddff ~]# grub2-editenv list saved_entry=EulerOS (4.18.0-147.5.1.6.h934.eulerosv2r9.x86_64) 2.0 (SP9x86_64) boot_success=0 [root@devserver-ddff ~]# 发现和当前内核一致,因此即使reboot也不会更改服务器的内核版本。 若希望升级指定的操作系统内核,也可以执行grub2-set-default进行设置默认启动内核版本。但操作系统内核升级可能带来的问题。例如在操作系统内核4.18.0-147.5.1.6.h934.eulerosv2r9.x86_64 下安装的nvidia-driver-515,由于执行了yum update并reboot服务器, 发现再次执行nvidia命令时报错: [root@devserver-ddff ~]# nvidia-smi NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running. [root@devserver-ddff ~]# 此时只能安裝nvidia-driver-515以及配套的cuda版本,安装方法可以参考GP Vnt1裸金属服务器EulerOS 2.9安装NVIDIA 515+CUDA 11.7。
  • 原因分析 分析EulerOS内核是如何在不知情的情况下升级的: 首先查看当前操作系统内核。 [root@devserver-ddff ~]# uname -r 4.18.0-147.5.1.6.h934.eulerosv2r9.x86_64 一般执行如下升级命令,就会导致自动下载和安装高级内核版本。 yum update -y 执行后查看当前可用内核,发现已经新增了内核h998: [root@devserver-ddff ~]# [root@devserver-ddff ~]# cat /boot/grub2/grub.cfg |grep "menuentry " menuentry 'EulerOS (4.18.0-147.5.1.6.h998.eulerosv2r9.x86_64) 2.0 (SP9x86_64)' --class euleros --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-4.18.0-147.5. 1.6.h934.eulerosv2r9.x86_64-advanced-f6aefacb-f2d3-4809-b708-6ad0357037f5' { menuentry 'EulerOS (4.18.0-147.5.1.6.h934.eulerosv2r9.x86_64) 2.0 (SP9x86_64)' --class euleros --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-4.18.0-147.5. 1.6.h934.eulerosv2r9.x86_64-advanced-f6aefacb-f2d3-4809-b708-6ad0357037f5' { menuentry 'EulerOS (0-rescue) 2.0 (SP9x86_64)' --class euleros --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-0-rescue-advanced-f6aefacb-f2d3-4809-b708-6ad 0357037f5' { [root@devserver-ddff ~]# 查看假如reboot(尚未reboot)后默认选择的内核版本: [root@devserver-ddff ~]# grub2-editenv list saved_entry=EulerOS (4.18.0-147.5.1.6.h998.eulerosv2r9.x86_64) 2.0 (SP9x86_64) boot_success=0 [root@devserver-ddff ~]# 发现默认系统内核已经变为h998,reboot后就会生效。 此时若重启那么内核版本就被升级了。
  • 命令方式采集自定义指标数据 用于创建自定义指标采集POD的YAML文件示例如下。 apiVersion: v1 kind: Pod metadata: name: my-task annotations: ei.huaweicloud.com/metrics: '{"customMetrics":[{"containerName":"my-task","exec":{"command":["cat","/metrics/task.prom"]}}]}' # ModelArts从哪个容器以及使用哪个命令获取指标数据,请根据实际情况替换containerName参数和command参数 spec: containers: - name: my-task image: my-task-image:latest # 替换为实际使用的镜像 备注:业务负载和自定义指标采集可以共用一个容器,也可以由SideCar容器采集指标数据,然后将自定义指标采集容器指定到SideCar容器,这样可以不占用业务负载容器的资源。
  • kubectl工具配置 本文介绍如何配置kubectl工具,操作步骤如下。 进入专属资源池。 图1 专属资源池页签 单击创建的专属资源池,进入专属资源池详情页面。 图2 专属资源池详情 单击对应的CCE集群,进入CCE集群详情页面,在“集群信息”找到“连接信息”。 图3 链接信息 使用kubectl工具。 若通过内网使用kubectl工具,需要将kubectl工具安装在和集群在相同vpc下的某一台机器上。单击kubectl后的“配置”按钮。按照界面提示步骤操作即可。 图4 通过内网使用kubectl工具 通过公网使用kubectl工具,可以将kubectl安装在任一台可以访问公网的机器。 首先需要绑定公网地址,单击公网地址后的“绑定”按钮。 图5 绑定公网地址 选择公网IP,或者跳至创建,创建新的弹性公网IP。 创建公网IP完成后,返回CCE集群详情页面,在“集群信息”找到“连接信息”。单击kubectl后的“配置”按钮。 按照界面提示步骤操作即可。 图6 配置kubectl 验证。 在安装了kubectl工具的机器上执行如下命令,显示集群节点即为成功。 kubectl get node 父主题: k8s Cluster资源配置
  • 原因分析 在CCE纳管过程中,需要通过cloudinit userdata机制拉取cce-agent,但是在服务器上查看没有拉cce-agent的动作,理论上该动作是cloudinit中的脚本在创建时自动执行的,可能是由于安装脚本没有注入userdata或者注入了但未执行。 经查看是由于userdata未执行,可能原因为服务器A制作镜像时没有清理残留目录导致,即: 镜像里面“/var/lib/cloud/instances”残留了制作镜像机器(后面称模板机)的实例ID信息,如果制作镜像不清理“/var/lib/cloud/*”就会导致用该镜像再重装模板机时,cloud-init根据残留目录(含实例ID)判断已经执行过一次,进而不会再执行user-data里面的脚本。 而使用该镜像的服务器B和C,由于实例ID信息和镜像中残留的服务器A实例ID不同,就会执行user-data,所以CCE能纳管成功。
  • 场景描述 本文介绍GP Ant8裸金属服务器使用本地盘实现软RAID5的解决方案,该方案保障了本地盘数据的可靠性,当其中一块硬盘故障时,备份硬盘可自动恢复数据。 RAID1:同时对2个硬盘读写(同样的数据),强调数据的绝对安全性,一般会对系统盘做RAID1方案,但是该方案磁盘利用率只有50%,比较浪费。 RAID5:把多个(最少3个)硬盘合并成1个逻辑盘使用,数据读写时会建立奇偶校验信息,并且奇偶校验信息和相对应的数据分别存储于不同的磁盘上。当RAID5的一个磁盘数据发生损坏后,利用剩下的数据和相应的奇偶校验信息去恢复被损坏的数据。相当于raid0和raid1的综合。
  • 操作步骤 根据所需要的环境拉取镜像。 拉取Ascend+PyTorch镜像: # 配套Snt9b的容器镜像,包含pytorch 1.11 + mindspore-lite 2.2.0 + Ascend CANN Toolkit 7.0.1 docker pull swr.cn-southwest-2.myhuaweicloud.com/atelier/pytorch_1_11_ascend:pytorch_1.11.0-cann_7.0.1-py_3.9-euler_2.10.7-aarch64-snt9b-20231107190844-50a1a83 拉取Ascend+Mindspore镜像: # 配套Snt9b的容器镜像,包含mindspore 2.2.0 + mindspore-lite 2.2.0 + Ascend CANN Toolkit 7.0.1 docker pull swr.cn-southwest-2.myhuaweicloud.com/atelier/mindspore_2_2_ascend:mindspore_2.2.0-cann_7.0.1-py_3.9-euler_2.10.7-aarch64-snt9b-20231107190844-50a1a83 启动容器镜像,注意多人多容器共用机器时,需要将卡号做好预先分配,不能使用其他容器已使用的卡号: # 启动容器,请注意指定容器名称、镜像信息。ASCEND_VISIBLE_DEVICES指定容器要用的卡,0-1,3代表0 1 3这3块卡,-用于指定范围 # -v /home:/home_host是指将宿主机home目录挂载到容器home_host目录,建议在容器中使用该挂载目录进行代码和数据的存储以便持久化 docker run -itd --cap-add=SYS_PTRACE -e ASCEND_VISIBLE_DEVICES=0 -v /home:/home_host -p 51234:22 -u=0 --name 自定义容器名称 上一步拉取的镜像SWR地址 /bin/bash 进入容器: docker exec -ti 上一命令中的自定义容器名称 bash 进入conda环境: source /home/ma-user/.bashrc cd ~ 查看容器中可以使用的卡信息: npu-smi info 如果命令报如下错误,则代表容器启动时指定的“ASCEND_VISIBLE_DEVICES”卡号已被其他容器占用,此时需要重新选择卡号并重新启动新的容器。 图1 报错信息 npu-smi info检测正常后,可以执行一段命令进行简单的容器环境测试,能正常输出运算结果代表容器环境正常可用。 pytorch镜像测试: python3 -c "import torch;import torch_npu; a = torch.randn(3, 4).npu(); print(a + a);" mindspore镜像测试: # 由于mindspore的run_check程序当前未适配Snt9B,需要先设置2个环境变量才能测试 unset MS_GE_TRAIN unset MS_ENABLE_GE python -c "import mindspore;mindspore.set_context(device_target='Ascend');mindspore.run_check()" # 测试完需要恢复环境变量,实际跑训练业务的时候需要用到 export MS_GE_TRAIN=1 export MS_ENABLE_GE=1 图2 进入conda环境并进行测试
  • 场景描述 在Ubuntu 20.04每次内核升级后,系统需要重新启动以加载新内核。如果您已经安装了自动更新功能,则系统将自动下载和安装可用的更新,这可能导致系统在不经意间被重启,若使用的软件依赖于特定版本的内核,那么当系统自动更新到新的内核版本时,可能会出现兼容性问题。在使用Ubuntu20.04时,建议手动控制内核的更新。 禁用自动更新可能会导致您的系统变得不安全,因为您需要手动安装重要的安全补丁。在禁用自动更新之前,请确保您已了解其中的风险。
  • 操作步骤 安装NVIDIA驱动。 apt-get update sudo apt-get install nvidia-driver-470 安装CUDA。 wget https://developer.download.nvidia.com/compute/cuda/11.4.4/local_installers/cuda_11.4.4_470.82.01_linux.run chmod +x cuda_11.4.4_470.82.01_linux.run ./cuda_11.4.4_470.82.01_linux.run --toolkit --samples --silent 验证NVIDIA安装结果。 nvidia-smi -pm 1 nvidia-smi /usr/local/cuda/bin/nvcc -V 安装Pytorch2.0和验证CUDA验证。 PyTorch2.0所需环境为Python3.10, 安装配置miniconda环境。 miniconda安装并创建alpha环境。 wget https://repo.anaconda.com/miniconda/Miniconda3-py310_23.1.0-1-Linux-x86_64.sh chmod 750 Miniconda3-py310_23.1.0-1-Linux-x86_64.sh bash Miniconda3-py310_23.1.0-1-Linux-x86_64.sh -b -p /home/miniconda export PATH=/home/miniconda/bin:$PATH conda create --quiet --yes -n alpha python=3.10 安装pytorch2.0并验证cuda状态。 在alpha环境下安装torch2.0,使用清华PIP源完成。 source activate alpha conda install pytorch torchvision torchaudio pytorch-cuda=11.7 -c pytorch -c nvidia python 验证torch与cuda的安装状态,输出为True即为正常。 import torch print(torch.cuda.is_available())
  • 操作步骤 磁盘合并挂载。首次配置环境时,需要先处理磁盘分配。这一步操作建议放在最开始,避免使用一段时间再挂载容易冲掉用户已存储的内容。 通过“df -h”查看是否已经有多个大于1T的存储空间,如果有代表已挂载过,如下图可以看到有四块nvme SSD硬盘(/dev/nvme0n1、/dev/nvme1n1、/dev/nvme2n1)。 图1 查看系统存储信息 创建pv(物理卷physical volume基本存储逻辑块)。 依次执行以下命令: pvcreate /dev/nvme0n1 pvcreate /dev/nvme1n1 pvcreate /dev/nvme2n1 pvcreate /dev/nvme3n1 创建vg(卷组Volume Group将两块pv组成一个组),路径信息使用命令“fdisk -l”查询。 vgcreate nvme_group /dev/nvme0n1 /dev/nvme1n1 /dev/nvme2n1 /dev/nvme3n1 创建lv(逻辑卷logical volume可以在组里划分逻辑存储,每个lv可对应文件系统比如/home或者/usr等,这里将100%的VG空间都给这个lv)。 lvcreate -l 100%VG -n local_data nvme_group 格式化分区。 mkfs -t xfs /dev/nvme_group/local_data 挂载到/home/data目录。 mkdir /home/data mount /dev/nvme_group/local_data /home/data 设置开机自动挂载。 # 查看UUID blkid /dev/nvme_group/docker_data vim /etc/fstab # 文件末尾一行填写以下内容: UUID=上一步查询出的UUID值1 /home/data xfs defaults 0 0
共100000条