昇腾社区首页
中文
注册
开发者
下载

配置故障隔离

vLLM Ascend提供的原生代理脚本将vLLM服务封装为实例对象,并根据实例对象的负载分数分别建立Prefill实例堆和Decode实例堆(小根堆是一种特殊的数据结构,堆顶的元素是整个堆里最小的)。当请求到达代理时,该代理会从实例堆中选择实例(即负载分数最小的),选择该实例后会对负载分数进行更新,从而实现实例的负载均衡。

由于原生代理脚本中未对实例进行是否可服务的探测与处理,因此在原生代理脚本基础上,增加了故障隔离功能。故障隔离功能的目的是将无法正常运行的服务隔离开来,防止流量到达故障实例从而无法服务。同时增加健康探测功能,用于辅助故障隔离功能。

故障隔离原理

在代理脚本中,增加了实例对象的失败次数和故障检查。具体流程如图1所示。

图1 故障隔离流程图
  1. 从堆中选取实例。
  2. 路由请求到该实例上。
    • 若请求成功,则无需处理。
    • 若请求失败,则将该实例的失败次数加1。
  3. 当某实例的失败次数大于3时,则将该实例标记为故障,并将其负载分数设置为无穷大。
  4. 根据小根堆的特性,故障实例会被堆按负载分数排序到堆底,优先级降到最低。

由于代理脚本实现中并未将故障实例从堆中移除,因此选取实例的逻辑由1次改为循环获取未故障的实例,若堆中所有的实例均已故障,则当前代理无法服务。

健康探测原理

在代理脚本中,默认开启健康探测协程,会对所有实例对象进行探测,根据探测结果进行后续处理,具体流程如图2所示。

图2 健康探测流程图
  1. 健康探测功能会每间隔5s,对所有实例对象进行探测(调用/health接口)。
  2. 若请求失败则该实例失败次数加1。
  3. 若请求成功,分为以下两种情况:
    • 当前实例未标记为故障,则该实例正常无需变动。
    • 当前实例标记为故障,则将该实例的负载分数设置为0,并标记实例正常,该实例后续可以正常处理请求。

部署使用

详细请参见通过脚本一键式部署使用