1 前期准备
本文使用docker在Linux系统中配置tensorflow-gpu的运行环境, 下面是操作系统和显卡的具体情况. 因为使用docker, 配置过程非常简单, 需要详细说明的就两部分: 1) 安装nvidia显卡驱动; 2) 使用docker配置运行环境.
- 操作系统: ubuntu-18.04
- 显卡: RTX-2060SUPER
2 ubuntu-18.04安装nvidia显卡驱动
- 使用ubuntu软件仓库安装
- 使用PPA第三方软件仓库安装
- 下载官网驱动+手动安装
- 使用ubuntu的软件更新器安装
在ubuntu中安装n卡驱动的方法有以上几种, 本文选择第1种方法, 如果想尝试使用其他几种方法安装, 可以参考另外一篇文章, Ubuntu 18.04 安装 NVIDIA 显卡驱动.
2.1 修改apt的镜像源
在使用ubuntu软件仓库安装显卡驱动之前, 建议先确定apt是否使用的是国内镜像源, 以保证下载速度. 使用命令cat /etc/apt/sources.list
可以查看apt的镜像源配置文件, 如果输出与下面类似, 就代表当前使用的镜像源为非国内镜像源.
#deb cdrom:[Ubuntu 18.04.4 LTS _Bionic Beaver_ - Release amd64 (20200203.1)]/ bionic main restricted
# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb http://cn.archive.ubuntu.com/ubuntu/ bionic main restricted
# deb-src http://cn.archive.ubuntu.com/ubuntu/ bionic main restricted
修改镜像源只需要两步:
- 修改镜像源配置文件
/etc/apt/sources.list
, 将配置文件中原本的内容删除, 并将以下内容复制到其中.
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
- 使用命令
sudo apt-get update
和sudo apt-get upgrade
进行更新(两条命令的作用不同).
2.2 安装驱动
使用命令ubuntu-drivers devices
查看显卡型号与可用驱动, 结果如下:
上图分别输出了核显和独显的情况, 并指出n卡有3个可用驱动, 其中nvidia-driver-440为推荐驱动.
- 如果同意安装推荐版本, 只需要使用命令
sudo ubuntu-drivers autoinstall
即可自动安装. - 另外, 也可以使用命令
sudo apt install nvidia-435
安装其他想安装的版本.
安装完成后, 重启系统, 然后使用nvidia-smi
命令确认安装是否成功, 以下是成功安装的结果. 因为已经设置了核显输出图形界面, 所以n卡暂时没用占用.
3 安装docker与使用docker配置运行环境
所谓Docker, 就是一个开源的应用容器引擎, 可以让开发者打包其应用和依赖包到一个可移植的容器中. 本文之所以使用docker, 是为了省去配置cuda和cudnn的麻烦. tensorflow官方提供了各种版本的docker镜像, 这些镜像中已经安装了tensorflow-gpu和对应的cuda, cudnn. 在安装好n卡驱动的条件下, 简单配置docker即可使用镜像生成包含tensorflow-gpu运行环境的容器.
3.1 docker的安装
docker官网安装教程中介绍了多种安装方法, 本文使用下载.deb软件包安装的方法.
- 打开链接https://download.docker.com/linux/ubuntu/dists/, 选择子目录bionic/pool/stable, 然后按照所用处理器的架构进行选择, 最后下载想要安装的软件包.
- 使用命令
sudo dpkg -i /path/to/package.deb
进行安装. - 安装完成后, 与apt, pip等工具相同, docker也需要配置仓库(保证下创建载速度). 其配置文件的路径为
/etc/docker/daemon.json
. 配置时, 首先使用以下内容覆盖原内容, 然后用命令systemctl daemon-reload
,systemctl restart docker
完成更新.
{
"registry-mirrors": ["https://alzgoonw.mirror.aliyuncs.com"]
}
- 最后, 使用
docker version
查看docker的版本信息; 使用docker run hello-world
测试docker. (运行docker命令时都需要加上sudo, 为了方便, 可以使用命令sudo gpasswd -a ${USER} docker
将指定用户加入到docker用户组中).
docker version
docker run hello-world
3.2 docker的基本概念与使用
在docker中, 有两个重要的概念: 镜像(image)和容器(container). 如果使用过虚拟机, 对于镜像和容器的概念应该能很快地理解. 所谓镜像, 就相当于一个静态存储的虚拟机, 其中包含了虚拟机已有的各种配置; 而容器则是镜像实例化之后的产物, 可以理解为一个动态运行的虚拟机. 不同的是, 容器相对于虚拟机更为轻量级, 使用起来也更为灵活.
试想, 如果有了1个已配置好tensorflow-gpu和相应cuda, cudnn的镜像, 那么就能通过该镜像运行一个容器, 然后即可在该容器中运行tensorflow-gpu程序. 当该容器尚不能满足运行要求时, 例如还缺少其他包, 也可以在原有的基础上进行配置, 然后将容器存储为新的镜像, 以实现运行环境的复用. 以下是一些必要的docker命令(都需要root权限).
- 查看当前使用docker的详细信息:
docker version
. - 列出已有镜像:
docker image ls
. - 下载镜像:
docker image pull [image-name]
. - 删除镜像:
docker image rm [image-name]
, 若该镜像已被用于某些容器, 则无法删除. - 列出已有容器:
docker container ls -a
, 如果不要-a, 则只会创建列出正在运行的容器. - 使用镜像创建容器:
docker run [options] [image-name] [command]
. 该命令中, [options]为一些可选项:--name container-name
(设置容器名),-it
(交互式运行[command]),-v path-a:path-b
(将真实系统的路径path-a挂载到容器的路径path-b下),-w path-a
(设置容器的工作路径). 另外, [command]则为容器创建后运行的首条命令. - 使用已运行容器:
docker exec [options] [container-name] [command]
, 该命令与上1条命令类似, 但[options]有一些不同. - 运行已停止容器:
docker start [container-name]
. - 停止运行容器:
docker stop [container-name]
. - 删除容器:
docker container rm [container-name]
, 若该容器正在运行, 则无法删除. - 保存容器为镜像:
docker commit [container-name] [new-image-name]
. - 保存镜像为文件:
docker save -o [file-name] [image-name]
. - 加载本地镜像:
docker load -i [file-name]
.
3.3 配置tensorflow-gpu运行环境
该部分完全参考Tensorflow-gpu Docker官网安装教程, 如条件允许, 建议直接看该教程.
3.3.1 安装NVIDIA Docker
NVIDIA Docker其实就是在原生docker之上增加了一部分功能, 可以让容器直接使用机器的n卡. 安装过程如下(摘抄自NVIDIA Docker支持).
# Add the package repositories
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
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 && sudo apt-get install -y nvidia-container-toolkit
sudo systemctl restart docker
3.3.2 下载镜像与容器运行
本文的最后一部分是使用以上安装的东西配置tensorflow-gpu运行环境的方法, 根据docker部分的介绍, 也就是两部分: 下载镜像, 创建与使用容器.
Tensorflow官方提供了各种版本的Tensorflow Docker镜像, 具体情况可以通过官网安装教程查询. 命令docker image pull tensorflow/tensorflow:latest-gpu-py3
可以下载最新版本的Tensorflow Docker镜像, 该镜像的tensorflow为gpu版本, 使用python3. 获得需要的镜像后, 使用命令docker run --gpus all --name tf2-py3 -it tensorflow/tensorflow:latest-gpu-py3 /bin/bash
即可创建对应容器.
网友评论