1. 程式人生 > 其它 >在Linux中配置TensorFlow訓練環境

在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