服务器根目录爆满导致 PyTorch 安装失败(Errno 28 No space left on device)

1. 问题背景

在远程 Linux 服务器上通过 pip 安装 PyTorch 时,安装过程突然中断并报错,安装其他的包都没有问题。观察发现下载时中断,pytorch包确实挺大的。

虽然数据盘(如 /data)有充足的剩余空间(1.0T+),但 MobaXterm 右下角监控显示磁盘使用率已达 97% ,一旦开始安装大型包,使用率瞬间飙升至 100% 并报错。

2. 报错信息

核心错误为 OSError: [Errno 28] No space left on device,具体堆栈如下:

复制代码
Exception ignored in: <function _TemporaryFileCloser.__del__ ...>
...
OSError: [Errno 28] No space left on device
ERROR: Exception:
Traceback (most recent call last):
  ...
  File ".../pip/_vendor/urllib3/response.py", line 455, in _error_catcher
    raise ProtocolError("Connection broken: %r" % e, e)
pip._vendor.urllib3.exceptions.ProtocolError: ("Connection broken: OSError(28, 'No space left on device')", ...)

3. 原因分析

  1. 分区误解 :服务器的 /data 目录虽然空间大,但它是独立挂载的分区。而用户的家目录(~)、缓存目录(~/.cache)以及系统临时目录(/tmp)通常位于**根分区(/)**下。可能由于服务器的分区策略给家目录分的内存已经爆满,因此无法存入。
  2. 默认行为 :pip 在安装过程中,会先将巨大的安装包下载到缓存目录,并在 /tmp 下进行解压和编译。PyTorch 包体积巨大,瞬间占满了根分区的剩余空间。
  3. 结果 :根分区(/)被写满,导致无法写入临时文件,从而抛出 Errno 28 错误。

4. 解决方案

通过清理缓存 + 重定向临时目录,将安装过程中的大文件操作指向空间充足的数据盘。

第一步:清理现有缓存(可选但推荐)

先释放一些根分区空间,确保能执行后续命令:

复制代码
rm -rf ~/.cache/pip
rm -rf ~/.cache/conda
# 若有权限且确认安全,可清理系统临时文件
# sudo rm -rf /tmp/* 

第二步:创建数据盘缓存目录

在空间充足的 /data 目录下创建专用文件夹:

复制代码
mkdir -p /data/你的用户名/pip_cache
mkdir -p /data/你的用户名/tmp

第三步:设置环境变量并安装(关键步骤)

利用 export TMPDIR 指定临时解压路径,配合 pip 的 --cache-dir 参数,双管齐下避开根目录限制。

执行命令:

复制代码
# 1. 导出临时目录变量到数据盘
export TMPDIR=/data/你的用户名/tmp

# 2. 执行安装,指定缓存目录到数据盘
pip install torch==x.x.x torchvision==x.x.x --cache-dir=/data/你的用户名/pip_cache

注意 :请根据实际需要的 PyTorch 版本和 CUDA 版本调整 pip install 后的参数。

5. 后续处理与注意事项

  1. 恢复环境变量 :

    安装完成后,建议取消 TMPDIR 的设置,以免干扰其他依赖默认 /tmp(通常是内存盘,速度更快)的程序运行。

    • 方法一:直接关闭当前终端窗口,重新登录。
    • 方法二:在当前窗口执行 unset TMPDIR 或 export TMPDIR=/tmp。
  2. 为何这样做有效?

    • --cache-dir:告诉 pip 把下载的安装包存在数据盘,不占根目录。
    • TMPDIR:告诉 Python 和系统工具,在解压、编译时的临时文件也存放在数据盘,防止 /tmp 爆满。
  3. 适用场景 :

    此方法不仅适用于安装 PyTorch,也适用于安装任何体积巨大、容易撑爆根目录的 Python 库或进行大型编译任务。

相关推荐
Easy_API5 小时前
2.8万亿参数,编程反超GPT-6 Astra:Kimi K3.1 Pro把开源模型推到了哪一步
大数据·人工智能·gpt·深度学习
HideF6 小时前
Linux
linux·服务器·网络
Ruiery8 小时前
Linux 6.6内核内存管理深度解析(十三):slab/slub 分配器
linux·运维·服务器
乌恩大侠8 小时前
从 AI-RAN 到 AI Agent:基于 NVIDIA Nemotron 构建 5G/6G 智能网络故障诊断系统
服务器·人工智能·5g·o-ru·ai-ran·电信大模型
迪菲赫尔曼10 小时前
【基础篇 11】把官方源码放到服务器:版本、解压层级和安装位置,一次弄清楚
运维·服务器·开发语言·人工智能·python·yolo·目标检测
by2099912 小时前
Linux GCC/G++ 编译与 Makefile 构建
linux·运维·服务器·经验分享
迪菲赫尔曼12 小时前
【基础篇 12】把环境与源码接起来:检查 GPU,再安装服务器上的项目
运维·服务器·开发语言·人工智能·python·yolo·目标检测
cq林志炫12 小时前
两个Linux服务器之间同步文件
linux·运维·服务器
yyuuuzz13 小时前
云服务器安全组规则优先级的机制记录
运维·服务器·网络·安全·阿里云·aws
智购科技自动售货机厂家13 小时前
让AI经营自动售货机:从Project Vend看工具权限与业务规则~YH
大数据·服务器·单片机·嵌入式硬件·深度学习