ESPnetを動かすための環境設定にはいくつか方法がありますが、ここではDocker環境でGPUを利用しつつ、ESPnetを動作させるための方法について説明します。以下、ESPnetと書いていますがESPnet2を使っています。
https://github.com/espnet/espnet
#Docker環境を作る
まずNvidia GPUが使用できるDocker環境を作ります。ここで重要なのは使用するdockerイメージのバージョンです。ESPnetが対応しているcudaのバージョンのdockerイメージを使う必要があります。またcudaのバージョンはできるだけ新しいほうがよいです。たとえばRTX3000系のGPUを使うためにはcuda11以降を使う必要があります。
FROM nvidia/cuda:11.3.1-devel-ubuntu20.04
使用できるNvidiaのdockerイメージのリストはこちらのサイトで確認できます。baseと書いてあるイメージではなくdevelと入っているものを使用しましょう。baseのほうでは/usr/local/cuda-XX/binが存在しないのでESPnetのインストール時にエラーになります。
https://hub.docker.com/r/nvidia/cuda
Pytorchのバージョンも同様に合わせる必要があります。こちらはESPnetのgithubのページの表を参照してください。私の環境では1.10.1を使っています。
Dockerを起動してESPnetをインストールする
次にdockerを起動して、その環境の中でESPnetのインストールを行います。ESPnetが対応しているcudaの正確なバージョンはこのタイミングで確認できます。対応していないバージョンの場合はエラーメッセージが出て、インストールが停止します。
cd espnet/tools
make
cudaのバージョンでエラーになった場合は、自分の意図したcudaのバージョンが入っているか確認しましょう。cuda11.3の場合は、docker環境の中に/usr/local/cuda-11.3/binが存在するか確認しましょう。nvcc --versionでも確認できます。いずれも「docker環境の中」で確認してください。
espnet/toolsでのmakeの実行結果がおかしくなったらmake cleanしてからmakeしましょう。
#動作確認
docker環境に入って、ESPnet2の適当なフォルダでrun.shを動かして動作確認を行います。cudaまわりの設定が正しくできていれば正常終了します。設定がおかしい場合は学習のところで止まるはずです。
cd espnet/egs2/an4/asr1
./run.sh