質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1901閲覧

Windows10上のUbuntuにおけるESPNetの環境構築にて、Ubuntu上のPythonのtorch.cuda.is_available()がFalseを出力する。

Soybeanman

総合スコア15

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/11/04 09:40

編集2022/11/04 12:00

前提

音声AIの学習がしたいと思い、Qiita上の記事( https://qiita.com/seichi25/items/fc6c22042f926baa08e6 )を参考にESPNetの環境構築を行っています。
しかし、当該記事の「cudaがちゃんと動くか確認」にて、print(torch.cuda.is_available())を行うとFalseとなります。
おそらく、torchがcudaを認識できていない、あるいはcudaがインストールできていないのだと思われますが、どのように解決すべきかわかりません。

実現したいこと

  • ESPNetの環境構築を完了させる。
  • print(torch.cuda.is_available())にてTrueを出力させる。
  • その後、エラーなくESPNetを使用した学習を行う。

発生している問題・エラーメッセージ

当該記事における確認手順は全て行い、全て記事通りの結果となりました。

試したこと

Qiitaの記事「pytorchのtorch.cuda.is_available()がFalseを出す問題」( https://qiita.com/nabenabe0928/items/7962dcf3030889667de4 )にてNVIDIA-driverが動作していないことが原因として考えられるとあったため、Ubuntu上で$ nvidia-smiで確認したところ、

Failed to initialize NVML: GPU access blocked by the operating system Failed to properly shut down NVML: GPU access blocked by the operating system

というエラーが出ました。OSによってGPUアクセスが防がれているということらしいので、Ubuntuを管理者権限で起動し、もう一度$ nvidia-smiで確認を行ったが、同じエラーが出ました。
PowerShell上ではしっかりと認識されていました。
このエラーについて、StackOverFlawの記事( https://stackoverflow.com/questions/70011494/why-does-nvidia-smi-return-gpu-access-blocked-by-the-operating-system-in-wsl2 )が見つかったため、解決策をみると、PowerShell上で$ wsl --updateを行い、WindowsOSバージョンを21H2以上にすると良いとありました。21H1止まりだったので22H2にアップデートしました。すると、python上でimport torchの時点でエラーが発生しました。

Traceback (most recent call last): File "<stdin>", line 1, in <module> ModuleNotFoundError: No module named 'torch'

モジュールがないとのことだったので最初のQiita上の記事の4. ESPNetの環境構築をもう一度行い、この問題を解決しようとしました。しかし、何故かアップデートしたはずのWindowsのバージョンが21H1に戻ってしまい、import torchはうまくいくようになりましたが、print(torch.cuda.is_available())はFalseとなりました。

Ubuntsuのバージョン(20.04)が悪い可能性も考えられたので、調べて見るとESPNetのGithub( https://github.com/espnet/espnet )にて、ubuntu20/python3.8の場合にはESPNetの1.12.1をインストールする必要がありそうでした。もう一度Windowsのバージョンを22H2にしてから、最初のQiita記事に掲載されている、4. ESPNetの環境構築の一連のコマンドを、ESPNetのバージョン(1.12.1)とCUDAのバージョン($ apt show cudaにて11.6と確認)を踏まえて以下のように変更し、実行しました。

git clone https://github.com/espnet/espnet cd espnet/tools ./setup_anaconda.sh miniconda espnet 3.8 make TH_VERSION=1.12.1 CUDA_VERSION=11.6 cd miniconda/bin ./conda init cd ../../../ esp_root=`pwd` echo "export ESPNET_ROOT=$esp_root" >> ~/.bashrc mkdir data_root echo "export TTS_DATA_ROOT=${esp_root}/data_root" >> ~/.bashrc source ~/.bashrc conda activate espnet pip install matplotlib pyopenjtalk==0.2.0 gdown espnet_model_zoo cd egs2 echo "espnet is installed."

これを行ったあと、問題が解決しているか確認しましたが、依然としてFalseが出力されています。

補足情報(FW/ツールのバージョンなど)

Windows10 バージョン22H2
Ubuntu バージョン20.04
GPU GTX 1660Ti

ご不明な点がございましたら、お手数ですがコメントまでお知らせください。
何卒、ご教授おねがいします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jbpb0

2022/11/04 11:54 編集

https://qiita.com/ryohassay/items/15fab8a72847be13d16d に書いてあるように、gpuの機種に合ってるwindows用のドライバーを https://www.nvidia.co.jp/Download/index.aspx?lang=jp から落として、windowsに入れます (wsl側のlinuxには入れません) 上記Webページには、その後にwsl側のlinuxにcudaツールキットを入れるように書いてありますが、 https://pytorch.org/get-started/locally/ で「Linux」と「CUDA...(どれか)」を選んで表示されるpipかcondaのコマンドをwsl側のlinux上で実行して、linuxにpytorchをインストールすれば、一緒にcuda関連の必要なものもインストールされるので、普通は別途cudaをインストールする必要はありません 上記のようにして、 ・windowsにnvidiaのcuda用ドライバーを入れる ・wsl側のlinux上で、pytorch公式のcuda有りインストール用コマンドでインストールする をすれば、wsl上のpytorchからgpuが使えるはずです 【追記】 wsl側のlinuxに別途cudaをインストールしたとしても、それは print(torch.cuda.is_available()) の結果には関係しません pytorchは、pytorchのインストール時に一緒に入ったcudaを使うため、別途インストールしたcudaを使わないからです 【追記2】 > プロンプト上のPythonのtorch.cuda.is_available()がFalseを出力する。 print(torch.cuda.is_available()) を実行するのは、windowsのpythonではなく、wsl側のlinuxのpythonですが、それは大丈夫ですよね? 質問の題名に「プロンプト上のPython」と書かれてるので、気になったので念の為の確認です
jbpb0

2022/11/04 11:28 編集

> 普通は別途cudaをインストールする必要はありません の補足です https://discuss.pytorch.org/t/install-pytorch-for-cuda-11-3-with-pip/152299 のptrblckさんの最初のコメントに 「The pip wheels and conda binaries ship with their own CUDA runtime as well as cuDNN, NCCL etc. and won’t be using the system CUDA toolkit.」 と書かれてるので、 https://pytorch.org/get-started/locally/ で「CUDA...(どれか)」を選択したら表示されるインストールコマンドを実行して、pipかcondaで普通にインストールする場合は、OS(wsl上のlinux)にインストールされてるcudaは使われないはずなので、単にpytorchを使うだけなら、OS(wsl上のlinux)に別途cudaをインストールする必要は無いと思います どんな場合にOSに別途cudaをインストールしないといけないのかは、 https://discuss.pytorch.org/t/install-pytorch-for-cuda-11-3-with-pip/152299 のptrblckさんの二番目のコメントに書かれてます 「The system-wide installed CUDA toolkit will be used if you are building PyTorch from source or a custom CUDA extenstion.」 「building PyTorch from source」をやる人はあまりいないと思うので、あるとしたら「custom CUDA extenstion」ですね 参考 https://torch.classcat.com/2018/05/22/pytorch-tutorial-advanced-cpp-extension/
Soybeanman

2022/11/04 12:00

回答ありがとうございます。現在ダウンロード中なので結果は少々お待ちください。 >【追記2】windowsのpythonではなく、wsl側のlinuxのpythonですが、それは大丈夫ですよね? はい。Ubuntu上で実行しています。紛らわしいので修正いたします。
Soybeanman

2022/11/04 12:03

ダウンロード完了しました。 print(torch.cuda.is_available())はTrueを出力するようになりました!ありがとうございます。 実際にESPNetが使えるか確認しますので少々お待ちください。
Soybeanman

2022/11/04 12:31

今の所使えてそうなのでこれで解決といたします!ありがとうございました。 回答欄にて紹介させていただきます。
jbpb0

2022/11/04 12:44 編集

もし「ESPNet」が「custom CUDA extenstion」を使ってる場合は、 > print(torch.cuda.is_available())はTrueを出力する の状態でも、wsl側のlinuxに別途cudaをインストールする必要があります その場合は、pytorchのインストールの時にpytorch公式で選んだ「CUDA...(どれか)」のバージョンと同じのをインストールしてください (その場合でも、windowsにcudaをインストールする必要はありません) なお、wsl側のlinuxに別途cudaをインストールしても、 print(torch.cuda.is_available()) の結果は変わらないはずです 理由は、前に述べた通りに、pytorchは実行時にはOS(この場合はwsl側のlinux)のcudaを使わないからです 【追記】 > 今の所使えてそう を見る前に、投稿してしまいました 失礼しました
guest

回答1

0

自己解決

コメント欄にてjbpb0さんから回答をいただきましたのでこれをもって解決といたします。

  1. https://qiita.com/ryohassay/items/15fab8a72847be13d16d

に書いてあるように、GPUの機種に合ってるwindows用のドライバーを
https://www.nvidia.co.jp/Download/index.aspx?lang=jp
から落として、Windowsに入れる。
2. https://pytorch.org/get-started/locally/
から「Linux」と「CUDA...(どれか)」を選んで表示されるpipかcondaのコマンドをWSL側のUbuntu上で実行する。

考えていただきました皆様ありがとうございました!

投稿2022/11/04 12:36

Soybeanman

総合スコア15

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問