已开启
MindIE-Motor三方依赖必要性分析与消减报告 #329
ss_kkkkk创建于  7月17日
ss_kkkkk
7月17日 创建

MindIE-Motor 三方依赖必要性分析与消减报告

概览

  • 依赖总数:正式 Python 声明 36 条(根 requirements.txt 23 条 / deployer 3 条 / observability 2 条 / 文档构建 8 条),去重后为 33 个包;另识别出未显式声明的直接依赖和原生构建工具。
  • 建议消除:3 个未使用包(psutilhttpx2mkdocs-redirects);建议删除重复声明:根清单中的 confluent_kafka,observability 清单中的声明保留。
  • 建议评估可消除性:uvicorn[standard] 的未使用 extras、最终 Docker 镜像中的 git 和源码/测试/文档残留。
  • 建议保留:其余存在运行、构建、测试、文档或示例使用点的依赖。
  • 分析范围:检查了现有 requirements、setup.py、Python 导入和动态导入、测试脚本、Dockerfile、MkDocs 配置、原生构建脚本、协议源码和版本库已跟踪文件。

依赖分析表

依赖 版本 依赖类型 当前来源 引入原因 合理性分析 消减自研工作量(按照 Python 和 C++ 函数来评估) 是否建议消除 消除或优化建议
psutil >=5.9.8 根清单声明 requirements.txttests/run_tests.sh 测试脚本仅检查和安装 motor/examples/、测试 Python 代码均无使用点,安装后也未调用 建议消除 删除根清单声明,同时删除测试脚本中的 psutil 检查;vLLM 基础镜像可能仍会提供该包
httpx2 >=2.0.0 根清单声明 requirements.txt 没有导入、动态导入、命令或插件入口;项目实际使用 httpx 建议消除 从根清单删除
fastapi >=0.68.0 核心运行依赖 多个 API server HTTP API、路由、中间件、异常响应 使用面广,必须保留;当前最低版本与 Pydantic v2 不匹配 建议保留 修正与 Pydantic v2、Starlette 和 vLLM 相容的版本范围,并同步到 setup.py
uvicorn[standard] >=0.15.0 核心运行依赖 Coordinator、Node Manager 等 API ASGI 服务 Coordinator / Node Manager 直接使用 uvicorn;未发现 WebSocket、reload 使用 中:需回归 HTTP、TLS、性能和进程启动 建议评估可消除性 可评估 extras 是否仍需要
pydantic >=1.8.0 核心运行依赖 配置、请求、资源、调度、告警模型 数据校验和序列化 核心依赖,代码要求 v2 建议保留 最低版本改为 Pydantic v2,并同步到 setup.py
httpx >=0.24.0 核心运行依赖 路由、探针、异步客户端 异步转发、错误处理、流式响应 核心异步 HTTP 栈 建议保留 保留并同步到 setup.py
requests >=2.31.0 核心运行依赖 SafeHTTPSClient 同步 HTTP、mTLS、连接复用 实现集中但调用面覆盖 Controller、Coordinator、Node Manager、快照和 CCAE,迁移面比原报告估计更大 中到大:客户端实现约 6 个方法,需回归大量调用方 建议保留 不作为近期消减项;若迁移到 httpx.Client,必须覆盖 TLS、IPv6、异常和连接模式
grpcio >=1.40.0 核心运行依赖 etcd client gRPC channel、stub、TLS 直接使用,必须保留 建议保留 保留,并补充生成代码运行所需的 protobuf
grpcio-tools >=1.40.0 构建和测试依赖 generate_proto.sh 生成 *_pb2.py*_pb2_grpc.py build.sh 和测试脚本都会调用,生成文件未提交;直接删除会导致构建失败 无安全替代 建议保留 按当前单一 requirements 结构保留在根清单
msgspec >=0.18.0 核心运行依赖 Scheduler、FaultReporter、响应编码 msgpack 和 JSON 高性能编解码 多条核心协议路径直接使用 建议保留 保留
pyzmq >=25.0.0 核心运行依赖 Scheduler、日志、故障上报 进程间通信 核心传输层 建议保留 保留
watchdog >=3.0.0 核心和示例运行依赖 Motor、CCAE 配置和文件变化监听 主项目与 observability 均直接使用,两个清单支持各自独立安装 建议保留 根清单和 observability 清单均保留
anyio >=4.0.0 核心运行依赖 Router、RequestInfo CancelScope 和取消传播 代码直接使用,不应只依赖 FastAPI 的传递安装 建议保留 保留并同步到 setup.py
uvloop >=0.19.0; sys_platform != 'win32' 平台运行依赖 Coordinator 高性能事件循环 Coordinator 多个启动路径直接调用 建议保留 保留平台条件声明
setproctitle >=1.3.0 运行和运维依赖 Node Manager、Scheduler 等 进程命名 PreStop 通过包含 NodeManager 的进程标题查找 PID,删除会影响现有运维流程 中:还需修改 PreStop 和进程管理约定 建议保留 保留
pyOpenSSL >=21.0.0 TLS 运行依赖 cert_util.py 证书、私钥、CRL、签名验证 多个服务 TLS 启动路径直接依赖 建议保留 保留并同步到 setup.py
cryptography 未声明 TLS 运行依赖 cert_util.py X.509 和 CRL API 代码直接导入,不能只依赖 pyOpenSSL 的传递安装 不适用 建议保留 加入现有根清单和 setup.py
Pillow >=12.2.0 功能运行依赖 image_utils.py、workload calculator 多模态图片尺寸和工作量计算 Encode 请求会直接调用,不是单纯边角工具 建议保留 保留
transformers >=4.57.6 策略运行依赖 KV Cache Affinity tokenizer 回退 特定策略动态导入;vLLM 基础镜像通常也提供,删除声明未必有镜像收益 建议保留 保留
kubernetes >=26.1.0,<=35.0.0 当前 Controller 运行依赖 FaultManager、K8s client、ResourceMonitor K8s API、ConfigMap watch、故障恢复 Controller 当前导入链直接依赖,不能按现状删除 建议保留 保留;只有先重构导入链后才可重新评估
OpenTelemetry OTLP HTTP/GRPC exporters >=1.33.1 Tracing 运行依赖 tracing.py HTTP 或 gRPC Trace 导出 exporter 已惰性导入;启用相应协议时必须存在 建议保留 保留,并补充 opentelemetry-apiopentelemetry-sdk
protobuf 未声明 gRPC 生成代码运行依赖 构建生成的 pb2 模块 protobuf 消息运行时 移除 grpcio-tools 的运行环境后仍需独立存在 不适用 建议保留 加入现有根清单和 setup.py
confluent_kafka >=2.13.2 CCAE 运行依赖 根清单、observability 清单 Kafka Producer 核心 motor/ 不使用,但 CCAE 直接创建 Producer;根清单重复 建议消除 只删除根清单中的重复声明,保留 observability 清单
pytest-asyncio >=0.21 测试依赖 根清单、pytest 配置 异步测试 大量异步测试和 asyncio_mode=auto 真实依赖 建议保留 按当前单一 requirements 结构保留在根清单
pytestpytest-covpytest-xdist 未声明 测试工具 tests/run_tests.sh 测试、覆盖率、默认并行 测试脚本直接安装和使用 建议保留 保持现有测试脚本行为
PyYAMLtqdm >=6.0.2>=4.67.1 Deployer 运行依赖 deployer requirements YAML 和终端进度 Deployer 直接使用 建议保留 保留
deployer 的 httpx >=0.28.1 Deployer 运行依赖 deployer requirements 探针和 HTTP 检查 Deployer 直接使用并可独立安装 建议保留 保留
mkdocsmkdocs-materialmkdocs-awesome-navmkdocs-glightboxmkdocs-git-revision-date-localized-pluginmkdocs-minify-pluginpymdown-extensions 当前下限约束 文档构建依赖 MkDocs requirements、mkdocs.yml 文档站点、主题、导航、图片、日期、压缩、Markdown 扩展 均在 mkdocs.yml 中实际启用 建议保留 保留
mkdocs-redirects >=1.2.0 文档声明 MkDocs requirements、构建说明 页面重定向 mkdocs.yml 未启用,也没有 redirect 配置 建议消除 requirements/mkdocs.txt 删除,并同步删除构建说明中的依赖名称
vllm / vllm-ascend 基础镜像提供 外部平台运行依赖 vLLM adapter、Docker FROM 默认推理引擎 大量内部 API 调用;Docker 使用 0.18.0、0.20.2rc1、deepseekv4 等不同镜像,build.sh 写入的 0.13.0 已不一致 建议保留 保留,并修正现有 build.sh 的版本信息和兼容关系
sglang 外部提供 外部平台运行依赖 SGLang adapter、配置和示例 可选推理引擎 代码和示例真实支持,运行环境必须提供 SGLang 建议保留 保留
pybind11 动态安装 secure_h2d 构建依赖 pybind wrapper build Python/C++ 绑定 secure_h2d/setup.sh 会执行该构建 建议保留 保留
git 未锁定 Docker 和示例构建工具 Dockerfile、secure_h2d setup clone 和 checkout 构建真实需要;核心服务运行不需要,但基础镜像也可能自带 建议评估可消除性 不从仓库删除;可在现有 Dockerfile 构建完成后清理本次安装的 git
cmakemake、C/C++ 编译器 未锁定 secure_h2d 构建工具 pybind wrapper 编译 AES 原生扩展 secure_h2d 真实使用;普通 Motor Dockerfile 未显式安装,不能断言一定残留 建议保留 保留构建能力

消减结论

高优先级消减项(建议消除,低工作量、高收益)

  1. 从根 requirements.txt 删除无使用点的 httpx2>=2.0.0
  2. 从根 requirements.txt 删除无业务使用点的 psutil>=5.9.8,同时删除 tests/run_tests.sh 中的 psutil 检查。
  3. requirements/mkdocs.txt 删除未启用的 mkdocs-redirects>=1.2.0,并同步修改现有文档构建说明。
  4. 从根 requirements.txt 删除重复的 confluent_kafka>=2.13.2,保留 observability requirements 中的声明。

执行后,正式 Python 声明由 36 条减少到 32 条,去重后的包数由 33 个减少到 30 个;其中完全移除 3 个未使用包,清理 1 个重复声明。

待评估依赖(建议评估可消除性)

  • 评估将 uvicorn[standard] 改为现有根清单中的 uvicornuvloophttptools 精确组合,减少未使用的 WebSocket 和 reload 相关依赖。
  • 评估在现有 Dockerfile 中于 wheel 安装完成后删除 tests/docs/.gitcode/、pre-commit 配置和构建脚本,只保留运行所需内容。
  • 评估在 Docker 构建完成后卸载本次临时安装的 git;如果基础镜像本身带有 git,先确认平台工具是否依赖。
  • requestshttpx.Client 的迁移技术上可行,但调用面广且 vLLM 基础镜像也依赖 requests,不作为近期高收益项。

需保留的核心依赖

FastAPI、Uvicorn/uvloop/httptools、Pydantic v2、httpx、requests、grpcio、grpcio-tools、protobuf、msgspec、pyzmq、watchdog、anyio、setproctitle、pyOpenSSL、cryptography、Pillow、transformers、Kubernetes、OpenTelemetry、Prometheus、pytest 工具、vLLM/SGLang,以及 secure_h2d 的 pybind11/CMake/编译链均存在真实使用点,应保留。

同时需要补充当前缺失的直接声明:cryptographyopentelemetry-apiopentelemetry-sdkprotobuf

likedislike
ss_kkkkk
7月17日 评论:
依赖 AI建议 结论 备注
httpx2 高优先级消减 可以消减
psutil 高优先级消减 可以消减
mkdocs-redirects 高优先级消减 可以消减
confluent_kafka 高优先级消减 可以消减 重复声明,删除根目录下的依赖,保留observability requirements 中的声明
likedislike
wangyang
wangyang成员
7月18日 评论:

👋 您好,感谢向 mindie-motor 提交 Issue!
🎉 我们已收到您的反馈,感谢你对开源社区的支持!

📅 处理时效 维护团队将在工作日 24 小时内查看并回复您的问题。
🔍 自助排查(推荐优先查看) 在等待回复期间,您可以先查阅仓库README以及历史 Issue 中相似问题的解决方案,多数问题可快速解决。
💡 为了更快定位问题,请您确保 Issue 包含:

清晰的问题描述
可复现的操作步骤
相关日志、截图或环境信息
我们会尽快跟进,感谢您的理解与配合!

likedislike
杨安杨安成员
16 天前 关联了pull request:[bugfix] 清理非必要主动依赖声明
杨安
杨安成员
15 天前 评论:

关于本 Issue 高优先级第 4 点(删除根清单 confluent_kafka):

在实现 PR #830 及检视中确认:CCAE base_reporter 顶层无条件导入 KafkaProducer/confluent_kafka,标准镜像只安装根 requirements.txt,删除会导致启动与 UT(UT_linux_arm)失败。

因此 PR #830 保留根清单 confluent_kafka,其余建议消除项(httpx2 / psutil / mkdocs-redirects)已按报告落地;并额外清理了 deployer 清单中未使用的 requests

likedislike
杨安杨安成员
15 天前 关联了pull request:[bugfix] 清理非必要三方依赖声明
杨安杨安成员
9 天前 修改标题为 “MindIE-Motor三方依赖必要性分析与消减报告”,原标题为“MindIE-Pymotor三方依赖必要性分析与消减报告”
杨安杨安成员
9 天前 修改了issue 的描述
杨安杨安成员
9 天前 修改了issue 的描述