推理绑核
场景描述
在大模型推理部署场景中,操作系统默认的CPU调度策略会将推理进程在不同CPU核之间动态迁移,导致CPU缓存命中率下降、NPU与CPU之间的亲和性被破坏,进而产生额外的调度开销,影响推理性能。对于使用昇腾NPU部署大语言模型的场景,这种CPU迁移开销尤为明显,在高吞吐推理场景下可能造成显著的性能损失。
ModelArts推理部署平台提供CPU绑核能力,用户在部署推理服务时可选择开启绑核功能。开启后,平台在推理Pod启动阶段自动执行绑核脚本,识别NPU拓扑和CPU亲和性关系,将推理相关进程(包括底层通信进程、核心计算线程、资源回收线程)绑定到指定CPU核上,消除操作系统调度器导致的CPU迁移开销,从而提升推理性能。
适用场景:
- 使用昇腾NPU部署大语言模型的推理服务,追求极致推理性能的场景
- 对推理吞吐量、时延有较高要求的生产环境核心业务
- 使用专属资源池部署在线推理服务,希望消除CPU调度抖动对推理性能影响的场景
约束与限制
- 机型限制:仅Snt9b、Snt9b23机型支持,其他机型不支持绑核功能。
- 资源池限制:专属资源池支持,公共资源池不支持绑核功能。
- 规格限制:仅当预置规格或自定义规格选择了Ascend 8卡(或8的整数倍,使用整个节点)时,绑核选项才可见且可开启。其他场景下该功能不显示。
- Operator插件版本限制:绑核功能依赖指定版本的KubeInfer(ModelArts Infers Operator)插件,要求Operator版本等于或高于7.6.2,版本过低,绑核功能不可用。插件版本查看请参考KubeInfer(ModelArts Infers Operator)插件文档。
- API兼容性说明:绑核能力通过新增可选字段(cpu_affinity)实现,默认值false,不影响存量服务。
- 性能限制:平台提供绑核加速方案,无法确保任意模型绑核后服务性能提升程度,需酌情使用
前提条件
控制台操作配置
- 登录ModelArts管理控制台,在左侧菜单栏中选择“模型推理 > 在线服务”,进入在线服务管理页面。
- 在“部署在线服务”页面完成基础信息、资源配置、模型配置等配置操作。
- 在“单元配置”区域选择规格为Ascend 8卡(或8的整数倍,使用整个节点)的预置规格或自定义规格。
- 在“高级配置”区域找到“启用CPU绑核”勾选框,勾选后开启绑核能力。默认未勾选,即不开启绑核能力。
- 完成其他配置后,单击“确认部署”,进入确认配置页面。
- 确认配置无误后,单击“确认部署”,开始部署推理服务。平台后端将自动完成绑核配置,无需人工干预。
API操作配置
通过API部署推理服务时,在创建或升级部署的请求体中,在推理单元配置(unit_configs)中设置cpu_affinity字段(Boolean类型,默认值为false)来控制绑核开关。
涉及API:
- 创建部署:POST /v2/{project_id}/services/{service_id}/deployments
- 升级部署:PUT /v2/{project_id}/services/{service_id}/deployments/{deployment_id}
请求体示例(仅展示关键字段):
{
"unit_configs": [
{
"role": "COMMON",
"image": {
"source": "SWR",
"swr_path": "swr_path"
},
"count": 1,
"cpu_affinity": true,
"name": "role-0",
"custom_spec": {
"memory": 40,
"cpu": 0.05,
"ascend": 0
}
}
]
}
cpu_affinity为可选字段,不传递时按默认值false处理,使用不绑核逻辑。
当cpu_affinity=true,但机型不支持绑核时,无法创建部署。
结果验证
部署完成后,可通过以下方式验证绑核是否生效:
方式一:通过进程状态验证
- 登录推理服务所在的节点或进入推理容器。
- 执行以下命令查看绑核脚本是否成功运行:
```bash ps -ef | grep cpu_bind ```
未启用绑核:绑核脚本未运行,无相关进程输出。
启用绑核:绑核脚本成功运行,可看到绑核脚本进程。
- 查看推理相关进程的CPU亲和性,确认进程已绑定到固定CPU核。
```bash top ```
进入top命令后,按F键并移动到P选项,按下空格键启用,再按ESC返回,效果如图所示。
图1 效果
未启用绑核:目标进程所在CPU的值为全部CPU核范围(如0~127),表示进程未绑定到固定CPU核。
启用绑核且生效:目标进程所在CPU的值为固定CPU核范围(如0~15),表示进程已绑定到指定CPU核。
方式二:通过服务事件验证
在ModelArts管理控制台进入推理服务详情页。 在“部署”页签中查看服务事件列表,确认绑核Init Container是否正常启动并执行完成。
常见问题
问题1:绑核选项不可见或无法勾选
可能原因:当前选择的规格不是Ascend 8卡(或8的整数倍,使用整个节点),或使用的是非Snt9b和Snt9b23机型的资源池。
处理方式:
- 确认使用的是专属资源池,而非公共池。
- 确认选择的规格为绑核支持的机型(Snt9b或Snt9b23),且Ascend卡数为8(或8的整数倍,使用整个节点)。
- 若规格和资源池均符合要求仍无法看到绑核选项,请提工单联系运维人员确认Operator版本是否为指定版本。
问题2:绑核后推理服务部署失败
可能原因:绑核镜像拉取失败,通常是由于绑核脚本镜像未推送到局点SWR仓库,或配置中心中的镜像地址配置错误。
故障现象:Pod的Init Container因镜像拉取失败无法启动,进入ImagePullBackOff状态,推理业务容器不会启动。
处理方式:
- 在ModelArts管理控制台进入服务详情页,查看服务事件列表,确认是否为镜像拉取失败。
- 提工单联系运维人员检查配置中心中init.container.image.url和arm.init.container.image.url配置项是否正确指向SWR镜像地址。
- 确认绑核脚本镜像已推送到局点SWR仓库。
- 配置修正后,重建Pod即可恢复。
问题3:绑核后推理性能未达预期
可能原因:CPU分配策略不合理、亲和性不正确,或模型本身的计算特性不适合绑核优化。
处理方式:
- 确认绑核是否实际生效,通过查看推理相关进程的CPU亲和性验证,参见结果验证的方式一。
- 若绑核已生效但性能未提升,说明当前模型的计算特性可能不适合绑核优化。绑核主要优化的是CPU调度抖动导致的性能波动,对于计算密集型为主的模型,性能提升可能有限。
问题4:如何关闭已开启的绑核能力
处理方式:在ModelArts管理控制台进入推理服务详情页,通过“升级部署”或“修改配置”进入部署配置页面,取消勾选“启用CPU绑核”,然后重新部署。Pod重建后将不再执行绑核操作,恢复原有行为。
问题5:升级Operator版本后绑核功能是否自动生效
处理方式:Operator版本升级后,已运行的推理服务不受影响,绑核状态保持不变。新创建的推理服务若勾选了“启用CPU绑核”且规格符合要求,则绑核功能自动生效。已运行的推理服务需要通过重建Pod(如升级部署)才能使用新版本Operator提供的绑核能力。