Accelerate

Stars

Hugging Face 的分布式训练与推理工具,让同一套 PyTorch 代码在 CPU、单卡、多卡及多机环境中运行,并统一管理混合精度、FSDP、DeepSpeed 和设备配置。

CLI DIAGNOSTICS · PATH DISCOVERY

找不到可执行文件,也应该把诊断报告完

`accelerate env` 的职责是描述当前环境;PATH 缺失属于报告内容,不能让用于诊断问题的命令先于报告本身崩溃。

EXPLICIT INVOCATION/opt/venv/bin/accelerate env
PROCESSRUNNING
PATH LOOKUPABSENT

PATH=/usr/bin:/bin

BEFORE · EXTERNAL PROCESS
POSIXwhich accelerateWINDOWSwhere accelerate
EXIT 1check_output()
CalledProcessError

environment report aborted

AFTER · OPTIONAL LOOKUPwhich("accelerate")
FOUND/path/to/accelerateMISSINGNone → Not found
EXECUTABLENot foundENV REPORTCONTINUES ✓
诊断中断

外部查询返回非零并抛出异常

`accelerate env` 原本先把可执行文件位置初始化为 `Not found`,随后却无条件通过子进程调用 POSIX 的 `which` 或 Windows 的 `where`。当用户以绝对路径启动 Accelerate、但当前环境没有把该目录加入 `PATH` 时,查询程序会返回非零状态,`subprocess.check_output()` 随即抛出 `CalledProcessError`;诊断命令因此在收集环境信息途中崩溃,预设的缺失提示反而永远无法输出。

状态语义

PATH Miss 是可呈现结果,不是流程失败

可执行文件不在 `PATH` 中是环境报告需要呈现的一种正常状态,而不是整个诊断流程的异常。路径查询应返回“找到的路径或空值”,再由报告层决定显示内容;同时 POSIX 与 Windows 不需要分别启动外部命令,Python 标准库已经提供遵循当前平台和 `PATH` 规则的统一查询接口。

跨平台收敛

Shutil.which 统一替代 Which 与 Where

移除平台分支、`subprocess` 依赖及外部命令执行,改为 `from shutil import which`,并用 `which("accelerate") or "Not found"` 一次完成查询与回退。新增回归通过 patch 让 `which` 返回 `None`,从真实参数解析器调用 `env_command()`,断言 `` `accelerate` bash location `` 精确为 `Not found`,同时保证命令继续返回其余环境信息。

回退验证

Not found 输出后其余环境信息继续返回

通过完整路径、虚拟环境脚本或其他未激活环境运行 `accelerate env` 时,缺失的 `PATH` 入口不再中断诊断;正常可发现的可执行文件仍返回实际路径,Windows 与 POSIX 也共享同一行为。改动集中在 2 个文件,共新增 13 行、删除 10 行;CLI 定向测试、内存工具测试以及 style、quality 检查全部通过。