Files
FastDeploy/docs/zh/features/plugins.md
gaoziyuan 4021d66ea5 【Feature】add fd plugins && rm model_classes (#3123)
* add fd plugins && rm model_classed

* fix reviews

* add docs

* fix

* fix unitest ci
2025-08-03 19:53:20 -07:00

86 lines
2.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# FastDeploy 插件机制说明文档
FastDeploy 支持插件机制,允许用户在不修改核心代码的前提下扩展功能。插件通过 Python 的 `entry_points` 机制实现自动发现与加载。
## 插件工作原理
插件本质上是在 FastDeploy 启动时被自动调用的注册函数。系统使用 `load_plugins_by_group` 函数确保所有进程(包括分布式训练场景下的子进程)在正式运行前都已加载所需的插件。
## 插件发现机制
FastDeploy 利用 Python 的 `entry_points` 机制来发现并加载插件。开发者需在自己的项目中将插件注册到指定的 entry point 组中。
### 示例:创建一个插件
#### 1. 编写插件逻辑
假设你有一个自定义模型类 `MyModelForCasualLM` 和预训练类 `MyPretrainedModel`,你可以编写如下注册函数:
```python
# 文件fd_add_dummy_model/__init__.py
from fastdeploy.model_registry import ModelRegistry
from my_custom_model import MyModelForCasualLM, MyPretrainedModel
def register():
if "MyModelForCasualLM" not in ModelRegistry.get_supported_archs():
ModelRegistry.register_model_class(MyModelForCasualLM)
ModelRegistry.register_pretrained_model(MyPretrainedModel)
```
#### 2. 注册插件到 `setup.py`
```python
# setup.py
from setuptools import setup
setup(
name="fastdeploy-plugins",
version="0.1",
packages=["fd_add_dummy_model"],
entry_points={
"fastdeploy.model_register_plugins": [
"fd_add_dummy_model = fd_add_dummy_model:register",
],
},
)
```
## 插件结构说明
插件由三部分组成:
| 组件 | 说明 |
|------|------|
| **插件组Group** | 插件所属的功能分组,例如:<br> - `fastdeploy.model_register_plugins`: 用于注册模型<br> - `fastdeploy.model_runner_plugins`: 用于注册模型运行器<br> 用户可根据需要自定义分组。 |
| **插件名Name** | 每个插件的唯一标识名(如 `fd_add_dummy_model`),可通过环境变量 `FD_PLUGINS` 控制是否加载该插件。 |
| **插件值Value** | 格式为 `模块名:函数名`,指向实际执行注册逻辑的入口函数。 |
## 控制插件加载行为
默认情况下FastDeploy 会加载所有已注册的插件。若只想加载特定插件,可以设置环境变量:
```bash
export FD_PLUGINS=fastdeploy-plugins
```
多个插件名之间可以用逗号分隔:
```bash
export FD_PLUGINS=plugin_a,plugin_b
```
## 参考示例
请参见项目目录下的示例插件实现:
```
./test/plugins/
```
其中包含完整的插件结构和 `setup.py` 配置示例。
## 总结
通过插件机制,用户可以轻松地为 FastDeploy 添加自定义模型或功能模块,而无需修改核心源码。这不仅提升了系统的可扩展性,也方便了第三方开发者进行功能拓展。
如需进一步开发插件,请参考 FastDeploy 源码中的 `model_registry``plugin_loader` 模块。