[PYTHON] Erstellen Sie eine Docker-Umgebung, die PyTorch und JupyterLab verwenden kann

Aufbau der PyTorch + JupyterLab Docker-Umgebung

Wir haben eine Docker-Umgebung erstellt, die PyTorch verwenden kann, das als Framework für Deep Learning immer beliebter wird, und Jupyter Lab (Nachfolger von Jupyter Notebook), das bei der Verwendung von Python für die Datenanalyse beliebt ist. Wir haben eine neue Umgebung geschaffen, daher werden wir den Artikel (2019.12.14) überarbeiten.

Arbeitsablauf

  1. Installieren Sie den NVIDIA GPU-Grafikkartentreiber und das NVIDIA Container Toolkit
  2. Ändern Sie die JupyterLab-Docker-Datei, um ein Docker-Image zu erstellen
  3. Bringen Sie den offiziellen PyTorch GitHub mit
  4. Nehmen Sie die erforderlichen Änderungen an der offiziellen Docker-Datei von PyTorch vor, z. B. die Angabe basierend auf dem in 2 erstellten Docker-Image.
  5. Erstellen Sie das Docker-Image von PyTorch

Spezifisches Verfahren

Installieren Sie den NVIDIA-Treiber und das NVIDIA Container Toolkit

Ich habe auf [diesen Artikel] verwiesen (https://blog.amedama.jp/entry/docker-nvidia-container-toolkit). Früher habe ich den Grafikkartentreiber und CUDA cudnn direkt auf einem Linux-Computer installiert, aber ich hatte Probleme, weil es nicht gut funktionierte, wenn die Kombination aus dem Deep Learning-Framework und jeder Version unterschiedlich war. Ich habe das Gefühl, dass es viel einfacher geworden ist.

Installieren des NVIDIA-Grafiktreibers

Registrieren Sie das Treiber-Repository bei apt.

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

Installieren Sie den empfohlenen Treiber.

$ sudo apt -y install ubuntu-drivers-common
$ sudo ubuntu-drivers autoinstall

Installieren Sie das NVIDIA Container Toolkit

Installieren Sie das NVIDIA Container Toolkit, das die Laufzeiten enthält, die für die Verwendung der NVIDIA-GPU mit Docker erforderlich sind. Registrieren Sie zunächst das Repository bei apt.

$ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
$ curl -s -L https://nvidia.github.io/nvidia-docker/$(. /etc/os-release;echo $ID$VERSION_ID)/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
$ sudo apt update

Installieren Sie dann das Toolkit.

$ sudo apt -y install nvidia-container-toolkit

Starten Sie die Maschine einmal neu.

$ sudo shutdown -r now

Danach können Sie überprüfen, ob die GPU durch den folgenden Befehl erkannt wird.

$ nvidia-container-cli info

Holen Sie sich die Docker-Datei, die die Basis von JupyterLab bildet

Klonen Sie Jupter's GitHub, um die Basis-Docker-Datei abzurufen.

$ git clone https://github.com/jupyter/docker-stacks.git

--Datei zu verwenden - base-notebook/Dockerfile

Nehmen Sie Änderungen an der Docker-Datei vor, auf der Jupyter Lab basiert

base-Ändern Sie die Basis beim Erstellen eines Notebooks / einer Docker-Datei als NVIDIA-Docker. Die Zeile # wird in der ursprünglichen Beschreibung durch Auskommentieren deaktiviert, und die Zeilen danach werden aktiviert. Ich habe das Basis-Notebook / Dockerfile mit einem Texteditor geöffnet und die Beschreibung am Anfang wie folgt geändert. Weitere Informationen finden Sie auf der NVIDIA Docker Hub-Seite und wählen Sie die Version aus, die zu dem Deep Learning-Framework passt, das Sie verwenden möchten.

 #ARG BASE_CONTAINER=ubuntu:bionic-20191029@sha256:6e9f67fa63b0323e9a1e587fd71c561ba48a034504fb804fd26fd8800039835d
 #FROM $BASE_CONTAINER
 FROM nvidia/cuda:10.0-cudnn7-devel-ubuntu16.04

Erstellen Sie die Basis-Docker-Datei

Erstellen Sie ein Docker-Image im Basis-Notebook-Verzeichnis mit einem Befehl wie dem folgenden. Sie können das Docker-Image frei nach -t benennen.

$ docker image build ./ -t experiments/base-notebook

Zeigen Sie das Docker-Image mit dem folgenden Befehl an und überprüfen Sie, ob es erstellt wurde.

$ docker images

Erstellen Sie ein PyTorch Docker-Image basierend auf dem Docker-Image des Jupyter Lab.

Klonen Sie den offiziellen PyTorch GitHub mit einem Befehl wie dem folgenden in dem Verzeichnis, das Sie speichern möchten.

$ git clone https://github.com/pytorch/pytorch.git

Nehmen Sie Änderungen an der Docker-Datei von PyTorch vor

Kopieren Sie Docker / Pytorch / Dockerfile als Docker / Pytorch-Notebook / Dockerfile und nehmen Sie die erforderlichen Änderungen vor. Öffnen Sie / pytorch-notebook / Dockerfile in einem Texteditor und ändern Sie den Anfang so, dass er auf dem Docker-Image des Jupyter Lab basiert, das im vorherigen Schritt erstellt wurde.

#FROM nvidia/cuda:10.0-cudnn7-devel-ubuntu16.04
FROM experiments/base-notebook:latest

Es gibt einen Ort, an dem Miniconda (leichte Version von Anaconda) installiert werden kann, bevor PyTorch installiert wird. Da es von Docker of Jupyer Lab installiert wird, wird es durch Auskommentieren deaktiviert und an der Stelle ausgeführt, an der andere Bibliotheken und Pytorch installiert sind. Stellen Sie der Zeile, die Sie aktivieren möchten, RUN voran. Es wird hinzugefügt, um die folgenden Pakete zu installieren, indem das Lernprogramm von PyTorch ausgeführt wird.

 # Install PyTorch
 #RUN curl -o ~/miniconda.sh -O  https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh  && \
 #     chmod +x ~/miniconda.sh && \
 #     ~/miniconda.sh -b -p /opt/conda && \
 #     rm ~/miniconda.sh && \
 RUN  /opt/conda/bin/conda install -y python=$PYTHON_VERSION numpy pyyaml scipy ipython mkl mkl-include ninja cython typing \
    ipykernel pandas matplotlib scikit-learn pillow seaborn tqdm openpyxl ipywidgets && \
    /opt/conda/bin/conda install -y -c pytorch magma-cuda100 && \
    /opt/conda/bin/conda install -y -c conda-forge opencv pyside2 && \
    /opt/conda/bin/conda clean -ya
ENV PATH /opt/conda/bin:$PATH

Nachtrag: Beim Importieren von opencv ist der folgende Fehler aufgetreten. "Importfehler: libGL.so.1: Freigegebene Objektdatei kann nicht geöffnet werden: Keine solche Datei oder kein solches Verzeichnis" Ich habe "libgl1-mesa-dev" hinzugefügt, wo ich apt-get installiert habe. (Siehe diesen Artikel)

Ich habe die folgende Beschreibung auskommentiert, um sie an die JupyterLab Docker-Benutzerumgebung anzupassen. WORKDIR /workspace RUN chmod -R a+w . Stattdessen habe ich die folgende Beschreibung hinzugefügt.

    RUN chown -R $NB_UID:$NB_GID /home/$NB_USER
    WORKDIR /home/$NB_USER
    # Switch back to jovyan to avoid accidental container runs as root
    USER $NB_UID
    RUN echo 'export PATH=/opt/conda/bin:$PATH'>> ~/.bashrc

Erstellen Sie ein Docker-Image für PyTorch

PyTorchs "Stammverzeichnis" </ font> wurde von GitHub geklont (bitte beachten Sie, dass dies leicht zu Fehlern führen kann. Es wurde beschlossen, das Submodul von GitHub, cmake usw. zu aktualisieren. (Muss in Position sein) Erstellen Sie ein Docker-Image mit einem Befehl wie dem folgenden. In diesem Beispiel wird der Name des zu erstellenden Docker-Images als "Experimente / Pytorch-Notizbuch" ausgegeben.


$ docker build -t experiments/pytorch-notebook -f docker/pytorch-notebook/Dockerfile .

Beachten Sie, dass der cmake-Prozess für caffe2 viel Zeit in Anspruch nimmt.

Verwenden Sie das erstellte Docker-Image

Erstellen Sie einen Container aus dem erstellten Docker-Image und führen Sie ihn aus. Legen Sie das Kennwort für den ersten Zugriff auf Jupyter Lab mit einem Browser fest. Ich habe auf [diesen Artikel] verwiesen (https://qiita.com/Esfahan/items/a3cb8e91e13b96eacc73).

docker run \
 --rm -it \
 --user root \
 --name pytorch-notebook \
 experiments/pytorch-notebook:latest \
 /bin/bash -c \
 "python -c 'from notebook.auth import passwd;print(passwd())'"

Sie werden aufgefordert, das Passwort einzugeben. Geben Sie es also zweimal ein. Der Hash-Passwortwert (sha1: xxxxxxxxxxxxxxxxxxxxxxxxx) wird ausgegeben. Notieren Sie ihn also.

Enter password:
Verify password:
sha1:xxxxxxxxxxxxxxxxxxxxxxxx

Starten Sie Jupyter Lab mit einem Hash-Passwort (angegeben in --NotebookApp.password =).

docker run \
 --rm \
 --user root -e NB_UID=$UID \
 -p 58888:8888 -p 50022:22 -p 56006:6006 \
 -v ~/:/home/jovyan/work \
 --name pytorch-notebook \
 --gpus all \
 --ipc=host \
 experiments/pytorch-notebook:latest \
 start.sh jupyter lab --NotebookApp.password="sha1:xxxxxxxxxxxxxxxxxxxxxxxx"

Sie können Jupyter Lab verwenden, indem Sie mit einem Webbrowser auf localhost: 58888 zugreifen (wenn die Portnummern wie im obigen Beispiel zugeordnet sind).

Wenn Sie eine GPU mit PyTorch verwenden, müssen Sie anscheinend Speicher mit Optionen wie --ipc = Host oder --shm-size = 16G zuweisen. Wenn Sie num_workers im Data Loader beim Erstellen eines Mini-Batches auf 1 oder mehr setzen und Multi-Process verwenden, wird dies anscheinend durch den Datenaustausch über den gemeinsam genutzten Speicher verursacht. [Qiita-Referenzartikel](https://qiita.com/sakaia/items/671c843966133cd8e63c#docker%E3%81%A7%E3%81%AEdataloader%E5%88%A9%E7%94%A8%E3%81 % AE% E6% B3% A8% E6% 84% 8F)

Wenn Sie eine Python-Datei ausführen möchten, verwenden Sie% run.

%run -i sample.py

References [1] PyTorch GitHub [2] Jupyte Lab Dockerfile [3] Verwenden der GPU in Docker Container mit NVIDIA Container Toolkit [4] Erstellen einer Umgebung für Jupyter Lab mit Docker

Recommended Posts

Erstellen Sie eine Docker-Umgebung, die PyTorch und JupyterLab verwenden kann
Flutter in Docker - Erstellen und Verwenden einer Flutter-Entwicklungsumgebung in einem Docker-Container
Erstellen Sie mit Docker eine Go-Umgebung
Docker-Image, das cx_Oracle verwenden kann
[DynamoDB] [Docker] Erstellen Sie mit Docker-Compose eine Entwicklungsumgebung für DynamoDB und Django
[Linux] Erstellen einer Jenkins-Umgebung mit Docker
Verwenden Sie WebDAV in einer Portable Docker-Umgebung
[Linux] Aufbau einer Docker-Umgebung mit Amazon Linux 2
Erstellen Sie mit Docker eine CentOS Linux 8-Umgebung und starten Sie Apache HTTP Server
Erstellen Sie eine virtuelle Python-Umgebung, die jeder im September 2016 verstehen kann (pyenv + virutalenv).
Erstellen Sie eine LAMP-Umgebung auf Ihrem lokalen Docker
[Python] Erstellen Sie mit Docker eine Django-Entwicklungsumgebung
Erstellen Sie eine virtuelle Umgebung mit pyenv und venv
[Docker] Erstellen Sie in 3 Minuten eine jupyterLab (Python) -Umgebung!
Erstellen Sie mit Docker auf RaspberryPi3 eine Python + Flasche + MySQL-Umgebung! [Versuch und Irrtum]
Erstellen Sie eine Datenanalyseumgebung, die die GitHub-Authentifizierung und Django mit JupyterHub verbindet
Erstellen einer R- und Python Docker-Arbeitsumgebung
Erstellen Sie eine virtuelle Python-Umgebung mit virtualenv und virtualenvwrapper
So erstellen Sie eine Django (Python) -Umgebung auf Docker
[Go + Gin] Ich habe versucht, eine Docker-Umgebung zu erstellen
Erstellen Sie eine virtuelle Python-Umgebung mit virtualenv und virtualenvwrapper
Erstellen Sie einen Docker-Container und speichern Sie PNG vor Altair
Erstellen Sie eine Entwicklungsumgebung mit Poetry Django Docker Pycharm
Erstellen Sie mit Docker eine einfache Fast API-Entwicklungsumgebung
Erstellen einer numerischen Berechnungsumgebung mit pyenv und miniconda3
[Django] Verwenden Sie VS Code + Remote-Container, um schnell eine Entwicklungsumgebung für Django-Container (Docker) zu erstellen.
Verwendung von Docker zum Containerisieren Ihrer Anwendung und Verwenden von Docker Compose zum Ausführen Ihrer Anwendung in einer Entwicklungsumgebung
Erstellen Sie mit VirtualBox und Ubuntu eine Scikit-Lernumgebung für maschinelles Lernen
[Memo] Erstellen Sie mit Docker eine Entwicklungsumgebung für Django + Nuxt.js
Richten Sie eine automatische Testumgebung für den Browser ein, in der Selenium + Pytest mit Docker Compose ausgeführt werden kann
Erstellen Sie eine LAMP-Umgebung [CentOS 7]
[Django] Erstellen Sie mit PyCharm schnell eine Entwicklungsumgebung für Django-Container (Docker)
Erstellen wir eine Docker-Umgebung, in der Qiita-Trendinformationen gespeichert werden!
Erstellen Sie eine Python-Umgebung und übertragen Sie Daten auf den Server
Erstellen Sie eine maschinelle Lernumgebung
Erstellen Sie eine GPU-Umgebung mit GCP und kaggle offiziellem Image (Docker)
Erstellen einer Todo-App mit Django ① Erstellen Sie eine Umgebung mit Docker
Erstellen Sie die Python-Umgebung offline
Erstellen Sie mit Docker kostengünstig eine Flask-Entwicklungsumgebung
Hinweise zum Erstellen einer LAMP-Umgebung mit Vagrant und VirtulBox
Erstellen Sie eine Chainer-Umgebung mit CUDA und cuDNN auf einer p2-Instanz
Erstellen einer Docker-Arbeitsumgebung für R und Python 2: Japanische Unterstützung
Erstellen und testen Sie eine CI-Umgebung für mehrere Versionen von Python
Erstellen Sie eine 64-Bit-Python 2.7-Umgebung mit TDM-GCC und MinGW-w64 unter Windows 7
Erstellen Sie mit Anaconda und PyCharm eine Python-Umgebung auf Ihrem Mac
Versuchen Sie es mit virtualenv, mit dem eine virtuelle Umgebung von Python erstellt werden kann
Erstellen und testen Sie mit Docker in wenigen Minuten eine OpenCV- und Python-Umgebung
Erfahren Sie, wie Sie Docker verwenden, indem Sie eine Umgebung für Django + MySQL erstellen
Erstellen Sie eine Deb-Datei mit Docker
Erstellen Sie eine MySQL + Python-Umgebung mit Docker
[Hinweis] Aufbau und Verwendung des WSL2-Kernels
Erstellen Sie eine Python3-Umgebung unter CentOS7
Ich habe versucht, eine Umgebung zu erstellen, in der Tweet-Daten in WSL (bash) erfasst, gespeichert und analysiert werden können.
Erstellen Sie eine Entwicklungsumgebung mit Jupyter und Flask mit Python in Docker (unterstützt sowohl VS Code als auch Code-Server).