Es sind ungefähr die folgenden Vorbereitungen erforderlich.
--docker Version 19.03 oder höher -Siehe Offizielle Dokumentation (dieser Link ist für Ubuntu)
"CUDA" und "CuDNN" werden im Container gespeichert, und der GPU-Treiber auf der Hostseite wird verwendet. In dieser "Docker-Datei" werden "Python 3.7.1" und das Python-Paket basierend auf dem Image installiert, das "CUDA: 10.1" und "CuDNN: 7" in "Ubuntu: 18.04" enthält.
FROM nvidia/cuda:10.1-cudnn7-devel-ubuntu18.04
WORKDIR /code
ENV PYTHON_VERSION 3.7.1
ENV HOME /root
ENV PYTHON_ROOT $HOME/local/python-$PYTHON_VERSION
ENV PATH $PYTHON_ROOT/bin:$PATH
ENV PYENV_ROOT $HOME/.pyenv
ENV TZ=Asia/Tokyo
ADD requirements.txt /code
RUN export DEBIAN_FRONTEND=noninteractive && \
apt-get -y update && \
apt-get -y upgrade && \
apt-get -y install tzdata
RUN apt-get -y install git make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev && \
apt-get -y install wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev && \
git clone https://github.com/pyenv/pyenv.git $PYENV_ROOT && \
$PYENV_ROOT/plugins/python-build/install.sh && \
/usr/local/bin/python-build -v $PYTHON_VERSION $PYTHON_ROOT && \
rm -rf $PYENV_ROOT && \
pip install -r requirements.txt
Beispiel für den Inhalt von require.txt
requirements.txt
torch
torchvision
Bauen Sie zuerst den Container. Führen Sie den folgenden Befehl in dem Verzeichnis aus, in dem die Docker-Datei erstellt wird.
docker build . -t torch3.7
Geben Sie den Container ein und prüfen Sie, ob die GPU erkannt werden kann. Wenn die folgende Anzeige mit dem Befehl nvidia-smi angezeigt wird, ist dies in Ordnung.
$ docker run -it --gpus all torch3.7 bash
$ nvidia-smi
Tue Nov 19 15:01:12 2019
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 430.50 Driver Version: 430.50 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 166... Off | 00000000:1F:00.0 Off | N/A |
| 45% 36C P0 1W / 120W | 0MiB / 5944MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
Stellen Sie abschließend sicher, dass der Torch.Tensor von PyTorch in den Speicher der GPU geladen werden kann. Ich konnte torch.Tensor auf der GPU verwenden.
$ python
>>> import torch
>>> torch.cuda.is_available()
True
>>> x = torch.Tensor([0, 1])
>>> x
tensor([0., 1.])
>>> x.cuda()
tensor([0., 1.], device='cuda:0')
Es scheint, dass das Volume häufig synchron zwischen dem Host und dem Container verwendet wird. Ändern Sie in diesem Fall den folgenden Befehl entsprechend und verwenden Sie ihn.
docker run -it -v /path/to/your_project_directory:/code --gpus all torch3.7 bash
Recommended Posts