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.
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.
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, 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
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
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 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
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
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
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.
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