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

78 lines
1.9 KiB
Markdown
Raw 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!!!