先日、今まで使えていたAudioCraft(MusicGen)が以下のエラーで起動しなくなりました。
Preparing metadata (setup.py) … error
error: subprocess-exited-with-error
× python setup.py egg_info did not run successfully.
│ exit code: 1
╰─> [9 lines of output]
No CUDA runtime is found, using CUDA_HOME=’C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8′
Traceback (most recent call last):
File “”, line 2, in
File “”, line 34, in
File “C:\Users\minok\AppData\Local\Temp\pip-install-jutczj_m\xformers_7556bee2c41042458481e5ebb4b54959\setup.py”, line 239, in
ext_modules=get_extensions(),
File “C:\Users\minok\AppData\Local\Temp\pip-install-jutczj_m\xformers_7556bee2c41042458481e5ebb4b54959\setup.py”, line 157, in get_extensions
raise RuntimeError(
RuntimeError: CUTLASS submodule not found. Did you forget to run git submodule update --init --recursive
?
[end of output]
note: This error originates from a subprocess, and is likely not a problem with pip.
error: metadata-generation-failed
× Encountered error while generating package metadata.
╰─> See above for output.
note: This is an issue with the package mentioned above, not pip.
hint: See above for details.

この環境は、Pythonの仮想環境で作成していました。
公式サイトを確認してみると、ページの内容が変わり、pythonのバージョンは3.9が推奨され、以前の3.10ではないようです。
これを解決するには、推奨されるバージョンをインストールすればいいのですが、このバージョンでは動作しなくなるプログラムもあるので困りました。複数のpythonのバージョンをインストールして、切り替えて使う手もあるようですが、Dockerで実現することにします。推奨されるバージョンのイメージを使用すればこの問題は解決します。CUDAのバージョンがホストと異なっていても動作します。Dockerを使用するメリットは他にもあります。
- 環境の再現性: Dockerコンテナは、依存関係とアプリケーションの環境をコードで定義できるため、環境の再現性が高まります。これにより、異なるマシンやチームメンバー間で環境を簡単に共有し、同じ条件でコードを実行できます。
- 環境の分離: Dockerコンテナはホストシステムから分離されているため、異なるプロジェクトやタスクで異なる環境を維持することが簡単になります。これにより、依存関係の衝突やバージョンの問題を避けることができます。
- ポータビリティ: Dockerコンテナは、異なるオペレーティングシステムやクラウドプラットフォーム間で簡単に移動できます。これにより、アプリケーションのデプロイとスケーリングが簡単になります。
- 効率と速度: Dockerコンテナは軽量で、高速に起動できます。これにより、デプロイメント、テスト、および継続的インテグレーション/継続的デリバリー(CI/CD)パイプラインの効率が向上します。
- バージョン管理: Dockerイメージはバージョン管理されており、異なるバージョンのアプリケーションや環境を簡単にトラック、ロールバック、および管理できます。
- リソースの効率的な利用: Dockerは、リソースを効率的に共有し、利用することができるため、ホストマシンのリソースをより効率的に利用できます。
- 開発とデプロイの簡素化: Dockerを使用すると、開発、テスト、およびプロダクション環境間でのアプリケーションの移動が簡単になります。これにより、デプロイメントプロセスが簡素化され、エラーが減少します。
- コミュニティとエコシステム: Dockerには活発なコミュニティと広範なエコシステムがあり、多くの準備済みのDockerイメージ、Docker Composeテンプレート、および他のリソースが利用可能です。
というわけで、WindowsのWSLを起動して、Dockerをインストールしておきます。
管理しやすくするために、適当なディレクトリを作成します。
mkdir audio
作成した空のディレクトリに移動して、Dockerfileを作成します。
cd audio
sudo vi Dockerfile
Dockerfileの記述内容は以下になります。色々トラブルに遭遇しましたが、この内容で動作しました。
# ベースイメージを指定
FROM python:3.9-slim-buster
# 必要なパッケージをインストール
RUN apt-get update && \
apt-get install -y git ffmpeg && \
pip install torch==2.0.0+cu118 torchvision==0.15.1+cu118 torchaudio==2.0.1 --index-url https://download.pytorch.org/whl/cu118
# AudioCraftのリポジトリをクローン
RUN git clone https://github.com/facebookresearch/audiocraft /usr/src/app
# 作業ディレクトリを設定
WORKDIR /usr/src/app
# AudioCraftをインストール
RUN pip install -U .
# サーバーを起動
CMD ["python", "./demos/musicgen_app.py", "--listen", "0.0.0.0", "--server_port", "7860"]
作成したDockerfileを元にDockerイメージをビルドします。
docker build -t audiocraft .
次に、コンテナを実行します。
docker run -d --name audio -p 7860:7860 audiocraft
WSLのIPアドレスを確認します。
ip a
IPアドレスを確認したら、ブラウザでアクセスします。
http://IPアドレス:7860

DockerでGPUを利用するためには、NVIDIA Container Toolkitをインストールしておきます。
正しくインストールしてあると以下のコマンドで情報が表示されます。
nvidia-container-cli info
mamushi@n4060:~/audio$ nvidia-container-cli info
NVRM version: 537.42
CUDA version: 12.2
Device Index: 0
Device Minor: 0
Model: NVIDIA GeForce RTX 4060 Laptop GPU
Brand: GeForce
GPU UUID: GPU-73f6ad9a-b926-49a8-5fbb-ce9cb487757b
Bus Location: 00000000:01:00.0
Architecture: 8.9

先のdocker runコマンドではCPUを使用するので、一度コンテナを停止して削除します。
docker stop audio
docker rm audio
下記のコマンドでコンテナを起動します。
docker run --name audio --gpus all -p 7860:7860 -d audiocraft
ブラウザのWeb UIで曲作成中に、GPUの使用状況を確認します。
nvidia-smi

nvidia-smi
コマンドを使用することで、WSL上から直接GPUの状態と使用状況を確認することができます。これにより、次のような詳細な情報を得ることができます:
- GPUの基本情報: GPUの名前、ID、およびドライババージョンなどの基本情報を確認できます。
- GPU利用状況: GPUの利用率、メモリ使用率、およびその他のリソース使用状況を確認できます。
- 実行中のプロセス: GPU上で実行中のプロセスとそれらのプロセスが消費するGPUリソースの量を確認できます。
- 温度と電力: GPUの温度や電力消費を確認できます。
- エラーと警告: GPU関連のエラーや警告を確認できます。
これらの情報は、GPUのパフォーマンスと健康状態をモニタリングし、トラブルシューティングを行うのに非常に有用です。また、nvidia-smi
コマンドはリアルタイムで更新されるため、リアルタイムのフィードバックを提供し、GPUの動作をより正確に把握することができます。
一方、Windowsのタスクマネージャは、基本的なGPU利用状況とメモリ使用状況を提供するだけであり、nvidia-smi
ほど詳細な情報は提供しません。したがって、より詳細なGPUの状態と使用状況の情報が必要な場合には、nvidia-smi
コマンドを使用することが推奨されます。