『Yukarinライブラリ』ためのLinux環境構築(CUDA10.1)【Ubuntu 18.04 LTS】

#####*注：Ubuntu19.04サポート切れのため"『Yukarinライブラリ』ためのLinux環境構築(RTX対応)【Ubuntu 19.04】" を Ubuntu 18.04 LTS 環境用にリライトしました。**

##### Ubuntu 20 LTS へのインストールをする場合は、コマンドを変更・手順変更が必要です。
##### Windows の WSLのUbuntuでは動きません！！
---

# 1. 概要
Ubuntu 18.04 LTS にて、「ディープラーニングの力で結月ゆかりの声になってみた」のコードを実行するための環境構築の方法を紹介します。
RTX2000シリーズGPU対応のため、CUDA 10.1 をインストールします

**GPUがない or Linux PCがない 人向け**
Google Colaboratory でも学習できました！
[GPUがなくても、Google Colaboratory で結月ゆかりの声になりたい](https://qiita.com/atticatticattic/items/e9eb4a24d63dc7ec1e58)

**「ディープラーニングの力で結月ゆかりの声になってみた」について** 
ヒホ氏が作成した、音質変換ソフトです。
- 動画 : http://www.nicovideo.jp/watch/sm32724409
- コード : https://github.com/Hiroshiba/become-yukarin

**過去バージョンのインストール方法記事**
・ Ubuntu v18.10 : @sakamotothogo 様 
[「ディープラーニングの力で結月ゆかりの声になる」環境構築【Ubuntu Server v18.10】](https://qiita.com/sakamotothogo/items/322012f1a462f27188bf#_reference-9115c2dd255ed5887906) 

・Ubuntu v17.10 : @atticatticattic
 [「ディープラーニングの力で結月ゆかりの声になる」ためのLinux環境構築【Ubuntu 17.10】](https://qiita.com/atticatticattic/items/575d71dab4ee716e4969) 

**インストール後の使い方** 
インストール後の音声変換のやり方は下記を参照願います。
[「ディープラーニングの力で結月ゆかりの声になる」ための基礎知識とコマンド操作](https://qiita.com/atticatticattic/items/f1e4c671d73d815bbad2)

**参考記事**
・[Ubuntu 18.04へのCUDAインストール方法](https://qiita.com/yukoba/items/4733e8602fa4acabcc35)
・[「ディープラーニングの力で結月ゆかりの声になる」環境構築【Ubuntu Server v18.10】](https://qiita.com/sakamotothogo/items/322012f1a462f27188bf#_reference-9115c2dd255ed5887906)

**本記事を参考に環境構築していただいた記事**
[初めての「誰でも好きなキャラの声になれる」ディープラーニング声質変換環境構築【Ubuntu 18.04LTS】](https://qiita.com/BURI55/items/92ba127c7beb95b2b3f0)
環境構築で躓きやすかったところや、自分の記事では補足しきれなかった内容などを書いていただいております！

**補足 : ストレージサイズ**
本気でやりこむと、かなり容量を食うので、1TBほどあった方が安心です。

# 2. 基本環境ソフト・環境設定

## 2.1 基礎ソフト

#### ssh、エディタ、ビルド環境をまとめてインストール

```console
sudo apt install openssh-server emacs vim build-essential git
```

#### 音声処理系 

```console
sudo apt install ffmpeg sox
```

## 2.2 設定
### timezone を変更
ローカライズされていない Ubuntu Server の場合、時刻が UTC(協定世界時間)になっているので日本時間に変更。 

```console
sudo timedatectl set-timezone Asia/Tokyo
```

<details><summary> **IP 固定設定(SSHなどでIP固定したい場合参考にしてください)**</summary><div>
### IP固定(必須ではありません)
自分は ssh や sftp で Linuxマシンにアクセスすることが多いので、IPを固定しました。
もし、必要であれば下記記事を、参考に設定してください。
- https://kusomemo.tokyo/tech/ubuntu1904-ipaddress-settei/
- https://qiita.com/shibata_wk/items/a4ae8999c2b6a801113c

**自分の設定(設定例)**
注: 空白部分にはインデント（タブ）は使わずに全てスペースで埋めてください。 

- 固定IP : 192.168.0.202
- ローカルネットワーク : 192.168.0.0/24 ("/24" : ネットマスク 255.255.255.0)
- ゲートウェイ(ルータ) : 192.168.0.1
- DNS サーバ : 8.8.8.8

```/etc/netplan/50-cloud-init.yaml
# This file is generated from information provided by
# the datasource.  Changes to it will not persist across an instance.
# To disable cloud-init's network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
    ethernets:
        enp10s0:
            dhcp4: false
            addresses: 
              - 192.168.0.202/24
            gateway4: 192.168.0.1
            nameservers:
                addresses:
                  - 8.8.8.8
    version: 2
```
</div></details>



## 2.3 python(pyenv)の インストール
Python はバージョン管理ソフトの```pyenv```を使用してインストールしました。

become-yukarin リポジトリでの実行には ```python 3.6.3```が推奨されていますが、ubuntu で ```apt-get install python```を実行すると ```python 2.X ```系がインストールされてしまうので、```pyenv```を使います。

### pyenv をインストール

**インストールコマンド**

```console
git clone git://github.com/yyuu/pyenv.git ~/.pyenv
```

**ryenvの環境設定**

```console
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n  eval "$(pyenv init -)"\nfi' >> ~/.bashrc

source ~/.bashrc
```

**確認**
which コマンドで pyenv のパスが```/home/[user_name]/.pyenv/bin/pyenv``` になっていることを確認してください。

**ユーザ名 : attic の場合**

```console
which pyenv
> /home/attic/.pyenv/bin/pyenv
```

### pyenv を使って python をビルド

**Python ビルド用ソフト一式をインストール**

```console
sudo apt install -y gcc make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
```

### ビルド & 使用する Pythonバージョンを指定
become-yukarin 推奨バージョンである version 3.6.3 をインストールします。

```console
pyenv install 3.6.3
pyenv global 3.6.3
```

下記のように確認できれば成功です。

```console
python --version
> Python 3.6.3
```

## 3 ディープラーニング実行環境の設定
### 3.1 CUDA Toolkit 10.1 のインストール

インストール用の作業ディレクトリを作り、移動します。

```console
mkdir nvida_driver
cd nvida_driver
```

#### インストールファイルのURL取得 & ダウンロード

Nvidia の [CUDA Toolkit 10.1](https://developer.nvidia.com/cuda-10.1-download-archive-update1?target_os=Linux&target_arch=x86_64&target_distro=Ubuntu&target_version=1804&target_type=debnetwork) のページからインストールコマンドを確認して、記載してあるインストールコマンド実行します。

Linux -> x86_64 -> Ubuntu -> version 18.10 -> installer Type -> dev(network) を選択するとコマンドを確認できます

![スクリーンショット 2020-11-22 14.57.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12429/60548991-0581-9f3e-c4f3-c907e10a7bc3.png)



**補足**
URLは記事作成時点でのものです。変更されている可能性があるので、念のため上記手順でURLを取得してください。

#### インストールコマンド
ウェブサイトに表示されているインストールコマンドを実行。

```console
wget http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1810/x86_64/cuda-repo-ubuntu1810_10.1.168-1_amd64.deb

sudo dpkg -i cuda-repo-ubuntu1810_10.1.168-1_amd64.deb
sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1810/x86_64/7fa2af80.pub
sudo apt-get update
sudo apt-get install cuda
sudo reboot
```
最後に、インストールしたドライバーを反映するためにリブートします。

その後、~/.bashrc の末尾に下記設定を書き加えます。

```
echo 'export PATH="/usr/local/cuda/bin:$PATH"' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH="/usr/local/cuda/lib64:$LD_LIBRARY_PATH"' >> ~/.bashrc 

source ~/.bashrc
```

#### nvida-smiで動作確認
CUDA Version は 11.1 となっていますが、問題ないそうです。


```
attic@deeplearning:~$ nvidia-smi 
Sun Nov 22 15:40:39 2020       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 450.80.02    Driver Version: 450.80.02    CUDA Version: 11.0     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  GeForce GTX 1070    Off  | 00000000:01:00.0 Off |                  N/A |
|  0%   46C    P0    33W / 200W |      0MiB /  8116MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+


```

### 3.2 cuDNN 7.6.X のインストール
CUDA 10.1 に対して、 cuDNN 7.6.X をインストールします。
become-yukarin リポジトリの推奨バージョンがわかりませんが、cuDNN 7.6.5 で動作確認できています。

インストール用の .deb ファイルは下記のURLから、ファイル名から該当するファイルを見つけます。
命名規則は ```[cuDNN Ver]+[cuda version] ```のようです。  
https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64

ファイルURLを調べたら、```wget``` を使ってダウンロードして
**このURLも必ず確認してください**

```
echo "deb https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64 /" | sudo tee /etc/apt/sources.list.d/nvidia-ml.list
sudo apt update

wget https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/libcudnn7_7.6.5.32-1+cuda10.1_amd64.deb
sudo apt install ./libcudnn7_7.6.5.32-1+cuda10.1_amd64.deb 

wget https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/libcudnn7-dev_7.6.5.32-1+cuda10.1_amd64.deb
sudo apt install ./libcudnn7-dev_7.6.5.32-1+cuda10.1_amd64.deb
```


## 4 become-yukarin 設定

pipfreeze のファイルから、使用するライブラリ一式をインストールします。
最新のライブラリを使用するとAPIがなくなったりしているので、動作確認できているライブラリを使用するためです。

git hub にアップした pipfreeze をダウンロードして pip install を実行。
numba, cython の2つは先にインストールしないとエラーが出るので、先に実行する。

```console
wget https://raw.githubusercontent.com/YoshikazuOota/yukarinlib_pipfreez/main/ubuntu18.pip.freeze

pip install --upgrade pip
pip install numba==0.44.0
pip install cython==0.29.21
pip install -r ubuntu18.pip.freeze
```

pythonを対話モードで実行して下記のコマンドを実行してください。
```python``` だけを実行すると対話モードになりますので、下記をコピペしてください。
下記コマンド & 実行結果が表示されれば、大抵OKです。

```console
import chainer
import cupy as cp
a = cp.array([1,2,3])
b = cp.array([2,3,5])
a + b
> array([3, 5, 8])
quit()
```

-------------

<details><summary> **旧記事のライブラリインストール手順**</summary><div>
### 4.1 pip でライブラリインストール
```console
git clone https://github.com/Hiroshiba/become-yukarin.git
```

```console
cd become-yukarin

pip install --upgrade pip
pip install -r requirements.txt
pip uninstall cupy
pip install cupy-cuda101
```

```pip install -r requiremets.txt``` を実行すると ```cupy``` がインストールされるが、CUDA 10.1をインストールしたの ```cupy-cuda101```に入れ替える。

**補足**: 一応、上記コマンドでインストールできるが、```cupy```のインストールは時間がかかるので、requiremets.txt から削除しても良い。

### ~~4.2 requiremets.txt 以外のライブラリをインストール~~
```
pip install tqdm
```

補足: 最新リポジトリでは ```tqdm``` は requiremets.txt に含まれました。


### 4.3 バージョン依存ライブラリの再インストール

```.env
pip install numpy==1.16.2
pip install chainerui==0.3
pip install tensorboard-chainer==0.4.0
```
補足: ~~最新リポジトリでは```pip install chainerui==0.3``` は必要なくなりました~~(chaineruiのバージョンによって動かない場合があるようなので、はやりバージョン指定をしておいてください)

### 4.3 cupy の動作確認

pythonを対話モードで実行して下記のコマンドを実行してください。
```python``` だけで Enter すると対話モードになりますので、下記をコピペしてください

```console
import chainer
import cupy as cp
a = cp.array([1,2,3])
b = cp.array([2,3,5])
a + b
> array([3, 5, 8])
quit()
```

### 4.4 WORLD4py のインストール
2019/6/5 に 待望の pip 対応されました。下記コマンドでインストールできます。

```
pip install world4py
```

~~WORLD4py だけはpipからインストールできないのでソースからインストールする。~~
※下記コマンドでも、インストール可能です。

```console                                                                                                               
git clone https://github.com/yamachu/WORLD4py
cd WORLD4py
python setup.py install
```

### 4.5 ついでに、PYTHONPATH を設定
忘れやすいので、合わせて```PYTHONPATH```を設定しましょう！
ディレクトリ移動した場合は```~/.profile```を開いてパスを変更するのを忘れずに(私もよくここで引っかかります...)！

```console

cd [become-yukarin のディレクトリ]
echo "export PYTHONPATH=\"`pwd`\"" >> ~/.bashrc

source ~/.profile
```

### 4.6 (参考)pythonで使用しているライブラリ一覧
もし、become-yukarin がうまく動かない場合は、ライブラリのバージョンを下記に合わせることで動くかもしれません。


```
$ pip list
Package           Version
----------------- -------
alembic           1.0.10 
APScheduler       3.6.0  
audioread         2.1.8  
chainer           6.0.0  
chainerui         0.3.0  
Click             7.0    
cupy-cuda101      6.0.0  
cycler            0.10.0 
Cython            0.29.9 
decorator         4.4.0  
fastdtw           0.3.2  
fastrlock         0.4    
filelock          3.0.12 
Flask             1.0.3  
gevent            1.4.0  
greenlet          0.4.15 
itsdangerous      1.1.0  
Jinja2            2.10.1 
joblib            0.13.2 
kiwisolver        1.1.0  
librosa           0.6.3  
llvmlite          0.29.0 
Mako              1.0.10 
MarkupSafe        1.1.1  
matplotlib        3.1.0  
msgpack           0.6.1  
numba             0.44.0 
numpy             1.16.2 
pip               19.1.1 
protobuf          3.7.1  
pyparsing         2.4.0  
pysptk            0.1.17 
python-dateutil   2.8.0  
python-editor     1.0.4  
pytz              2019.1 
pyworld           0.2.8  
resampy           0.2.1  
scikit-learn      0.21.2 
scipy             1.3.0  
setuptools        28.8.0 
six               1.12.0 
SQLAlchemy        1.3.4  
structlog         19.1.0 
tqdm              4.32.1 
typing            3.6.6  
typing-extensions 3.7.2  
tzlocal           1.5.1  
Werkzeug          0.15.4 
world4py          0.1 
```
</div></details>

# 最後に

早速、試したい方は下記のコマンド解説編を参考にしてください。

[「ディープラーニングの力で結月ゆかりの声になる」ための基礎知識とコマンド操作](https://qiita.com/atticatticattic/items/f1e4c671d73d815bbad2)

インストール時にトラブルがあった場合は、コメントいただければ、わかる範囲でお答えできます。

それでは、楽しい音声変換を！