1. ホーム
  2. linux

[解決済み】PytorchがCUDAは利用できないと言う件

2022-01-26 01:33:22

質問

持っているノートパソコンでPytorchを動かそうとしています。古いモデルですが、Nvidiaのグラフィックカードが搭載されています。おそらく本当の機械学習には十分ではないと思いますが、CUDAをインストールするプロセスを学ぶために、それを実行しようとしているのです。

の手順に従いました。 インストールガイド Ubuntu 18.04 (私のディストリビューションは Xubuntu)用です。

私のグラフィックカードはGeForce 845Mです。 lspci | grep nvidia :

01:00.0 3D controller: NVIDIA Corporation GM107M [GeForce 845M] (rev a2)
01:00.1 Audio device: NVIDIA Corporation Device 0fbc (rev a1)

また、gcc 7.5がインストールされていることも、次のように確認されています。 gcc --version

gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

そして、正しいヘッダーをインストールしています。 sudo apt-get install linux-headers-$(uname -r) :

Reading package lists... Done
Building dependency tree       
Reading state information... Done
linux-headers-4.15.0-106-generic is already the newest version (4.15.0-106.107).

その後、バージョン10.1のローカル.debを使用してインストール手順に従いました。

Npw、実行すると nvidia-smi , 得られます。

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 418.87.00    Driver Version: 418.87.00    CUDA Version: 10.1     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce 845M        On   | 00000000:01:00.0 Off |                  N/A |
| N/A   40C    P0    N/A /  N/A |     88MiB /  2004MiB |      1%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0       982      G   /usr/lib/xorg/Xorg                            87MiB |
+-----------------------------------------------------------------------------+

を実行すると nvcc -V と出る。

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2019 NVIDIA Corporation
Built on Sun_Jul_28_19:07:16_PDT_2019
Cuda compilation tools, release 10.1, V10.1.243

その後、インストール後の手順を、以下のように実行しました。 セクション 6.1 ということで、結果的に echo $PATH はこのようになります。

/home/isaek/anaconda3/envs/stylegan2_pytorch/bin:/home/isaek/anaconda3/bin:/home/isaek/anaconda3/condabin:/usr/local/cuda-10.1/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

echo $LD_LIBRARY_PATH はこのように見えます。

/usr/local/cuda-10.1/lib64

と私の /etc/udev/rules.d/40-vm-hotadd.rules ファイルは次のようになります。

# On Hyper-V and Xen Virtual Machines we want to add memory and cpus as soon as they appear
ATTR{[dmi/id]sys_vendor}=="Microsoft Corporation", ATTR{[dmi/id]product_name}=="Virtual Machine", GOTO="vm_hotadd_apply"
ATTR{[dmi/id]sys_vendor}=="Xen", GOTO="vm_hotadd_apply"
GOTO="vm_hotadd_end"

LABEL="vm_hotadd_apply"

# Memory hotadd request

# CPU hotadd request
SUBSYSTEM=="cpu", ACTION=="add", DEVPATH=="/devices/system/cpu/cpu[0-9]*", TEST=="online", ATTR{online}="1"

LABEL="vm_hotadd_end"

ここまでやって、サンプルのコンパイルと実行までしました。 ./deviceQuery を返します。

./deviceQuery Starting...

 CUDA Device Query (Runtime API) version (CUDART static linking)

Detected 1 CUDA Capable device(s)

Device 0: "GeForce 845M"
  CUDA Driver Version / Runtime Version          10.1 / 10.1
  CUDA Capability Major/Minor version number:    5.0
  Total amount of global memory:                 2004 MBytes (2101870592 bytes)
  ( 4) Multiprocessors, (128) CUDA Cores/MP:     512 CUDA Cores
  GPU Max Clock rate:                            863 MHz (0.86 GHz)
  Memory Clock rate:                             1001 Mhz
  Memory Bus Width:                              64-bit
  L2 Cache Size:                                 1048576 bytes
  Maximum Texture Dimension Size (x,y,z)         1D=(65536), 2D=(65536, 65536), 3D=(4096, 4096, 4096)
  Maximum Layered 1D Texture Size, (num) layers  1D=(16384), 2048 layers
  Maximum Layered 2D Texture Size, (num) layers  2D=(16384, 16384), 2048 layers
  Total amount of constant memory:               65536 bytes
  Total amount of shared memory per block:       49152 bytes
  Total number of registers available per block: 65536
  Warp size:                                     32
  Maximum number of threads per multiprocessor:  2048
  Maximum number of threads per block:           1024
  Max dimension size of a thread block (x,y,z): (1024, 1024, 64)
  Max dimension size of a grid size    (x,y,z): (2147483647, 65535, 65535)
  Maximum memory pitch:                          2147483647 bytes
  Texture alignment:                             512 bytes
  Concurrent copy and kernel execution:          Yes with 1 copy engine(s)
  Run time limit on kernels:                     Yes
  Integrated GPU sharing Host Memory:            No
  Support host page-locked memory mapping:       Yes
  Alignment requirement for Surfaces:            Yes
  Device has ECC support:                        Disabled
  Device supports Unified Addressing (UVA):      Yes
  Device supports Compute Preemption:            No
  Supports Cooperative Kernel Launch:            No
  Supports MultiDevice Co-op Kernel Launch:      No
  Device PCI Domain ID / Bus ID / location ID:   0 / 1 / 0
  Compute Mode:
     < Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >

deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 10.1, CUDA Runtime Version = 10.1, NumDevs = 1
Result = PASS

そして ./bandwidthTest を返します。

[CUDA Bandwidth Test] - Starting...
Running on...

 Device 0: GeForce 845M
 Quick Mode

 Host to Device Bandwidth, 1 Device(s)
 PINNED Memory Transfers
   Transfer Size (Bytes)    Bandwidth(GB/s)
   32000000         11.7

 Device to Host Bandwidth, 1 Device(s)
 PINNED Memory Transfers
   Transfer Size (Bytes)    Bandwidth(GB/s)
   32000000         11.8

 Device to Device Bandwidth, 1 Device(s)
 PINNED Memory Transfers
   Transfer Size (Bytes)    Bandwidth(GB/s)
   32000000         14.5

Result = PASS

NOTE: The CUDA Samples are not meant for performance measurements. Results may vary when GPU Boost is enabled.

しかし、この後、このPythonのスニペット(依存関係がすべてインストールされたconda環境において)。

import torch
torch.cuda.is_available()

リターン False

どなたか、これを解決する方法をご存じないでしょうか?私は、この問題を解決するために /usr/local/cuda-10.1/binetc/environment このように

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
PATH=$PATH:/usr/local/cuda-10.1/bin

と端末を再起動しても直りませんでした。他に何を試せばいいのか本当にわかりません。

EDIT - collect_env の結果 for @kHarshit

Collecting environment information...
PyTorch version: 1.5.0
Is debug build: No
CUDA used to build PyTorch: 10.2

OS: Ubuntu 18.04.4 LTS
GCC version: (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0
CMake version: Could not collect

Python version: 3.6
Is CUDA available: No
CUDA runtime version: 10.1.243
GPU models and configuration: GPU 0: GeForce 845M
Nvidia driver version: 418.87.00
cuDNN version: Could not collect

Versions of relevant libraries:
[pip] numpy==1.18.5
[pip] pytorch-ranger==0.1.1
[pip] stylegan2-pytorch==0.12.0
[pip] torch==1.5.0
[pip] torch-optimizer==0.0.1a12
[pip] torchvision==0.6.0
[pip] vector-quantize-pytorch==0.0.2
[conda] numpy                     1.18.5                   pypi_0    pypi
[conda] pytorch-ranger            0.1.1                    pypi_0    pypi
[conda] stylegan2-pytorch         0.12.0                   pypi_0    pypi
[conda] torch                     1.5.0                    pypi_0    pypi
[conda] torch-optimizer           0.0.1a12                 pypi_0    pypi
[conda] torchvision               0.6.0                    pypi_0    pypi
[conda] vector-quantize-pytorch   0.0.2                    pypi_0    pypi

解決方法は?

PyTorch はシステムの CUDA ライブラリを使用しません。プリコンパイルされたバイナリを使用してPyTorchをインストールする場合、以下のどちらかを使用します。 pip または conda は、ローカルにインストールされている指定バージョンのCUDAライブラリのコピーと一緒に出荷されます。実際、CUDAをサポートするPyTorchを使用するために、システムにCUDAをインストールする必要すらありません。

この問題の原因として、2つのシナリオが考えられます。

  1. CPUのみのバージョンのPyTorchをインストールした。この場合、PyTorchはCUDAをサポートしてコンパイルされていないため、CUDAをサポートしませんでした。

  2. CUDA 10.2 バージョンの PyTorch をインストールしました。この場合、あなたのグラフィックカードは現在418.87ドライバを使用しており、CUDA 10.1までしかサポートしていないことが問題です。この場合、2つの可能性のある解決策は、更新されたドライバ(バージョン >= 440.33 によれば 表2 または、CUDA 10.1用にコンパイルされたPyTorchのバージョンをインストールします。

PyTorchのインストール時に使用する適切なコマンドを決定するには、以下の"Install PyTorch"セクションにある便利なウィジェットを使用できます。 pytorch.org . 適切なオペレーティングシステム、パッケージマネージャ、およびCUDAのバージョンを選択し、推奨されるコマンドを実行するだけです。

あなたの場合、1つの解決策として

conda install pytorch torchvision cudatoolkit=10.1 -c pytorch

で、CUDA 10.1 に対してコンパイルされたバージョンの PyTorch をインストールしたいことを conda に明示的に指定します。

ドライバやハードウェアに関するPyTorch CUDAの互換性の詳細については、以下を参照してください。 この回答 .


編集 の出力を追加した後 collect_env CUDA 10.2 バージョンの PyTorch がインストールされていることが問題であることがわかります。それに基づいて、別の解決策は、項目2およびリンク先の回答で詳しく説明されているように、グラフィックスドライバを更新することだったでしょう。