工程环境经验¶
这页从工作 Obsidian 笔记中整理而来,只保留可公开复用的环境经验。原始笔记中的内网地址、账号、密码、token 和机器信息不迁入个人网站。
root 与普通用户隔离¶
root、sudo 和普通用户的环境通常不是一套:
.ssh不同。- Git config 不同。
- Conda / venv 不同。
- shell 启动脚本不同。
- 代理环境变量不同。
排查环境问题时先确认:
Bash
whoami
pwd
which python
python -V
git config --global user.name
git config --global user.email
env | sort
source 与 bash 的区别¶
执行环境脚本时:
会修改当前 shell。
只影响子 shell,脚本结束后当前终端环境不变。
代理、编译器路径、SDK 路径、Python 虚拟环境等问题经常卡在这里。
Python / PyTorch 环境¶
本地开发 PyTorch fork 或设备插件时,requirements.txt 可能重新安装官方 torch 并覆盖本地 wheel。建议:
- 安装依赖前检查 requirements 是否包含
torch。 - 本地 wheel 安装后立刻确认
torch.__version__。 - vLLM 等项目如果需要本地 torch,安装依赖时要避免把 torch 覆盖掉。
常用检查:
Bash
python -c "import torch; print(torch.__version__); print(torch.__file__)"
python -m pip show torch
Git 与 SSH¶
容器或新机器中先确认 SSH 和 Git 身份:
大仓库 clone 出现连接中断时,先排查网络稳定性和 SSH keepalive。不要一开始就怀疑仓库损坏。
构建环境¶
C++ / PyTorch 后端开发常见依赖:
cmakeninjalldbuild-essential- Python headers / wheel 工具
经验:
- CMake 版本不够时,错误可能出现在很后面的构建阶段。
- Debug / Release / RelWithDebInfo 会明显影响构建速度和可调试性。
- 构建脚本中最好显式打印 Python、CMake、Ninja 和编译器路径。
Runtime 调试¶
设备后端调试时,建议把问题拆成几层:
- Python import 是否成功。
- device count / set device 是否可用。
- allocator 是否可用。
- H2D / D2D / D2H memcpy 是否可用。
- ATen op 是否注册到正确 dispatch key。
- 参数打包是否正确。
- runtime launch 是否真正发生。
- 结果是否与 CPU reference 对齐。
不要直接从模型 failure 跳到 kernel。先压缩到最小 tensor、最小 op、最小 shape。
工作 SOP¶
一次工程任务建议按这个顺序收口:
- 明确需求和验收命令。
- 写最小公开行为测试。
- 复现失败。
- 做最小修复。
- 跑本层测试和上层 smoke。
- 解释数据流和调用链。
- 写下可复用经验。
- 提交。