在Linux中配置TensorFlow训练环境

1. 安装NVIDIA 驱动程序

  1. 禁用nouveau。

    sudo vim /etc/modprobe.d/blacklist.conf
    
    #在后面添加以下内容
    blacklist nouveau
    blacklist lbm-nouveau
    options nouveau modeset=0
    alias nouveau off
    alias lbm-nouveau off
    
    # lsmod | grep nouveau 没显示即成功。
    
  2. 下载对应显卡的NVIDIA驱动

     wget https://cn.download.nvidia.com/tesla/418.226.00/NVIDIA-Linux-x86_64-418.226.00.run
    
  3. 添加可执行权限

    chmod +x NVIDIA-Linux-x86_64-418.226.00.run
    
  4. 安装驱动

     ./NVIDIA-Linux-x86_64-418.226.00.run --no-opengl-files
    
  5. 查看驱动是否安装成功

    nvidia-smi
    

2. 安装cuda

  1. 卸载已安装的cuda

    sudo yum remove cuda
    
  2. 如果/usr/local/目录下,还有cuda的文件目录,删了吧

    cd /usr/local/ 
    
  3. 下载cuda

    首先,前往下载:CUDA Toolkit Download,根据自己实际需要下载对应的版本。

    # 这是Centos7对应的10.1的cuda版本下载地址
    wget https://developer.nvidia.com/compute/cuda/10.1/Prod/local_installers/cuda_10.1.105_418.39_linux.run
    
    # 这是Ubuntu对应的10.1的cuda版本下载地址
    wget https://developer.nvidia.com/compute/cuda/10.1/Prod/local_installers/cuda_10.1.105_418.39_linux.run
    
  4. 安装cuda

    sh cuda_10.1.105_418.39_linux.run
    
  5. 设置环境变量

    • 打开~/.bashrc文件,将下面内容添加到文件的最后:

      export CUDA_HOME=/usr/local/cuda
      export LD_LIBRARY_PATH=${CUDA_HOME}/lib64
      export PATH=${CUDA_HOME}bin:${PATH}
      
    • 运行:

      source ~/.bashrc
      
    • 打开/etc/profile文件,将下面内容添加到文件的最后:

      export PATH=“/usr/local/cuda/bin:$PATH”
      
    • 然后,运行:

      source /etc/profile
      
    • 测试

      # 查看版本
      nvcc -V
      
      # 如果失败,运行下列命令
      echo 'export PATH=/usr/local/cuda-10.1/bin/:$PATH'>>~/.bashrc
      echo 'export LD_LIBRARY_PATH=/usr/local/cuda-10.1/lib64:$LD_LIBRARY_PATH'>>~/.bashrc
      source ~/.bashrc
      
  6. 测试是否安装成功

    cd /usr/local/cuda/samples/1_Utilities/deviceQuery
    make
    sudo ./deviceQuery
    

3. 安装cudnn

  1. 下载cudnn

  2. 解压下载的文件并进入解压目录

    tar -zxvf cudnn-10.1-linux-x64-v7.6.5.32.tgz
    
  3. 逐行运行下列命令

    sudo cp cuda/include/cudnn.h /usr/local/cuda/include/
    sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64/
    sudo chmod a+r /usr/local/cuda/include/cudnn.h
    sudo chmod a+r /usr/local/cuda/lib64/libcudnn*
    
  4. 完成后,通过下面的命令查看安装情况,如果结果逐行显示版本号,则安装成功。

    cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
    

4. 安装GCC 7.3.0

  1. 下载GCC7.3.0到路径/usr/local

    cd /usr/local
    wget http://mirrors.concertpass.com/gcc/releases/gcc-7.3.0/gcc-7.3.0.tar.gz
    
  2. 解压安装包并进入解压包

    tar -xvf gcc-7.3.0.tar.gz
    cd gcc-7.3.0
    
  3. 下载编译所需要的依赖项

    ./contrib/download_prerequisites 
    cd ..
    
  4. 建立编译后文件存放目录

    mkdir gcc-build-7.3.0
    cd gcc-build-7.3.0
    ../gcc-7.3.0/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
    
  5. 编译

    make
    
  6. 安装

    make install
    

5. 安装 Bazel

第 1 步:添加 Bazel 分发 URI 作为包源

注意:这是一次性设置步骤。

sudo apt install apt-transport-https curl gnupg
curl -fsSL https://bazel.build/bazel-release.pub.gpg | gpg --dearmor > bazel.gpg
sudo mv bazel.gpg /etc/apt/trusted.gpg.d/
echo "deb [arch=amd64] https://storage.googleapis.com/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list

组件名称“jdk1.8”仅出于遗留原因保留,与支持或包含的 JDK 版本无关。Bazel 版本与 Java 版本无关。更改“jdk1.8”组件名称会破坏存储库的现有用户。

第 2 步:安装和更新 Bazel

sudo apt update && sudo apt install bazel

安装后,您可以升级到更新版本的 Bazel 作为正常系统更新的一部分:

sudo apt update && sudo apt full-upgrade

bazel软件包始终安装最新的 Bazel 稳定版本。除了最新版本之外,您还可以安装特定的旧版本 Bazel,例如:

sudo apt install bazel-2.0.0

bazel --version

6. 安装Anaconda并设置远程访问

  1. 下载anaconda

    从anaconda官网下载适合本机版本的anaconda

    注意:下载对应tensorflow版本的python的anaconda

    wget https://repo.anaconda.com/archive/Anaconda3-2021.05-Linux-x86_64.sh
    
  2. 安装anaconda

    1. 切换至anaconda文件所在的文件夹

      # 运行sh命令开始安装程序
      sh Anaconda3-2021.05-Linux-x86_64.sh 
      
    2. 配置文件

      # 在家目录路径下
      cd ~
      # 在.bashrc文件中添加环境变量
      alias mypython='/root/anaconda3/bin/python'
      export PATH=/root/anaconda3/bin:$PATH
      # 添加完成之后,重新载入配置文件
      source .bashrc
      
    3. 创建tensorflow2的运行环境

      conda create --name tensorflow2 -y
      
      conda activate tensorflow2
      
  3. 配置Jupyter Notebook

    1. 生成jupyter notebook的配置文件

      jupyter notebook --generate-config
      
    2. 配置密码

      jupyter notebook password
      
    3. 配置ssh

      openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout mykey.key -out mycert.pem
      
    4. 写入配置文件

      # Set options for certfile, ip, password, and toggle off
      # browser auto-opening
      #c.NotebookApp.certfile = u'/home/mango/.jupyter/mycert.pem'
      # c.NotebookApp.keyfile = u'/home/mango/.jupyter/mykey.key'
      # Set ip to '*' to bind on all interfaces (ips) for the public server
      c.NotebookApp.ip = '*'
      c.NotebookApp.password = u'argon2:$argon2id$v=19$m=10240,t=10,p=8$5OEPDBDtBosBGgMG/8UfFg$ZrUtCCZHBAjWg9DZSsQ4NQ'
      c.NotebookApp.open_browser = False
      
      # It is a good idea to set a known, fixed port for server access
      c.NotebookApp.port = 8888
      
    5. 如果出现远程访问不了

      非常可能的原因是服务器防火墙没有开放端口,导致远程访问失败。排查过程如下:

      1. 查看防火墙状态

        $ sudo systemctl status firewalld.service
        
      2. 查看防火墙已开放端口列表

        $ sudo firewall-cmd --list-all
        
        public (active)
          target: default
          icmp-block-inversion: no
          interfaces: ens33
          sources: 
          services: dhcpv6-client ssh
          ports: 8888/tcp  # 如果这里没有出现你需要的端口,则端口未开放,需要添加来开放端口
          protocols: 
          masquerade: no
          forward-ports: 
          source-ports: 
          icmp-blocks: 
          rich rules: 
        
      3. 防火墙添加端口

        # 添加端口
        $ sudo firewall-cmd --permanent --add-port=8888/tcp
        # 移除端口
        # sudo firewall-cmd --permanent --remove-port 8888/tcp 
        # 重新载入
        $ sudo firewall-cmd --reload
        
  4. 使jupyter识别虚拟环境

    jupyter notebook 默认安装在 base环境下
    
    那么我们需要在base环境里安装 `nb_conda_kernels`
    
    首先进入 base 环境
    
    conda install nb_conda_kernels
    
    接着使用 conda list 查看ipykernel的版本
    
    conda list
    

    我这里的版本是5.3.4。如果ipykernel缺失,需要自己安装。

    接着进入目标虚拟环境
    
    activate your_env_name
    conda list
    

    观察发现缺失 ipykernel 包

    那么我们直接使用conda安装 缺失的 ipykernel包

    conda install ipykernel=5.3.4
    

    然后在命令行启动jupyter notebook 发现 jupyter notebook已经可以识别到虚拟环境了

  5. nohup的开启和停止

    # 使jupyter notebook永久运行
    nohup jupyter notebook
    # 找到jupyter notebook的进程ID
    ps -A
    # 使用kill结束jupyter notebook进程
    kill -9 ID
    

参考资料

[1].https://www.cnblogs.com/thousfeet/p/10647102.html

[2] https://blog.csdn.net/Brephos/article/details/118723717

[3] https://blog.csdn.net/weixin_39818014/article/details/113490396

上一篇:【Anaconda】Jupyter中添加Anaconda环境


下一篇:修改Jupyter Notebook默认打开文件路径