Prhub

#1967 Fix PYTHONBUFFERED typo to PYTHONUNBUFFERED=1

原始 PR 作者 Chasing1020 合并时间 2026-05-30 11:53 文件变更 48 提交数 3 评论 1 代码增减 +51 / -51

执行摘要

全局修复 PYTHONUNBUFFERED 环境变量拼写错误

Issue #1966 指出 PYTHONBUFFERED 并非有效的 Python 环境变量,正确的名称是 PYTHONUNBUFFERED。设置 PYTHONBUFFERED 被静默忽略,因此注释中声称的 "prevent ray from buffering stdout/stderr" 并未生效。

值得快速合并。该修复解决了长期存在的无效环境变量问题,提升开发者体验和日志可靠性。

讨论亮点

Copilot 在 review 中指出 scripts/low_precision/run-qwen3-30B-A3B-int4.sh 的注释中存在额外拼写错误 "stderrs",该问题在后续提交中已修复。

实现拆解

  1. 在核心模块 slime/utils/external_utils/command_utils.pyexecute_train 函数中,将 exec_command 调用内错误的环境变量名替换为正确的 PYTHONUNBUFFERED=1(共两处)。
  2. 对所有 shell 脚本(包括示例、测试和工具脚本)执行全局搜索替换,将 export PYTHONBUFFERED=16 改为 export PYTHONUNBUFFERED=1
  3. 同步更新 NPU 补丁文件 docker/npu_patch/slime.patch,保持与主代码一致。
  4. 第二个提交中,根据 Copilot 指出的注释拼写错误,修正了 scripts/low_precision/run-qwen3-30B-A3B-int4.sh 中的注释 "stdout/stderrs" -> "stdout/stderr"。
文件 模块 状态 重要度
slime/utils/external_utils/command_utils.py 命令工具 modified 4.83
tests/test_gspo.sh 测试脚本 modified 3.42
docker/npu_patch/slime.patch 容器补丁 modified 2.93
scripts/low_precision/run-qwen3-30B-A3B-int4.sh 低精度脚本 modified 2.53
examples/eval_multi_task/multi_task.sh 多任务示例 modified 2.24

关键符号

execute_train

关键源码片段

slime/utils/external_utils/command_utils.py core-logic

核心源码文件,修复两处 exec_command 中的环境变量设置,是 Ray 启动和 job 提交时生效的关键路径。

        if not external_ray:
            exec_command(
                # 防止 Ray 缓冲 stdout/stderr
                f"export PYTHONUNBUFFERED=1 && "
                f"ray start --head --node-ip-address {master_addr} --num-gpus {num_gpus_per_node} --disable-usage-stats"
            )
​
        # ...
​
        exec_command(
            f"export no_proxy=127.0.0.1 && export PYTHONUNBUFFERED=1 && "
            f"{cmd_megatron_model_source}"
            f'ray job submit --address="http://127.0.0.1:8265" '
            f"--runtime-env-json='{runtime_env_json}' "
            f"-- python3 {train_script} "
            f"{'${MODEL_ARGS[@]}' if megatron_model_type is not None else ''} "
            f"{train_args}"
        )
tests/test_gspo.sh test-coverage

测试脚本,验证 GSPO 训练环境变量设置正确。

#!/bin/bash# ...set -ex
​
# 防止 Ray 缓冲 stdout/stderr
export PYTHONUNBUFFERED=1# ...

评论区精华

注释拼写错误 style

Copilot 指出 `scripts/low_precision/run-qwen3-30B-A3B-int4.sh` 中注释 "stdout/stderrs" 应为 "stdout/stderr"。

结论:已在后续提交中修复。 · 已解决

风险与影响

该变更为纯文本替换,无逻辑变更。风险极低。但需确认所有 48 个文件均已正确替换,避免遗漏。

使环境变量设置生效,Python 输出不再缓冲,提升日志实时性,有利于调试和日志收集。

全局替换需确认覆盖完整

关联 Issue

#1966 [Bug] `PYTHONBUFFERED ` is not a python Environment Variable

完整报告

参与讨论