自定义插件开发指导

简介

寻优工具支持自定义插件,用户可通过开发自定义插件实现:自定义搜索参数配置、自定义服务框架,以及自定义性能测试工具。

自定义插件开发流程如下:

  1. 创建自己的Python项目作为插件。
  2. 自定义插件开发。

自定义插件开发操作步骤

自定义参数搜索配置

  1. 继承Settings类

    settings是通过pydantic-settings实现的,可在类里面添加删除属性。例如:

    from ms_serviceparam_optimizer.config.config import Settings
    class CusSettings(Settings):
        name: str = "vllm-inference-optimization"
    
  2. 注册settings初始化函数

    在自己的Python项目里面添加注册函数,实现注册Settings初始化,例如:

    def register():
        from vllm_inference_optimization.settings import CusSettings
        from ms_serviceparam_optimizer.config.config import register_settings
        register_settings(lambda : CusSettings())
    
  3. 使用settings

    使用时导入get_settings 来获取自定义的settings,例如:

    from ms_serviceparam_optimizer.config.config import get_settings
    settings = get_settings()
    

自定义服务框架

  1. 继承ms_serviceparam_optimizer.optimizer.simulator.SimulatorInterface,实现base_url和data_field property,实现update_command方法等。例如:

    class ms_serviceparam_optimizer.optimizer.simulator.SimulatorInterface()
        Bases: ABC
        #操作服务框架。用于操作服务相关功能。
        abstract property data_field: Tuple[OptimizerConfigField] | None
            #获取data field 属性 
            Returns: Optional[Tuple[OptimizerConfigField]]
        abstract property setter data_field: Tuple[OptimizerConfigField] | None
            #设置data field 属性 
            Returns: None
        abstract update_command() → None
            #服务启动前根据data_field更新服务启动命令。更新self.command属性。
            Returns: None
        update_config(params: Tuple[OptimizerConfigField] | None = None) → bool
            #根据参数更新服务的配置文件,或者其他配置,服务启动前根据传递的参数值 修改配置文件。使得新的配置生效。
            Args:
                #params: 调优参数列表,是一个元组,根据其中每一个元素的value和config position进行定义
            Returns: bool,返回更新成功或者失败。
        abstract stop()
            #运行时,其他的准备工作。 
            Returns: None
    
  2. 并在init文件中注册服务框架,例如:

    from ms_serviceparam_optimizer.optimizer.register import register_simulator
    register_simulator("vllm_infer", VllmSimulator)
    

自定义性能测试工具

  1. 继承ms_serviceparam_optimizer.optimizer.benchmark.BenchmarkInterface,实现data_field property,get_performance_index方法等。 例如:

    class ms_serviceparam_optimizer.optimizer.benchmark.BenchmarkInterface():
        Bases: ABC
        property num_prompts: Tuple[OptimizerConfigField] | None
            #获取数据的请求数
            Returns: Optional[Tuple[OptimizerConfigField]]
            
        property setter num_prompts: Tuple[OptimizerConfigField] | None
            #设置获取数据的请求数
            Returns: None
            
        property data_field: Tuple[OptimizerConfigField] | None
            #获取data field属性 
            Returns: Optional[Tuple[OptimizerConfigField]]
            
        abstract property setter data_field: Tuple[OptimizerConfigField] | None
            #设置data field属性 
            Returns: None
        
        abstract get_performance_index() → PerformanceIndex
            #获取性能指标 
            #Returns: 指标数据类
        
        abstract stop()
            #运行时,其他的准备工作。 
            Returns: None
        
        abstract update_command() → None
            #服务启动前根据data_field更新服务启动命令。更新self.command属性。 
            Returns: None
    
  2. 并在init文件中注册benchmark,例如:

    from ms_serviceparam_optimizer.optimizer.register import register_benchmarks
    register_benchmarks("vllm_infer_benchmark", VllmBenchMark)
    
  3. 设置插件入口点

    将自定义的内容的注册函数添加到入口组'ms_serviceparam_optimizer.plugins'即可。 例如通过调用vllm_inference_optimization模块的register来注册,例如:

    [project.entry-points.'ms_serviceparam_optimizer.plugins']
    vllm_inference_optimization = "vllm_inference_optimization:register"
    
  4. 安装插件 入口设置为ms_serviceparam_optimizer.plugins,例如:

    [project.entry-points.'ms_serviceparam_optimizer.plugins']
    vllm_inference_optimization="vllm_inference_optimization:register"
    

    使用插件模式前需要先在插件目录中(确保当前路径下包含pyproject.toml)对插件进行安装,例如:

    pip install -e .
    
  5. 使用插件

    可以通过寻优工具的调用参数来指定插件实现的模块。 例如,新注册了服务框架vllm_infer和性能测试客户端vllm_infer_benchmark,先查看支持的服务和benchmark工具,是否包含刚刚注册的vllm_infer和vllm_infer_benchmark。例如:

    msserviceprofiler optimizer -h
    
    options:
    -h, --help show this help message and exit
    -lb, --load_breakpoint
    Continue from where the last optimization was aborted.
    --backup Whether to back up data.
    -e {vllm, vllm_infer}, --engine {vllm, vllm_infer}
    Specifies the engine to be used.
    -b {vllm_benchmark, vllm_infer_benchmark}, --benchmark {vllm_benchmark, vllm_infer_benchmark}
    Specified benchmark to be used.
    

    使用指定插件的实现进行寻优,例如:

    msserviceprofiler optimizer -e vllm_infer -b vllm_infer_benchmark