昇腾社区首页
中文
注册

详细说明

vllm_npu_0.6.2版本(即:vLLM 0.6.2版本昇腾框架适配代码)中修改了platforms、attention、engine、executor、model_executor和worker六个模块,如表1所示,其架构图如图1所示,与Github代码仓vLLM原生框架中的同名模块一一对应。vllm_npu_0.6.2版本可参考参考代码制作。

图1 vLLM 0.6.2版本架构图
表1 各模块修改内容介绍

模块

简介

platforms模块

该模块添加了NPU平台类NpuPlatform,并且在平台接口类Platform中接入NPU平台。

attention模块

该模块新增了backends中的mindie文件,并且定义了MindIEAttentionBackend、MindIEAttentionMetadata、与MindIEAttentionMetadataBuilder。在0.6.2版本中,除了在此处定义KV Cache的形状,现在Metadata的构建也在此处进行。以及multistep的特性,需要在此处定义替代原本CUDA算子的advance_step_flashattn。

engine模块

该模块加入判断逻辑分支,当检测到运行在昇腾环境下时,引擎会选择executor层中定义的NPUExecutor和RayNPUExecutor类分别去进行单卡推理和多卡推理。另外,0.6.2版本在启动在线服务后,不再使用AsyncLLMEngine,而是使用新的MQLLMEngine,使用消息队列来进行请求接收端与实际推理后端之间的通信,使用多进程的方式来实现CPU与NPU之间的并行。

executor模块

该模块中主要实现了四个executor类,其中NPUExecutor和NPUExecutorAsync用于单卡环境的同步和异步调用模式下的推理,RayNPUExecutor和RayNPUExecutorAsync用于多卡ray分布式环境的同步和异步调用模式下的推理。现在异步模式只会在PP并行的情况下被调用,与在线服务模式解绑。此外,在ray_utils.py中对initialize_ray_cluster函数进行了修改,使其能够辨别昇腾环境,并在昇腾环境下指定NPU节点的数量。

worker模块

该模块实现了NPUWorker类,以供executor模块中的executor类进行调用;实现了ModelInputForNPU、ModelInputForNPUWithSamplingMetadata、ModelInputForNPUBuilder、NPUModelRunnerBase和ModelRunner类,在NPUWorker中进行调用。