搭建GPU版PyTorch Docker镜像

北慕城南 提交于 2019-12-04 08:29:45

提要: 记录手动搭建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的效果是一致的。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!