In anderen Beiträgen wurde bereits beschrieben, welche Befehle zur Überprüfung der CUDA-Version verwendet werden können. Hier werde ich beschreiben, wie man die Ausgabe dieser Befehle in eine Umgebungsvariable der Form "10.2", "11.0" usw. umwandelt.
Zusammenfassend kann man sagen, dass Sie
nvcc --version
um die CUDA Version herauszufinden. Ich denke, dies sollte Ihre erste Anlaufstelle sein. Wenn Sie mehrere Versionen von CUDA installiert haben, sollte dieser Befehl die Version der Kopie ausgeben, die sich am höchsten in Ihrem PATH befindet.
Die Ausgabe sieht wie folgt aus:
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2020 NVIDIA Corporation
Built on Thu_Jun_11_22:26:38_PDT_2020
Cuda compilation tools, release 11.0, V11.0.194
Build cuda_11.0_bu.TC445_37.28540450_0
Wir können diese Ausgabe durch sed leiten, um nur die Versionsnummer MAJOR.MINOR herauszufinden.
CUDA_VERSION=$(nvcc --version | sed -n 's/^.*release \([0-9]\+\.[0-9]\+\).*$/\1/p')
Wenn sich nvcc nicht in Ihrem Pfad befindet, sollten Sie es ausführen können, indem Sie stattdessen den vollständigen Pfad zum Standardverzeichnis von nvcc angeben.
/usr/local/cuda/bin/nvcc --version
Die Ausgabe ist dieselbe wie oben, und sie kann auf dieselbe Weise analysiert werden.
Alternativ können Sie die CUDA Version auch der Datei version.txt entnehmen.
cat /usr/local/cuda/version.txt
Deren Ausgabe
CUDA Version 10.1.243
kann mit sed geparst werden, um nur die Versionsnummer MAJOR.MINOR herauszufinden.
CUDA_VERSION=$(cat /usr/local/cuda/version.txt | sed 's/.* \([0-9]\+\.[0-9]\+\).*/\1/')
Beachten Sie, dass sich die Datei version.txt manchmal auf eine andere CUDA-Installation bezieht als die Datei nvcc --version
. In diesem Szenario sollte die nvcc-Version die Version sein, die Sie tatsächlich verwenden.
Wir können diese drei Methoden miteinander kombinieren, um die CUDA-Version wie folgt robust zu erhalten:
if nvcc --version 2&> /dev/null; then
# Determine CUDA version using default nvcc binary
CUDA_VERSION=$(nvcc --version | sed -n 's/^.*release \([0-9]\+\.[0-9]\+\).*$/\1/p');
elif /usr/local/cuda/bin/nvcc --version 2&> /dev/null; then
# Determine CUDA version using /usr/local/cuda/bin/nvcc binary
CUDA_VERSION=$(/usr/local/cuda/bin/nvcc --version | sed -n 's/^.*release \([0-9]\+\.[0-9]\+\).*$/\1/p');
elif [ -f "/usr/local/cuda/version.txt" ]; then
# Determine CUDA version using /usr/local/cuda/version.txt file
CUDA_VERSION=$(cat /usr/local/cuda/version.txt | sed 's/.* \([0-9]\+\.[0-9]\+\).*/\1/')
else
CUDA_VERSION=""
fi
Diese Umgebungsvariable ist nützlich für nachgelagerte Installationen, z.B. wenn pip eine Kopie von pytorch installiert, die für die richtige CUDA-Version kompiliert wurde.
python -m pip install \
"torch==1.9.0+cu${CUDA_VERSION/./}" \
"torchvision==0.10.0+cu${CUDA_VERSION/./}" \
-f https://download.pytorch.org/whl/torch_stable.html
In ähnlicher Weise können Sie die CPU-Version von pytorch installieren, wenn CUDA nicht installiert ist.
if [ "$CUDA_VERSION" = "" ]; then
MOD="+cpu";
echo "Warning: Installing CPU-only version of pytorch"
else
MOD="+cu${CUDA_VERSION/./}";
echo "Installing pytorch with $MOD"
fi
python -m pip install \
"torch==1.9.0${MOD}" \
"torchvision==0.10.0${MOD}" \
-f https://download.pytorch.org/whl/torch_stable.html
Aber seien Sie vorsichtig, denn Sie können versehentlich eine reine CPU-Version installieren, obwohl Sie eigentlich GPU-Unterstützung haben wollten. Wenn Sie beispielsweise das Installationsskript auf einem Anmeldeknoten eines Servers ausführen, der keine GPUs hat, und Ihre Aufträge auf Knoten verteilt werden, die GPUs haben. In diesem Fall wird auf dem Anmeldeknoten normalerweise kein CUDA installiert sein.