Docker - 基于NVIDIA-Docker的Caffe-GPU环境搭建

自闭症网瘾萝莉.ら 提交于 2019-12-07 23:25:24

保持更新版本迁移至 - Docker - 基于NVIDIA-Docker的Caffe-GPU环境搭建

主要包括两部分:
1. Docker与NVIDIA-Docker的安装与配置
2. Caffe镜像使用

1 Docker与NVIDIA-Docker的安装与配置

1.1 Docker安装

Docker安装过程需要使用root权限, 主要有两种安装方式:

1.1.1 Ubuntu14.04 软件源安装

使用Ubuntu14.04系统默认自带的docker.io安装包安装Docker,版本相对较旧.
命令行操作过程如下:

  1. sudo apt-get update
  2. sudo apt-get -y install docker.io
  3. sudo service docker.io status (检查Docker服务的状态)
  4. sudo docker run hello-world (测试Docker安装是否成功)

1.1.2 Docker官网安装

采用官网安装方式可以获取最新版本Docker. 在安装Docker之前需要配置Docker官方仓库,然后从该仓库进行获取与安装.
首先,进行Docker仓库设置:

  1. sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
  2. curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
  3. sudo apt-key fingerprint 0EBFCD88
  4. sudo add-apt-repository “deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable”

然后, 安装Docker:

  1. sudo apt-get update
  2. sudo apt-get install docker-ce
  3. sudo docker run hello world

1.2 阿里云加速器设置

由于官方Docker Hub网络速度较慢,这里使用阿里云提供的Docker Hub. 需要配置阿里云加速器,官方说明如下:

  1. 针对Docker客户端版本大于1.10的用户:
    您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器:

    1. sudo mkdir -p /etc/docker
    2. sudo tee /etc/docker/daemon.json <<-‘EOF’
      {
      “registry-mirrors”: [“https://fird1mfg.mirror.aliyuncs.com“]
      }
      EOF
    3. sudo systemctl daemon-reload
    4. sudo systemctl restart docker
  2. 针对Docker客户的版本小于等于1.10的用户:
    或者想配置启动参数,可以使用下面的命令将配置添加到docker daemon的启动参数中.
    Ubuntu 12.04 14.04的用户:

    1. echo “DOCKER_OPTS=\”$DOCKER_OPTS –registry-mirror=https://fird1mfg.mirror.aliyuncs.com\”” | sudo tee -a /etc/default/docker
    2. sudo service docker restart

    Ubuntu 15.04 16.04的用户

    1. sudo mkdir -p /etc/systemd/system/docker.service.d
    2. sudo tee /etc/systemd/system/docker.service.d/mirror.conf <<-‘EOF’
      [Service]
      ExecStart=/usr/bin/docker daemon -H fd:// –registry-mirror=https://fird1mfg.mirror.aliyuncs.com
      EOF
    3. sudo systemctl daemon-reload
    4. sudo systemctl restart docker

1.3 NVIDIA-Docker安装

  • Prerequisties

    GNU/Linux x86_64 with kernel version > 3.10
    Docker >= 1.9 (official docker-engine, docker-ce or docker-ee only)
    NVIDIA GPU with Architecture > Fermi (2.1)
    NVIDIA drivers >= 340.29 with binary nvidia-modprobe (驱动版本与CUDA计算能力相关)

  • CUDA与NVIDIA driver安装
    处理NVIDIA-Docker依赖项 NVIDIA drivers >= 340.29 with binary nvidia-modprobe 要求.
    根据显卡,下载对应版本的CUDA并进行安装.

  • NVIDIA-Docker安装

    #Install nvidia-docker and nvidia-docker-plugin

    1. wget -P /tmp https://github.com/NVIDIA/nvidia-docker/releases/download/v1.0.1/nvidia-docker_1.0.1-1_amd64.deb
    2. sudo dpkg -i /tmp/nvidia-docker*.deb && rm /tmp/nvidia-docker*.deb

    #Test nvidia-smi

    1. sudo nvidia-docker run –rm nvidia/cuda nvidia-smi

2. Caffe镜像使用

这里使用阿里云的镜像服务.,从Docker注册服务器的Docker仓库下载一个已有的Docker镜像.

# 登录阿里云
1. sudo nvidia-docker login registry.aliyuncs.com

Username: **********
Password: **********

# 拉取Caffe镜像
2. sudo nvidia-docker pull registry.cn-hangzhou.aliyuncs.com/docker_learning_aliyun/caffe:v1

# 查看拉取的Caffe镜像信息
3. sudo nvidia-docker images

输出信息:

# 查看Caffe镜像的显卡信息
4. sudo nvidia-docker run -it registry.cn-hangzhou.aliyuncs.com/docker_learning_aliyun/caffe:v1 nvidia-smi

输出信息:

# 进入容器,操作类似于Ubuntu系统,默认进入容器内的 /workspace 目录
5. sudo nvidia-docker run -it registry.cn-hangzhou.aliyuncs.com/docker_learning_aliyun/caffe:v1 /bin/bash

# 基于容器Caffe镜像运行python程序
6. sudo nvidia-docker run –volume=$(pwd):/workspace –volume=/path/to/data:/data –rm caffe-image:base python demo.py

实例说明:
1. nvidia-docker run:运行镜像
2. –volume=$(pwd):/workspace –volume=/path/to/data:/data: 将主机的路径挂载到容器中, “:”前后分别为为主机目录和容器路径
3. -rm: 运行镜像后删除
4. caffe-image:base: Caffe镜像.
5. python demo.py: python程序运行,类似于Ubuntu环境.

3. Docker 错误解决

3.1 python 提示错误UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position

错误:

# docker 中 python 代码的 print(“中文”) 出现错误,但宿主机不会出现该错误,如下:
UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 0-127: ordinal not in range(128)

错误原因:

因为locale 的设置导致 shell 的stdin/stdout/stderr 的默认编码为ascii,当用ascii编码去解释python3默认unicode编码的时候,则会有问题

解决方法:

# python3 的解决方式是 容器在初始化时候 需要设置shell的stdin/stdout/stderr 的默认编码方式为 utf-8,需要重启容器
# docker run 方式
docker run -e PYTHONIOENCODING=utf-8 m_container:latest my-python3

# docker-compose 方式
environment:
- PYTHONIOENCODING=utf-8

[From docker python 提示错误UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position]

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