目次
UbuntuのインストールからGPUで機械学習をするまでに必要なことを記述します。流れは以下となっています。
- WindowsでUbuntuインストールUSBメディアを作成
- Ubuntuのインストール・初期設定
- 機械学習のためのGPUドライバ・CUDA・cuDNNの設定
- pyenvによるpythonのインストール
- 機械学習モデルの実行
- おまけ:Ubuntuにリモート接続
WindowsでUbuntuインストールUSBメディアを作成
Ubuntu18.04のダウンロード
下記よりUbuntu18.04 LTSをダウンロードします。
Ubuntu Desktop 日本語 Remixのダウンロード | Ubuntu Japanese Team
インストールUSBメディアを作成するためのソフトウェアをダウンロード
下記よりソフトウェア「Rufus」をダウンロード、インストールします。
Rufusを使ってインストールUSBメディアを作成する
Rufusを起動し、画像のようにUbuntuのイメージを選択してインストールUSBメディアを作成します。
Ubuntuのインストール
USBメディアからUbuntuをインストール
USBメディアからUbuntuを起動し、手続きにしたがってUbuntuをインストールします。
Ubuntuの解像度がおかしいときの対応
Ubuntuの解像度がおかしくない場合はこちらの手順は省略して大丈夫です。
GPU等の関係により、画像のようにUbuntuの解像度が600x800で固定され、GPUドライバをインストールしても解決しない場合があります。その場合の対処方を記述します。
まずは、システムファイルを修正できるようにvimをインストールします。
$ sudo apt install vim
続いてgrubファイルを編集します。
$ sudo vim /etc/default/grub
以下の行を追加します。
GRUB_GFXMODE=1920x1080
最後に、grubを更新して再起動します。
$ sudo update-grub
$ sudo reboot
Ubuntuのソフトウェアアップデート
画像のように選択し、Ubuntuのソフトウェアをアップデートします。
インストール後、再起動が必要です。
再起動後、ついでにパッケージリストとパッケージの更新も行っておきます。
$ sudo apt update
$ sudo apt upgrade
機械学習のためのGPUドライバ・CUDA・cuDNNの設定
機械学習のために必要なもの
GPUで機械学習するために以下をインストールします。
- GPUドライバ(GPUの機能を使うために必要。)
- CUDA Toolkit(GPUで機械学習をするために必要。)
- cuDNN(ニューラルネットワークの計算を高速化するために必要。高速化が目的のため、インストールしなくても機械学習は可能。)
GPUドライバのインストール
以下のコマンドを入力して、適切なGPUドライバを確認します。
$ sudo add-apt-repository ppa:graphics-drivers/ppa
$ sudo apt update
$ ubuntu-drivers devices
recommendedが付いているドライバをインストールします。
インストール後、再起動します。
$ sudo apt install nvidia-driver-455
$ sudo reboot
以下のコマンドでドライバがインストールされていることを確認できます。
$ nvidia-smi
CUDAのインストール
CUDAはGPUで機械学習するために必要です。
以下からCUDAをダウンロードします。基本的にCUDAのバージョンはnvidia-smiで表示されるバージョンが推奨です。ここではCUDA 11.1.1を選びます。
今回はrunfileでのインストールを選択します。
上記で表示されたコマンドを打ち込みます。
$ wget https://developer.download.nvidia.com/compute/cuda/11.1.1/local_installers/cuda_11.1.1_455.32.00_linux.run
$ sudo sh cuda_11.1.1_455.32.00_linux.run
runfileを実行すると以下の表示がでます。
「既にドライバーがインストールされているけど大丈夫?ドライバを削除してからインストールすることを強く勧めます。」と表示されています。
これは、上記でインストールしたGPUドライバのことだと思われます。ただし、CUDAと同時にドライバをインストールする場合、GPUとそのドライバに互換性がない場合もあります。この場面の最適解は、ドライバのインストールもCUDAで行うことかもしれませんが、ここでは「Continue」で進めます。
ライセンス表示の場面では「accept」と入力します。
続いて、今回は既にドライバを入れているため、Driverのチェックのみを外して「install」を選択します。(CUDAと同時にドライバをインストールする場合はチェックが必要です。)
これでCUDAのインストールは完了です。
cuDNNのインストール
cuDNNはニューラルネットワークの計算を高速化するために必要です。高速化が目的のため、インストールしなくても機械学習は可能です。
cuDNNのダウンロードには、NVIDIAのアカウントとログインが必要です。また、ダウンロード時にアンケートに答える必要があります。
下記のサイトでダウンロードします。今回はCUDA11.1を選択します。
https://developer.nvidia.com/rdp/cudnn-download
以下のコマンドでインストールします。
# 解答
$ tar -xzvf cudnn-11.1-linux-x64-v8.0.5.39.tgz
# ローカルのCUDAフォルダにコピー(インストール)
$ sudo cp cuda/include/cudnn*.h /usr/local/cuda/include
$ sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
# 読み取り権限付与
$ sudo chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*
pyenvによるpythonのインストール
pyenvとは
pyenvはpythonのバージョン管理ツールです。python3.7、python3.8といった別バージョンのpythonを簡単に切り替えたいときに使います。コードによってはpython3.7では動くがpython3.8では動かないということがあるため、そういった場面で役に立ちます。
pythonのバージョンは1つで十分という方はpyenvではなく、普通にpythonのインストールで問題ありません。
pyenvのインストール
pyenvに必要なパッケージをインストールします。
$ sudo apt-get install -y build-essential libssl-dev zlib1g-dev libbz2-dev \
libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \
xz-utils tk-dev libffi-dev liblzma-dev python-openssl git
gitでpyenvをダウンロードします。
$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv
.bash_profileにpyenvの設定を書きこみます。
$ vim ~/.bash_profile
以下の内容を書き込み、保存しましょう。
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
.bash_profileを反映させ、pyenvのバージョンが確認できればインストール完了です。
$ source ~/.bash_profile
$ pyenv -v
pyenvでのpythonのインストール
以下のコマンドでインストールできるpythonを確認できます。
$ pyenv install --list
今回はpython3.8.6をインストールします。
$ pyenv install 3.8.6
インストールしたpythonを使うように指定します。
$ pyenv global 3.8.6
pythonのバージョンが確認できればインストール完了です。
$ python --version
機械学習モデルの実行
Tacotron2を動かしてみる
今回は音声合成モデルのTacotron2を動かしてみようと思います。Tacotron2に関しては以下の記事で説明しています。
pytorchのインストール
tacotron2を動かすためには、pythonにpytorchライブラリをインストールする必要があります。まずは、pythonのpipとsetuptoolsのアップデートを行っておきます。
$ pip install --upgrade pip
$ pip install --upgrade setuptools
続いて、pytorchをインストールします。
以下のサイトを参考に、インストールコマンドを打ち込みます。今回、UbuntuにインストールされているのはCUDA11.1ですが、pytorchがCUDA11.0までしかないため、11.0を選択してインストールします。本当はCUDAとpytorchのバージョンを揃えた方が良いと思いますが、この構成でも動くためこのまま進めます。
$ pip install torch==1.7.0+cu110 torchvision==0.8.1+cu110 torchaudio===0.7.0 -f https://download.pytorch.org/whl/torch_stable.html
これでpytorchのインストール完了です。
他にもTacotron2を動かすために必要なパッケージもインストールしておきます。
$ pip install numpy scipy librosa unidecode inflect librosa
Tacotron2を動かしてみる
※ torchのバージョンアップにより、今はこのコードは動かない可能性が高いです
以下のリンクを参考にTacotron2を動かすコードを書いてみます。
今回は以下のようなpythonファイルを作成しました。
$ vim tacotron2-test.py
import torch tacotron2 = torch.hub.load('nvidia/DeepLearningExamples:torchhub', 'nvidia_tacotron2') import numpy as np tacotron2 = tacotron2.to('cuda') tacotron2.eval() text = "hello world, I missed you" # preprocessing sequence = np.array(tacotron2.text_to_sequence(text, ['english_cleaners']))[None, :] sequence = torch.from_numpy(sequence).to(device='cuda', dtype=torch.int64) # run the models with torch.no_grad(): _, mel, _, _ = tacotron2.infer(sequence) print(mel)
2020年11月現在、RTX30系(もしくはCUDA11系)でwaveglowがエラーになる問題があります。そのため、このコードはTacotron2のみを動かし「hello world, I missed you」のメルスペクトログラムの取得までとしました。
実行してみると、メルスペクトログラムの予測ができていることがわかります。これでGPUを用いての予測が確認できました。
$ python tacotron2-test.py
おまけ:Ubuntuにリモート接続
Ubuntuをリモート接続できるようにします。Ubuntuの設定の共有より、画像のように設定します。
以下のコマンドを打ち込み再起動します。
$ sudo gsettings set org.gnome.Vino require-encryption false
$ sudo reboot
Macからリモート接続をする場合はFinderタブの「移動→サーバへ接続」で画像のようにIPアドレスを入力することで接続可能です。
インストールUSBメディアの作成はWindows、リモート接続はMacという不思議な構成で説明を行いましたが、私の開発スタイルに合わせた結果この構成となりました。
参考文献
WindowsでUbuntuのインストールUSBメディアを作成する – diagnose-fix.com
Ubuntu18.04で突然解像度がおかしくなったときの対処法 - Qiita
ubuntu18.04LTS インストール後はSoftware Updateしましょう
Ubuntu18.04 LTSのインストールからNVIDIA GPU Driverのインストールまで - Qiita
Windows環境へのCUDA・cuDNNのインストール | ネジと銀
Installation Guide :: NVIDIA Deep Learning cuDNN Documentation
Ubuntu 18.04にpyenvをインストールする|setoyama60jp|note
Ubuntu に pyenv を利用して Python をインストールする - MathPython
Common build problems · pyenv/pyenv Wiki · GitHub
Windows10もしくはMacOSからUbuntu 18.04 LTSにリモート接続(リモートデスクトップ)してみた - いろいろ試してみる