Nvidia-docker2 for ubuntu18.04初試!

NVIDIA-Docker2深度-人工智能-tensorflow環境搭建

這篇文章是作爲我在ubuntu18.04LTS上搭建我的深度環境並且運行的最悲催的血淚史,主要是記錄我的環境搭建的問題,以便將來有一天電腦再over的時候作爲一種快速回血的方式,同時以此紀念我的耗費三天時間的無力感。

我想我需要把我覺得最重要的一件事情寫在前面,請務必學會利用VPS搭建自己的科學上網服務器,第二件事請學會在ubuntu上將利用ss+polipo實現電腦的科學上網(必須是全局模式的!,本文沒有使用ss+polipo…)

nvidia-docker2的搭建

正如TensorFlow官方文檔所說:https://tensorflow.google.cn/install/docker

使用TensorFlow最方便的事情就是利用docker去實現了,因爲自從nvidia-docker2開始不再需要自己安裝CUDA,這一個是非常重要的事情。至於功能方便的增加修改,daemon的各種優化,不再使用等問題對我等只使用的人而言並沒有什麼太大的理解價值。

最常用的框架是TensorFlow,利用NVIDIA-docker2再pull的鏡像去運行我們所需要的腳本或者是py程序可能是最合適的方式。

nvidia-docker2的前提條件

Docker 安裝步驟

可以借鑑該文章:https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-18-04#step-1-%E2%80%94-installing-docker

友情提示:其實與官方的描述大同小異,只不過該文章將具體的實現步驟簡化了。

官方Ubuntu存儲庫中提供的Docker安裝包可能不是最新版本。爲了確保我們獲得最新版本,我們將從官方Docker存儲庫安裝Docker。爲此,我們將添加一個新的包源,從Docker添加GPG密鑰以確保下載有效,然後安裝該包。

  • step1 首先,更新現有的包列表:

    sudo apt update
    
    # 或者是這樣亦可...
    sudo apt-get update
    
  • step2 接下來,安裝一些允許apt通過HTTPS使用包的必備軟件包:

    sudo apt install apt-transport-https ca-certificates curl software-properties-common
    
  • step3 然後將官方Docker存儲庫的GPG密鑰添加到您的系統:

    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    
  • step4 將Docker存儲庫添加到APT源:

    sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"
    
  • step5 接下來,使用新添加的repo中的Docker包更新包數據庫:

    sudo apt update
    
  • step6 確保您要從Docker repo而不是默認的Ubuntu repo安裝:

    apt-cache policy docker-ce
    

    雖然Docker的版本號可能不同,但您可能會看到這樣的輸出:

    apt-cache policydocker-ce output
    docker-ce:
      Installed: (none)
      Candidate: 18.03.1~ce~3-0~ubuntu
      Version table:
         18.03.1~ce~3-0~ubuntu 500
            500 https://download.docker.com/linux/ubuntu bionic/stable amd64 Packages
    

    請注意,docker-ce未安裝,但安裝的候選者來自Ubuntu 18.04(bionic)的Docker存儲庫。

  • step7 最後,安裝Docker:

    sudo apt install docker-ce
    
  • step8 現在應該安裝好了Docker,守護進程啓動,並啓用進程啓動進程。檢查它是否正在運行:

    sudo systemctl status docker
    

    輸出應類似於以下內容,表明該服務處於活動狀態並正在運行:

    Output
    ● docker.service - Docker Application Container Engine
       Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
       Active: active (running) since Thu 2018-07-05 15:08:39 UTC; 2min 55s ago
         Docs: https://docs.docker.com
     Main PID: 10096 (dockerd)
        Tasks: 16
       CGroup: /system.slice/docker.service
               ├─10096 /usr/bin/dockerd -H fd://
               └─10113 docker-containerd --config /var/run/docker/containerd/containerd.toml
    
在沒有Sudo的情況下執行Docker命令----(可選)

默認情況下,該docker命令只能由root用戶或docker組中的用戶運行,該用戶在Docker的安裝過程中自動創建。如果您嘗試運行該docker命令而不使用sudo或不在docker組中作爲前綴,您將獲得如下輸出:

Output
docker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?.
See 'docker run --help'.

如果要sudo在運行docker命令時避免鍵入,請將用戶名添加到docker組中:

sudo usermod -aG docker ${USER}

要應用新的組成員身份,請註銷服務器並重新登錄,或鍵入以下內容:

su - ${USER}

系統將提示您輸入用戶密碼以繼續。

通過鍵入以下內容確認您的用戶現已添加到docker組:

id -nG
Output
sammy sudo docker

如果您需要將用戶添加到docker您未登錄的組中,請明確聲明該用戶名:

sudo usermod -aG docker username

如果您選擇不這樣做,請在前面添加命令sudo或者切換到su

Nvidia的安裝方式.

至於nvidia顯卡驅動的安裝方式一般上而言就是隻有這三種。

嗯,這裏也甩一個參看網址:https://linuxconfig.org/how-to-install-the-nvidia-drivers-on-ubuntu-18-04-bionic-beaver-linux

雖然也英文的,但是在牆內還是可以看的,看不懂的請試用有道2.0網頁插件,或者是chrome瀏覽器直接右鍵翻譯成簡體中文即可。

  • method1

    ubuntu-drivers devices
    

    會顯示類似這樣的界面.

    pc-gmxy@pc-pc-gmxy:~$ ubuntu-drivers devices
    == /sys/devices/pci0000:00/0000:00:02.0/0000:01:00.0 ==
    modalias : pci:v000010DEd00001380sv00001462sd00003102bc03sc00i00
    vendor   : NVIDIA Corporation
    model    : GM107 [GeForce GTX 750 Ti]
    driver   : nvidia-driver-415 - third-party free
    driver   : nvidia-driver-410 - third-party free
    driver   : nvidia-driver-418 - third-party free recommended
    driver   : nvidia-340 - distro non-free
    driver   : nvidia-driver-390 - distro non-free
    driver   : nvidia-driver-396 - third-party free
    driver   : xserver-xorg-video-nouveau - distro free builtin
    

    然後自動安裝或者是手動.

    # 自動安裝方式.
    sudo ubuntu-drivers autoinstall
    # 手動安裝方式.
    sudo apt install nvidia-driver-415
    

    請重啓電腦,重啓電腦最重要,有什麼事情請重啓再說!

  • method2

    sudo add-apt-repository ppa:graphics-drivers/ppa
    sudo apt update
    

    然後跳到method1,over!

  • method3

# 查看顯卡.
lshw -numeric -C display
# or這樣...
$ lspci -vnn | grep VGA

# 瀏覽器取官方網站下載顯卡驅動的bin文件。

#切換到下載文件夾
cd Down+Tab
#or在下載文件夾下,右鍵打開終端,或者Ctrl+Alt+T打開終端,類似於這樣的文件。
NVIDIA-Linux-x86_64-410.73.bin

# 編譯bin文件,前提條件!
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install build-essential libc6:i386

#再然後我都不想看了,麻煩,而且編譯源碼時間花費很感人,於是....告辭!

請重啓電腦,請重啓電腦,請重啓電腦,有什麼事情請重啓再說!

nvidia-docker2的安裝

重點來了,基本上前面的安裝若是無誤基本上這一步就是可以正常安裝的,可是這一步巨坑,比天坑還坑。

目前存在的我遇到的問題有三大類:

第一種就是:某些文件下載失敗,被忽略或者過時,解決辦法,在github的issue上給出了n多種方法,我試過了許多種給解決了,就是多添加幾種鏡像源。

第二種就是:版本的依賴性問題,解決方式有n多中,什麼保證最新版安裝啊,嗯哼,告辭!根本解決不了問題,方法只有一個就是按照前面的步驟,務必保證步驟中不出錯至於給出的用老版本的問題,你看一下TensorFlow+cuda+驅動的版本對應問題吧,若是你掉進這個坑一天之內別想起來你了。

第三種就是:**.d/list文件第一行錯誤,無法讀取,這個github的issue也有,目前已關閉,解決方式是刪除了,重新sudo apt-get update這個也是天坑—根本解決不了這個問題的。

核心:請試用ss+polipo實現全局 科學上網 ,同時更改源地址,網易的,阿里的都可以,最重要的是將索引的ip都添加進去,界面方式實現的話只有一個ip。

# 正常情況.
sudo apt-get install nvidia-docker2
sudo pkill -SIGHUP dockerd

正常的情況下實現很簡單的,但是重點是基本這一步的問題都是找不到與nvidia-docker2文件子類的。

解決方法,不能科學上網的話,嗯,到此基本上就死了。問題就是源庫-鏡像源庫找不到對應的文件,所以失敗…

多次嘗試還不成功,請務必使用:‘sudo apt-get update --fix-missing’,保證中間的環節不出問題亦可安裝!

nvidia-docker2的鏡像拉取

  • 實現測試nvidia-docker2時候安裝成功.
docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi

# 其實我認爲完全沒有必要,要相信自己!
nvidia-smi
docker run --runtime=nvidia --rm hello-world

因爲沒有鏡像文件,所以會下載,cuda鏡像,這個大概會下載1h+…

顯示的是顯卡狀況,只要彈出unable/unlocal,然後會下載一串文件就是正常安裝的。

# 只是檢查驅動可以這樣...
nvidia-smi

# 每秒刷新10次,可以這樣!
watch -n 0.1 -d nvidia-smi
  • 拉取鏡像
#拉取之前可以查看有哪些鏡像,或者搜索一下有哪些鏡像。
# 拉取TensorFlow-gpu鏡像
sudo docker run -it tensorflow/tensorflow:latest-gpu 
  • 搜索鏡像
sudo docker search tensorflow-gpu

nvidia-docker2的鏡像/TensorFlow環境的運行.

  • 比如,我寫好了一個py程序,我需要 該程序 在我的tensorflow-gpu-py3的鏡像中運行.
# 首先我需要加載鏡像.
docker run tensorflow-gpu-py3 #顯然使用這種格式運行是不可行的,因爲沒有制定好nvidia-docker2的運行環境,除非已經設置好配置文件.

# 使用交互方式方式:-it;後臺方式:-d,-p指定端口.
docker run --runtime=nvidia -it -p 8888:8888 tensorflow/tensorflow:tensorflow-gpu-py3

# 若不小心關閉了,如何進入容器.
sudo docker ps -a 

# 找到容器的一串id,如:62fflkee1e1,鍵入如下,即可進入. 
sudo docker exec -it 62fflkee1e1 /bin/bash 

# 複製文件到容器之中:docker cp 源路徑 目標路徑 
docker cp ~/MyTest.py mycontainerID:/opt/MyWorK/

# 調換源路徑/目標路徑,效果可逆.

# 容器id=d9b10f2f636,運行/停止/刪除容器.
docker start/stop/rm d9b10f2f636
  • 進入容器之後,顯示如下:
root@d9b10f2f636:
# 運行我們的Mytest 文件.
python3 /opt/MyWorK/MyTest.py

# 其他直接在加載鏡像時候即可運行不列舉.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章