HelperSheets/docker/GPU.md
2024-08-26 18:09:02 +02:00

78 lines
1.9 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# GPU-Basis-Image
Dies soll ein Basis-Image für GPU-Applikationen darstellen:
```dockerfile
# Wir nutzen ein Image von NVIDIA
FROM nvidia/cuda:12.2.0-runtime-ubuntu20.04
# Lege für später Variablen für einen non-root User fest (mit fester UID zur besseren Zuweisung)
ENV NB_USER="gpuuser"
ENV UID=999
# Install essential packages
RUN apt-get update && apt-get install -y \
python3.8 \
python3-pip \
python3.8-dev \
python3.8-distutils \
gcc \
g++ \
curl \
wget \
sudo \
&& rm -rf /var/lib/apt/lists/*
# Installiere hier PyTorch mit GPU support (Versionen können angepasst werden)
RUN python3.8 -m pip install --upgrade pip \
torch==2.0.1\
torchvision==0.15.2
# Erstellen eines non-root Users
RUN useradd -l -m -s /bin/bash -u $UID $NB_USER
# Arbeitsverzeichnis festlegen
WORKDIR /app
# und zum non-root User wechseln
USER ${NB_USER}
# Starte die Konsole wenn wir den container starten
CMD ["/bin/bash"]
```
__Wichtig:__ <br>
Es muss mind. die gleiche Cuda-Version auf dem Host-Gerät installiert sein.
### Testen
Erstelle einen Container aus dem Image mit
```docker build -t gputest .```. Anschließend starte den Container mit ```docker run --gpus all -it gputest```.
Nun sollten wir direkt in der Konsole des Containers mit dem user ```gpuuser``` sein.
Hier starten wir die Python Shell und wir können die Bibliothek ```torch``` nutzen um unsere GPU zu suchen mit:
```python
>>> import torch
>>> torch.cuda.is_available()
True
>>> torch.cuda.device_count()
1
>>> torch.cuda.current_device()
0
>>> torch.cuda.device(0)
<torch.cuda.device at 0x7efce0b03be0>
>>> torch.cuda.get_device_name(0)
'NVIDIA GeForce GTX 1080 Ti'
```
Wichtig: wenn dies nicht funktioniert, dann bitte noch einmal die Treiber auf der Host-Maschine überprüfen. Das man auch die gleiche Version im Docker Container benutzt.
Die Versionen in der ```Dockerfile``` können natürlich angepasst werden, aber auf die Treiber achten!!!