# 推理绑核
#### 场景描述
在大模型推理部署场景中，操作系统默认的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）插件文档](https://support.huaweicloud.com/resmgmt-modelarts/resmgmt-modelarts_0083.html)。
- API兼容性说明：绑核能力通过新增可选字段（cpu_affinity）实现，默认值false，不影响存量服务。
- 性能限制：平台提供绑核加速方案，无法确保任意模型绑核后服务性能提升程度，需酌情使用
 
#### 前提条件
- 已创建专属资源池，且资源池节点规格为绑核支持的机型（Snt9b或Snt9b23）。关于专属资源池的创建请参见++[创建专属资源池](https://support.huaweicloud.com/resmgmt-modelarts/resmgmt-modelarts_0004.html)++。
- 已按照++[配置服务信息](https://support.huaweicloud.com/inference-modelarts/inference2.0-modelarts-0016.html)++章节完成推理服务基础信息配置。
- 确保账户未欠费，资源充足。
 
#### 控制台操作配置
1. 登录++ModelArts管理控制台++，在左侧菜单栏中选择"模型推理 \> 在线服务"，进入在线服务管理页面。
2. 在"部署在线服务"页面完成基础信息、资源配置、模型配置等配置操作。
3. 在"单元配置"区域选择规格为Ascend 8卡（或8的整数倍，使用整个节点）的预置规格或自定义规格。
4. 在"高级配置"区域找到"启用CPU绑核"勾选框，勾选后开启绑核能力。默认未勾选，即不开启绑核能力。
5. 完成其他配置后，单击"确认部署"，进入确认配置页面。
6. 确认配置无误后，单击"确认部署"，开始部署推理服务。平台后端将自动完成绑核配置，无需人工干预。
 
#### 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，但机型不支持绑核时，无法创建部署。
 #### 结果验证
部署完成后，可通过以下方式验证绑核是否生效：
**方式一：通过进程状态验证**
1. 登录推理服务所在的节点或进入推理容器。
2. 执行以下命令查看绑核脚本是否成功运行：
   ```
   ```bash
   ps -ef | grep cpu_bind
   ```
   ```
   未启用绑核：绑核脚本未运行，无相关进程输出。
   启用绑核：绑核脚本成功运行，可看到绑核脚本进程。
   
3. 查看推理相关进程的CPU亲和性，确认进程已绑定到固定CPU核。
   ```
   ```bash
   top
   ```
   ```
   进入top命令后，按F键并移动到P选项，按下空格键启用，再按ESC返回，效果如图所示。
   图1效果   
   ![](https://support.huaweicloud.com/inference-modelarts/figure/zh-cn_image_0000002723252599.png)
   未启用绑核：目标进程所在CPU的值为全部CPU核范围（如0\~127），表示进程未绑定到固定CPU核。
   启用绑核且生效：目标进程所在CPU的值为固定CPU核范围（如0\~15），表示进程已绑定到指定CPU核。
   
**方式二：通过服务事件验证**
在ModelArts管理控制台进入推理服务详情页。 在"部署"页签中查看服务事件列表，确认绑核Init Container是否正常启动并执行完成。
#### 常见问题
**问题1：绑核选项不可见或无法勾选**
可能原因：当前选择的规格不是Ascend 8卡（或8的整数倍，使用整个节点），或使用的是非Snt9b和Snt9b23机型的资源池。
处理方式：
1. 确认使用的是专属资源池，而非公共池。
2. 确认选择的规格为绑核支持的机型（Snt9b或Snt9b23），且Ascend卡数为8（或8的整数倍，使用整个节点）。
3. 若规格和资源池均符合要求仍无法看到绑核选项，请提工单联系运维人员确认Operator版本是否为指定版本。
**问题2：绑核后推理服务部署失败**
可能原因：绑核镜像拉取失败，通常是由于绑核脚本镜像未推送到局点SWR仓库，或配置中心中的镜像地址配置错误。
故障现象：Pod的Init Container因镜像拉取失败无法启动，进入ImagePullBackOff状态，推理业务容器不会启动。
处理方式：
1. 在ModelArts管理控制台进入服务详情页，查看服务事件列表，确认是否为镜像拉取失败。
2. 提工单联系运维人员检查配置中心中init.container.image.url和arm.init.container.image.url配置项是否正确指向SWR镜像地址。
3. 确认绑核脚本镜像已推送到局点SWR仓库。
4. 配置修正后，重建Pod即可恢复。
**问题3：绑核后推理性能未达预期**
可能原因：CPU分配策略不合理、亲和性不正确，或模型本身的计算特性不适合绑核优化。
处理方式：
1. 确认绑核是否实际生效，通过查看推理相关进程的CPU亲和性验证，参见++[结果验证]的方式一++。
2. 若绑核已生效但性能未提升，说明当前模型的计算特性可能不适合绑核优化。绑核主要优化的是CPU调度抖动导致的性能波动，对于计算密集型为主的模型，性能提升可能有限。
**问题4：如何关闭已开启的绑核能力**
处理方式：在ModelArts管理控制台进入推理服务详情页，通过"升级部署"或"修改配置"进入部署配置页面，取消勾选"启用CPU绑核"，然后重新部署。Pod重建后将不再执行绑核操作，恢复原有行为。
**问题5：** **升级Operator版本后绑核功能是否自动生效**
处理方式：Operator版本升级后，已运行的推理服务不受影响，绑核状态保持不变。新创建的推理服务若勾选了"启用CPU绑核"且规格符合要求，则绑核功能自动生效。已运行的推理服务需要通过重建Pod（如升级部署）才能使用新版本Operator提供的绑核能力。
