本软件提供MindX组件及其依赖的批量离线安装功能,具体适用场景及安装组件说明如下(可选组件默认不安装):
场景 | 安装组件 | 说明 |
---|---|---|
MindX DL全栈安装(集群调度场景, 全栈) | Docker,Kubernetes,Ascend Docker Runtime,Ascend Device Plugin,Volcano,NodeD,HCCL-Controller,NPU-Exporter | 该场景适用于你有一台或者多台NPU服务器,需要使用Kubernetes管理。使用该场景会完成NPU服务器的Docker、Kubernetes和NPU集群调度组件的安装。在inventory_file中对应场景一 |
K8s集群扩容(集群调度场景) | Ascend Docker Runtime,Ascend Device Plugin,Volcano,NodeD(可选),HCCL-Controller(可选),NPU-Exporter(可选) | 该场景适用于你已经有一个部署好的Kubernetes集群,需要纳管新的NPU服务器。使用该场景时,需要在已有的Kubernetes集群的master节点部署NPU管理组件,新接入的NPU机器上部署worker节点的NPU管理组件。在inventory_file中对应场景二 |
K8s集群扩容(设备纳管场景) | Ascend Docker Runtime,Ascend Device Plugin,NPU-Exporter(可选) | 该场景适用于你已经有一个部署好的Kubernetes集群,希望使用自己的调度器部署NPU任务。使用该场景时,需要在新接入的NPU服务器上部署worker节点的NPU管理组件。在inventory_file中对应场景三 |
MEF-Center离线安装场景 | Docker,Kubernetes,KubeEdge,MEF-Center | 该场景的MEF-Center支持部署在边缘设备或者服务器上,需要确保设备的操作系统为ubuntu和OpenEuler,其中ubuntu版本为20.04,OpenEuler为22.03。在inventory_file中对应场景四,相关操作请查看MEF_README |
安装前请阅读环境依赖确认环境符合预期;
POD_NETWORK_CIRD
参数为其他私有网段,如:10.0.0.0/16。操作系统 | 版本 | 架构 |
---|---|---|
Ubuntu | 18.04、20.04、22.04 | aarch64 |
x86_64 | ||
OpenEuler | 20.03LTS、22.03LTS | aarch64 |
x86_64 | ||
CentOS | 7.6 | aarch64 |
x86_64 |
软件名 | 软件版本 | 架构 | 说明 |
---|---|---|---|
Docker | 18.09 | aarch64 | 容器运行时 |
x86_64 | |||
Kubernetes | 1.19.16 | aarch64 | 容器编排工具 |
x86_64 | |||
Ascend Device Plugin | 3.0.0 | 集群调度组件 | |
Volcano | |||
NodeD | |||
HCCL-Controller | |||
NPU-Exporter | |||
Ascend Docker Runtime |
服务器类型 |
---|
Atlas 800 训练服务器(型号:9000/9010) |
Atlas 800 推理服务器(型号:3000/3010) |
服务器(插Atlas 300T 训练卡) |
服务器(插Atlas 300I 推理卡) |
服务器(插Atlas 300I Pro 推理卡) |
服务器(插Atlas 300I Duo 推理卡) |
服务器(插Atlas 300V Pro 视频解析卡) |
服务器(插Atlas 300V 训练解析卡) |
在各节点安装时,本工具仅支持root账号和配置了sudo权限的普通账号运行。
在有网络访问权限的主机上,下载离线安装包resources.zip, 并将其放置在Linux节点解压缩到/root/resources目录。
下载离线软件安装压缩包resources.zip
对于Linux主机,可以执行以下命令下载,其它系统请使用系统自带的下载工具。以下链接仅为示例,具体版本下载链接参考历史版本中的地址。
请确保包下载完整,注意网络波动。
wget https://ascend-repo-modelzoo.obs.cn-east-2.myhuaweicloud.com/MindXDL/3.0.0/resources.zip
# resources.zip解压出的内容必须放在在家目录下
unzip resources.zip -d /root
# copy offline-deploy
cp resources/ascend-deployer/offline-deploy /root/offline-deploy -a
在部分os上, 默认没有unzip组件, 用户可以提前下载 arm版unzip 或者 x86_64版unzip 并上传到执行节点使用。
安装部署脚本需要通过ssh登录各台服务器执行命令,支持如下登陆方式:
目前支持以下两种配置方式:
方法1 :修改inventory_file
配置项的具体含义请参考inventory_file
文件中的注释;
cd /root/offline-deploy
vi inventory_file
参数说明:
用户需要将相关节点的主机信息填写在分组下边,目前主机分组为master,worker,mef,other_build_image。
分组说明:
master:k8s的默认控制节点,如果该分组中包含多行主机信息的话,首行主机作为多master节点的的主master
worker:k8s的工作节点主机
mef:需要安装MEF-center的主机节点,通常需要为k8s的主控节点
build_other_image: 如果k8s集群中存在与master节点架构不一致的主机,则配置其中一台的节点信息即可,该节点也会部署MindX DL
当选择包含配置k8s, MindX DL的场景时需要配置master和worker节点的主机;
对于安装MEF-Center场景,还需要配置mef分组;
如果存在异构节点,还需要配置build_other_image分组。
配置信息示例如下
[master]
10.10.10.10 ansible_ssh_user="test" ansible_become_password="test1234" set_hostname=master-1 k8s_api_server_ip=10.10.10.10 kube_interface=enp125s0f0
示例说明(配置master节点的主机为k8s的默认控制节点):
10.10.10.10:服务器的IP地址;
ansible_ssh_user:ssh登录远程服务器的账号,普通账号和root账号均可,但普通账号必须有sudo权限,且权限与root相近;
ansible_ssh_pass:ssh登录远程服务器账号的密码,如果配置了免密登录且root用户可以登录,则无需配置;
ansible_ssh_port:ssh连接的端口,如果使用了非默认的22端口,则需要配置;
ansible_become_password:普通账号执行sudo命令时输入的密码,该变量与账号ssh登录时输入的密码一致。root账号无须配置,如果ansible_ssh_user中配置的是普通账号且/etc/sudoers中账号配置了NOPASSWD选项,则该变量可不设置,否则必须设置
set_hostname:设置节点在K8s集群中的节点名字,建议用“[a-z]-[0-9]”的格式;如果已有K8s集群,则该名字需要为节点在K8s中的名字,不可随意填写。
k8s_api_server_ip:k8s对外提供服务的入口,配置为master节点的IP地址。
kube_interface:对应服务器ip地址网卡名字,单master场景下可以不设置
如果使用harbor服务,则需要配置harbor相关的信息,具体见inventory_file本身注释。
方法2 :修改csv文件(/root/offline-deploy/Inventory_Template.CSV)
SCENE_NUM,1,EXTRA,,MEF,no,POD_NETWORK_CIDR,192.168.0.0/16,KUBE_VIP,,HARBOR_SERVER,,HARBOR_ADMIN_USER,,HARBOR_ADMIN_PASSWORD,,HARBOR_PUBLIC_PROJECT,false,HARBOR_CA_FILE,no
*group,*ssh_host,*ssh_user,ssh_pass,ssh_become_pass,host_name,*k8s_api_server_ip,kube_interface,mode,device_netmask,detect_ip,device_ips
master,10.10.10.10,root,password,,master,10.10.10.10,,,,,
worker,10.10.10.11,root,password,,worker,10.10.10.11,,SMP,255.255.255.0,192.168.100.108,192.168.100.100/192.168.100.101/192.168.100.102/192.168.100.103/192.168.100.104/192.168.100.105/192.168.100.106/192.168.100.107
other,10.10.10.11,root,password,,worker,10.10.10.11,,SMP,255.255.255.0,192.168.100.108,192.168.100.100/192.168.100.101/192.168.100.102/192.168.100.103/192.168.100.104/192.168.100.105/192.168.100.106/192.168.100.107
第一行为全局配置信息:
其余行为主机配置信息
根据上一步选择方法的不同,可以选择不同的安装方式
方法1:可以按需选择执行具体的脚本:
bash scripts/backup.sh # 备份resources目录和安装工具软件
bash scripts/hccn_set.sh # 如果需要配置查看hccn网络时,可以执行该脚本
bash scripts/install_ansible.sh # 如当前环境没有ansible,需要安装,可以执行该脚本安装
bash scripts/install_kubeedge.sh # 直接安装或卸载MEF
bash scripts/install_npu.sh # 如需安装npu驱动,可以执行该脚本
bash scripts/install.sh # 如果需要根据inventory_file中场景(SCENE_NUM)执行具体的安装任务,可以执行该脚本
bash scripts/machine_report.sh # 查看worker节点主机上npu,hccn_tool等状态并生成报告文件
bash scripts/uninstall_mef_related.sh # 卸载MEF及其相关的依赖,docker,k8s等
bash scripts/upgrade.sh # 升级软件包组件脚本
方法2: 根据具体场景进行一键安装:
cd /root/offline-deploy
python scripts/ascend-deploy.py <相应的csv位置,如/root/offline-deploy/Inventory_Template.CSV>
上述命令将根据场景的不同,按需分别执行以下任务的组合:
如果安装过程出现错误,请根据回显中的信息进行排查处理,也可查看常见问题进行处理.
说明:
当前软件基于ansible实现,默认并非为50,即同时最多在50个节点上同时执行,如需修改,可编辑/etc/ansible/ansible.cfg,修改参数forks的值并保存;
NPU-Exporter可提供HTTPS或HTTP服务,使用安装脚本仅支持HTTP服务,如对安全性需求较高可参考《MindX DL用户指南》中安装NPU-Exporter的章节,手动部署提供HTTPS服务的NPU-Exporter,升级时仅支持使用HTTP部署的方式。
使用安装脚本部署的HCCL-Controller、NodeD、Ascend Device Plugin均使用ServiceAccount授权方式与K8s进行通信,如需使用更加安全的方式与K8s进行通信如通过证书导入工具导入KubeConfig文件,则请参考《MindX DL用户指南》中的“导入证书和KubeConfig”章节,升级时仅支持使用ServiceAccount授权的方式。
用户也可以通过在~/offline-deploy
目录下执行 scripts/install_ansible.sh
(安装ansible), scripts/install_npu.sh
(安装驱动), scripts/install.sh
(按场景安装k8s和DL组件) 分步安装;
安装后状态查看
使用命令kubectl get nodes
检查kubernetes节点,如下所示表示正常
NAME STATUS ROLES AGE VERSION
master Ready master 60s v1.19.16
worker-1 Ready worker 60s v1.19.16
使用命令kubectl get pods --all-namespaces
检查kubernetes pods,如下所示表示正常
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system ascend-device-plugin-daemonset-910-lq 1/1 Running 0 21h
kube-system calico-kube-controllers-68c855c64-4fn2k 1/1 Running 1 21h
kube-system calico-node-4zfjp 1/1 Running 0 21h
kube-system calico-node-jsdws 1/1 Running 0 21h
kube-system coredns-f9fd979d6-84xd2 1/1 Running 0 21h
kube-system coredns-f9fd979d6-8fld7 1/1 Running 0 21h
kube-system etcd-ubuntu-1 1/1 Running 0 21h
kube-system kube-apiserver-ubuntu-1 1/1 Running 0 21h
kube-system kube-controller-manager-ubuntu-1 1/1 Running 8 21h
kube-system kube-proxy-6zr9j 1/1 Running 0 21h
kube-system kube-proxy-w9lw9 1/1 Running 0 21h
kube-system kube-scheduler-ubuntu-1 1/1 Running 6 21h
mindx-dl hccl-controller-8ff6fd684-9pgxm 1/1 Running 0 19h
mindx-dl noded-c2h7r 1/1 Running 0 19h
npu-exporter npu-exporter-7kt25 1/1 Running 0 19h
volcano-system volcano-controllers-56cbbb9c6-9trf7 1/1 Running 0 19h
volcano-system volcano-scheduler-66f75bf89f-94jkx 1/1 Running 0 19h
用户也可通过集群状态报告常用操作7确认安装结果;
目前仅支持MindX DL集群调度组件升级,不支持Docker和Kubernetes的升级,并且升级时会按照之前/root/offline-deploy/inventory_file
中配置的节点、节点类型、场景包含的组件进行升级。
升级会先卸载旧的MindX DL集群调度组件再重新安装,请选择空闲时间进行,避免影响训练或者推理任务。同时,升级时请一次性升级安装了MindX DL集群调度组件中的某个组件的所有节点,避免部分组件未升级影响正常功能。
升级MindX DL集群调度组件时需要获取历史版本中的resources.zip包,上传到脚本执行节点非/root目录(如/root/upgrade)下,执行如下命令先备份旧的resources包中的内容。
# 解压新的resources
cd /root/upgrade
unzip resources.zip
# 备份旧的resources解压出的内容
cp /root/upgrade/resources/ascend-deployer/offline-deploy /root/upgrade/offline-deploy -a
cd /root/upgrade/offline-deploy
bash scripts/backup.sh
然后执行更新命令,如果在更新过程出现错误,请根据打印信息处理错误,然后再次执行下面的命令进行升级(不需要再执行上面的备份命令,除非更换了resources包)。
# 如需修改inventory_file,可在执行下一条命令之前自行修改/root/offline-deploy/inventory_file
cd /root/offline-deploy
bash scripts/upgrade.sh
bridge-nf-call-iptables
和bridge-nf-call-ip6tables
这两个内核参数置为1ascend
runtime,配置文件的修改位置/etc/docker/daemon.json
。/etc/docker/daemon.json
文件,在“insecure-registries”字段中增加Harbor的地址,以保证能够使用Harbor。
unzip
lspci
bc
ip
ifconfig
等命令保证安装Kubernetes的各节点的时间一致,避免因为时间问题导致kubernetes集群出现问题。
前提条件:
cd /root/offline-deploy; bash scripts/install_ansible.sh
安装ansible)将下面命令中的2022-06-01 08:00:00替换成用户需要的时间后,再执行
cd /root/offline-deploy
ansible -i inventory_file all -m shell -b -a "date -s '2022-06-01 08:00:00'; hwclock -w"
查看安装脚本执行节点能否访问inventory_file中的其他节点,即检查连通性。
前提条件:
cd /root/offline-deploy; bash scripts/install_ansible.sh
安装ansible)执行命令:
ansible -i inventory_file all -m ping
回显中无“UNREACHABLE”表示连通,否则参考常见安装问题1进行处理
查看Ascend Docker Runtime是否生效,请执行命令docker info 2>/dev/null | grep Runtime
,回显中出现“ascend”表示生效,回显示例如下。
Runtimes: ascend runc
Default Runtime: ascend
执行如下命令可以将inventory_file中配置的所有节点的k8s都重置(reset)
cd /root/offline-deploy
ansible-playbook -i inventory_file yamls/k8s_reset.yaml -vv
配置免密登录
生成公钥,请按提示进行,再要求输入加密口令时输入复杂度符合所在组织安全规定的口令
ssh-keygen
将管理节点的公钥拷贝到所有节点的机器上(包括本机),替换成要登录的账号,替换成要拷贝到的对应节点的ip。
ssh-copy-id <user>@<ip>
在完成所有节点的免密配置后, 使用ssh-agent做口令缓存, 下面的 ~/.ssh/id_rsa 请根据ssh-keygen时的实际情况替换
ssh-agent bash
ssh-add ~/.ssh/id_rsa
注意事项: 请用户注意ssh密钥和密钥密码在使用和保管过程中的风险,安装完成后请删除控制节点~/.ssh/目录下的id_rsa和id_rsa_pub文件,和其他节点~/.ssh目录下的authorized_keys文件。
hccn_tool网络配置(仅支持训练环境使用,详情可参考配置device的网卡IP)
修改/root/offline-deploy/hccn_inventory_file后,执行以下命令完成指定设备的npu卡的ip网络配置
cd /root/offline-deploy
bash scripts/hccn_set.sh
注意事项:
1、若未配置相关参数,无法完成ip配置;
2、若执行批量配置时,需提前配置免密登录;
3、hccn_inventory_file中ip、detectip配置格式有两种:
DL离线安装组件报告查看工具查看集群状态
注意该功能仅能在master节点上运行;
到处集群状态报告
cd /root/offline-deploy/tools/report
./k8s_status_report_$(arch) -inventoryFilePath /root/offline-deploy/inventory_file -path /root -format csv
运行以上命令后,会输出集群结果是否正常,同时会在/root下生成的out.csv文件,若需要查看相关节点和pod,容器等信息,将上述命令中的format改为json, 则会在本地生成master.json与work.json节点对应信息
查看docker, driver, hccn等相关信息
cd /root/offline-deploy/scripts
bash machine_report.sh
cat /root/report_temp.txt
驱动、固件安装说明
批量安装驱动、固件需编辑当前目录的inventory_file文件中的worker节点, 将需要安装驱动设备加入,建议以worker其下的示例一为模板, 逐项填写, 并提前配置好免密登陆
cd /root/offline-deploy
bash scripts/install_npu.sh # 安装驱动、固件
# bash scripts/install_npu.sh --type=run # 默认使用zip包安装,可指定为用run包安装
导入镜像
进入offline-deploy目录,编辑inventory_file文件。
在/root/offline-deploy/scripts目录下执行image_load.sh <镜像路径> <待安装节点> ,提供的镜像应为docker save导出的tar格式镜像, 待安装节点取值范围为master/worker/all/mef, 对应inventory_file中对应项, 完成镜像的导入。
可执行bash image_load.sh或bash image_load.sh -h查看help信息
cd /root/offline-deploy
bash scripts/image_load.sh <镜像路径> <待安装节点>
注意事项:
1、镜像路径需为绝对路径 2、inventory_file其他配置可直接参考inventory_file中的样例; 3、host只能为master,worker或all。
回显信息出现“UNREACHABLE”,参考信息如下:
172.0.0.100 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh: \nAuthorized users only. All activities may be monitored and reported.\nroot@172.0.0.100: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).",
"unreachable": true
}
原因:
ansible脚本无法ssh登录到inventory_file中配置的服务器上
解决方法:
请检查对应服务器的ssh配置是否正确,ssh服务是否启动,以及inventory_file文件配置是否正确
安装说明
POD_NETWORK_CIRD
参数为其他私有网段,如:10.0.0.0/16[master]
下配置的节点个数必须为奇数,如1,3,5...使用Harbor时,docker login失败了,运行日志出现如下内容
...
TASK [faild to login] *************************************************************************************************************
task path: /root/offline-deploy/tset.yaml:19
fatal: [172.0.0.99]: FAILED! => {"changed": false, "msg": "login harbor failed, please check whether docker proxy is set"}
...
原因:
节点的Docker配置了代理,docker login
命令无法连接到Harbor
解决方法:
通过命令docker info
依次查看登录失败的服务器是否配置了代理,回显如下表示本节点配置了代理
...
HTTP Proxy: http://proxy.example.com:80/
HTTPS Proxy: http://proxy.example.com:80/
...
找到本节点上Docker配置代理的文件,如/etc/systemd/system/docker.service.d/proxy.conf
,为Harbor地址(如:192.168.0.2:7443)配置NO_PROXY
,示例如下
[Service]
...
Environment="NO_PROXY=192.168.0.2:7443"
...
然后重启Docker服务,再进行安装
systemctl daemon-reload
systemctl restart docker
回显信息出现Missing sudo password
TASK [create mindx-dl image pull secret]
****************************************************************************************************************************************
task path: /root/offline-deploy/tset.yaml:12
fatal: [172.0.0.100]: FAILED! => {"msg": "Missing sudo password"}
原因:
inventory_file中配置的非root账号登录,且未在对应节点/etc/sudoers中为账号配置NOPASSWD,
解决方法:
ansible_become_password
参数如果安装时选择了安装K8s,脚本运行过程中,出现K8s加入集群失败相关错误,建议执行reset命令后再重新安装,reset命令会重置inventory_file中配置的master和worker节点的K8s集群,请确认后再操作。命令执行参考常用操作4。
如果安装部署过程出现K8s的master与worker通信异常,如打标签失败,通信超时等问题导致脚本执行失败,可以按照如下思路手动进行排查处理。
使用本工具部署时,如果/etc/ansible/facts-cache/ 目录存在,请先删除后再开始部署。
安装部署脚本执行时,master或者worker节点加入K8s集群,或者执行kubectl命令时出现类似如下错误信息
read: connection reset by peer\nerror: unexpected error when reading response body. Please retry.
原因:
可能由于节点之间网络通信不稳定,server端关闭了连接,导致申请加入集群的节点,或者发送kubectl命令的节点无法收到响应。
解决方法:
kubectl get node
确认失败的节点是否加入成功
kubeadm reset -f && rm -rf $HOME/.kube /etc/cni/net.d
# {nodename}为节点在K8s中的名字
kubectl taint nodes {nodename} node-role.kubernetes.io/master-
kubectl
命令时失败了,根据回显的信息处理完错误后再执行安装命令。某个节点的calico-node-**出现READY “0/1”
分析:
kubectl describe pod
命令查看K8s master节点的calico-node
Pod时有报错信息“calico/node is not ready: BIRD is not ready: BGP not established with...”free
查询,存在swap空间。原因:
操作系统的swap分区未关闭
解决方案:
执行命令swapoff -a
部署高可用集群时,出现phase preflight: couldn't validate the identity of the API Server: Get "https://192.168.56.120:6443/api/v1/namespaces/kube-public/configmaps/cluster-info?timeout=10s"
: dial tcp 192.168.56.120:6443: connect: connection refused\nTo see the stack trace of this error execute with --v=5 or higher
原因:
有多个master节点存在虚拟ip
解决方案:
重启master节点,使kube-vip部署的虚拟ip地址失效
使用kubectl
命令时,报错:The connection to the server xxxxx:6443 was refused - did you specify the right host or port?
原因:
有可能是配置了代理;k8s服务未启动;未给用户配置授权文件
解决方案:
如果是配置了代理,使用如下命令,去掉代理后再试
unset http_proxy https_proxy
如果是k8s服务未启动,使用如下命令,启动K8s服务后再试
systemctl start kubelet
如果未给用户配置授权文件,使用如下命令,配置授权文件后再试
export KUBECONFIG=/etc/kubernetes/admin.conf
或者
export KUBECONFIG=/etc/kubernetes/kubelet.conf
部署多master集群时,需要使用ip a查看每个节点虚拟ip有没有被分配,如果有则需要在对应节点上使用以下命令删除
ip addr delete <ip地址> dev <网卡名>
如需在生产环境中安装并使用Docker和Kubernetes,请参考对应的官方文档进行安装、配置和安全加固。
版本 | 资源 | 发布日期 |
---|---|---|
5.0.RC1 | https://ascend-repo-modelzoo.obs.myhuaweicloud.com/MindXDL/5.0.RC1/resources.zip | 2022.12.30 |
3.0.0 | https://ascend-repo-modelzoo.obs.cn-east-2.myhuaweicloud.com/MindXDL/3.0.0/resources.tar.gz | 2022.12.30 |
3.0.RC3 | https://ascend-repo-modelzoo.obs.cn-east-2.myhuaweicloud.com/MindXDL/3.0.RC3/resources.tar.gz | 2022.09.30 |
版本 | 版本说明 |
---|---|
5.0.RC1 | |
3.0.0 |
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。