Aufbau einer GPU-Umgebung mit Docker [Version Oktober 2020]

Überblick

In diesem Artikel verwenden wir Docker, um eine Umgebung für tensorflow2.3 + Python3.8 zu erstellen. Sie können problemlos eine Umgebung erstellen, indem Sie den Inhalt dieses Artikels in die entsprechenden CUDA- und Python-Versionen aller TensorFlow- oder PyTorch-Versionen umschreiben. Da es eine Mischung aus Artikeln zum Aufbau einer GPU-Umgebung mit Docker gibt, werde ich das, was ich ab Oktober 2020 getan habe, mit einem Memorandum organisieren.

In diesem Artikel habe ich "Python3.8" und "Poetry" basierend auf dem Image "nvidia / cuda: 10.1-cudnn7-devel-ubuntu18.04" installiert und Poetry in der virtuellen Umgebung verwendet, um "tensorflow2.3" auszuführen. Es installieren.

Zielgruppe

--Docker Anfänger

Umgebung

Die folgenden 1 ~ 3 scheinen in diesem Artikel einfacher zu sein (ich habe es selbst nicht ausprobiert) [Was ist jetzt mit NVIDIA Docker los? (Version 20.09)](https://medium.com/nvidiajapan/nvidia-docker-%E3%81%A3%E3%81%A6%E4%BB%8A%E3%81%A9%E3%81%86 % E3% 81% AA% E3% 81% A3% E3% 81% A6% E3% 82% 8B% E3% 81% AE-20-09-% E7% 89% 88-558fae883f44)

1. Installieren Sie den NVIDIA-Treiber

Überprüfen Sie den GPU-Typ (überprüfen Sie, ob es einen von NVIDIA hergestellten gibt).

$ lspci | grep VGA
03:00.0 VGA compatible controller: NVIDIA Corporation Device 1b80 (rev a1)
04:00.0 VGA compatible controller: NVIDIA Corporation Device 1b80 (rev a1)

Wenn Sie den NVIDIA-Treiber bereits installiert haben, entfernen Sie ihn.

$ dpkg -l | grep nvidia-
$ sudo apt-get purge nvidia-*

Fügen Sie das Treiber-Repository hinzu.

$ sudo add-apt-repository ppa:graphics-drivers/ppa
$ sudo apt update

Überprüfen Sie den empfohlenen Treiber.

$ sudo ubuntu-drivers devices
== /sys/devices/pci0000:00/0000:00:03.0/0000:04:00.0 ==
modalias : pci:v000010DEd00001B80sv00001462sd0000336Bbc03sc00i00
vendor   : NVIDIA Corporation
driver   : nvidia-430 - third-party free recommended
driver   : nvidia-415 - third-party free
driver   : xserver-xorg-video-nouveau - distro free builtin

Installieren Sie das empfohlene nvidia-430.

$ sudo apt-get install nvidia-driver-430
$ sudo ubuntu-drivers autoinstall

Starten Sie das Betriebssystem neu.

$ sudo reboot

Überprüfen Sie, ob der NVIDIA-Treiber erfolgreich installiert wurde.

$ nvidia-smi
Thu Oct 15 16:49:51 2020       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 430.64       Driver Version: 430.64       CUDA Version: 10.1     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GTX 1080    Off  | 00000000:03:00.0 Off |                  N/A |
| 28%   40C    P8    10W / 180W |      2MiB /  8119MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   1  GeForce GTX 1080    Off  | 00000000:04:00.0  On |                  N/A |
| 28%   41C    P8    13W / 180W |    533MiB /  8085MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    1      1247      G   /usr/lib/xorg/Xorg                           422MiB |
|    1      1583      G   compiz                                       108MiB |
+-----------------------------------------------------------------------------+

2. Installieren Sie Docker

Sie können Docker gemäß Official Document installieren. Das Folgende ist ein Kopieren und Einfügen eines Teils des offiziellen Dokuments. Bitte lesen Sie das Dokument für Details.

SET UP THE REPOSITORY 1. Update the apt package index and install packages to allow apt to use a repository over HTTPS:

$ sudo apt-get update
$ sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common

2. Add Docker’s official GPG key:

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo apt-key fingerprint 0EBFCD88
pub   rsa4096 2017-02-22 [SCEA]
      9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
uid           [ unknown] Docker Release (CE deb) <[email protected]>
sub   rsa4096 2017-02-22 [S]

3. Use the following command to set up the stable repository.

$ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

INSTALL DOCKER ENGINE 1. Update the apt package index, and install the latest version of Docker Engine and containerd, or go to the next step to install a specific version:

 $ sudo apt-get update
 $ sudo apt-get install docker-ce docker-ce-cli containerd.io

3. Verify that Docker Engine is installed correctly by running the hello-world image.

$ sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
0e03bdcc26d7: Pull complete 
Digest: sha256:8c5aeeb6a5f3ba4883347d3747a7249f491766ca1caa47e5da5dfcf6b9b717c0
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
...

Überprüfen Sie, ob Docker korrekt installiert ist.

$ dpkg -l | grep -e docker -e containerd.io
ii  containerd.io                                            1.3.7-1                                       amd64        An open and reliable container runtime
ii  docker-ce                                                5:19.03.13~3-0~ubuntu-xenial                  amd64        Docker: the open-source application container engine
ii  docker-ce-cli                                            5:19.03.13~3-0~ubuntu-xenial                  amd64        Docker CLI: the open-source application container engine
$ sudo docker version
Client: Docker Engine - Community
 Version:           19.03.13
 API version:       1.40
 Go version:        go1.13.15
 Git commit:        4484c46d9d
 Built:             Wed Sep 16 17:02:59 2020
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.13
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.13.15
  Git commit:       4484c46d9d
  Built:            Wed Sep 16 17:01:30 2020
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.3.7
  GitCommit:        8fba4e9a7d01810a393d5d25a3621dc101981175
 runc:
  Version:          1.0.0-rc10
  GitCommit:        dc9208a3303feef5b3839f4323d9beb36df0a9dd
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683
$ sudo docker images
REPOSITORY          TAG                             IMAGE ID            CREATED             SIZE
hello-world         latest                          bf756fb1ae65        9 months ago        13.3kB

[Optional] Ermöglicht die Ausführung von Docker-Befehlen ohne sudo.

$ sudo usermod -aG docker $USER

3. Installieren Sie das NVIDIA Container Toolkit

Mit dem Update vom September 2020 müssen Sie anscheinend nur noch "nvidia-docker2" installieren. ([Was passiert jetzt mit NVIDIA Docker? (Version 20.09)](https://medium.com/nvidiajapan/nvidia-docker-%E3%81%A3%E3%81%A6%E4%BB%8A % E3% 81% A9% E3% 81% 86% E3% 81% AA% E3% 81% A3% E3% 81% A6% E3% 82% 8B% E3% 81% AE-20-09-% E7% 89% 88-558fae883f44))) (Wenn Sie "nvidia-docker2" installieren, wird auch "nvidia-container-toolkit" installiert.)

$ 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-docker2
$ sudo systemctl restart docker

4. Erstellen Sie mit Docker eine Umgebung für Tensorflow2.3 + Python3.8

Schreiben Sie den folgenden Inhalt in Dockerfile_gpu. Wählen Sie die Version von CUDA und cuDNN entsprechend der Version des Frameworks aus, das Sie installieren möchten. Hier gemäß Tensorflow2.3 Bild von CUDA10.1 + cuDNN7. Basierend auf 04).

Dockerfile_gpu


FROM nvidia/cuda:10.1-cudnn7-devel-ubuntu18.04

ENV DEBIAN_FRONTEND noninteractive

RUN apt-get update && apt-get install -y --no-install-recommends tzdata
RUN apt-get update && apt-get install -y --no-install-recommends \
    wget \
    curl \
    make \
    build-essential \
    libssl-dev \
    zlib1g-dev \
    libbz2-dev \
    libreadline-dev \
    libsqlite3-dev \
    llvm \
    libncurses5-dev \
    libncursesw5-dev \
    xz-utils \
    tk-dev \
    libffi-dev \
    liblzma-dev \
    vim \
    graphviz

ENV TZ Asia/Tokyo

WORKDIR /root/
RUN wget https://www.python.org/ftp/python/3.8.5/Python-3.8.5.tar.xz \
    && tar xvf Python-3.8.5.tar.xz \
    && cd Python-3.8.5 \
    && ./configure --enable-optimizations \
    && make install
RUN rm Python-3.8.5.tar.xz

WORKDIR /root/Python-3.8.5
RUN ln -fs /root/Python-3.8.5/python /usr/bin/python
RUN curl -kL https://bootstrap.pypa.io/get-pip.py | python 
RUN rm -rf /var/lib/apt/lists/*

RUN curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python
ENV SHELL /bin/bash -l

ENV POETRY_CACHE /work/.cache/poetry
ENV PIP_CACHE_DIR /work/.cache/pip

RUN $HOME/.poetry/bin/poetry config virtualenvs.path $POETRY_CACHE

ENV PATH ${PATH}:/root/.poetry/bin:/bin:/usr/local/bin:/usr/bin

CMD ["bash", "-l"]

Schreiben Sie den folgenden Inhalt in Makefile (schreiben Sie IMAGE_NAME entsprechend um).

Makefile


FOLDER=$$(pwd)
IMAGE_NAME=test:latest

.PHONY: build-gpu
build-gpu: # Build docker image
    echo "Building Dockerfile"
    docker build -t ${IMAGE_NAME} . -f Dockerfile_gpu

.PHONY: start-gpu
start-gpu: build-gpu # Start docker container
    echo "Starting container ${IMAGE_NAME}"
    docker run --gpus all --rm -it -v ${FOLDER}:/work -w /work ${IMAGE_NAME}

Erstellen Sie ein Docke-Image, um einen Docker-Container zu erstellen.

$ make start-gpu

Installieren Sie tensorflow-gpu 2.3 mit Poetry.

# poetry init
# poetry add tensorflow-gpu==2.3

Führen Sie eine beliebige Datei aus.

# poetry run python file_name.py

Zusammenfassung

In diesem Artikel habe ich das Verfahren zum Erstellen einer Umgebung für Tensorflow2.3 + Python3.8 mithilfe von Docker in einem Memorandum zusammengefasst. Es ist praktisch, nur den NVIDIA-Treiber, Docker und das NVIDIA Container Toolkit auf dem Host-Betriebssystem zu installieren. In diesem Artikel wurde TensorFlow mit Poetry installiert, aber es ist natürlich in Ordnung, die Pip-Installation mit Dockerfile durchzuführen.

Troubleshooting apt update Fehler im Zusammenhang mit Google Chrome https://sicklylife.hatenablog.com/entry/2017/08/08/193118

Listendatei "konnte nicht geöffnet werden" aufgrund des Fehlers "Berechtigung verweigert" https://askubuntu.com/a/1146593

nouveau Deaktivieren Sie den Jugendstil https://qiita.com/kawazu191128/items/8a46308be6949f5bda57#nouveau%E7%84%A1%E5%8A%B9%E5%8C%96

apt-get install nvidia-driver-300 Wenn UEFI Secure Boot aktiviert ist, müssen Sie Secure Boot deaktivieren oder einen Schlüssel festlegen.

Temporary failure resolving '....com' https://github.com/moby/moby/issues/5779#issuecomment-323433618

Geben Sie den DNS-Server an

https://mzryuka.hatenablog.jp/entry/2019/08/07/235613

Recommended Posts

Aufbau einer GPU-Umgebung mit Docker [Version Oktober 2020]
[Docker] Rails 5.2-Umgebungskonstruktion mit Docker
Erstellen Sie die Node.js-Umgebung mit Docker Compose
Umgebungsbau mit Docker für Anfänger
[Umgebungskonstruktion mit Docker] Rails 6 & MySQL 8
Schienenumgebungskonstruktion mit Docker (persönliche Apokalypse)
Aufbau einer Laravel-Entwicklungsumgebung mit Docker (Mac)
Erstellen einer Umgebung für Laravel + MySQL + phpMyadmin mit Docker
Aufbau der Rails Docker-Umgebung
Konstruktions- und Entwicklungsverfahren für lokale WordPress-Umgebungen mit Docker
Konstruktionsnotiz für die MySQL 5.7 (Docker) -Umgebung
Redmine (Docker) Umgebungskonstruktionsnotiz
Erstellen einer Docker-Umgebung mit WSL
Verwalten Sie die CocoaPods-Version mit Docker
Aufbau der Docker x Spring Boot-Umgebung
[Docker] postgres, pgadmin4-Umgebungskonstruktion
Erstellen einer Datenbankumgebung mit Docker in Spring Boot (IntellJ)
Erstellen Sie eine Entwicklungsumgebung für Rails-Anwendungen mit Docker [Docker, Rails, Puma, Nginx, MySQL]
Erstellen Sie mit Docker eine Vue3-Umgebung!
Erstellen Sie mit Docker eine lokale Couchbase-Umgebung
Erstellen Sie mit Docker eine Node.js-Umgebung
Zusammenfassung der Ruby-Umgebungskonstruktion ~ Mac-Version ~
Konstruktion der Laravel + Docker Laradock-Nutzungsumgebung
Erstellen Sie mit Docker eine SolrCloud-Überprüfungsumgebung
Konstruktionsverfahren für Rails on Docker-Umgebungen
Erstellen Sie mit Laradock eine Docker + Laravel-Umgebung
Erstellen einer Entwicklungsumgebung für Ruby on Rails mit Docker + VSCode (Remote Container)
Erstellen einer PostgreSQL-Umgebung mit Docker (vom Setup bis kurz vor der Entwicklung)
So erstellen Sie eine Rails + Vue + MySQL-Umgebung mit Docker [neueste Version 2020/09]
Konstruktionsverfahren für die Docker-Umgebung "Rails 6 x MySQL 8" für die gemeinsame Nutzung mit Teams
[Hinweis] Verfahren zur Erfassung der Docker-Version Db2
SQL-Anweisungslernen ~ Umgebungskonstruktion ~ Docker + MySQL
Erstellen einer Rails 6- und PostgreSQL-Umgebung mit Docker
Sapper × Go (Echo) × Aufbau einer Docker-Entwicklungsumgebung
Erstellen Sie mit Docker eine PureScript-Entwicklungsumgebung
Bearbeiten Sie MySQL mit Befehlen in der Docker-Umgebung
Erstellen Sie mit Docker eine Spring Boot-gradle-mysql-Entwicklungsumgebung
[Docker] Entwicklung der Entwicklungsumgebung Rails6 / Ruby2.7 / MySQL8
[Docker] Erstellen Sie mit Docker eine Node.js + Express + Webpack-Umgebung
Aufbau der Spring Boot + Docker Java-Entwicklungsumgebung
Erstellen Sie mit Docker eine Wordpress-Entwicklungsumgebung
GPU-Erkennung mit Docker mithilfe von WSL2 (August 2020)
[Docker] Erstellen Sie die Ausführungsumgebung von Jupyter Lab mit Docker