[FDConfig] 默认开启 FD_ENABLE_E2W_TENSOR_CONVERT 和 FD_ENGINE_TASK_QUEUE_WITH_SHM#7746
[FDConfig] 默认开启 FD_ENABLE_E2W_TENSOR_CONVERT 和 FD_ENGINE_TASK_QUEUE_WITH_SHM#7746sunlei1024 wants to merge 2 commits intoPaddlePaddle:developfrom
Conversation
|
Thanks for your contribution! |
CI报告基于以下代码生成(30分钟更新一次): 1 任务总览
2 任务状态汇总2.1 Required任务 : 3/10 通过
2.2 可选任务 — 23/26 通过
3 失败详情(仅 required)Approval — PR问题(置信度: 高)Approval
根因详情: 关键日志: 修复建议:
修复建议摘要: 请FastDeploy RD(jiangjiajun等)审批本PR 关联变更: 链接: 查看日志 |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## develop #7746 +/- ##
==========================================
Coverage ? 72.35%
==========================================
Files ? 396
Lines ? 55577
Branches ? 8688
==========================================
Hits ? 40213
Misses ? 12611
Partials ? 2753
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
PaddlePaddle-bot
left a comment
There was a problem hiding this comment.
🤖 Paddle-CI-Agent | pr_review |
2026-05-08 17:04:35
📋 Review 摘要
PR 概述:默认开启 FD_ENABLE_E2W_TENSOR_CONVERT 和 FD_ENGINE_TASK_QUEUE_WITH_SHM 两个环境变量,提升 Engine-to-Worker 张量传递与 SHM 任务队列性能,并在测试工具中增加 /dev/shm 清理逻辑。
变更范围:fastdeploy/envs.py、tests/ 多处测试辅助工具
影响面 Tag:[FDConfig] [CI]
📝 PR 规范检查
标题使用官方 Tag [FDConfig],格式合规;PR 描述已包含所有必填 section(Motivation / Modifications / Usage or Command / Accuracy Tests / Checklist),结构符合模板要求。✓
问题
| 级别 | 文件 | 概述 |
|---|---|---|
| 🟡 建议 | tests/ci_use/Qwen2-7B-Instruct_offline/test_Qwen2-7B-Instruct_offline.py:98 |
用 time.sleep(2) 替代端口健康检查,引擎就绪检测不可靠 |
| ❓ 疑问 | tests/e2e/utils/serving_utils.py:122 |
subprocess.run 未检查返回码,rm 失败会静默通过 |
总体评价
核心变更(envs.py 默认值调整)逻辑清晰,改动简洁,有向后兼容说明。测试侧有两处值得关注:端口等待逻辑被注释后,引擎就绪检测依赖固定 sleep(2) 存在偶发不稳定风险;/dev/shm 清理的异常捕获对 subprocess 失败无效,建议完善,整体可合入。
| f"Model engine did not start within {MAX_WAIT_SECONDS} seconds on port {FD_ENGINE_QUEUE_PORT}" | ||
| ) | ||
| time.sleep(1) | ||
| time.sleep(2) |
There was a problem hiding this comment.
🟡 建议 用 time.sleep(2) 替代端口健康检查,引擎就绪检测不可靠。
当 FD_ENGINE_TASK_QUEUE_WITH_SHM=1 后,引擎不再监听 TCP 端口,原端口检查失效——但固定睡眠 2 秒无法保证引擎已完全就绪,在负载较重的 CI 环境中容易引发偶发性测试失败(flaky test)。
建议补充适合 SHM 模式的就绪检测机制(如轮询 SHM 文件/信号量是否创建),或至少延长等待时间并加 MAX_WAIT_SECONDS 超时保护,并在注释中说明为何旧的端口检查不再适用:
# SHM 模式下引擎不监听 TCP 端口,改为等待 SHM 就绪
wait_start = time.time()
while not shm_is_ready(): # 补充 SHM 就绪检测
if time.time() - wait_start > MAX_WAIT_SECONDS:
pytest.fail(f"Engine did not start within {MAX_WAIT_SECONDS}s")
time.sleep(1)如果暂时没有可用的 SHM 就绪探针,建议将 time.sleep(2) 替换为更保险的固定值并留下 TODO 注释。
|
|
||
| # 清理/dev/shm中的临时文件 | ||
| try: | ||
| subprocess.run("rm -rf /dev/shm/*", shell=True) |
There was a problem hiding this comment.
❓ 疑问 subprocess.run 未检查返回码,rm 失败会静默通过。
subprocess.run("rm -rf /dev/shm/*", shell=True) 即使 rm 命令本身报错(如权限不足),也不会抛出 Python 异常,except Exception 分支永远不会执行,导致清理失败被无声忽略。相同模式在 deploy.py、test_eblite_serving.py、model_loader/utils.py 中也存在。
建议添加显式检查 returncode:
try:
result = subprocess.run("rm -rf /dev/shm/*", shell=True)
if result.returncode != 0:
print(f"Warning: /dev/shm cleanup returned code {result.returncode}")
else:
print("Successfully cleaned up /dev/shm.")
except Exception as e:
print(f"Failed to cleanup /dev/shm: {e}")
Motivation
默认开启
FD_ENABLE_E2W_TENSOR_CONVERT和FD_ENGINE_TASK_QUEUE_WITH_SHM,以提升 Engine-to-Worker 的张量传递效率,以及引擎任务队列基于共享内存(SHM)的通信性能。
该优化在大模型推理场景下可以减少序列化/反序列化开销,提高吞吐和延迟表现。
Modifications
fastdeploy/envs.pyFD_ENABLE_E2W_TENSOR_CONVERT默认值由0改为1FD_ENGINE_TASK_QUEUE_WITH_SHM默认值由0改为1行为变更说明:
FD_ENABLE_E2W_TENSOR_CONVERT=0FD_ENGINE_TASK_QUEUE_WITH_SHM=0/dev/shm空间充足(建议 ≥ 1GB,视模型规模而定)Usage or Command
默认无需额外配置,升级后自动生效。
如需关闭相关功能,可通过环境变量控制:
Docker 使用示例(配置共享内存):
Accuracy Tests
本次修改仅涉及环境变量默认值调整,不涉及模型计算逻辑变更。
验证结果:
Checklist