本节使用mindie-service安装目录(examples/kubernetes_deploy_scripts)中的脚本实现一键式部署和卸载MindIE PD分离集群功能,集群管理员用户可参考这些脚本文件线下使用K8s kubectl工具操作集群。
集群管理员用户只需在管理节点完成启动脚本编写、业务配置和kubernetes配置,然后调用部署脚本,实现自动下发业务配置和启动脚本,自动全局ranktable生成,以及自动调度Pod到计算节点。
脚本文件目录结构如下所示:
├── boot_helper │ ├── boot.sh │ ├── get_group_id.py │ └── update_mindie_server_config.py ├── chat.sh ├── conf ├── delete.sh ├── deployment │ ├── mindie_ms_controller.yaml │ ├── mindie_ms_coordinator.yaml │ ├── mindie_server_heterogeneous.yaml │ └── mindie_server.yaml ├── deploy.sh ├── generate_stream.sh ├── gen_ranktable_helper │ ├── gen_global_ranktable.py │ └── global_ranktable.json └── log.sh
关键目录及文件解释如下所示:
以LLaMA3-8B模型为例,每个实例配置2张卡,配置4个实例。部署样例如下所示,以下操作均在部署脚本路径下完成:
下面操作步骤不区分同构部署和异构部署,异构部署在对应的操作步骤有单独的配置说明。
kubectl create namespace mindie
PD场景下需配置“deploy_mode”参数为PD分离部署模式,如下所示:
"deploy_mode"= "pd_separate"
如需进行异构部署,则需要配置“is_heterogeneous”参数为“true”,如下所示:
is_heterogeneous: true
配置文件ms_controller.json中的“default_p_rate”和“default_d_rate”参数分别控制集群中P节点和D节点数量的比值,默认均为0,根据模型、硬件、服务信息等自动决策最佳配比,也可以根据场景分别设置为P和D节点的实际数量。
PD场景下需配置“deploy_mode”参数为PD分离部署模式,如下所示:
deploy_mode="pd_separate"
“tls_enable”参数为控制是否使用HTTPS的开关,若集群内MindIE组件使用了HTTPS接口,需设置“tls_enable”为“true”,并导入证书到容器内,配置相应的证书路径。如使用HTTP接口,则设置“tls_enable”为“false”,无需准备证书文件。
建议用户打开tls_enable,确保通信安全;如果关闭则存在较高的网络安全风险。
在部署脚本目录中的deployment目录下找到mindie_server.yaml、mindie_ms_coordinator.yaml、mindie_ms_controller.yaml和mindie_server_heterogeneous.yaml(仅异构场景配置)文件。
kubectl label node xx_node hardware-type=xx_device
异构场景下,参数取值需满足以下要求:
kubectl label node xx_node hardware-type=xx_device2
异构场景下,参数取值需满足以下要求:
环境变量配置请参考配置说明。
配置容器内mindie安装的目录:根据制作镜像时实际的安装路径,修改MINDIE_USER_HOME_PATH的value值,如安装路径是/xxx/Ascend/mindie, 则配置为/xxx 。
export MINDIE_USER_HOME_PATH={镜像的安装路径}
使用以下命令拉起集群。
bash deploy.sh
执行命令后,会同步等待global_ranktable.json生成完成,如长时间处于阻塞状态,请ctrl+c中断后查看集群Pod状态,进行下一步的调试定位。
global_ranktable.json样例如下所示,样例中参数解释如表1所示。
{ "version": "1.0", "status": "completed", "server_group_list": [ { "group_id": "0", "server_count": "1", "server_list": [ { "server_id": "xxx.xxx.xxx.1", "server_ip": "xxx.xxx.xxx.1" } ] }, { "group_id": "1", "server_count": "1", "server_list": [ { "server_id": "xxx.xxx.xxx.1", "server_ip": "xxx.xxx.xxx.1" } ] }, { "group_id": "2", "server_count": "2", "server_list": [ { "server_id": "xxx.xxx.xxx.1", "server_ip": "xxx.xxx.xxx.1", "device": [ { "device_id": "0", "device_ip": "xxx.xxx.xxx.1", "device_logical_id": "0" } ], "hardware_type": "800I A2(32G)" }, { "server_id": "xxx.xxx.xxx.2", "server_ip": "xxx.xxx.xxx.2", "device": [ { "device_id": "1", "device_ip": "xxx.xxx.xxx.2", "device_logical_id": "1" } ], "hardware_type": "800I A2(64G)" } ] } ] }
参数 |
类型 |
描述 |
---|---|---|
version |
string |
Ascend Operator的版本号。 |
status |
string |
集群信息表的状态。
|
group_id |
string |
各组件的ID。
|
server_count |
string |
各组件的节点总数。 |
server_list |
json对象数组 |
各组件的节点部署信息。
|
server_id |
string |
组件节点的主机IP。 |
server_ip |
string |
组件节点的IP地址。 |
device |
json对象数组 |
NPU设备信息,仅MindIE Server有此属性。列表有效长度[1, 128]。 |
device_id |
string |
NPU的设备ID。 |
device_ip |
string |
NPU的IP地址。 |
device_logical_id |
string |
NPU的逻辑ID,即Server所在Pod内可见的卡设备的序列ID。 |
hardware_type |
string |
硬件设备类型,仅异构模式下有此属性。
|
syncFrequency: 5s
然后使用以下命令重启kubelet:
swapoff -a systemctl restart kubelet.service systemctl status kubelet
需在待部署服务的计算节点上修改Docker配置文件后重启Docker:
vim /etc/docker/daemon.json
"log-opts":{"max-size":"500m", "max-file":"3"}
参数解释:
max-size=500m:表示一个容器日志大小上限是500M。
max-file=3:表示一个容器最多有三个日志,超过会自动滚动更新。
systemctl daemon-reload systemctl restart docker
若使能异构集群推理,执行以下命令:
bash deploy.sh heter
kubectl get pods -n mindie
如启动4个MindIE Server实例,回显如下所示:
1 2 3 4 5 6 7 | NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES mindie-ms-controller-7845dcd697-h4gw7 1/1 Running 0 145m xx.xx.xx.xx ubuntu10 <none> <none> mindie-ms-coordinator-6bff995ff8-l6fwz 1/1 Running 0 145m xx.xx.xx.xx ubuntu10 <none> <none> mindie-server-7b795f8df9-2xvh4 1/1 Running 0 145m xx.xx.xx.xx ubuntu <none> <none> mindie-server-7b795f8df9-j4z7d 1/1 Running 0 145m xx.xx.xx.xx ubuntu <none> <none> mindie-server-7b795f8df9-v2tcz 1/1 Running 0 145m xx.xx.xx.xx ubuntu <none> <none> mindie-server-7b795f8df9-vl9hv 1/1 Running 0 145m xx.xx.xx.xx ubuntu <none> <none> |
如观察Pod进入Running状态,表示Pod容器已成功被调度到节点并正常启动,但还需要进一步确认业务程序是否启动成功。
bash log.sh
若使配置了异构集群推理,执行以下命令:
bash log.sh heter
kubectl logs mindie-server-7b795f8df9-vl9hv -n mindie
kubectl exec -it mindie-server-7b795f8df9-vl9hv -n mindie -- bash
kubectl logs mindie-ms-controller-7845dcd697-h4gw7 -n mindie | grep UpdateServerInfo
查询到P节点和D节点的Pod IP,并结合上面查询Pod状态命令回显的IP可找到对应的Pod。
bash generate_stream.sh
bash delete.sh