提要: 记录手动搭建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的效果是一致的。
来源:CSDN
作者:mumoDM
链接:https://blog.csdn.net/mumoDM/article/details/82503022