vLLM 0.4.2 版本昇腾框架适配说明

vllm_npu_0.4.2版本的目录结构如下所示:
vllm_npu
|-- __init__.py
|-- attention
|   |-- __init__.py
|   |-- backends.py
|   |-- selector.py
|-- config.py
|-- core
|   |-- __init__.py
|-- engine
|   |-- __init__.py
|   |-- ascend_engine.py
|   |-- async_ascend_engine.py
|-- executor
|   |-- __init__.py
|   |-- ascend_executor.py
|   |-- ascend_ray_executor.py
|   |-- ray_utils.py
|-- model_executor
|   |-- __init__.py
|   |-- ascend_model_loader.py
|   |-- layers
|   |   |-- __init__.py
|   |   |-- ascend_sampler.py
|   |-- models
|       |-- __init__.py
|       |-- ascend
|           |-- __init__.py
|           |-- mindie_llm_wrapper.py
|-- npu_adaptor.py
|-- usage
|   |-- __init__.py
|   |-- usage_lib.py
|-- utils.py
|-- worker
    |-- __init__.py
    |-- ascend_model_runner.py
    |-- ascend_worker.py
    |-- cache_engine.py

vllm_npu_0.4.2版本中重写了attention、engine、executor、model_executor、usage、worker六个模块,与vLLM原生框架中的同名模块一一对应进行热替换适配。

除了上述的六个模块的适配外,还有一些主模块外的Python文件里的函数需要热替换,包括config.py中的DeviceConfig类中引入了NPU作为device_type,在utils.py文件中引入了is_ascend()函数用于检测当前运行环境是否为昇腾环境。最后,在npu_adaptor.py,对vLLM原框架中导入的一些昇腾环境下不具备的包(例如预编译的cuda算子、triton等)进行了屏蔽操作。

最后,总结对接MindIE LLM的关键部件修改的代码量,如表1所示。

表1 对接MindIE LLM的关键部件修改的代码量

重要组件

代码量

作用

MindIELlmWrapper

~120行

对接MindIE-LLM模型调用接口。

AscendSampler.py

~300行

对接MindIE-LLM后处理接口。

AscendModelRunner

~170行

原生框架中关键组件ModelRunner中的关键函数execute_model,load_model和profile_run的适配,在这里将模型导入部分替换为导入MindIELlmWrapper。