详细说明

vllm_npu_0.3.3版本(即:vLLM 0.3.3版本昇腾框架适配代码)中主要修改了core、engine、model_executor、worker四个模块,与vLLM原生框架中的同名模块一一对应进行热替换适配。vllm_npu_0.3.3版本可参考参考代码制作。

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

模块

简介

core模块

该模块中对于“num_batched_tokens”的计算与MindIE后端有所不同,因此在此处需要修改该变量计算逻辑。

engine模块

该模块替换了部分内容,主要是为了确保vLLM框架可以正确获取到后续的worker与model_executor模块。例如:

  • 在ray模块启动时新增指定 “num_gpus”参数为 “parallel_config.world_size”,解决ray模块启动问题;
  • 在DEVICE_TO_WORKER_MODULE_MAP常量字典中新增键值对:"npu": "vllm_npu.worker.ascend_worker",确保在启动worker时可以正确使用ascend_worker。

model_executor模块

该模块负责与MindIE LLM模型的推理与后处理进行对接,包含两个子模块:“layers”和 “models”。

  • “layers” 模块:主要负责后处理操作;
  • “models”模块:主要负责模型推理。在“models”模块中,编写了一个名为 “MindIELlmWrapper”的类。这个类用于实例化 MindIE LLM提供的 “GeneratorTorch”统一接口,并从vLLM原生框架的数据结构中提取出MindIE LLM所需的模型推理参数,进而调用统一接口进行模型推理。此外,该类还实现了在进行预热(warmup)操作时所需的虚拟数据的构造过程。

同时添加了ascend_model_loader.py文件,为后续的“ModelRunner”加载模型提供“get_model”方法。

worker模块

该模块覆写了“Worker”类与“ModelRunner”类中的部分函数,在ascend_worker.py和model_runner.py中与 “MindIELlmWrapper”交互,确保模型的加载、预热、推理和后处理等过程能够正确在后端执行。

此外,修改了原生框架中“CacheEngine”的“_allocate_kv_cache”函数,确保与后端接收的参数形式一致。