windows10,WSL2でESPNetの環境構築【音声合成】

# はじめに
windows環境で音声合成の学習を回したい人向けの記事です。
windowsで別の作業をやりながら学習が回せます。

# 1. WSL2をインストールする
[こちらのページ](https://docs.microsoft.com/ja-jp/windows/wsl/install)の手順に従って進めていきます。

## 1.1 管理者権限でPowerShellを起動

デスクトップ画面左下にある検索バーに「powershell」と入力して、
「管理者として実行する」をクリックします。

![wsl_powershell_launch.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1604294/9c95ec76-c37a-47d9-2046-cbe3c8049e91.png)

---

するとタスクバーに管理者マークのタブが出てくるのでこれをクリック

![user_check.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1604294/ff7fc2e4-f2c2-d5e3-abf1-eadbd62ef833.png)

---

「<b>はい</b>」をクリックして、PowerShellを管理者権限で開きます。

![user_check_yes.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1604294/0aec65bb-cc3b-960a-ec4e-992877c631eb.png)

---

するとこのような画面が出てきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1604294/77eecf50-b8af-9447-c048-514509b7e2f4.png)


## 1.2 インストールコマンドを実行
PowerShellに
`wsl --install`
と入力してエンターキーを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1604294/3d836e5b-2eb9-809c-cc92-3b55988a1eb6.png)

---

実行が完了するとこのような画面になります。
機能を有効化するには、<b>pcを再起動する必要があるので、再起動します。</b>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1604294/9d1c926e-d1dd-87f2-e889-00ec358944b4.png)

## 1.3 WSLのバージョン確認
PCを再起動したら、左下の検索バーで「powershell」と入力し、そのままエンターキーを押して、通常モードでPowerShellを起動します。

PowerShellが起動したら`wsl -l -v`と打ち込んでエンターキーを押します。

VERSIONの下の数字が2であればOKです。

![wsl_version_check.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1604294/b9d938ef-ab2f-4a2a-aa0c-23b7024b09c7.png)

<details><summary><b>バージョンが2ではなかった場合</b></summary>

バージョンが2ではなかった場合は、`wsl --set-default-version 2`と入力してエンターキーを押します。

そして再度`wsl -l -v`と入力してエンターキーを押して、バージョンが2と表示されればOKです。

</details>



## 1.4 windowsのバージョン確認
<b>※2022/03/20追記</b>
windowsのバージョンが21H2以上でないとcudaがうまく動かないので、以下のように
`winver`
と入力してエンターを押して、windowsのバージョンを確認してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1604294/dc8a2bfa-7ba6-6800-c18c-8766f87b821c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1604294/9fa65660-8f0b-b010-1a4c-30cd71ce4f4c.png)

バージョンが21H1以下だった場合、アップデートして再起動してください。

## 1.5 Ubuntuのセットアップ
[1.3 WSLのバージョン確認](#13-wslのバージョン確認)と同様に、通常モードでPowerShellを起動します。

PowerShellが起動したら、`Ubuntu`と打ち込んでエンターキーを押します。
すると、`Installing, this may take a few minutes...`と表示されるので、インストールが完了するまでしばらく待ちます。

<details><summary><b>エラーが出てUbuntuが起動できないとき</b></summary>
このようなエラーが出てUbuntuが起動できない場合、BIOSの設定を変える必要があります。
CPUの仮想化が無効になっているのを、有効にしなければなりません。
 
<b>WslRegisterDistribution faild with error: 0x80370102
Error: 0x80370102 ?????????????????????????????????????</b>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1604294/499ad07b-0716-97cd-b0e5-3bcbb0474c92.png)

以下は、WSLのインストール手順の過程で出たエラーの対処の記録です。
BIOSは人によって違うと思いますので、そこは各自調べていただけると幸いです。
参考サイトを張っておきます。
http://intint000.blog96.fc2.com/blog-entry-2072.html

#### _1 PCを再起動してBIOSを起動する
起動するときに「del」キーを押しっぱなしにして、BIOS画面を表示させます。
起動するとこのような画面になります。(使ってるマザーボードによって異なります)

![MSI_SnapShot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1604294/c1389928-cc47-c1ec-5b22-18a57bd55319.png)


#### _2 Advancedの項目に切り替える

![MSI_SnapShot_00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1604294/b2b7bd28-bc1c-fb4d-ebf7-9a390e952faf.png)

#### _3 OCの項目を選択

![MSI_SnapShot_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1604294/407b2d74-4a98-4342-a980-cf606b75c0ea.png)

#### _4 CPUの機能を選択

![MSI_SnapShot_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1604294/d6e14c1f-bd31-c06f-273a-2aa9544f679f.png)

#### _5 SVM Modeを有効にする

![MSI_SnapShot_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1604294/adf37ad3-4e21-1bed-7fb0-019edceac44a.png)

![MSI_SnapShot_04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1604294/ee84e51f-a637-733e-3b4c-ed8b94f1bbd6.png)

![MSI_SnapShot_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1604294/2ea2094f-6b03-629a-0609-63e693a41455.png)

#### _6 BIOSを閉じて起動する
これでPowerShellでUbuntuと入力すると起動するはずです。

</details>


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1604294/3551c68e-8e89-f0b0-a2fd-dfa48d78a4e0.png)

---

インストールが完了すると、ユーザーネームの入力が求められます。
好きな名前を設定してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1604294/bbe6a097-faba-1940-6e96-3a6a91e103f9.png)

---

名前を設定すると、次にパスワードの設定を求められます。
パスワードを打ち込んでも<b>何も表示されず</b>、困惑してしまうかもしれませんが、
<b>これは仕様です</b>。何も表示されていなくてもちゃんと入力は受け取っています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1604294/229daf32-9e40-6e2f-599c-270adccf03b3.png)

---

確認のため、もう一度パスワードの入力を求められます。
間違えないようにもう一度同じパスワードを打ち込みましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1604294/3bb74b4b-6556-0ce9-20ff-0aafc49e6309.png)

---
パスワードを再入力して、
このような表示が出たらセットアップ完了です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1604294/af31b152-782d-8f7e-3afe-9705909ac0b7.png)


# 2. CUDA WSL-Ubuntu版をインストールする
<b>※これはNvidia製のGPU環境用の項目です。ESPNetはCPUでの学習もできますが、時間がかかるのでGPUを導入することを推奨します。</b>

参考サイト：https://takake-blog.com/wsl-nvidia-cuda/


## 2.1 windowsにNvidia driverがインストール済みか確認
<b>※2022/03/20追記</b>
PowerShellを開いて、
`nvidia-smi`
と入力してエンター。
以下の画像のように表示されればOKです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1604294/bedfc4ba-fc91-d1f1-87eb-f8ac6c804bb3.png)

画像のように表示されない場合は、[こちら](https://www.nvidia.com/Download/index.aspx?lang=en-us)からドライバをダウンロード、インストールしてください。

## 2.2 インストールコマンドの実行

PowerShellのまま作業をしてもいいのですが、謎の背景などで見ずらいので、一旦PowerShellを閉じます。
そして、左下の検索バーで`ubuntu`と入力してエンターキーを押します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1604294/489922a4-f3c6-2bb0-966a-e06ab652828b.png)

---

起動するとこのような画面になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1604294/a1c63f6a-568e-90bb-03ea-e930b16d6497.png)

---

この後の手間を省略するために、一旦`sudo echo test`と入力してエンター。
すると、パスワードの入力を求められるので、[4. Ubuntuのセットアップ](#4-ubuntuのセットアップ)の項で設定したパスワードを入力してエンター。
するとこのように`test`と表示されるはずです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1604294/203b1941-913b-736f-e1fa-7c54b05e9aa4.png)

---

CUDAのインストールコマンドを以下に示します。(参考：https://developer.nvidia.com/cuda-downloads?target_os=Linux&target_arch=x86_64&Distribution=WSL-Ubuntu&target_version=2.0&target_type=deb_local)
```CUDA11.6_install_command
wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin
sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/11.6.1/local_installers/cuda-repo-wsl-ubuntu-11-6-local_11.6.1-1_amd64.deb
sudo dpkg -i cuda-repo-wsl-ubuntu-11-6-local_11.6.1-1_amd64.deb
sudo apt-key add /var/cuda-repo-wsl-ubuntu-11-6-local/7fa2af80.pub
sudo apt-get update
sudo apt-get -y install cuda
echo "wsl ubuntu cuda toolkit is installed"
```
このコマンドをUbuntuのウィンドウにコピペしてください。
<b>※ペーストは`ctrl+V`ではなく右クリックです。</b>

---

インストールが終わったら、以下のコマンドで確認します。
`apt show cuda`と入力してエンター。

このように表示されればOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1604294/ce3c81b6-d910-b66b-1fdc-d67820cb505b.png)


# 3. Nvidia CUDA Compilerをインストールする
<b>※これはNvidia製のGPU環境用の項目です。ESPNetはCPUでの学習もできますが、時間がかかるのでGPUを導入することを推奨します。</b>

以下のコマンドを実行します。
`sudo apt install nvidia-cuda-toolkit -y`

インストールが完了したら、`nvcc -V`と入力してエンターで確認。
このように表示されればOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1604294/a1352653-9dcc-b6d3-b013-38194bde3286.png)

# 4. ESPNetの環境構築
公式ドキュメント：https://espnet.github.io/espnet/installation.html
まず、ESPNetの環境構築をするうえで必要なパッケージをインストールします。
`sudo apt install make g++ unzip -y`と入力してエンター。(コピペ推奨)
パスワードの入力を求めれらたら適宜入力してエンター。

<details><summary>インストールされているかの確認</summary>

上のコマンドは、`make` , `g++` , `unzip`の3つのパッケージをインストールするコマンドです。
なので
`apt show [パッケージ名]`
のようにそれぞれで指定して確認できます。
「<font color='Red'>E:</font> No packages found」などと表示されなければ、正常にインストールされています。

</details>

`sudo apt-get install cmake sox libsndfile1-dev ffmpeg flac -y`と入力してエンター。(コピペ推奨)
パスワードの入力を求めれらたら適宜入力してエンター。

インストールが終わったら、以下のコマンドをコピペしてESPNetの環境構築を行います。
<b>※ペーストは`ctrl+V`ではなく右クリックです。</b>
```ESNet Setup.
git clone https://github.com/espnet/espnet
cd espnet/tools
./setup_anaconda.sh miniconda espnet 3.8
make TH_VERSION=1.10.1 CUDA_VERSION=11.3
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."
```

---

処理が終わったら、`ls`と入力してエンター。
このように表示されればOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1604294/5c7476a6-dece-4093-67f2-06dfb2b9a704.png)

# cudaがちゃんと動くか確認
上の画像の状態で（condaのespnet環境下で）`python`と打ち込んでエンター。
pythonが起動したら
`import torch`
と入力してエンター。
`print(torch.cuda.is_available())`
と入力してエンター。

結果が`True`と表示されていれば問題ありません。

<details><summary><b>結果がFalseだった場合</b></summary>

pytorchが正常に機能していない可能性が高いです。
[公式サイト](https://pytorch.org/)を参考にLTS版のpytorchをインストールし直します。

cudaの確認の続きからの操作：
・`exit()`と入力してエンター。

・以下をコピペしてエンター。
```
pip3 install torch==1.8.2+cu111 torchvision==0.9.2+cu111 torchaudio===0.8.2 -f https://download.pytorch.org/whl/lts/1.8/torch_lts.html
```
これで再度cudaの動作確認をして`True`であれば問題ないです。
</details>

# おわりに
<b>※2022/03/29追記</b>
GTX1080Ti , CUDA11.1 , pytorch 1.8.2 LTS
上記の環境で`RuntimeError：CUDAエラー：CUBLAS_STATUS_EXECUTION_FAILED 'cublasGemmEx（handle、opa、opb、m、n、k、＆ falpha、a、CUDA_R_16F、lda、b、CUDA_R_16F、ldb、＆ fbeta、c、CUDA_R_16F、ldc、CUDA_ ）'`
というエラーが出て学習が回らないという報告がありました。
調べたところ、修正されていない問題のようです。→https://github.com/pytorch/pytorch/issues/56747
CUDA10.2で動作したという報告がありましたので、お手数ですが上記の環境(グラボがGTX1080Ti)の方は適宜バージョンの変更をお願いいたします。

---

これでESPNetの環境構築は終了です。お疲れさまでした。

次回記事で学習を回すまでを解説します。

次回記事はこちら：https://qiita.com/seichi25/items/bde466744f9b3190b0d3