当前位置: 首页 > news >正文

【vLLM】源码解读:vllm如何识别到第三方自定义设备的

🔌 第三方平台插件识别机制

1️⃣ Python Entry Points 机制

第三方平台插件使用 Python 标准的 entry_points 机制进行注册和发现:

# 在第三方包的 setup.py 或 pyproject.toml 中
[project.entry-points."vllm.platform_plugins"]
gcu = "vllm_gcu.platform:gcu_platform_plugin"

2️⃣ GCU 平台插件示例

假设你要开发一个 GCU(燧原科技)平台插件,需要创建以下结构:

步骤 1: 创建插件包
# vllm_gcu/platform.pyfrom typing import Optionaldef gcu_platform_plugin() -> Optional[str]:"""GCU 平台检测函数"""is_gcu = Falsetry:# 检测 GCU 设备的存在import torch_gcu # GCU 的 Python 库# 检查是否有可用的 GCU 设备if hasattr(tops, 'device') and tops.device.is_available():device_count = torch.device.device_count()if device_count > 0:is_gcu = Trueprint(f"Detected {device_count} GCU device(s)")except Exception as e:print(f"GCU platform is not available: {e}")return None# 返回 GCU Platform 类的完全限定名return "vllm_gcu.gcu_platform.GCUPlatform" if is_gcu else None
步骤 2: 实现 Platform 类
# vllm_gcu/gcu_platform.pyfrom vllm.platforms.interface import Platform, PlatformEnumclass GCUPlatform(Platform):_enum = PlatformEnum.OOT  # Out-Of-Treedevice_name = "gcu"device_type = "gcu"dispatch_key = "CPU"  # 或者 GCU 专用的 dispatch key@classmethoddef get_device_name(cls, device_id: int = 0) -> str:import topsreturn tops.device.get_device_name(device_id)@classmethoddef get_device_capability(cls, device_id: int = 0):# 实现设备能力查询pass# 实现其他必要的方法...
步骤 3: 注册插件
# setup.py
from setuptools import setupsetup(name='vllm-gcu',version='0.1.0',packages=['vllm_gcu'],entry_points={'vllm.platform_plugins': ['gcu = vllm_gcu.platform:gcu_platform_plugin']}
)

或者使用 pyproject.toml:

[project.entry-points."vllm.platform_plugins"]
gcu = "vllm_gcu.platform:gcu_platform_plugin"

3️⃣ 插件发现和加载流程

启动 vLLM↓
resolve_current_platform_cls_qualname()↓
load_plugins_by_group('vllm.platform_plugins')  ← 181行↓
使用 importlib.metadata.entry_points() 扫描所有已安装包↓
发现所有注册到 'vllm.platform_plugins' 的插件↓
┌─────────────────────────────────────────┐
│ 发现的插件:                              │
│ - gcu (来自 vllm-gcu 包)                 │
│ - npu (来自 vllm-npu 包)                 │
│ - ... (其他第三方插件)                   │
└─────────────────────────────────────────┘↓
遍历所有插件,调用检测函数↓
gcu_platform_plugin() 返回:- "vllm_gcu.gcu_platform.GCUPlatform" (如果检测到 GCU)- None (如果没有 GCU 设备)↓
只允许一个平台插件被激活↓
动态加载并实例化平台类

4️⃣ 环境变量控制

可以通过 VLLM_PLUGINS 环境变量控制加载哪些插件:

# 加载所有插件(默认)
python your_script.py# 只加载特定插件
VLLM_PLUGINS=gcu python your_script.py# 不加载任何插件
VLLM_PLUGINS="" python your_script.py# 加载多个插件(用逗号分隔)
VLLM_PLUGINS=gcu,custom_plugin python your_script.py

5️⃣ 关键代码分析

vllm/plugins/__init__.pyload_plugins_by_group 函数:

def load_plugins_by_group(group: str) -> dict[str, Callable[[], Any]]:# 1. 使用 entry_points 发现插件discovered_plugins = entry_points(group=group)# 2. 过滤插件(根据 VLLM_PLUGINS 环境变量)allowed_plugins = envs.VLLM_PLUGINSplugins = {}for plugin in discovered_plugins:if allowed_plugins is None or plugin.name in allowed_plugins:# 3. 动态加载插件函数func = plugin.load()plugins[plugin.name] = funcreturn plugins

6️⃣ 优先级规则

vllm/platforms/__init__.py 的 200-220 行:

# 外部插件优先级 > 内置插件
if len(activated_oot_plugins) == 1:platform_cls_qualname = platform_plugins[activated_oot_plugins[0]]()logger.info("Platform plugin %s is activated", activated_oot_plugins[0])
elif len(activated_builtin_plugins) == 1:platform_cls_qualname = builtin_platform_plugins[activated_builtin_plugins[0]]()logger.info("Automatically detected platform %s.", activated_builtin_plugins[0])

📝 总结

GCU 设备识别流程:

  1. ✅ 安装 vllm-gcu 包(包含 entry_points 注册)
  2. ✅ vLLM 启动时自动扫描所有 vllm.platform_plugins 组的插件
  3. ✅ 调用 gcu_platform_plugin() 检测函数
  4. ✅ 检测函数尝试导入 GCU 库(如 tops)并查询设备
  5. ✅ 如果检测成功,返回平台类的完全限定名
  6. ✅ vLLM 动态加载并实例化 GCUPlatform 类
  7. ✅ 使用 GCU 平台进行推理

这就是第三方平台插件的完整识别机制!🎯

http://www.dtcms.com/a/487376.html

相关文章:

  • 网站制作的基本成都网站建设网络
  • 日志系统4 日志类型的设计
  • 深度学习:从图片数据到模型训练(十分类)
  • PCB mark点
  • 大兴网站开发网站建设咨询100%能上热门的文案
  • 网站建设douyanet杭州专业建设网站哪里好
  • Mysql杂志(三十二)——redo日志、undo日志
  • 2017做那些网站致富网博士自助建站系统
  • 上海做公司网站的公司室内设计网站模板
  • 化州 网站建设如何自己建营销网站
  • Kafka-2 Docker 部署单节点环境(SpringBoot验证)
  • 从0开始了解kafka《第二篇 kafka的安装、管理和配置》
  • 02 SQL数据检索入门 - SELECT语句详解
  • 从分词器构建到强化学习:nanochat开源项目下载与部署全流程教程,教你一步步训练ChatGPT语言模型
  • 长安镇仿做网站注册网站好的平台
  • 加强公司内部网站建设正邦设计公司
  • 巩义网站建设价格怎么注册个人工作室
  • 四川网站建设益友网站地图怎么用
  • 制作一个响应式网站开发工具景观设计公司名称
  • 网站设计网站开发优化欢迎你的加入
  • MySql 基本操作指令大全
  • 军用网站建设ui设计一个月挣多少钱
  • 海宁市住房和城乡建设网站网站源码程序修改
  • 做足球预测的网站小程序开发教程视频
  • 消息队列相关知识总结
  • Kafka集群Broker一点通
  • 怎样看网站建设制作方松北区建设局网站
  • 锂电电芯卷绕提质增效!光子精密边缘传感器+颜色传感器组合方案
  • 堆的 shift down 操作详解
  • QT(day1)