Ubuntu深度学习的相关配置

tensorflow

在 Ubuntu 上跑 TensorFlow GPU,驱动、Docker、nvidia-container-toolkit 少一环都白搭。我当年是 19.10,源和文档对不上号,下面按实际踩过的顺序记一遍。

安装NVIDIA驱动

没驱动,nvidia-smi 都没有,后面容器也用不上 GPU。

  1. 查看显卡信息
ubuntu-drivers devices
  1. 自动安装显卡驱动
sudo ubuntu-drivers autoinstall

装完必须重启。若和 nouveau 冲突,有时要先 blacklist nouveau 再装闭源驱动。

  1. 确认是否安装成功
nvidia-smi

能看到 GPU 型号和驱动版本再继续。

安装docker

安装文档

使用阿里源安装

# step 1: 安装必要的一些系统工具
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common

# step 2: 安装GPG证书
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

# Step 3: 写入软件源信息
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

# Step 4: 更新并安装Docker-CE
sudo apt-get -y update
sudo apt-get -y install docker-ce

# 安装指定版本的Docker-CE:

# Step 1: 查找Docker-CE的版本:
# apt-cache madison docker-ce
#   docker-ce | 17.03.1~ce-0~ubuntu-xenial | http://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
#   docker-ce | 17.03.0~ce-0~ubuntu-xenial | http://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
# Step 2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.1~ce-0~ubuntu-xenial)
# sudo apt-get -y install docker-ce=[VERSION]

tips: 由于使用的是19.10版本,暂时没有对应的源,故手动将step 3切换至19.04

新 Ubuntu 发行版刚出时,镜像站可能还没同步对应 codename,用邻近版本源凑合是常见 workaround,装完记得测 docker run hello-world

sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu disco stable"

安装NVIDIA Container Toolkit

让 Docker 容器里能访问 GPU,光有宿主机驱动不够,还要 toolkit(旧称 nvidia-docker2)。

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

测试

拉官方 GPU 镜像跑一行 TF,能打出张量求和结果就说明链路通了:

sudo docker run --gpus all -it --rm tensorflow/tensorflow:latest-gpu-py3    python -c "import tensorflow as tf; print(tf.reduce_sum(tf.random.normal([1000, 1000])))"

第一次 pull 镜像很大,耐心等。

装载工作目录至容器

开发时把宿主机代码挂进容器,改文件不用反复 docker commit

docker run --gpus all -itd --name tf --rm -v $PWD:/tmp -w /tmp tensorflow/tensorflow:latest-gpu-py3

以上命令在后台创建了一个支持GPU的tensorflow:latest-gpu-py3容器,将其命名为tf(方便后面容器操作),并将工作目录切换至主机当前目录。

docker exec -it tf bash 进容器调试;--rm 停容器就删,重要数据别只放容器里。

装载工作目录至tensorflow容器

参考资料

Ubuntu 18.04 安装NVIDIA驱动 实践

tensorflow官网

版权声明: 本文首发于 指尖魔法屋-Ubuntu深度学习的相关配置https://blog.thinkmoon.cn/post/638-deep-learning-config-guide-ubuntu/) 转载或引用必须申明原指尖魔法屋来源及源地址!