--Préparer l'environnement d'exécution du Deep Learning by PyTorch avec le conteneur Docker --Docker version 19.03 ou ultérieure, si vous avez le pilote GPU du système d'exploitation hôte et nvidia-container-runtime, les autres seront confinés dans le conteneur ―― Dans la plupart des cas, vous pouvez reproduire l'environnement avec une seule commande.
En gros, les préparatifs suivants sont nécessaires.
--docker version 19.03 ou ultérieure -Voir Documentation officielle (ce lien est pour Ubuntu)
«CUDA» et «CuDNN» sont stockés dans le conteneur, et le pilote GPU du côté hôte est utilisé.
Dans ce Dockerfile, Python 3.7.1 et le paquet Python sont installés sur la base de l'image contenant CUDA: 10.1 et CuDNN: 7 dans ʻUbuntu: 18.04`.
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
Exemple du contenu de requirements.txt
requirements.txt
torch
torchvision
Tout d'abord, construisez le conteneur. Exécutez la commande suivante dans le répertoire où le Dockerfile est créé.
docker build . -t torch3.7
Entrez dans le conteneur et vérifiez si le GPU peut être reconnu. Si l'affichage suivant apparaît avec la commande nvidia-smi, c'est ok.
$ 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 |
+-----------------------------------------------------------------------------+
Enfin, confirmez que la torche de PyTorch.Tensor peut être chargée dans la mémoire sur le GPU. J'ai pu utiliser torch.Tensor sur le GPU.
$ 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')
Il semble que le volume soit souvent utilisé de manière synchrone entre l'hôte et le conteneur. Dans ce cas, modifiez la commande suivante selon le cas et utilisez-la.
docker run -it -v /path/to/your_project_directory:/code --gpus all torch3.7 bash
Recommended Posts