Ubuntu での CUDA と CUDNN のインストールとアンインストールの実装

Ubuntu での CUDA と CUDNN のインストールとアンインストールの実装

序文

最近、さまざまなグラフィック カード ドライバー バージョンに PaddlePaddle をインストールして使用する方法を学習しているので、Ubuntu で CUDA と CUDNN をインストールおよびアンインストールする方法も学習しています。学習プロセス中は、学習プロセスも記録しています。みんなに学びを提供しながら、自分自身の記憶も強化します。この記事では、CUDA 8.0 と CUDNN 7.05 のアンインストールを例に、CUDA 10.0 と CUDNN 7.4.2 のインストールを例に説明します。

グラフィックドライバーをインストールする

nouveau ドライバーを無効にする

sudo vim /etc/modprobe.d/blacklist.conf

テキストの最後に追加します:

ブラックリストヌーボー
オプション nouveau modeset=0

次に以下を実行します:

sudo アップデート-initramfs -u

再起動後、以下のコマンドを実行します。画面に出力がない場合は、nouveau が正常に無効化されていることを意味します。

lsmod | grep 初心者

ドライバーをダウンロード

公式ウェブサイトからのダウンロード アドレス: https://www.nvidia.cn/Download/index.aspx?lang=cn 、グラフィック カードに応じて対応するバージョンのグラフィック カード ドライバーをダウンロードします。たとえば、私のグラフィック カードは RTX2070 です。

ダウンロードが完了すると、インストール パッケージが提供されます。バージョンによってファイル名が異なる場合があります。

NVIDIA-Linux-x86_64-410.93.run

古いドライバーをアンインストールする

コマンド インターフェイスでは、次の操作を実行する必要があります。コマンド インターフェイスに入り、ログインするには、次のショートカット キーを実行します。

Ctrl+Alt+F1 キー

次のコマンドを実行して X-Window サービスを無効にします。そうしないと、グラフィック ドライバーをインストールできません。

sudo サービス lightdm を停止します

元のグラフィック ドライバーをアンインストールするには、次の 3 つのコマンドを実行します。

sudo apt-get remove --purge nvidia*
sudo chmod +x NVIDIA-Linux-x86_64-410.93.run
sudo ./NVIDIA-Linux-x86_64-410.93.run --uninstall

新しいドライバーのインストール

ドライバファイルを直接実行することで、新しいドライバをインストールできます。デフォルト設定で問題ありません。

sudo ./NVIDIA-Linux-x86_64-410.93.run

X-Window サービスを開始するには、次のコマンドを実行します。

sudo サービス lightdm 開始

最後に、restart コマンドを実行してシステムを再起動します。

リブート

注意: システムの再起動後に繰り返しログインが発生する場合、ほとんどの場合、間違ったバージョンのグラフィック ドライバーがインストールされています。マシンにインストールされているグラフィック カードに対応するバージョンをダウンロードする必要があります。

CUDAをアンインストールする

最初になぜ CUDA をアンインストールしたのでしょうか? これは、グラフィック カードを RTX2070 に変更したため、元々インストールされていた CUDA 8.0 と CUDNN 7.0.5 が正常に使用できなくなったためです。CUDA 10.0 と CUDNN 7.4.2 をインストールする必要があったため、最初に元の CUDA をアンインストールする必要がありました。以下のコマンドはすべて root ユーザーで実行されることに注意してください。

CUDA のアンインストールは非常に簡単で、コマンド 1 つだけで十分です。主な実行は、CUDA に付属するアンインストール スクリプトです。読者は、自分の CUDA バージョンに応じてアンインストール スクリプトを見つける必要があります。

sudo /usr/local/cuda-8.0/bin/uninstall_cuda_8.0.pl

アンインストール後も、CUDA 8.0 で以前にインストールされたフォルダーがいくつか残っています。すべてをまとめて削除することもできます:

sudo rm -rf /usr/local/cuda-8.0/

これにより、CUDA がアンインストールされます。

CUDAをインストールする

インストールされている CUDA および CUDNN のバージョン:

  • CUDA10.0 について
  • CUDNN 7.4.2

以下のインストール手順はすべて root ユーザーで実行されます。

CUDAをダウンロードしてインストールする

公式サイトのCUDA10ダウンロードページからダウンロードできます。
お使いのシステムに合った CUDA バージョンをダウンロードしてください。ページは以下のとおりです。

ダウンロードが完了したら、ファイルに実行権限を付与します。

chmod +x cuda_10.0.130_410.48_linux.run

インストールを開始するには、インストール パッケージを実行します。

./cuda_10.0.130_410.48_linux.run

インストールを開始したら、指示を読む必要があります。Ctrl Ctrl + Cを押して直接読み終えるか、空格鍵を使用してゆっくり読むことができます。次に設定を行います。ここで説明しましょう:

(規約に同意しますか? インストールを続行するには同意する必要があります)
承諾/辞退/辞退: 承諾

(最新のドライバーがインストールされているため、ここでドライバーをインストールしないでください。そうしないと、古いバージョンのグラフィック ドライバーがインストールされ、ログインが繰り返される可能性があります)
Linux-x86_64 410.48 用の NVIDIA アクセラレーテッド グラフィックス ドライバーをインストールしますか?
(はい)/(いいえ)/(き): n

CUDA 10.0 ツールキットをインストールしますか? (CUDA 10 をインストールしますか? これはインストールする必要があります。)
(はい)/(いいえ)/(き): y

ツールキットの場所を入力します (インストール パス、デフォルトを使用し、Enter キーを押すだけです)
 [ デフォルトは /usr/local/cuda-10.0 ]: 

/usr/local/cuda にシンボリック リンクをインストールしますか? (ソフト リンクの作成に同意します)
(はい)/(いいえ)/(き): y

CUDA 10.0 サンプルをインストールしますか? (テストをインストールする必要はありません。すでにインストールされています)
(はい)/(いいえ)/(き): n

/usr/local/cuda-10.0 に CUDA ツールキットをインストールしています...

インストールが完了したら、環境変数を設定し、 vim ~/.bashrcの末尾に次の設定情報を追加できます。

CUDA_HOME=/usr/local/cuda-10.0 をエクスポートします。
LD_LIBRARY_PATH=${CUDA_HOME}/lib64 をエクスポートします。
PATH=${CUDA_HOME}/bin:${PATH}をエクスポートします

最後に、コマンドsource ~/.bashrcを使用して有効にします。

インストールされているバージョン情報を表示するには、 nvcc -Vコマンドを使用できます。

テスト@テスト:~$ nvcc -V
nvcc: NVIDIA (R) Cuda コンパイラ ドライバー
著作権 (c) 2005-2018 NVIDIA Corporation
Sat_Aug_25_21:08:01_CDT_2018 に作成
Cuda コンパイル ツール、リリース 10.0、V10.0.130

インストールが成功したかどうかをテストする

次のコマンドを実行します。

/usr/local/cuda-10.0/samples/1_Utilities/deviceQuery をコピーします。
作る
./デバイスクエリ

通常出力:

./deviceQuery 開始しています...

 CUDA デバイス クエリ (ランタイム API) バージョン (CUDART 静的リンク)

CUDA 対応デバイスが 1 台検出されました

デバイス0:「GeForce RTX 2070」
 CUDA ドライバー バージョン / ランタイム バージョン 10.0 / 10.0
 CUDA 機能メジャー/マイナー バージョン番号: 7.5
 グローバルメモリの合計量: 7950 MBytes (8335982592 バイト)
 (36) マルチプロセッサ、(64) CUDA コア/MP: 2304 CUDA コア
 GPU 最大クロック レート: 1620 MHz (1.62 GHz)
 メモリクロックレート: 7001 Mhz
 メモリバス幅: 256 ビット
 L2 キャッシュ サイズ: 4194304 バイト
 最大テクスチャ次元サイズ (x,y,z) 1D=(131072)、2D=(131072, 65536)、3D=(16384, 16384, 16384)
 最大レイヤー 1D テクスチャ サイズ、(数) レイヤー 1D=(32768)、2048 レイヤー
 最大レイヤー 2D テクスチャ サイズ、(num) レイヤー 2D=(32768, 32768)、2048 レイヤー
 定数メモリの合計量: 65536 バイト
 ブロックあたりの共有メモリの合計量: 49152 バイト
 ブロックごとに使用可能なレジスタの総数: 65536
 ワープサイズ: 32
 マルチプロセッサあたりの最大スレッド数: 1024
 ブロックあたりの最大スレッド数: 1024
 スレッド ブロックの最大次元サイズ (x,y,z): (1024, 1024, 64)
 グリッド サイズの最大次元サイズ (x,y,z): (2147483647, 65535, 65535)
 最大メモリピッチ: 2147483647 バイト
 テクスチャアラインメント: 512 バイト
 同時コピーとカーネル実行: 3 つのコピー エンジンで可能
 カーネルの実行時間制限: はい
 統合GPU共有ホストメモリ: いいえ
 ホストページロックメモリマッピングをサポート: はい
 サーフェスの配置要件: はい
 デバイスはECCをサポートしています: 無効
 デバイスは統合アドレス指定 (UVA) をサポートしています: はい
 デバイスはコンピューティングプリエンプションをサポートしています: はい
 協調カーネル起動をサポート: はい
 マルチデバイスCo-opカーネル起動をサポート: はい
 デバイス PCI ドメイン ID / バス ID / ロケーション ID: 0 / 1 / 0
 計算モード:
  < デフォルト (複数のホスト スレッドが同時にデバイスで ::cudaSetDevice() を使用できます) >

deviceQuery、CUDA ドライバー = CUDART、CUDA ドライバー バージョン = 10.0、CUDA ランタイム バージョン = 10.0、NumDevs = 1
結果 = 合格

CUDNNをダウンロードしてインストールする

CUDNN の公式ダウンロード Web サイト (https://developer.nvidia.com/rdp/cudnn-download) にアクセスし、[ダウンロード] をクリックしてダウンロード バージョンの選択を開始します。もちろん、ダウンロードする前にログインする必要があります。バージョン選択インターフェイスは次のとおりです。Linux cuDNN Library for Linuxを選択します。

ダウンロード後は、次のように圧縮されたパッケージになります。

cudnn-10.0-linux-x64-v7.4.2.24.tgz

次に、次のコマンドで解凍します。

tar -zxvf cudnn-10.0-linux-x64-v7.4.2.24.tgz

解凍後、次のファイルを取得できます。

cuda/include/cudnn.h
cuda/NVIDIA_SLA_cuDNN_サポート.txt
cuda/lib64/libcudnn.so
cuda/lib64/libcudnn.so.7
cuda/lib64/libcudnn.so.7.4.2
cuda/lib64/libcudnn_static.a

次の 2 つのコマンドを使用して、これらのファイルを CUDA ディレクトリにコピーします。

cuda/lib64/* /usr/local/cuda-10.0/lib64/ をコピーします。
cp cuda/include/* /usr/local/cuda-10.0/include/

コピーが完了したら、次のコマンドを使用して CUDNN のバージョン情報を表示できます。

cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2

テストインストール結果

この時点で、CUDA 10 と CUDNN 7.4.2 のインストールは完了です。 Pytorch の対応する GPU バージョンをインストールして、正常に使用できるかどうかをテストできます。次のようにインストールします。

pip3 インストール https://download.pytorch.org/whl/cu100/torch-1.0.0-cp35-cp35m-linux_x86_64.whl
pip3 torchvision をインストール

次に、次の手順でインストールをテストします。

輸入トーチ
torch.nnをnnとしてインポートする
torch.nn.function を F としてインポートします。
torch.optim を optim としてインポートします。
torch.backends.cudnn を cudnn としてインポートします。
torchvisionからデータセットをインポートし、変換する


クラスNet(nn.Module):
 __init__(self)を定義します。
  super(Net, self).__init__()
  self.conv1 = nn.Conv2d(1, 10, カーネルサイズ=5)
  self.conv2 = nn.Conv2d(10, 20, カーネルサイズ=5)
  自己.conv2_drop = nn.Dropout2d()
  自己.fc1 = nn.Linear(320, 50)
  自己.fc2 = nn.Linear(50, 10)

 def forward(self, x):
  x = F.relu(F.max_pool2d(self.conv1(x), 2))
  x = F.relu(F.max_pool2d(self.conv2_drop(self.conv2(x)), 2))
  x = x.view(-1, 320)
  x = F.relu(self.fc1(x))
  x = F.dropout(x, トレーニング = self.training)
  x = 自己.fc2(x)
  F.log_softmax(x, dim=1) を返す


def train(モデル、デバイス、train_loader、オプティマイザ、エポック):
 モデル.train()
 batch_idx、(データ、ターゲット) を enumerate(train_loader) で指定します。
  データ、ターゲット = data.to(デバイス)、target.to(デバイス)
  オプティマイザ.zero_grad()
  出力 = モデル(データ)
  損失 = F.nll_loss(出力、ターゲット)
  損失.後方()
  オプティマイザ.ステップ()
  batch_idx % 10 == 0の場合:
   print('トレーニングエポック: {} [{}/{} ({:.0f}%)]\t損失: {:.6f}'.format(
    エポック、batch_idx * len(データ)、len(train_loader.dataset)、
      100. * batch_idx / len(train_loader)、 loss.item()))

main() を定義します:
 cudnn.benchmark = 真
 トーチ.マニュアル_シード(1)
 デバイス = torch.device("cuda")
 kwargs = {'num_workers': 1, 'pin_memory': True}
 トレーニングローダー = torch.utils.data.DataLoader(
  datasets.MNIST('../data', train=True, download=True,
      変換 = transforms.Compose([
       変換.ToTensor()、
       変換します。正規化します((0.1307,), (0.3081,))
      ]))、
  batch_size=64、shuffle=True、**kwargs)

 モデル = Net().to(デバイス)
 オプティマイザー = optim.SGD(model.parameters(), lr=0.01, momentum=0.5)

 エポックが範囲(1, 11)の場合:
  トレーニング(モデル、デバイス、train_loader、オプティマイザー、エポック)


__name__ == '__main__' の場合:
 主要()

以下の情報が正常に出力されればインストールされたことが証明されます。

トレーニングエポック: 1 [0/60000 (0%)] 損失: 2.365850
トレーニングエポック: 1 [640/60000 (1%)] 損失: 2.305295
トレーニングエポック: 1 [1280/60000 (2%)] 損失: 2.301407
トレーニングエポック: 1 [1920/60000 (3%)] 損失: 2.316538
トレーニングエポック: 1 [2560/60000 (4%)] 損失: 2.255809
トレーニングエポック: 1 [3200/60000 (5%)] 損失: 2.224511
トレーニングエポック: 1 [3840/60000 (6%)] 損失: 2.216569
トレーニングエポック: 1 [4480/60000 (7%)] 損失: 2.181396

参考文献

https://developer.nvidia.com

https://www.cnblogs.com/luofeel/p/8654964.html

Ubuntu に CUDA と CUDNN をインストールおよびアンインストールする方法についての記事はこれで終わりです。Ubuntu に CUDA と CUDNN をインストールおよびアンインストールする方法についての詳細は、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • VS2019 で C プログラムまたは CUDA プログラムを作成するときに発生する「プログラムを開始できません。指定されたファイルが見つかりません」という問題の詳細な解決策
  • CUDA10.0 のインストールと Ubuntu での問題
  • win10+VS2017+Cuda10.0環境の詳細構成
  • さまざまな Tensorflow バージョン要件と CUDA および CUDNN バージョン間の対応の詳細な説明
  • Ubuntu16.04にCUDA9.0をインストールするための詳細なチュートリアル
  • Ubuntu 20.04 に cuda10.1 をインストールする手順 (グラフィック チュートリアル)
  • Ubuntu 20.04 CUDA & cuDNN のインストール方法 (グラフィカル チュートリアル)
  • Manjaro インストール CUDA 実装チュートリアル分析

<<:  MySQL INT型の完全な分析

>>:  MySQL ビューの原理と使用法の詳細な分析

推薦する

Vueデータ割り当て問題の解決

私が長い間遭遇してきた問題を要約してみましょう。プロジェクトでは、フロントエンドをレンダリングするた...

JavaScriptページングコンポーネントの使い方の詳細な説明

ページネーションコンポーネントはWeb開発でよく使われるコンポーネントです。ページネーション機能を実...

Nginx ロケーションマッチングルールの例

1. 文法 場所 [=|~|~*|^~|@] /uri/ { ... } 2. 説明上記の構文から、...

Web デザインでフラッシュ オーバーレイ ポップアップ レイヤーの z-index プロパティを設定しても機能しない

デフォルトでは、Flash は常にページのトップレベルに表示されます。つまり、ページに DHTML ...

HTML テーブルタグと関連する改行の問題の詳細な分析

テーブルとは何ですか?テーブルは、データのキャリアである HTML テーブルです。以下は比較的標準的...

MySQL の準同期レプリケーションについての簡単な説明

導入MySQL はレプリケーションを通じてストレージ システムの高可用性を実現します。現在、MySQ...

Linux でディスクをマウントし、起動時に自動的にマウントするように設定する方法

皆さんの時間は貴重だと承知しているので、プロセス コマンドを直接書き留めておきます。設定できます。原...

実行中のDockerコンテナのポートマッピングを変更する方法

序文docker run がコンテナを作成して実行するときに、-p を使用してポート マッピング ル...

mysql 8.0.20 winx64.zip 圧縮版のインストールと設定方法のグラフィックチュートリアル

mysql 8.0.20 winx64.zip圧縮版のインストールチュートリアルは以下のように記録さ...

Centos 6.5 での mysql-community-server. 5.7.18-1.el6 のインストール

次のコマンドを使用して、MySQL Serverがインストールされているかどうかを確認します。 [r...

Win7 x64 に解凍版の mysql 5.7.18 winx64 をインストールするとサービスが起動できない問題を解決します

今日、mysql の公式サイトから mysql-5.7.18-winx64.zip をダウンロードし...

リクエスト IP の最後のセグメントに基づいてトラフィックを分割するように Nginx を構成する方法

これは主に、場所パラメータのif判断の設定ジャンプです。迂回により、サーバーの負荷と圧力を軽減できま...

jQuery キャンバスは QR コード付きのポスターを生成します

この記事では、jQuery キャンバスを使用して QR コード付きのポスターを生成するための具体的な...

Vue.jsは音楽プレーヤーを実装します

この記事では、音楽プレーヤーを実装するためのVue.jsの具体的なコードを参考までに共有します。具体...

Vue は書籍管理ケースを実装します

この記事では、書籍管理を実装するためのVueの具体的なコードを例として紹介します。具体的な内容は次の...