kantoku
深度学习训练环境磁盘空间清理指南
1156 字
6 分钟
深度学习训练环境磁盘空间清理指南
背景
跑深度学习实验最头疼的事情之一,就是磁盘空间不知不觉就被占满了。模型权重、训练 checkpoint、数据集、各种缓存……几天不清理,几百G 的空间就消失了。这篇文章整理一下常用的清理方法,涵盖数据集、checkpoint、模型缓存、包管理器等各个方面。
1. 数据集管理
数据集往往是占用空间最大的部分,但清理时需要谨慎——删错了可能要重新下载,很浪费时间。
清理不用的数据集
先检查哪些数据集占空间最大:
# 查看 Hugging Face 数据集缓存du -sh ~/.cache/huggingface/datasets/* | sort -h
# 查看自定义数据集目录du -sh /path/to/datasets/* | sort -h对于确认不再需要的数据集,直接删除即可。对于暂时不用但以后可能需要的,可以考虑:
迁移到 HDD
SSD 空间有限,可以把不常用的数据集迁移到 HDD:
# 移动数据集mv /ssd/datasets/imagenet /hdd/datasets/
# 创建软链接,保持代码兼容性ln -s /hdd/datasets/imagenet /ssd/datasets/imagenet这样代码里读取 /ssd/datasets/imagenet 仍然能正常工作,但实际上数据存储在 HDD 上。
压缩不常用数据集
对于读取频率不高的数据集,可以压缩存储:
# 压缩为 tar.gztar -czf dataset.tar.gz /path/to/dataset
# 使用时解压到临时目录tar -xzf dataset.tar.gz -C /tmp/2. Checkpoint 管理
训练过程中保存的 checkpoint 是磁盘占用的另一大来源。以 PyTorch Lightning 为例:
Lightning 的自动清理
Lightning 提供了方便的 checkpoint 管理:
from pytorch_lightning.callbacks import ModelCheckpoint
# 只保留最新的 3 个 checkpointcheckpoint_callback = ModelCheckpoint( save_top_k=3, monitor="val_loss", mode="min", filename="{epoch}-{val_loss:.2f}")
# 或者只保留验证指标最好的 1 个checkpoint_callback = ModelCheckpoint( save_top_k=1, monitor="val_acc", mode="max")手动清理旧 checkpoint
如果没有使用自动清理,可以写脚本定期删除:
# 保留最新的 5 个 checkpoint,删除其余的ls -t checkpoints/*.ckpt | tail -n +6 | xargs rm -f
# 或者按时间删除,比如删除 7 天前的ind checkpoints/ -name "*.ckpt" -mtime +7 -delete只保存必要的内容
checkpoint 通常包含模型权重、优化器状态、学习率调度器状态等。如果只需要模型权重,可以只保存 state_dict:
# 只保存模型权重,文件更小torch.save(model.state_dict(), "model_weights.pth")
# 而不是保存整个 checkpointtorch.save({ 'epoch': epoch, 'model_state_dict': model.state_dict(), 'optimizer_state_dict': optimizer.state_dict(), ...}, "full_checkpoint.pth")3. 模型缓存清理
PyTorch 缓存
# 删除下载的预训练模型rm -rf ~/.cache/torch/hub/checkpoints/*
# 删除 torchvision 数据集缓存rm -rf ~/.cache/torch/datasets/*
# 删除 torch 编译缓存(PyTorch 2.0+)rm -rf ~/.cache/torch/kernels/*Hugging Face 缓存
# 删除所有 Hugging Face 缓存rm -rf ~/.cache/huggingface/*
# 或者分别清理rm -rf ~/.cache/huggingface/hub/* # 模型权重rm -rf ~/.cache/huggingface/datasets/* # 数据集rm -rf ~/.cache/huggingface/transformers/*其他模型库
大部分模型库都遵循类似的缓存模式:
# timm 模型缓存rm -rf ~/.cache/timm/*
# transformers(旧版本可能用这个路径)rm -rf ~/.cache/transformers/*修改缓存位置
如果 SSD 空间紧张,可以把缓存目录改到 HDD:
# PyTorchexport TORCH_HOME=/hdd/.cache/torch
# Hugging Faceexport HF_HOME=/hdd/.cache/huggingface
# 添加到 ~/.bashrc 永久生效echo 'export HF_HOME=/hdd/.cache/huggingface' >> ~/.bashrc4. 包管理器缓存
pip
pip cache purgeconda / mamba
conda clean -auv
uv cache cleanpixi
pixi clean5. 其他常见占用
Docker 镜像
如果用 Docker 跑实验,镜像可能占用大量空间:
# 删除所有未使用的镜像、容器、卷docker system prune -a
# 只删除未使用的卷docker volume prune日志文件
训练日志可能积累到很大:
# 清空日志文件(保留文件,清空内容)truncate -s 0 /path/to/train.log
# 或者删除旧的日志find logs/ -name "*.log" -mtime +30 -deleteJupyter Notebook 检查点
# 删除所有 .ipynb_checkpoints 目录find ~ -name ".ipynb_checkpoints" -type d -exec rm -rf {} + 2>/dev/nullPython 编译缓存
# 删除 __pycache__ 目录find ~ -type d -name "__pycache__" -exec rm -rf {} + 2>/dev/null
# 删除 .pyc 文件find ~ -name "*.pyc" -delete6. 预防性措施
除了事后清理,更好的方法是预防:
监控磁盘使用
# 查看当前目录各子目录大小du -sh */ | sort -h
# 实时监控磁盘使用watch -n 60 'df -h'设置 checkpoint 保存策略
训练代码里就设置好只保留必要的 checkpoint,避免事后清理。
使用云存储
对于大规模数据集,考虑使用云存储(S3、OSS 等),按需下载,减少本地存储压力。
总结
深度学习环境的磁盘清理是个持续的工作,建议:
- 定期检查磁盘使用情况
- 训练时就设置好 checkpoint 保存策略
- 不用的数据集及时迁移或删除
- 大文件优先放 HDD,SSD 留给频繁读写的数据
保持磁盘空间充足,训练才不会因为磁盘满了而中断。
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
深度学习训练环境磁盘空间清理指南
https://notes.shimmer93.com/posts/dl-training-disk-cleanup/ 相关文章 智能推荐
1
用 Netdata 搭建中心化服务器监控(Parent-Child 模式)
开发运维 记录一次用 Netdata 的 Parent-Child 模式搭建多服务器监控的过程。目标是 centralized dashboard,同时保留数据自主权,避免依赖 Netdata Cloud 的付费功能。
2
Windows OpenSSH 公钥登录的一个常见陷阱
开发运维 记录一次在 Windows 上配置 OpenSSH 公钥登录的过程。问题表面上是“明明加了密钥还是要输密码”,真正卡人的地方却是 Windows OpenSSH 会对管理员组用户切换另一套 authorized_keys 规则。
3
给 KuroNotes 写一个博客写作 skill:从能用到好读的全过程
博客搭建 记录我如何给 KuroNotes 配一个专用的博客写作 skill:把固定仓库、草稿与发布流程、写作风格约束拆成清晰的配置层,让它既能产出草稿,也更容易写出可发布的技术文章。
随机文章 随机推荐