搭建GPU版PyTorch Docker鏡像

提要: 記錄手動搭建GPU版PyTorch Docker鏡像的過程。本地主機已經裝好了顯卡驅動,CUDA, cuDNN, 因此不再累述。本篇博客覆蓋以下內容:

  • Docker常用命令
  • 搭建GPU版PyTorch鏡像

Docker常用命令

  • ubuntu安裝步驟
$ apt-get update
$ apt-get -y install docker.io
# 檢查Docker服務的狀態
$ service docker.io status
# 一般顯示 docker.io start/running, process xxxxx
#
# 把Docker安裝爲自啓動服務,讓它隨服務器的啓動而自動運行
update-rc.d docker.io defaults
#
# 測試Docker安裝成功
docker run hello-world
# 如果本地沒有hello-world鏡像,會自動拉去一個
  • Docker常用命令
### 顯示版本信息 (與python, nvcc相比少了兩個‘--’)
$ docker version

### 瞭解當前Docker的使用狀態(當前容器,鏡像數目信息,存儲空間佔用信息,
# OS內核版本, 發行版本, 硬件資源等)
$ docker info

### 拉去一個鏡像 ( xxxx 表示某個鏡像名字,)
$ docker pull xxxx
# e.g.
# docker pull ubuntu

### 查看系統中已有的鏡像(images要帶‘s')
$ docker images
# e.g.:
# REPOSITORY  TAG    IMAGES ID   CREATED VIRTUAL SIZE
# ubuntu      latest 4ef6axxxxx   5 day ago  84.0M

### 從鏡像創建docker容器
$ docker run -i -t ubuntu /bin/bash 
# or
$ docker run -it 4ef /bin/bash
# 其中 -i, 交互模式,讓輸入輸出都在標準控制檯進行;-d,則進入後臺
# -t, 爲新創建的容器分配一個僞終端
# ubuntu, 用於創建容器的鏡像名,可用ID來代替(前3位足夠)
# /bin/bash, 在新建容器中運行的命令,可以爲任意Linux命令

### 離開當前容器,返回宿主機終端,使用組合鍵 "Ctrl+P" 和 "Ctrl+Q"

### 查看當前活動的容器
$ docker ps
# CONTAINER ID  IMAGE  COMMAND  CREATED   STATUS   PORTS NAME
# 610xxxx  ubuntu:latest  "/bin/bash" 1 minute ago Up 1 minute ago prickly_wilson

### 宿主機終端與某個容器建立連接
$ docker attach 610

### 從容器創建Docker鏡像
$ docker commit -m "hhahaha" 610 ubuntu:hhh
# -m, 新鏡像說明
# 610, 某個容器的ID
# ubuntu:hhh, 命名最好不要這麼隨意
# 那麼接下來可以查看新生成的鏡像,命令 docker images

### 基於新的鏡像創建一個新的容器(一樣的)
$ docker run -it ubuntu:hhh /bin/bash

### 給鏡像重命名(方便記憶)
$ docker tag IMAGEID(image id) REPOSITORY:TAG

### 給容器重命名
$ docker rename old-container-name new-container-name

搭建GPU版PyTorch鏡像

首先要安裝docker, 其次要安裝nvidia docker, 接着安裝python, numpy, 最後安裝pytorch並檢驗安裝效果。安裝docker在前文中,不再累述。

  • 安裝nvidia docker2
    安裝nvidia docker2 是爲了拉取鏡像nvidia/cuda,該鏡像裏包含了相應版本的CUDA和cuDNN,所以就不必再安裝CUDA和cuDNN了,方便了不少。安裝命令參考這裏[https://github.com/NVIDIA/nvidia-docker], 這裏給列出如下:
# If you have nvidia-docker 1.0 installed: we need to remove it # and all existing GPU containers
$ docker volume ls -q -f driver=nvidia-docker | xargs -r -I{} -n1 docker ps -q -a -f volume={} | xargs -r docker rm -f
$ sudo apt-get purge -y nvidia-docker

# Add the package repositories
$ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \
$   sudo apt-key add -
$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
$ curl -s -L https://nvidia.github.io/nvidia-docker/distribution/nvidia-docker.list | \
$   sudo tee /etc/apt/sources.list.d/nvidia-docker.list
$ sudo apt-get update

# Install nvidia-docker2 and reload the Docker daemon configuration
$ sudo apt-get install -y nvidia-docker2
$ sudo pkill -SIGHUP dockerd

# Test nvidia-smi with the latest official CUDA image
$ docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi

# here nvidia-docker has been installed.

這是最終參考效果
這裏寫圖片描述
可以看到其中的 nvidia/cuda,接下來基於這個鏡像創建一個容器

$ nvidia-docker run -it xxx /bin/bash
# 其中xxx,表示鏡像ID
# 效果是終端變爲:root@xxxxxxx:
  • 安裝python, numpy
# 首先更新源
$ apt-get update

# 查看python版本
$ apt-cache madison python
# 選擇一個版本,比如 2.7.12-1~16.04

# 安裝python 
$ apt-get install python=2.7.12-1~16.04
# 安裝pip, 如果是python2.7,最好不要更新pip
$ apt-get install python-pip

# 安裝numpy
$ pip install numpy
  • 安裝pytorch
    安裝命令在pytorch[https://pytorch.org/]首頁已經給出. 如果命令能夠安裝固然好,如果下載失敗,就需要先下載下來,再安裝。本博主是根據地址給下載下來在安裝的
pip install torch-0.4.1-cp27-cp27mu-manylinux1_x86_64.whl 

到這裏就算安裝結束了,不過最好還是驗證一下。

  • 驗證安裝效果
$ python
$ import torch
$ print torch.cuda.is_available()
# if 'True', congratulation; if 'False', please check again and again.

參考圖片效果這裏寫圖片描述

  • 生成鏡像
    生成鏡像之後,鏡像可以放在相同配置的機子上,非常方便,節省配置時間.
$ nvidia-docker commit -m 'hhhh' xxx xxxx

需要說明的是,如果nvidia docker安裝成功了,nvidia-docker 和docker的效果是一致的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章