配置故障隔离
vLLM Ascend提供的原生代理脚本将vLLM服务封装为实例对象,并根据实例对象的负载分数分别建立Prefill实例堆和Decode实例堆(小根堆是一种特殊的数据结构,堆顶的元素是整个堆里最小的)。当请求到达代理时,该代理会从实例堆中选择实例(即负载分数最小的),选择该实例后会对负载分数进行更新,从而实现实例的负载均衡。
由于原生代理脚本中未对实例进行是否可服务的探测与处理,因此在原生代理脚本基础上,增加了故障隔离功能。故障隔离功能的目的是将无法正常运行的服务隔离开来,防止流量到达故障实例从而无法服务。同时增加健康探测功能,用于辅助故障隔离功能。
故障隔离原理
在代理脚本中,增加了实例对象的失败次数和故障检查。具体流程如图1所示。
- 从堆中选取实例。
- 路由请求到该实例上。
- 若请求成功,则无需处理。
- 若请求失败,则将该实例的失败次数加1。
- 当某实例的失败次数大于3时,则将该实例标记为故障,并将其负载分数设置为无穷大。
- 根据小根堆的特性,故障实例会被堆按负载分数排序到堆底,优先级降到最低。
由于代理脚本实现中并未将故障实例从堆中移除,因此选取实例的逻辑由1次改为循环获取未故障的实例,若堆中所有的实例均已故障,则当前代理无法服务。
健康探测原理
在代理脚本中,默认开启健康探测协程,会对所有实例对象进行探测,根据探测结果进行后续处理,具体流程如图2所示。
- 健康探测功能会每间隔5s,对所有实例对象进行探测(调用/health接口)。
- 若请求失败则该实例失败次数加1。
- 若请求成功,分为以下两种情况:
- 当前实例未标记为故障,则该实例正常无需变动。
- 当前实例标记为故障,则将该实例的负载分数设置为0,并标记实例正常,该实例后续可以正常处理请求。
部署使用
详细请参见通过脚本一键式部署使用。
父主题: vLLM推理任务最佳实践

