已合并
【FEAT】预检工具新增 HCCL_RDMA_PCIE_DIRECT_POST_NOSTRICT 校验提示 #4988
刘家旺创建于 3月10日
【FEAT】预检工具新增 HCCL_RDMA_PCIE_DIRECT_POST_NOSTRICT 校验提示 #4988
已合并
共 3 个文件变更+25-13
| @@ -52,3 +52,6 @@ def is_port_in_use(port: int, host: str = 'localhost', protocol: str = 'tcp'): | |||
| 52 | return False | 52 | return False |
| 53 | except Exception: | 53 | except Exception: |
| 54 | return True | 54 | return True |
| 55 | + | ||
| 56 | +def get_conf_pagesize(): | ||
| 57 | + return os.sysconf('SC_PAGESIZE') | ||
| @@ -72,6 +72,7 @@ class _ExpressionEvaluator(NodeVisitor): | |||
| 72 | 'in': lambda a, b: a in b, | 72 | 'in': lambda a, b: a in b, |
| 73 | 'and': lambda a, b: a and b, | 73 | 'and': lambda a, b: a and b, |
| 74 | 'not in': lambda a, b: a not in b, | 74 | 'not in': lambda a, b: a not in b, |
| 75 | + 'not': lambda a: not a, | ||
| 75 | '*': operator.mul, | 76 | '*': operator.mul, |
| 76 | '+': operator.add, | 77 | '+': operator.add, |
| 77 | '-': operator.sub, | 78 | '-': operator.sub, |
| @@ -26,6 +26,9 @@ arch: '框架架构类型,可选值: mindie/vllm,决定解析 rank table 的 | |||
| 26 | --- | 26 | --- |
| 27 | 27 | ||
| 28 | [global] | 28 | [global] |
| 29 | +# System | ||
| 30 | +page_size = get_conf_pagesize() | ||
| 31 | + | ||
| 29 | # PD Mix 场景变量 | 32 | # PD Mix 场景变量 |
| 30 | if ${context::deploy_mode} == 'pd_mix': | 33 | if ${context::deploy_mode} == 'pd_mix': |
| 31 | dp = ${mies_config::BackendConfig.ModelDeployConfig.ModelConfig[0].dp} or 1 | 34 | dp = ${mies_config::BackendConfig.ModelDeployConfig.ModelConfig[0].dp} or 1 |
| @@ -34,7 +37,7 @@ if ${context::deploy_mode} == 'pd_mix': | |||
| 34 | sp = ${mies_config::BackendConfig.ModelDeployConfig.ModelConfig[0].sp} or 1 | 37 | sp = ${mies_config::BackendConfig.ModelDeployConfig.ModelConfig[0].sp} or 1 |
| 35 | pp = ${mies_config::BackendConfig.ModelDeployConfig.ModelConfig[0].pp} or 1 | 38 | pp = ${mies_config::BackendConfig.ModelDeployConfig.ModelConfig[0].pp} or 1 |
| 36 | world_size = ${mies_config::BackendConfig.ModelDeployConfig.ModelConfig[0].worldSize} | 39 | world_size = ${mies_config::BackendConfig.ModelDeployConfig.ModelConfig[0].worldSize} |
| 37 | - | 40 | + |
| 38 | if ${context::model_type} == 'deepseek': | 41 | if ${context::model_type} == 'deepseek': |
| 39 | moe_ep = ${mies_config::BackendConfig.ModelDeployConfig.ModelConfig[0].moe_ep} or 1 | 42 | moe_ep = ${mies_config::BackendConfig.ModelDeployConfig.ModelConfig[0].moe_ep} or 1 |
| 40 | moe_tp = ${mies_config::BackendConfig.ModelDeployConfig.ModelConfig[0].moe_tp} or 1 | 43 | moe_tp = ${mies_config::BackendConfig.ModelDeployConfig.ModelConfig[0].moe_tp} or 1 |
| @@ -50,7 +53,7 @@ elif ${context::deploy_mode} == 'pd_disaggregation_single_container': | |||
| 50 | sp = ${ms_config::BackendConfig.ModelDeployConfig.ModelConfig[0].sp} or 1 | 53 | sp = ${ms_config::BackendConfig.ModelDeployConfig.ModelConfig[0].sp} or 1 |
| 51 | pp = ${ms_config::BackendConfig.ModelDeployConfig.ModelConfig[0].pp} or 1 | 54 | pp = ${ms_config::BackendConfig.ModelDeployConfig.ModelConfig[0].pp} or 1 |
| 52 | world_size = ${ms_config::BackendConfig.ModelDeployConfig.ModelConfig[0].worldSize} | 55 | world_size = ${ms_config::BackendConfig.ModelDeployConfig.ModelConfig[0].worldSize} |
| 53 | - | 56 | + |
| 54 | if ${context::npu_type} == 'A2': | 57 | if ${context::npu_type} == 'A2': |
| 55 | # 使用 for 循环处理环境变量 | 58 | # 使用 for 循环处理环境变量 |
| 56 | for item in ${mindie_service_single_container::[1].spec.template.spec.containers[0].env}: | 59 | for item in ${mindie_service_single_container::[1].spec.template.spec.containers[0].env}: |
| @@ -68,14 +71,14 @@ elif ${context::deploy_mode} == 'pd_disaggregation_single_container': | |||
| 68 | MINDIE_MS_GEN_SERVER_PORT = ${item.value} | 71 | MINDIE_MS_GEN_SERVER_PORT = ${item.value} |
| 69 | fi | 72 | fi |
| 70 | done | 73 | done |
| 71 | - | 74 | + |
| 72 | # 处理 volumes | 75 | # 处理 volumes |
| 73 | for volume in ${mindie_service_single_container::[1].spec.template.spec.volumes}: | 76 | for volume in ${mindie_service_single_container::[1].spec.template.spec.volumes}: |
| 74 | if "${volume.name} == 'model-path'": | 77 | if "${volume.name} == 'model-path'": |
| 75 | host_model_path = ${volume.hostPath.path} | 78 | host_model_path = ${volume.hostPath.path} |
| 76 | fi | 79 | fi |
| 77 | done | 80 | done |
| 78 | - | 81 | + |
| 79 | # 处理 volumeMounts | 82 | # 处理 volumeMounts |
| 80 | for mount in ${mindie_service_single_container::[1].spec.template.spec.containers[0].volumeMounts}: | 83 | for mount in ${mindie_service_single_container::[1].spec.template.spec.containers[0].volumeMounts}: |
| 81 | if "${mount.name} == 'model-path'": | 84 | if "${mount.name} == 'model-path'": |
| @@ -100,13 +103,13 @@ elif ${context::deploy_mode} == 'pd_disaggregation_single_container': | |||
| 100 | MINDIE_MS_GEN_SERVER_PORT = ${item.value} | 103 | MINDIE_MS_GEN_SERVER_PORT = ${item.value} |
| 101 | fi | 104 | fi |
| 102 | done | 105 | done |
| 103 | - | 106 | + |
| 104 | for volume in ${mindie_service_single_container_base_A3::[1].spec.template.spec.volumes}: | 107 | for volume in ${mindie_service_single_container_base_A3::[1].spec.template.spec.volumes}: |
| 105 | if "${volume.name} == 'model-path'": | 108 | if "${volume.name} == 'model-path'": |
| 106 | host_model_path = ${volume.hostPath.path} | 109 | host_model_path = ${volume.hostPath.path} |
| 107 | fi | 110 | fi |
| 108 | done | 111 | done |
| 109 | - | 112 | + |
| 110 | for mount in ${mindie_service_single_container_base_A3::[1].spec.template.spec.containers[0].volumeMounts}: | 113 | for mount in ${mindie_service_single_container_base_A3::[1].spec.template.spec.containers[0].volumeMounts}: |
| 111 | if "${mount.name} == 'model-path'": | 114 | if "${mount.name} == 'model-path'": |
| 112 | container_model_path = ${mount.mountPath} | 115 | container_model_path = ${mount.mountPath} |
| @@ -122,7 +125,7 @@ elif ${context::deploy_mode} == 'pd_disaggregation' and ${context::npu_type} == | |||
| 122 | sp = ${ms_config::BackendConfig.ModelDeployConfig.ModelConfig[0].sp} or 1 | 125 | sp = ${ms_config::BackendConfig.ModelDeployConfig.ModelConfig[0].sp} or 1 |
| 123 | pp = ${ms_config::BackendConfig.ModelDeployConfig.ModelConfig[0].pp} or 1 | 126 | pp = ${ms_config::BackendConfig.ModelDeployConfig.ModelConfig[0].pp} or 1 |
| 124 | world_size = ${ms_config::BackendConfig.ModelDeployConfig.ModelConfig[0].worldSize} | 127 | world_size = ${ms_config::BackendConfig.ModelDeployConfig.ModelConfig[0].worldSize} |
| 125 | - | 128 | + |
| 126 | # 处理 mindie_server 环境变量 | 129 | # 处理 mindie_server 环境变量 |
| 127 | for item in ${mindie_server::[1].spec.template.spec.containers[0].env}: | 130 | for item in ${mindie_server::[1].spec.template.spec.containers[0].env}: |
| 128 | if ${item.name} == 'MINDIE_LOG_LEVEL': | 131 | if ${item.name} == 'MINDIE_LOG_LEVEL': |
| @@ -133,7 +136,7 @@ elif ${context::deploy_mode} == 'pd_disaggregation' and ${context::npu_type} == | |||
| 133 | MINDIE_LOG_TO_STDOUT_server = ${item.value} | 136 | MINDIE_LOG_TO_STDOUT_server = ${item.value} |
| 134 | fi | 137 | fi |
| 135 | done | 138 | done |
| 136 | - | 139 | + |
| 137 | # 处理 mindie_ms_coordinator 环境变量 | 140 | # 处理 mindie_ms_coordinator 环境变量 |
| 138 | for item in ${mindie_ms_coordinator::[0].spec.template.spec.containers[0].env}: | 141 | for item in ${mindie_ms_coordinator::[0].spec.template.spec.containers[0].env}: |
| 139 | if ${item.name} == 'MINDIE_LOG_LEVEL': | 142 | if ${item.name} == 'MINDIE_LOG_LEVEL': |
| @@ -144,7 +147,7 @@ elif ${context::deploy_mode} == 'pd_disaggregation' and ${context::npu_type} == | |||
| 144 | MINDIE_LOG_TO_STDOUT_coordinator = ${item.value} | 147 | MINDIE_LOG_TO_STDOUT_coordinator = ${item.value} |
| 145 | fi | 148 | fi |
| 146 | done | 149 | done |
| 147 | - | 150 | + |
| 148 | # 处理 mindie_ms_controller 环境变量 | 151 | # 处理 mindie_ms_controller 环境变量 |
| 149 | for item in ${mindie_ms_controller::spec.template.spec.containers[0].env}: | 152 | for item in ${mindie_ms_controller::spec.template.spec.containers[0].env}: |
| 150 | if ${item.name} == 'MINDIE_LOG_LEVEL': | 153 | if ${item.name} == 'MINDIE_LOG_LEVEL': |
| @@ -186,14 +189,14 @@ elif ${context::deploy_mode} == 'lwd': | |||
| 186 | sp = ${mies_config::BackendConfig.ModelDeployConfig.ModelConfig[0].sp} or 1 | 189 | sp = ${mies_config::BackendConfig.ModelDeployConfig.ModelConfig[0].sp} or 1 |
| 187 | pp = ${mies_config::BackendConfig.ModelDeployConfig.ModelConfig[0].pp} or 1 | 190 | pp = ${mies_config::BackendConfig.ModelDeployConfig.ModelConfig[0].pp} or 1 |
| 188 | world_size = ${mies_config::BackendConfig.ModelDeployConfig.ModelConfig[0].worldSize} | 191 | world_size = ${mies_config::BackendConfig.ModelDeployConfig.ModelConfig[0].worldSize} |
| 189 | - | 192 | + |
| 190 | lwd = ${mies_config::ServerConfig.layerwiseDisaggregated} | 193 | lwd = ${mies_config::ServerConfig.layerwiseDisaggregated} |
| 191 | lwd_role_type = ${mies_config::ServerConfig.layerwiseDisaggregatedRoleType} | 194 | lwd_role_type = ${mies_config::ServerConfig.layerwiseDisaggregatedRoleType} |
| 192 | lwd_master_ip = ${mies_config::ServerConfig.layerwiseDisaggregatedMasterIpAddress} | 195 | lwd_master_ip = ${mies_config::ServerConfig.layerwiseDisaggregatedMasterIpAddress} |
| 193 | lwd_slave_ip = ${mies_config::ServerConfig.layerwiseDisaggregatedSlaveIpAddress} | 196 | lwd_slave_ip = ${mies_config::ServerConfig.layerwiseDisaggregatedSlaveIpAddress} |
| 194 | lwd_master_data_port = ${mies_config::ServerConfig.layerwiseDisaggregatedDataPort} | 197 | lwd_master_data_port = ${mies_config::ServerConfig.layerwiseDisaggregatedDataPort} |
| 195 | lwd_master_crtl_port = ${mies_config::ServerConfig.layerwiseDisaggregatedCrtlPort} | 198 | lwd_master_crtl_port = ${mies_config::ServerConfig.layerwiseDisaggregatedCrtlPort} |
| 196 | - | 199 | + |
| 197 | lwd_master_npu_num = ${mies_config::BackendConfig.ModelDeployConfig.ModelConfig[0].models.layerwiseDisaggregatedMasterDeviceNum} | 200 | lwd_master_npu_num = ${mies_config::BackendConfig.ModelDeployConfig.ModelConfig[0].models.layerwiseDisaggregatedMasterDeviceNum} |
| 198 | lwd_slave_npu_num = ${mies_config::BackendConfig.ModelDeployConfig.ModelConfig[0].models.layerwiseDisaggregatedSlaveDeviceNum} | 201 | lwd_slave_npu_num = ${mies_config::BackendConfig.ModelDeployConfig.ModelConfig[0].models.layerwiseDisaggregatedSlaveDeviceNum} |
| 199 | 202 | ||
| @@ -204,7 +207,7 @@ elif ${context::deploy_mode} == 'lwd': | |||
| 204 | fi | 207 | fi |
| 205 | fi | 208 | fi |
| 206 | 209 | ||
| 207 | ---- | 210 | +--- |
| 208 | 211 | ||
| 209 | [par env] | 212 | [par env] |
| 210 | if ${context::deploy_mode} == 'pd_mix': | 213 | if ${context::deploy_mode} == 'pd_mix': |
| @@ -212,6 +215,11 @@ if ${context::deploy_mode} == 'pd_mix': | |||
| 212 | assert ${MINDIE_LOG_TO_STDOUT} in ['1', 'true'], '建议开启 MindIE 日志打屏,便于查看程序运行状态', info | 215 | assert ${MINDIE_LOG_TO_STDOUT} in ['1', 'true'], '建议开启 MindIE 日志打屏,便于查看程序运行状态', info |
| 213 | assert ${MINDIE_LOG_LEVEL} in [NA, 'info', 'INFO'], '如果配置了 MINDIE_LOG_LEVEL,建议设置为 info 或 INFO,表示日志级别为 info', info | 216 | assert ${MINDIE_LOG_LEVEL} in [NA, 'info', 'INFO'], '如果配置了 MINDIE_LOG_LEVEL,建议设置为 info 或 INFO,表示日志级别为 info', info |
| 214 | 217 | ||
| 218 | + # ISSUE: https://gitcode.com/Ascend/msit/issues/394 | ||
| 219 | + assert not (${HCCL_RDMA_PCIE_DIRECT_POST_NOSTRICT} == 'TRUE' and ${page_size} == 4096), "此环境变量仅对Host侧小页内存页表大小非4KB的场景生效,若Host侧小页内存页表大小是4KB,无论此环境变量取值如何,都采用PCIe Direct的方式提交RDMA任务", info | ||
| 220 | + assert not (${HCCL_RDMA_PCIE_DIRECT_POST_NOSTRICT} == 'TRUE' and ${page_size} == 65536), "该变量会导致内存逐渐碎片化,申请不到整块内存,服务拉起过程中很大概率会发生OOM", warning | ||
| 221 | + assert not (${HCCL_RDMA_PCIE_DIRECT_POST_NOSTRICT} != 'TRUE' and ${page_size} == 65536), "不配置HCCL_RDMA_PCIE_DIRECT_POST_NOSTRICT变量会导致通过HDC的方式提交RDMA任务,存在大幅度的性能劣化。建议更换分页大小为4096的系统内核", info | ||
| 222 | + | ||
| 215 | if ${context::model_type} == 'deepseek': | 223 | if ${context::model_type} == 'deepseek': |
| 216 | assert ${PYTORCH_NPU_ALLOC_CONF} == 'expandable_segments:True', '需要开启 torch_npu 虚拟内存机制', warning | 224 | assert ${PYTORCH_NPU_ALLOC_CONF} == 'expandable_segments:True', '需要开启 torch_npu 虚拟内存机制', warning |
| 217 | assert ${ATB_WORKSPACE_MEM_ALLOC_ALG_TYPE} == '3', 'workspace 内存分配算法选择,建议设置为 3,最大优化显存碎片与 workspace 空间', warning | 225 | assert ${ATB_WORKSPACE_MEM_ALLOC_ALG_TYPE} == '3', 'workspace 内存分配算法选择,建议设置为 3,最大优化显存碎片与 workspace 空间', warning |
| @@ -728,4 +736,4 @@ if ${context::deploy_mode} == 'ep': | |||
| 728 | assert ${mindie_server_decode_env.HCCL_INTRA_PCIE_ENABLE} == 1, '建议设置为 1,开启 HCCL 的 PCIe 通信,需要配合 HCCL_INTRA_ROCE_ENABLE 一同设置', info | 736 | assert ${mindie_server_decode_env.HCCL_INTRA_PCIE_ENABLE} == 1, '建议设置为 1,开启 HCCL 的 PCIe 通信,需要配合 HCCL_INTRA_ROCE_ENABLE 一同设置', info |
| 729 | assert ${mindie_server_decode_env.HCCL_INTRA_ROCE_ENABLE} == 0, '建议设置为 0,关闭 HCCL 的 RoCE 通信,需要配合 HCCL_INTRA_PCIE_ENABLE 一同设置', info | 737 | assert ${mindie_server_decode_env.HCCL_INTRA_ROCE_ENABLE} == 0, '建议设置为 0,关闭 HCCL 的 RoCE 通信,需要配合 HCCL_INTRA_PCIE_ENABLE 一同设置', info |
| 730 | fi | 738 | fi |
| 731 | -fi | 739 | +fi |
msprechecker/msprechecker/cmate/custom_fn.pydef get_conf_pagesize(): return os.sysconf('SC_PAGESIZE')