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