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