保持更新版本迁移至 - 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,版本相对较旧.
命令行操作过程如下:
sudo apt-get update sudo apt-get -y install docker.io sudo service docker.io status (检查Docker服务的状态) sudo docker run hello-world (测试Docker安装是否成功) 采用官网安装方式可以获取最新版本Docker. 在安装Docker之前需要配置Docker官方仓库,然后从该仓库进行获取与安装.
首先,进行Docker仓库设置:
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo apt-key fingerprint 0EBFCD88 sudo add-apt-repository “deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable” 然后, 安装Docker:
sudo apt-get update sudo apt-get install docker-ce sudo docker run hello world 1.2 阿里云加速器设置 由于官方Docker Hub 网络速度较慢,这里使用阿里云提供的Docker Hub. 需要配置阿里云加速器,官方说明如下:
针对Docker客户端版本大于1.10的用户:
您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器:
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-‘EOF’
{
“registry-mirrors”: [“https://fird1mfg.mirror.aliyuncs.com “]
}
EOF sudo systemctl daemon-reload sudo systemctl restart docker 针对Docker客户的版本小于等于1.10的用户:
或者想配置启动参数,可以使用下面的命令将配置添加到docker daemon的启动参数中.
Ubuntu 12.04 14.04的用户:
echo “DOCKER_OPTS=\”$DOCKER_OPTS –registry-mirror=https://fird1mfg.mirror.aliyuncs.com \”” | sudo tee -a /etc/default/docker sudo service docker restart
Ubuntu 15.04 16.04的用户
sudo mkdir -p /etc/systemd/system/docker.service.d 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 sudo systemctl daemon-reload sudo systemctl restart 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
wget -P /tmp https://github.com/NVIDIA/nvidia-docker/releases/download/v1.0.1/nvidia-docker_1.0.1-1_amd64.deb sudo dpkg -i /tmp/nvidia-docker*.deb && rm /tmp/nvidia-docker*.deb #Test nvidia-smi
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 ]