为什么要写这篇
深度学习环境最容易踩坑的点,不是模型本身,而是依赖冲突、CUDA 版本不匹配和跨机器复现失败。
这篇的目标是给出一套可落地的实践:
- 用 Conda 管理 Python 与底层二进制依赖。
- 用 uv 管理项目级 Python 包与锁文件。
- 用一组验证与监控工具确保环境可用、可复现、可排障。
依赖文件怎么选
一般项目里常见三类文件:
- requirements.txt:传统 pip 依赖清单,简单直接。
- environment.yml:Conda 环境定义,适合包含 Python 之外的依赖。
- pyproject.toml + uv.lock:现代化依赖管理与锁定,团队协作更稳定。
安装命令示例:
pip install -r requirements.txt
# 或者
conda env create -f environment.yml
# 如果你使用 uv
uv sync
Conda 相关命令
1) 环境创建与激活
# 创建环境(推荐固定主版本)
conda create -n dl python=3.11 -y
# 激活环境
conda activate dl
# 查看当前环境列表
conda env list
# 查看当前环境信息
conda info
# 删除环境
conda remove -n dl --all -y
2) 包管理
# 安装包
conda install numpy pandas -y
# 指定频道安装
conda install pytorch torchvision torchaudio -c pytorch -y
# 更新某个包
conda update numpy -y
# 卸载包
conda remove pandas -y
3) 环境导出与复现
# 导出完整环境(包含精确版本)
conda env export > environment.yml
# 按文件恢复环境
conda env create -f environment.yml
4) 配置与加速
# 查看当前 channels 配置
conda config --show channels
# 设置严格频道优先级,减少不必要冲突
conda config --set channel_priority strict
# 添加 conda-forge(按需)
conda config --add channels conda-forge
# 查看配置来源
conda config --show-sources
# 清理缓存
conda clean --all -y
5) 回滚与强复现
# 查看环境历史版本
conda list --revisions
# 回滚到指定修订版本
conda install --revision 3
# 仅导出手动安装过的依赖(轻量复现)
conda env export --from-history > environment.min.yml
# 导出显式包列表(强一致复现)
conda list --explicit > spec-file.txt
# 用显式包列表创建环境
conda create -n dl-repro --file spec-file.txt
# 删除环境
conda remove -n dl --all -y
6) 常见问题
- 依赖求解很慢:优先减少频道数量,或改用 mamba/micromamba。
- 冲突频繁:先固定 Python 主版本,再逐步安装核心包。
- GPU 包异常:优先查 PyTorch 官方版本矩阵,再安装对应 CUDA 版本。
uv 相关命令
1) 项目初始化与依赖安装
# 初始化项目(生成 pyproject.toml)
uv init
# 添加运行时依赖
uv add torch torchvision torchaudio
# 添加开发依赖
uv add --dev pytest ruff
# 同步依赖到当前环境
uv sync
2) 依赖维护
# 删除依赖
uv remove torch
# 锁定依赖
uv lock
# 按锁文件同步,保证跨机器一致
uv sync --frozen
# 导出 requirements.txt 风格锁定文件
uv export --format requirements-txt > requirements.lock.txt
3) Python 与诊断命令
# 查看可用 Python 版本
uv python list
# 安装指定 Python 版本
uv python install 3.11
# 在 uv 管理上下文中运行命令
uv run python -V
# 查看依赖树
uv tree
# 检查依赖是否存在元数据冲突
uv pip check
# 清理 uv 缓存
uv cache prune
4) 与 Conda 搭配的建议
推荐分层管理:
- Conda 管 Python 版本和底座依赖。
- uv 管项目依赖和锁文件。
这样做的优点是:安装快、冲突少、协作复现更稳定。
推荐工作流(Conda + uv)
# 1) 创建并激活基础环境
conda create -n dl python=3.11 -y
conda activate dl
# 2) 初始化项目并安装依赖
uv init
uv add torch torchvision torchaudio
uv add --dev ruff pytest
uv sync
# 3) 验证环境
python -c "import torch; print(torch.__version__); print(torch.cuda.is_available())"
# 4) 锁定依赖并提交
uv lock
一些好用的工具类
这里推荐的是一些管理与系统检测常用工具:
- GPU 状态检测
- gpustat:轻量级命令行工具,快速查看显存与进程。
- nvitop:更现代的 GPU 监控界面,Windows/Linux 都更友好。
- 依赖排障
- pipdeptree:查看依赖树,定位冲突来源。
- 代码质量
- ruff:高性能 Lint 与格式检查工具。
- pre-commit:提交前自动执行检查,减少低级错误。
- 实验追踪
- wandb 或 mlflow:记录参数、指标、模型版本,便于对比实验结果。
对应安装命令示例:
# GPU 监控
pip install gpustat nvitop
# 依赖排障
pip install pipdeptree
# 代码质量
pip install ruff pre-commit
# 实验追踪(二选一或都装)
pip install wandb mlflow
GPU 与环境诊断命令
# 查看 GPU 与驱动状态
nvidia-smi
# 查看 CUDA 工具链版本(已安装时可用)
nvcc --version
# 检查 PyTorch 与 CUDA 可用性
python -c "import torch; print(torch.__version__); print(torch.version.cuda); print(torch.cuda.is_available())"
# 输出 PyTorch 环境诊断信息
python -m torch.utils.collect_env
依赖与质量校验命令
# 检查已安装包的依赖一致性
pip check
# 输出依赖树并在冲突时返回非零状态
pipdeptree --warn fail
# 代码检查
ruff check .
# 运行 pre-commit 全量检查
pre-commit run --all-files
最小排障清单
- 先确认 Python 版本与项目要求一致。
- 再确认 CUDA、驱动、PyTorch 三者匹配。
- 如果 import 失败,先看依赖冲突,再看系统动态库。
- 对团队项目,优先使用锁文件而不是手动安装。
参考
- Conda 文档:https://docs.conda.io/
- uv 文档:https://docs.astral.sh/uv/
- PyTorch 安装指引:https://pytorch.org/get-started/locally/
- NVIDIA 驱动与 CUDA:https://developer.nvidia.com/cuda-downloads