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