详细说明
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版本可参考参考代码制作。
模块 |
简介 |
---|---|
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中进行调用。 |