install pytorch with jupyter

概要

本文介绍了通过conda方式安装pytorch和jupyter的方法,并给出了两个由于GLIBC问题导致pytorch无法导入问题的解决办法。

环境

OS:CentOS 6.3

CUDA:8.0

CUDNN:7.0

步骤

说明:CUDA和CUDNN需要提前安装好。

  1. 安装mini conda 2,版本4.5.4
wget https://repo.continuum.io/miniconda/Miniconda2-latest-Linux-x86_64.sh
sh Miniconda2-latest-Linux-x86_64.sh 

2. 创建虚拟环境

conda create -n pytorch python=2

3. 安装pytorch

copy PyTorch 官网的命令即可

conda install pytorch torchvision -c pytorch 

4. 验证 torch是否安装成功

source activate pytorch
python
>>> import torch
>>> torch.cuda.is_available()

输出True表示安装成功,且GPU在pytorch中可用。

5. 安装jupyter notebook

conda install jupyter
# 生成配置
jupyter notebook --generate-config

6.修改 jupyter配置

vim ~/.jupyter/jupyter_notebook_config.py 

修改默认绑定IP

c.NotebookApp.ip = '0.0.0.0'

修改笔记位置,注意修改为自己需要存放的绝对路径,也可以不改,默认为启动jupyter时当前路径。

c.NotebookApp.notebook_dir = u'存放笔记目录绝对路径'

修改打开浏览器选项,服务器运行时,通常我们不需要启动jupyter时打开浏览器,所以关闭此选项。

c.NotebookApp.open_browser = False

7. 修改密码

jupyter notebook password

8. 启动jupyter

jupyter notebook

9. 浏览器打开jupyter notebook

启动成功后会输出访问地址,默认端口为8888。如果是在自己的个人电脑上安装的torch和jupyter,则 http://localhost:8888 即可打开jupyter。

10. 新建python 2 notebook,执行以下代码

import torch
torch.cuda.is_available()

如果输出为True表示成功。

遇到的问题

1.第4步`import torch`,出现错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/xxx/miniconda2/envs/pytorch/lib/python2.7/site-packages/torch/__init__.py", line 78, in <module>
    from torch._C import *
ImportError: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /home/xxx/miniconda2/envs/pytorch/lib/python2.7/site-packages/torch/_C.so)

分析:GLIBC版本太低,检查GLIBC版本

strings /lib64/libc.so.6 |grep GLIBC

输出

GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_PRIVATE

发现GLIBC最高版本为2.12,而pytorch程序需要2.14,手动编译 2.14 至 /opt/glibc-2.14:

su - root
wget https://ftp.gnu.org/gnu/glibc/glibc-2.14.tar.gz
tar zxf glibc-2.14.tar.gz
cd glibc-2.14
mkdir build
cd build
../configure --prefix=/opt/glibc-2.14
make -j4
make install

编译完成后,添加glibc-2.14到 LD_LIBRARYPATH。

export LD_LIBRARY_PATH=/opt/glibc-2.14/lib:$LD_LIBRARY_PATH

再次执行第4步,不再报错。

2.启动jupyter后,jupyter notebook中执行 import torch 出现kernel died

分析:直接在python 中 import torch 是正常的,在ipython中执行import torch出现 Segmentation fault ,怀疑与GLIBC有关。尝试通过新版GLIBC启动ipython:

source activate pytorch
/opt/glibc-2.14/lib/ld-2.14.so  --library-path $LD_LIBRARY_PATH:/lib64 /home/xxx/miniconda2/envs/pytorch/bin/python /home/xxx/miniconda2/envs/pytorch/bin/ipython

执行第4步,不再报错。

解决办法:

a.列出jupyter内核:

jupyter kernelspec list

输出

Available kernels:
  python2    /home/xxx/miniconda2/envs/pytorch/share/jupyter/kernels/python2

b. 编写通过glibc启动程序脚本

touch /home/xxx/bin/glibc_2.14_run.sh
chmod +x /home/xxx/bin/glibc_2.14_run.sh

脚本内容

#!/bin/sh

/opt/glibc-2.14/lib/ld-2.14.so  --library-path $LD_LIBRARY_PATH:/lib64 $*

c.修改内核配置中的启动参数

vim  /home/xxx/miniconda2/envs/pytorch/share/jupyter/kernels/python2/kernel.json 

修改前

{
 "display_name": "Python 2",
 "language": "python",
 "argv": [
  "/home/xxx/miniconda2/envs/pytorch/bin/python",
  "-m",
  "ipykernel_launcher",
  "-f",
  "{connection_file}"
 ]
}

argv 中第一行增加 /home/xxx/bin/glibc_2.14_run.sh ,修改后

{
 "display_name": "Python 2",
 "language": "python",
 "argv": [
  "/home/xxx/bin/glibc_2.14_run.sh",
  "/home/xxx/miniconda2/envs/pytorch/bin/python",
  "-m",
  "ipykernel_launcher",
  "-f",
  "{connection_file}"
 ]
}

d.重启 jupyter notebook,重试第10步正常。

本方法参考:10859 在 glibc < 2.17 的系统上安装 TensorFlow

尝试过几种无效的办法:

a.因为先装的miniconda,后编译的GLIBC,尝试重装miniconda并重新创建虚拟环境,无效。

b.修改LD_PRELOAD=/opt/glibc-2.14/lib/libc.so.6,无效,并且执行其他系统命令出现Segmentation fault ,再执行 unset LD_PRELOAD 恢复。

    原文作者:栩风
    原文地址: https://zhuanlan.zhihu.com/p/40444240
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞