保持更新版本迁移至 - 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安装是否成功)
1.1.2 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
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
- 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.comUsername: **********
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]
来源:CSDN
作者:AIHGF
链接:https://blog.csdn.net/oJiMoDeYe12345/article/details/72578273