# AutoPSO **Repository Path**: jhon-117/auto-pso ## Basic Information - **Project Name**: AutoPSO - **Description**: MindIE免建模工具 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-11-13 - **Last Updated**: 2025-11-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # AutoPSO #### 介绍 AutoPSO是基于粒子群算法,根据粒子信息迭代得到推理优化的最佳性能 #### 软件架构 软件架构说明 - **pso**:python代码部分 - `result` 目录:存放运行后的结果 - `emulation.py`:仿真代码(本项目不涉及) - `GeneticSearch.py`:遗传算法寻优(本项目还未优化该算法,主要使用PSO) - `PSOSearch.py`:PSO粒子群算法寻优 - `run.py`:运行起始程序 - `startpso.sh`:连续PSO寻优多方法连续执行脚本 - **run_test_sh**:推理自动化服务拉起程序和参考配置 - `benchmark` 目录:存储寻优过程中的 benchmark 结果 - `conf_case` 目录:存储启动 mindie service 的 config 配置文件 ```plaintext 以模型名称命名的目录:如 qwen2.5-7b, 为空目录 以模型名称命名的 config 文件:如 qwen2.5-7b_config.json (注:文件夹和 config 文件的模型名称一定要匹配) ``` - `test_case` 目录:存储 benchmark 脚本 ```plaintext 以模型名称命名的目录:如 qwen2.5-7b benchmark.sh:可执行的 benchmark 脚本(命名随意) ``` - `kill_daemon.sh`:杀掉进程脚本 - `multi_run_multi_env.sh`:服务化自动拉起脚本 - `start_daemon.sh`:服务化 mindieservice_daemon 拉起脚本 #### 安装教程 操作均完成于mindie容器中 1. 安装mindie环境 2. 将本目录放在mindie-service目录下 3. apt安装jq,命令如下(需配置网络代理) - apt-get update - apt-get install jq 4. 确认跑的模型,将配置文件放于run_test_sh下的conf_case目录中,建立空文件夹和配置文件{modelname}_config.json (注:不同版本mindie的配置文件不一致,必须于版本要求一致) 5. 在run_test_sh下的test_case中,在模型目录下建立sh文件,启动benchmark (更改DatasetPath) 6. cd到pso目录下,运行run.py #### 使用说明 1. run.py的输入参数介绍: - `model`: 运行的模型名称,需要与conf_case和test_case模型名称一致 - `pref_batch_lower`: prefill batchsize的寻优范围下界 int类型 (重要) - `pref_batch_upper`: prefill batchsize的寻优范围上界 int类型(重要) - `decode_batch_lower`: prefill batchsize的寻优范围下界 int类型(重要) - `decode_batch_upper`: decode batchsize的寻优范围上界 int类型(重要) - `prefill_token_delay_tolerance_lower`: prefill_token_delay的寻优范围下界 int类型 - `prefill_token_delay_tolerance_upper`: prefill_token_delay的寻优范围上界 int类型 - `decode_constrains`: decode时延约束值,通常为50(单位ms) - `is_firsttoken_constrained`: 是否需要约束prefill时延,设置True时限制,默认为False - `firsttoken_constrains`: prefill时延约束值,,默认为1000(单位ms) - `num_populations`: PSO寻优粒子种群数量,默认为4,建议设置较高(5以上) - `num_iterations`: PSO算法迭代次数,默认为4,按需求自动调整 - `request_rate`: 设置给benchmark的请求频率,按需填入 - `is_requestrate_compute`: 请求频率是否需要寻优,默认为False,加入寻优参数设置为True - `request_rate_lower`: request_rate的寻优范围下界 float类型(重要) - `request_rate_upper`: request_rate的寻优范围上界 float类型(重要) - `using_genetic`: 是否使用基因算法,默认不使用(本版本目前不支持) - `is_SLO`: 是否为SLO约束,默认False,设置为True时进行SLO约束寻优 - `is_P90`: 是否为P90约束,默认False,设置为True时进行SLO约束寻优 - `no_constrain`: 是否无约束,默认False,设置为True时无约束,寻找最大吞吐 - `is_prefixcache`: 是否加入prefix cache特性,默认False,设置为True时引入prefix cache特性 - `is_splitfuse`: 是否加入split fuse特性,默认False,设置为True时引入split fuse特性 - `data_name`: 数据集名称(注:名称中不允许出现\) - `output_len`: 推理最大输出长度 - `supportSelectBatch`: 是否支持supportSelectBatch,默认False 2. 运行指令示范: 只卡decode时延:寻优6*2次,qwen2.5-7b模型 `python run.py --model qwen2.5-7b --num_populations 6 --num_iterations 2 --is_requestrate_compute True --pref_batch_lower 1 --pref_batch_upper 30 --decode_batch_lower 30 --decode_batch_upper 60 --request_rate_lower 1.5 --request_rate_upper 7 --input_len 1024 --output_len 64` 卡SLO双时延 `python run.py --model qwen2.5-7b --num_populations 6 --num_iterations 2 --is_firsttoken_constrained True --is_requestrate_compute True --is_SLO True --pref_batch_lower 1 --pref_batch_upper 10 --decode_batch_lower 15 --decode_batch_upper 45 --request_rate_lower 2 --request_rate_upper 12 --supportSelectBatch True --input_len 256 --output_len 32 --firsttoken_constrains 200` 无限制寻优 `python run.py --model qwen2.5-7b --num_populations 6 --num_iterations 2 --no_constrain True --pref_batch_lower 20 --pref_batch_upper 150 --decode_batch_lower 150 --decode_batch_upper 300 --request_rate_lower 15 --request_rate_upper 35 --input_len 256 --output_len 32` #### 常见问题 1. run.py程序运行失败原因 - model参数必须指定否则报错 - conf_case下的目录和文件,test_conf下的目录名称必须和model 参数统一 2. 服务化程序无法启动: - 观察config是否符合mindie版本要求,观察端口和显卡是否被占 b131可以参考qwen2.5-7b_config.json 3. benchmark报错: - 本项目加入数据集长度作为目录检索方法,如果不需要,则可以更改benchmark.sh命令,直接指定DatasetPath 可以参考run_test_sh/test_case/qwen2.5-7b/benchmark.sh 4. benchmark缩进问题: - 如果遇到benchmark打屏信息混乱,可以在xshell中更改节点属性,终端——换行符——收到位置,除了CRLF都可以选择,推荐LF