服务器安装torchvision库文件时报错EnvironmentError: [Errno 28] No space left on device的完美解决方法及思维过程

Index 目录索引

  • 写在前面
  • 需求分析
  • 解决过程
  • 参考文章

写在前面

在服务器端安装库文件的过程中,可能你也会跟我一样遇到各种各样的错误提示,虽说网上各种各样的教程都有,但授之以鱼不如授之以渔,不妨跟着我一起来体会一下Debug的思维过程。虽然不能保证我的这个思维是最完美的,但是相信看完之后你会有所收获的,废话不多说,开始进入正题。

需求分析

在服务器端安装 torchvision 库文件的过程中,可能会遇到如下错误提示:

ERROR: Could not install packages due to an EnvironmentError: [Errno 28] No space left on device

既然是文件报错Debug帖,那么就先抛出详细的安装过程及报错信息:

[root@*** ***]# pip install --user torchvision -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
Looking in indexes: http://pypi.douban.com/simple/
Collecting torchvision
Downloading http://pypi.doubanio.com/packages/7e/90/6141bf41f5655c78e24f40f710fdd4f8a8aff6c8b7c6f0328240f649bdbe/torchvision-0.5.0-cp36-cp36m-manylinux1_x86_64.whl (4.0 MB)
|████████████████████████████████| 4.0 MB 17.9 MB/s
Requirement already satisfied: pillow>=4.1.1 in /usr/local/python3/lib/python3.6/site-packages (from torchvision) (6.0.0)
Requirement already satisfied: numpy in /usr/local/python3/lib/python3.6/site-packages (from torchvision) (1.16.2)
Requirement already satisfied: six in /usr/local/python3/lib/python3.6/site-packages (from torchvision) (1.12.0)
Collecting torch==1.4.0
Downloading http://pypi.doubanio.com/packages/24/19/4804aea17cd136f1705a5e98a00618cb8f6ccc375ad8bfa437408e09d058/torch-1.4.0-cp36-cp36m-manylinux1_x86_64.whl (753.4 MB)
|████████████████████████████████| 753.4 MB 4.1 MB/s

Installing collected packages: torch, torchvision
ERROR: Could not install packages due to an EnvironmentError: [Errno 28] No space left on device

解决过程

通过上述代码片段的最后一行可以看到报出的错误所在,最开始的调试阶段当然是根据错误信息去网上搜索相关的解决方法,以及向别的大佬们请教。

分析是因为tmp目录空间内存不足,所以重定向tmp目录,Debug的过程如下:

[root@*** ~]# ```bash
>
> mkdir $HOME/tmp
> export TMPDIR=$HOME/tmp
>
> ```
...
...
[root@*** ~]# pip install --user torchvision -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
ERROR: Could not install packages due to an EnvironmentError: [Errno 28] No space left on device

可以看到,试了上述的这个方法之后,还是依旧会报错。这个时候就感觉有点像是热锅上的蚂蚁了,因为目前网上所有的方式几乎都试了个遍,可就是不奏效。

干着急也没用,冷静下来后,仔细分析这个错误原因,既然提示说是内存不足,那么就回到这个安装目录去,使用df -h命令来查看内存的剩余情况。虽然提示是服务器端内存不足的原因,但是感觉又有点不可思议,这个服务器应该不可能会出现内存不足的情况,接下来用数据说话:

[root@*** ~]# mkdir $HOME/tmp
[root@*** ~]# export TMPDIR=$HOME/tmp
[root@*** ~]# cd $HOME/tmp
[root@*** tmp]# cd /root
[root@*** ~]# ls
anaconda-ks.cfg lrzsz-0.12.20 lrzsz-0.12.20.tar.gz tmp
[root@*** ~]# cd /root/tmp
[root@*** tmp]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/docker-8:***                10G 7.3G 2.8G 73% /
tmpfs 94G 0                             94G 0% /dev
tmpfs 94G 0                             94G 0% /sys/fs/cgroup
/dev/sdb                                5.2T 19G 5.0T 1% /data
/dev/sda4                               408G 83G 305G 22%/etc/hosts 
***:/home/***                           80T 3.9T 72T 6% /home/***
shm 64M 0                               64M 0% /dev/shm
***:/opt/tsce4/tools/dockerShare/***    4.2T 136G 3.9T 4% /opt/tsce4/tools/dockerShare/***
tmpfs 94G 0                             94G 0% /sys/firmware

通过以上数据信息可以知道,我的上述这番怀疑并非没有道理,安装失败并不是因为内存不足的原因。

再次经过了一番冷静的思考之后,猜测是否是权限不足的原因,所以接下来尝试使用chmod -R 777 tmp命令对tmp这个文件夹进行提权操作1,具体过程如下:

[root@*** ~]# ls -l
total 284
-rw------- 1 root root   3415 Oct  6  2018 anaconda-ks.cfg
drwxrwxrwx 9  406 disk   4096 Dec 21 14:06 lrzsz-0.12.20
-rw-r--r-- 1 root root 280938 Dec 30  1998 lrzsz-0.12.20.tar.gz
drwxr-xr-x 2 root root      6 Apr 17 09:09 tmp
[root@*** ~]# chmod -R 777 tmp
[root@*** ~]# ls -l
total 284
-rw------- 1 root root   3415 Oct  6  2018 anaconda-ks.cfg
drwxrwxrwx 9  406 disk   4096 Dec 21 14:06 lrzsz-0.12.20
-rw-r--r-- 1 root root 280938 Dec 30  1998 lrzsz-0.12.20.tar.gz
drwxrwxrwx 2 root root      6 Apr 17 09:09 tmp

接下来再次重新安装该库文件,惊喜地发现已经可以成功安装了,接下来跟着我一起来见证这个神奇的时刻:

[root@*** ~]# pip install torchvision -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
Looking in indexes: http://pypi.douban.com/simple/
Collecting torchvision
  Downloading http://pypi.doubanio.com/packages/7e/90/6141bf41f5655c78e24f40f710fdd4f8a8aff6c8b7c6f0328240f649bdbe/torchvision-0.5.0-cp36-cp36m-manylinux1_x86_64.whl (4.0MB)
    100% |████████████████████████████████| 4.0MB 19.4MB/s 
Requirement already satisfied: six in /usr/local/python3/lib/python3.6/site-packages (from torchvision) (1.12.0)
Requirement already satisfied: pillow>=4.1.1 in /usr/local/python3/lib/python3.6/site-packages (from torchvision) (6.0.0)
Collecting torch==1.4.0 (from torchvision)
  Downloading http://pypi.doubanio.com/packages/24/19/4804aea17cd136f1705a5e98a00618cb8f6ccc375ad8bfa437408e09d058/torch-1.4.0-cp36-cp36m-manylinux1_x86_64.whl (753.4MB)
    100% |████████████████████████████████| 753.4MB 9.0MB/s 
Requirement already satisfied: numpy in /usr/local/python3/lib/python3.6/site-packages (from torchvision) (1.16.2)
Installing collected packages: torch, torchvision
  Found existing installation: torch 0.4.1
    Uninstalling torch-0.4.1:
      Successfully uninstalled torch-0.4.1
Successfully installed torch-1.4.0 torchvision-0.5.0
You are using pip version 19.0.3, however version 20.0.2 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

写到这里,差不多本文就要结束了。之所以会选择写这篇文章,是因为在调试这个错误的时候,自己走了很多弯路,因为发现找到的有些方法其实并不实用,反而还浪费了很多的时间和精力,为了不让后面再次遇到这个问题的小伙伴走弯路,索性就把我的这个方法和思路拿出来分享,供小伙伴们参考。如果有问题可以在下方留言区留言交流。如果我的这篇文章帮助到了你,那我也会感到很高兴,一个人能走多远,在于与谁同行。

参考文章


  1. Linux中chmod -R 递归修改文件权限的操作和 默认权限umask ↩︎

你可能感兴趣的:(服务器)