本节使用MindIE Server安装目录(examples/kubernetes_deploy_scripts)中的脚本实现一键式部署和卸载MindIE PD分离集群功能,集群管理员用户可参考这些脚本文件线下使用K8s kubectl工具操作集群。
集群管理员用户只需在管理节点完成启动脚本编写、业务配置和kubernetes配置,然后调用部署脚本,实现自动下发业务配置和启动脚本,自动全局ranktable生成,以及自动调度Pod到计算节点。
脚本文件目录结构如下所示:
├── boot_helper │ ├── boot.sh │ ├── gen_config_single_container.py │ ├── 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 │ └── mindie_service_single_container.yaml ├── deploy.sh ├── generate_stream.sh ├── gen_ranktable_helper │ ├── gen_global_ranktable.py │ └── global_ranktable.json └── log.sh
单机PD分离部署场景相关的关键目录及文件解释如下表所示:
目录/文件 |
说明 |
---|---|
conf |
MindIE MS和MindIE Server的主要业务配置文件,PD分离管理调度策略和模型相关配置。 |
boot_helper |
该目录包含容器启动脚本boot.sh,对conf目录下配置文件修正(包括在用户只提供一份Server的config.json情况下生成多份端口号不冲突的config文件)及生成对应global_ranktable的辅助脚本gen_config_single_container.py。 |
deployment |
K8s部署任务定义,配置NPU资源使用量,实例数,镜像等。在单机PD分离部署场景下只使用到mindie_service_single_container.yaml文件。 |
chat.sh |
使用curl发送HTTPS请求给推理服务的简单对话示例,适用于Prefix Cache场景。 |
generate_stream.sh |
使用curl发送HTTPS请求给推理服务的流式响应示例。 |
deploy.sh |
部署入口脚本,一键拉起所有MindIE组件。 |
delete.sh |
卸载脚本,一键卸载所有MindIE组件。 |
log.sh |
查询Pod的打屏日志,可查询到部署的所有Pod的日志。 |
以LLaMA3-8B模型为例,每个实例配置2张卡,配置4个实例。部署样例如下所示,以下操作均在部署脚本路径下完成:
kubectl create namespace mindie
"deploy_mode"= "pd_disaggregation_single_container"
PD场景下需配置“deploy_mode”参数为单机PD分离部署模式,如下所示:
deploy_mode="pd_disaggregation_single_container"
参数 |
说明 |
---|---|
modelName |
模型名配置,关联模型权重文件的模型,如配置为llama3-8b。 |
modelWeightPath |
模型权重文件目录配置,需配置为mindie_service_single_container.yaml文件中指定挂载在容器中的权重路径(默认为/mnt/mindie-service/ms/model),确保集群可调度Ascend计算节点在该路径下存在模型文件。 |
worldSize |
配置一个P/D实例占用的NPU卡数;例如配置为“2”,表示使用两张卡。 |
npuDeviceIds |
卡号配置成从0开始编号,总数与worldSize一致,如配置为[[0,1]]。 |
inferMode |
配置为dmi。 |
在单机PD分离部署场景下,多个Server进程将运行于同一Pod中,每个Server进程需对应独立的配置文件。为简化配置流程,可使用mindie_service_single_container.yaml文件中的MINDIE_MS_GEN_SERVER_PORT环境变量进行管理。该环境变量支持两种配置模式:
“tls_enable”参数为控制是否使用HTTPS的开关,若集群内MindIE组件使用了HTTPS接口,需设置“tls_enable”为“true”,并导入证书到容器内,配置相应的证书路径。如使用HTTP接口,则设置“tls_enable”为“false”,无需准备证书文件。
建议用户打开tls_enable,确保通信安全;如果关闭则存在较高的网络安全风险。
在部署脚本目录中的deployment目录下找到mindie_service_single_container.yaml文件。
该环境变量的优先级高于ms_controller.json配置文件中default_p_rate。
该环境变量的优先级高于ms_controller.json配置文件中default_d_rate。
- name: model-path hostPath: path: /data/LLaMA3-8B
环境变量 |
类型 |
说明 |
---|---|---|
MINDIE_INFER_MODE |
PD分离 |
推理模式,表示是否PD分离。
该环境变量未在boot.sh脚本默认配置中,如有需要可自行添加。 |
MINDIE_DECODE_BATCH_SIZE |
公共变量 |
最大Decode的batch大小。 取值范围:[1, 5000] 该环境变量未在boot.sh脚本默认配置中,如有需要可自行添加。 |
MINDIE_PREFILL_BATCH_SIZE |
公共变量 |
最大Prefill的batch大小。 取值范围:[1, MINDIE_DECODE_BATCH_SIZE - 1] 该环境变量未在boot.sh脚本默认配置中,如有需要可自行添加。 |
MINDIE_MAX_SEQ_LEN |
公共变量 |
最大序列长度。 整型数字,取值范围:(0, 4294967295] 该环境变量未在boot.sh脚本默认配置中,如有需要可自行添加。 |
MINDIE_MAX_ITER_TIMES |
公共变量 |
最大输出长度。 整型数字,取值范围:[1, MINDIE_MAX_SEQ_LEN-1] 该环境变量未在boot.sh脚本默认配置中,如有需要可自行添加。 |
MINDIE_MODEL_NAME |
公共变量 |
模型名。 该环境变量未在boot.sh脚本默认配置中,如有需要可自行添加。 |
MINDIE_MODEL_WEIGHT_PATH |
公共变量 |
模型权重文件路径。 该环境变量未在boot.sh脚本默认配置中,如有需要可自行添加。 |
MINDIE_ENDPOINT_HTTPS_ENABLED |
公共变量 |
是否在Prefill/Decode实例上启用HTTPS。
该环境变量未在boot.sh脚本默认配置中,如有需要可自行添加。 |
MINDIE_INTER_COMM_TLS_ENABLED |
公共变量 |
推理实例间通信开启TLS。
该环境变量未在boot.sh脚本默认配置中,如有需要可自行添加。 |
HSECEASY_PATH |
公共变量 |
KMC解密工具的依赖库路径。 |
MINDIE_MS_CONTROLLER_CONFIG_FILE_PATH |
公共变量 |
MindIE MS Controller组件配置文件路径。 |
MINDIE_MS_COORDINATOR_CONFIG_FILE_PATH |
公共变量 |
MindIE MS Coordinator组件配置文件路径。 |
注:日志相关环境变量详情请参见日志配置。 |
配置容器内MindIE安装的目录:根据制作镜像时实际的安装路径,修改MINDIE_USER_HOME_PATH的value值,如安装路径是/xxx/Ascend/mindie,则配置为/xxx 。
export MINDIE_USER_HOME_PATH={镜像的安装路径}
使用以下命令拉起集群。
bash deploy.sh
kubectl get pods -n mindie
回显示例如下:
1 2 | NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES mindie-server-7b795f8df9-vl9hv 1/1 Running 0 145m xx.xx.xx.xx ubuntu <none> <none> |
如观察Pod进入Running状态,表示Pod容器已成功被调度到节点并正常启动,但还需要进一步确认业务程序是否启动成功。
bash log.sh
kubectl logs mindie-server-7b795f8df9-vl9hv -n mindie
{ "version": "1.0", "server_group_list": [ { "group_id": "2", "server_count": "4", "server_list": [ { "server_id": "127.0.0.1", "server_ip": "127.0.0.1", "predict_port": "xxxx", "mgmt_port": "xxxx", "metric_port": "xxxx", "inter_comm_port": "xxxx", "device": [ { "device_id": "0", "device_ip": "1.1.1.1", "rank_id": "0", "device_logical_id": "0" }, { "device_id": "1", "device_ip": "1.1.1.2", "rank_id": "1", "device_logical_id": "1" } ] }, { "server_id": "127.0.0.1", "server_ip": "127.0.0.1", "predict_port": "xxxx", "mgmt_port": "xxxx", "metric_port": "xxxx", "inter_comm_port": "xxxx", "device": [ { "device_id": "2", "device_ip": "1.1.1.3", "rank_id": "2", "device_logical_id": "2" }, { "device_id": "3", "device_ip": "1.1.1.4", "rank_id": "3", "device_logical_id": "3" } ] }, { "server_id": "127.0.0.1", "server_ip": "127.0.0.1", "predict_port": "xxxx", "mgmt_port": "xxxx", "metric_port": "xxxx", "inter_comm_port": "xxxx", "device": [ { "device_id": "4", "device_ip": "1.1.1.5", "rank_id": "4", "device_logical_id": "4" }, { "device_id": "5", "device_ip": "1.1.1.6", "rank_id": "5", "device_logical_id": "5" } ] }, { "server_id": "127.0.0.1", "server_ip": "127.0.0.1", "predict_port": "xxxx", "mgmt_port": "xxxx", "metric_port": "xxxx", "inter_comm_port": "xxxx", "device": [ { "device_id": "6", "device_ip": "1.1.1.7", "rank_id": "6", "device_logical_id": "6" }, { "device_id": "7", "device_ip": "1.1.1.8", "rank_id": "7", "device_logical_id": "7" } ] } ] }, { "group_id": "1", "server_count": "1", "server_list": [ { "server_ip": "127.0.0.1" } ] }, { "group_id": "0", "server_count": "1", "server_list": [ { "server_ip": "127.0.0.1" }, ] } ], "status": "completed" }
参数 |
类型 |
描述 |
---|---|---|
version |
string |
Ascend Operator的版本号。 |
status |
string |
集群信息表的状态。
|
group_id |
string |
各组件的ID。
|
server_count |
string |
各组件的进程总数。 |
server_list |
json对象数组 |
各组件的进程部署信息。
|
server_id |
string |
组件节点的主机IP。 |
server_ip |
string |
组件节点的IP地址。 |
predict_port |
string |
EndPoint提供的业务面RESTful接口绑定的端口号。 |
mgmt_port |
string |
EndPoint提供的管理面(管理面接口请参见表1)接口绑定的端口号。 |
metric_port |
string |
服务监控指标接口(普罗格式)端口号。 |
inter_comm_port |
string |
集群内部实例间的通信端口。 |
device |
json对象数组 |
NPU设备信息,仅MindIE Server有此属性。列表有效长度[1, 128]。 |
device_id |
string |
NPU的设备ID。 |
device_ip |
string |
NPU的IP地址。 |
rank_id |
string |
NPU的逻辑ID,即Server所在Pod内可见的卡设备的序列ID。 |
device_logical_id |
string |
NPU的逻辑ID,即Server所在Pod内可见的卡设备的序列ID。 |
kubectl exec -it mindie-server-7b795f8df9-vl9hv -n mindie -- bash
bash generate_stream.sh
HTTP协议存在安全风险,建议您使用HTTPS安全协议。
bash delete.sh mindie ./