[plugin] Custom model_runner/model support (#3186)

* support custom model&&model_runner

* fix merge

* add test && update doc

* fix codestyle

* fix unittest

* load model in rl
This commit is contained in:
lizhenyun01
2025-08-05 09:52:39 +08:00
committed by GitHub
parent 72ef5a9c93
commit fe540f6caa
15 changed files with 150 additions and 13 deletions

View File

@@ -1,6 +1,21 @@
# Copyright (c) 2025 PaddlePaddle Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from paddleformers.transformers import PretrainedModel
from fastdeploy import ModelRegistry
from fastdeploy.config import ErnieArchitectures
from fastdeploy.model_executor.models.model_base import ModelForCasualLM
@@ -31,5 +46,7 @@ class MyModelForCasualLM(ModelForCasualLM):
def register():
if "MyModelForCasualLM" not in ModelRegistry.get_supported_archs():
if MyModelForCasualLM.name().startswith("Ernie"):
ErnieArchitectures.register_ernie_model_arch(MyModelForCasualLM)
ModelRegistry.register_model_class(MyModelForCasualLM)
ModelRegistry.register_pretrained_model(MyPretrainedModel)

View File

@@ -0,0 +1,26 @@
# Copyright (c) 2025 PaddlePaddle Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
class MyModelRunner:
def __init__(self, rank=0) -> None:
super().__init__()
self.rank = rank
def get_rank(self):
return self.rank
def get_runner():
return MyModelRunner

View File

@@ -1,15 +1,27 @@
# Copyright (c) 2025 PaddlePaddle Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from setuptools import setup
setup(
name="fastdeploy-plugins",
version="0.1",
packages=["fd_add_dummy_model"],
packages=["fd_add_dummy_model", "fd_add_dummy_model_runner"],
entry_points={
"fastdeploy.model_register_plugins": [
"fd_add_dummy_model = fd_add_dummy_model:register",
],
# 'fastdeploy.model_runner_plugins': [
# "model_runner = model_runner:get_runner"
# ]
"fastdeploy.model_runner_plugins": ["fd_add_dummy_model_runner = fd_add_dummy_model_runner:get_runner"],
},
)

View File

@@ -1,3 +1,17 @@
# Copyright (c) 2025 PaddlePaddle Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import unittest
from fastdeploy import ModelRegistry

View File

@@ -0,0 +1,35 @@
# Copyright (c) 2025 PaddlePaddle Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import unittest
from fastdeploy.plugins import load_model_runner_plugins
class TestModelRunnerRegistryPlugins(unittest.TestCase):
def test_model_runner_callable(self):
runner_class = load_model_runner_plugins()
device_id = 1
# create runner
runner = runner_class(device_id)
# test func
res = runner.get_rank()
self.assertEqual(res, device_id)
if __name__ == "__main__":
unittest.main()