LinuxにCUDAをインストールする方法(2024年版)

LinuxにCUDAをインストールする方法をまとめます.

インストールだけでなく,動作確認として

  • SDK,開発環境が動作すること
  • 作成したプログラムが実行できること

まで確認します

インストール

インストール手順

インストールはNVIDIAのページに書いてある手順をそのまま実行するのが良いです.

以前はディストリビューション毎にCUDAの独自パッケージがあり,ディストリビューション毎に独自のインストール方法が必要でした.
またディストリビューションによっては独自パッケージの更新が遅く,最新のパッケージSDKが使えないという問題もありました.

しかし2024年の今では独自パッケージを使うよりも,NVIDIAの公式パッケージのほうが出来が良い&バージョンが新しい状況です.公式パッケージを使うだけですべての問題が解決します.

公式パッケージのインストール手順は簡単です

  1. https://developer.nvidia.com/cuda-downloads をブラウザで開く
  2. Operating system で Linux を選択
  3. Architectureを選択.IntelAMDのCPUを使っている場合は x86_64 を選びます
  4. Distributionは,redhatubuntuなど自分が使っているOSを選択
  5. OSのバージョンを選択
  6. Install type はnetworkを選択
  7. 画面に、コマンドが表示されるのでそれを順番に実行する

だけです.

debian 12の場合だと,以下のコマンドが表示されるので,これを順番に実行するだけです

$ wget https://developer.download.nvidia.com/compute/cuda/repos/debian12/x86_64/cuda-keyring_1.1-1_all.deb
$ sudo dpkg -i cuda-keyring_1.1-1_all.deb
$ sudo add-apt-repository contrib
$ sudo apt-get update
$ sudo apt-get -y install cuda-toolkit-12-3

やってることは

してるだけです

インストールされるファイルの詳細(debianの場合)

debianの場合,CUDAのSDKとしては

  • NVIDIAの公式パッケージ(上記の手順でインストールできる)
  • debianの独自パッケージ

と選択肢が2つあることになります.

そして両パッケージは共存できるようになっています.

具体的には

  • NVIDIAの公式パッケージは /usr/local 以下
  • debianの独自パッケージは /usr 以下

にインストールされます

またNVIDIAの公式パッケージは alternatives で複数バージョンが共存できるようになっています.
具体的には

  • CUDA 12.3 は /usr/local/cuda-12.3 以下にインストール
  • /usr/local/cuda は /usr/local/cuda-12.3 のシンボリックリンク

となっていてます

つまり

  • debianの独自パッケージは /usr/bin/nvcc
  • NVIDIAの公式パッケージ(デフォルト版)は /usr/local/cuda/bin/nvcc
  • NVIDIAの公式パッケージ(特定のバージョン)は /usr/local/cuda-バージョン/bin/nvcc

と配置されているので,環境変数PATHを切り替えるだけで簡単に複数のSDKを使い分けることができるようになっています

開発環境の動作確認

ひとまずインストール状況,環境変数PATHを確認しましょう

$ which nvcc

これでnvccをパスを確認します
/usr/local/cuda/bin/nvcc と表示されれば公式パッケージのSDKが参照されています

念の為,バージョンも確認しましょう

$ nvcc --version

Cuda compilation tools, release 12.3, V12.3.107
と表示されれば version 12.3 が参照されていることになります

テスト用ソースコードコンパイル

テスト用に test.cu というテキストファイルを用意します

中身は次のように書きます

#include <stdio.h>

__global__ void test()
{
    printf("cuda!\n");
}

int main()
{
    test<<<1, 5>>>();
    cudaDeviceSynchronize();
    return 0;
}

これは、コンソール画面に"cuda!"という文字列を表示するスレッドを定義していて,それをCUDA上で5個同時に起動するサンプルコードです

とりあえずこのサンプルコードでコンパイル&実行ができることを確認します

コンパイル

コマンドラインコンパイルします

$ nvcc test.cu

これで a.out というファイルができあがればコンパイルは成功です