在Linux中配置TensorFlow訓練環境
1. 安裝NVIDIA 驅動程式
-
禁用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 沒顯示即成功。
-
下載對應顯示卡的NVIDIA驅動
wget https://cn.download.nvidia.com/tesla/418.226.00/NVIDIA-Linux-x86_64-418.226.00.run
-
新增可執行許可權
chmod +x NVIDIA-Linux-x86_64-418.226.00.run
-
安裝驅動
./NVIDIA-Linux-x86_64-418.226.00.run --no-opengl-files
-
檢視驅動是否安裝成功
nvidia-smi
2. 安裝cuda
-
解除安裝已安裝的cuda
sudo yum remove cuda
-
如果/usr/local/目錄下,還有cuda的檔案目錄,刪了吧
cd /usr/local/
-
下載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
-
安裝cuda
sh cuda_10.1.105_418.39_linux.run
-
設定環境變數
-
開啟
~/.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
-
-
測試是否安裝成功
cd /usr/local/cuda/samples/1_Utilities/deviceQuery make sudo ./deviceQuery
3. 安裝cudnn
-
解壓下載的檔案並進入解壓目錄
tar -zxvf cudnn-10.1-linux-x64-v7.6.5.32.tgz
-
逐行執行下列命令
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*
-
完成後,通過下面的命令檢視安裝情況,如果結果逐行顯示版本號,則安裝成功。
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
4. 安裝GCC 7.3.0
-
下載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
-
解壓安裝包並進入解壓包
tar -xvf gcc-7.3.0.tar.gz cd gcc-7.3.0
-
下載編譯所需要的依賴項
./contrib/download_prerequisites cd ..
-
建立編譯後文件存放目錄
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
-
編譯
make
-
安裝
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並設定遠端訪問
-
下載anaconda
從anaconda官網下載適合本機版本的anaconda
注意:下載對應tensorflow版本的python的anaconda
wget https://repo.anaconda.com/archive/Anaconda3-2021.05-Linux-x86_64.sh
-
安裝anaconda
-
切換至anaconda檔案所在的資料夾
# 執行sh命令開始安裝程式 sh Anaconda3-2021.05-Linux-x86_64.sh
-
配置檔案
# 在家目錄路徑下 cd ~ # 在.bashrc檔案中新增環境變數 alias mypython='/root/anaconda3/bin/python' export PATH=/root/anaconda3/bin:$PATH # 新增完成之後,重新載入配置檔案 source .bashrc
-
建立tensorflow2的執行環境
conda create --name tensorflow2 -y conda activate tensorflow2
-
-
配置Jupyter Notebook
-
生成
jupyter notebook
的配置檔案jupyter notebook --generate-config
-
配置密碼
jupyter notebook password
-
配置ssh
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout mykey.key -out mycert.pem
-
寫入配置檔案
# 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
-
如果出現遠端訪問不了
非常可能的原因是伺服器防火牆沒有開放埠,導致遠端訪問失敗。排查過程如下:
-
檢視防火牆狀態
$ sudo systemctl status firewalld.service
-
檢視防火牆已開放埠列表
$ 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:
-
防火牆新增埠
# 新增埠 $ sudo firewall-cmd --permanent --add-port=8888/tcp # 移除埠 # sudo firewall-cmd --permanent --remove-port 8888/tcp # 重新載入 $ sudo firewall-cmd --reload
-
-
-
使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已經可以識別到虛擬環境了
-
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