AudioCraft は Meta 社(旧 Facebook 社)が提供するオープンソースのサウンド生成AI。その中の作曲AIである MusicGen のデモ が Hugging Face 上で公開されている。以下は、その AudioCraft を Windows PC に導入する手順。
前提条件
特に要求スペックなどは公式に書かれてないが、NVIDIA 社のグラフィックボード GeForce RTX シリーズ以降 VRAM 8GB 以上であれば動きそう。理想は 12 GB 以上あるとベスト。ちなみに、私の PC は GeForce GTX の VRAM 8GB なので、ちょっと厳しい環境といえるが、とりあえず動くかどうかを試してみる。
VRAM メモリを確認するには、Windows + R キーを押して表示されるウィンドウに「dxdiag」と打ち込んで「OK」を押す。すると「DirectX診断ツール」というウィンドウが開くので、その「ディスプレイ1」タブの「表示メモリ(VRAM)」の値チェック。ここが 8GB 以上なら、とりあえず OK。
Visual Studio 2022 Community 版 をインストール
Visual Studio で何か開発するというわけではなく、これに含まれるビルドツールが、この後インストールする CUDA Toolkit で必要になる。なので、Visual Studio ごとインストールする必要はないのだけど、ここは面倒なのでまるっとインストールしてしまうことにする。
Visual Studio のダウンロードページを開く。
「Community」の「無料ダウンロード」をクリック。
VisualStudioSetup.exe がダウンロードできたら実行。何か出てくるので、そのまま「続行」。
「ワークロード」タブで「C++によるデスクトップ開発」にチェックを入れて「インストール」。
これでダウンロードとインストールが始まるので、しばらく待つ。
インストールが終わったら「✕」ボタンで画面を閉じる。
PyTorch のインストール コマンドを確認
PyTorch というのは、機械学習でよく使われるライブラリ。これは後ほど pip でインストールするので、最初にそのインストールコマンドを確認しておく。
以下のページを開く。
そのページの中程にある「START LOCALLY」で、まずこれから構築する環境に合うように調整する。ここは「PyTorch Build」→「Stable」、「Your OS」→「Windows」、「Package」→「Pip」、「Language」→「Python」、「Compute Platform」→「CUDA 11.x」(CUDA のいずれか)を選択する。すると「Run This Command」にインストールコマンドが表示されるので、これをコピーして控えておく。
なお Windows の場合、CUDA 12 以降だとうまく動作しないことがあるらしいので、いま(2023年9月現在)動作確認できている 11.x を選んでおくのが無難だと思う。
CUDA Toolkit をインストール
CUDA Toolkit というのは NVIDIA社製 GPU の機械学習プラットフォーム(Compute Unified Device Architecture : CUDA)の開発ツール群。PyTorch がこれを利用するのでインストールしておく。なお、この前に Visual Studio(厳密には、そのビルドツール)がインストールされている(前の手順が終わっている)必要がある。
CUDA Toolkit Archive のページを開く。
ここで「Archived Releases」の中から、先述の PyTorch のインストールコマンド確認時に選択したバージョン(11.x)をダウンロードする。
「Operation System」は「Windows」を選択。それ以外は自身の PC に合わせて選択。私は Windows 11 なので「Version」に「11」を選択。「Installer Type」はどちらでも良い。「exe (local)」は一括ダウンロードしてからインストールするタイプ。「exe (network)」はダウンロードしながらインストールするタイプ。
すべて選択したら「Download」ボタンが現れるのでクリックしてダウンロード。
cuda_XXX_windows.exe(XXX はバージョン)がダウンロードされたら実行。一時的にファイルを展開する場所を選ぶ。これはインストール完了時に削除されるのでどこでも良い。
「同意して続行する」をクリック。
※以下、画像のバージョンが 12.2 となっているが、私の環境では 12 では上手く行かなかった。ということで、以下の11.x であるものとして見ていただきたく。インストールの流れは同じである。
「カスタム (詳細)」を選択して「次へ」をクリック。
「ドライバーコンポーネントの選択」で「CUDA」にだけチェックを入れて「次へ」をクリック。(それ以外のコンポーネントは任意に選択して OK。必要だと思うならチェックを入れても良い)
インストールする場所は特に変更する必要はないので、そのまま「次へ」をクリック。(ディスクの空き容量などの都合でインストールする場所を選びたい場合はここで変更しておく)
インストール結果が表示されるので、そのまま「次へ」をクリック。
これでインストール完了。「閉じる」をクリック。
FFmpeg をインストール
FFmpeg(Fast Forward mpeg)というのは、映像や音声の作成、変換、再生などを扱うライブラリ群。これについてはインストーラは特にない。アーカイブを展開してパスを通すだけ。
ダウンロードページを開く。
Windows のロゴをクリックして「Windows EXE Files」の中から「Windows Builds by BtbN」をクリック。
GitHub のリリースページに移動するので、一番上の Assets の中から「ffmpeg-XXXX-win64-gpl.zip」(XXX の部分はバージョンによって異なる)という名前のファイルを選択してダウンロード。
ダウンロードしたら、zip ファイルを適当な場所に展開する。ここでは C:\Tools\ffmpeg-N-112053-gda784b81a6-win64-gpl という場所に展開したとする。
上記で展開した場所にパスを通す。Windows ボタンから「設定」をクリック。
「システム」→ 「バージョン情報」をクリック。
「システムの詳細設定」をクリック。
「環境変数」をクリック。
ここの設定のやり方は好みだが、私は FFMPEG_PATH という環境変数に FFmpeg のパスを設定して、それをシステムの Path に追加する、というやり方が好きなので、そのやり方を以下に書く。最終的に Path に FFmpeg のパスが追加される形になれば OK。
ということで、「システム環境変数」(下の方)の「新規」をクリック。
「変数名」に FFMPEG_PATH 、「変数値」に C:\Tools\ffmpeg-N-112053-gda784b81a6-win64-gpl\bin (C:\Tools\ffmpeg-N-112053-gda784b81a6-win64-gpl に展開した場合)と入力して「OK」で閉じる。
「システム環境変数」の「Path」を選択して「編集」をクリック。
「新規」をクリック。
空の行が追加されるので、そこに「%FFMPEG_PATH%」と入力して「OK」で閉じる。あとは、そこまでに開いていた設定画面を全て「OK」で閉じて完了。
一応パスが通ってるか確認。Windows キー + R で「cmd」と入力するとコマンドプロンプトが開くので、そこで「ffmpeg -version」と入力して、バージョンやライブラリが表示されれば OK。
Python をインストール
Python については、ここでは Python 3.10.6 をインストールすることにする。これは、今後 Stable Diffusion という画像生成 AI の Web UI である stable-diffusion-webui を入れる予定がある場合、その要求バージョンが 3.10.6 なので、これを入れておくと無難という理由。その予定がない、また特にこだわりがないということであれば最新版(2023年9月時点で 3.11.5)を入れたら良い。
なお、既に Stable Diffusion をインストール済みなら Python は既にインストール済のはずなので、この手順はスキップで OK。
ということで、ダウンロードページを開く。
「Python 3.10.6 – Aug. 2, 2022」のリストの中から「Windows installer (64-bit)」をクリックしてダウンロード。(Ctrl + F のページ内検索で「3.10.6」を検索すると見つけやすい)
python-3.10.6-amd64.exe がダウンロードできたら、そのまま実行。
設定は大体デフォルトのままインストールで OK だけど、「Install Now」のところで一番下に表示されている「Add Python 3.10 to PATH」のチェックボックスは ON にして進める。
インストールが完了したら、軽く動作確認。Windows キー + R で「cmd」と入力するとコマンドプロンプトが開くので、そこで「python –version」と入力して、バージョン「3.10.6」が表示されれば OK。
Python 仮想環境を作成
AudioCraft を実行する Python の仮想環境を作成する。ここでは D:\Tools\AudioCraft というディレクトリを作成して、そこで作業することにする。
Windows キー + R で「cmd」と入力してコマンドプロンプトを開き、上記の場所に移動する。
cd /d D:\Tools\AudioCraft
そこで venv という名前の仮想環境を作成する(この名前は何でも良いが、別の名前にする場合は、以降読み替えること)
python -m venv venv
仮想環境を起動する。
venv\Scripts\activate.bat
これで「(venv)」 というプロンプトが表示されたら、Python の仮想環境が起動している。
pip を更新しておく。
python -m pip install --upgrade pip
「Successfully installed pip-23.2.1」と表示されたら OK。(バージョンはこれを実施時点の最新)
PyTorch をインストールする。このインストールはちょっと重いので、コマンドを実行する前に他のプログラムはなるべく閉じておいた方が良いかもしれない。前の手順で控えておいた PyTorch のインストール コマンドを貼り付けて実行する(下記は私の環境のコマンド例)。
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu117
「Successfully installed」に続けてライブラリとバージョンの一覧が表示されたら OK。
audiocraft をインストールする。
pip install audiocraft
これも「Successfully installed」に続けてライブラリとバージョンの一覧が表示されたら OK。
あと、MusicGen で gradio を使用するので、これをインストールする。
pip install gradio
これも同様に「Successfully installed」云々が表示されたら OK。
なのだけど、私の環境では全てのパッケージについて「Requirement already satisfied」(既にインストール済み)となってた。audiocraft に全部入ってたのかな?なので、この手順は不要かも。
ここまで作業を終えたら、一旦、仮想環境を抜けておく。
venv\Scripts\deactivate.bat
プロンプトが元に戻ったら(「(venv)」というプロンプトが消えたら) OK。
デモプログラムを試す
Meta が公式のデモプロジェクトを公開しているので、それを動かしてみる。
デモプロジェクトは GitHub で公開されているので、これを取得するには Git が必要。まだインストールされていない場合はインストールしておく。
Git のインストールは特に注意点はない。Windows のインストーラを取得して、インストーラの選択肢は全てデフォルトのままインストールで大丈夫。
(Git をインストールしたら)Windows キー + R で「cmd」と入力してコマンドプロンプトを開き、D:\Tools\AudioCraft (仮想環境をつくったディレクトリ)に移動する。
cd /d D:\Tools\AudioCraft
git clone コマンドで audiocraft のデモプロジェクトをクローンする。
git clone https://github.com/facebookresearch/audiocraft.git
前の手順で作成した仮想環境を起動する。
venv\Scripts\activate.bat
audiocraft プロジェクトのディレクトリに移動する。
cd audiocraft
audiocraft/demos 下にあるデモプログラムを起動する。
python demos\musicgen_app.py
「Running on local URL: http://127.0.0.1:7860」と表示されたらサーバ起動完了。
URL が表示されたら(http://127.0.0.1:7860)これにブラウザでアクセスする。すると、以下のようなページが開く。
これでAI音楽生成ができるようになった!
試しに「Input Text」に「happy and fantastic」とでも入力して「Submit」で生成してみる。
初めてのモデルで生成すると、最初にモデルのダウンロードから始まるので、処理が始まるまでしばらく時間がかかる。ダウンロード済のモデルであれば、すぐに生成が始まるので、マシンスペックにもよるが、Duration : 10 の設定で大体30秒から1分程度で生成が完了する。
これが happy で fantastic な曲かどうかはわからないが、とりあえず曲が出来上がる。今回はこんな感じの曲になったが、もう一度 Submit を押すと、また違った曲がつくられる。
こんな感じで、生成するたびに違った曲が出てくるので、これを何度も試しつつ、指示するテキストを変えたり、長さを変えたり、曲調を変えたり、音質を変えたりなど調整していくことでお気に入りの曲に近づけていく、ということになる。
簡単に画面操作を説明しておくと、
- Input Text : どんな曲をつくって欲しいかをテキストで指示する。いわゆるプロンプト入力欄。
- Condition on a melody (optional) File or Mic : 参考元となる曲を mp3 ファイルやマイクなどで入力する。ファイルを渡す場合は、この下の「File」欄にドラッグ&ドロップする。
- Submit : 作曲を開始する。
- Interrupt : (作曲処理中に)作曲を中止する。
- Model : 作曲の学習モデルを選択する。
- Decoder : デコーダーを選択する。よくわからないが、音質が変わる?
- Duration : 曲の長さを設定する。大きいほど長い曲がつくられる。
ちなみに、私の GTX 8GB 程度の環境では、Decoder に「Multiband Diffusion」を選択すると、メモリ不足でエラーになった。同じく、Model に「large」を選択すると、やはりメモリ不足でエラーになった。スペック不足ということですね。これは、PC 新調するまではクラウドを使うのが良さそうかな。
なお、AudioCraft を終了させるときは、コマンドプロンプトで Ctrl + C で停止する。その後、以下のコマンドで仮想環境も停止させておく。
..\venv\Scripts\deactivate.bat
すぐに PC をシャットダウンするなら、こんな丁寧な後始末は不要かもしれないが、その後も PC を起動したまま使い続けるなら、仮想環境が余計なメモリ消費をし続けることになるので、deactivate.bat で停止しておくのが良い。
OutOfMemoryError で落ちる場合
補足情報として、スペックが低い PC で無理やり動かそうとすると OutOfMemory(メモリ不足)で生成が停止することがあるので、それを回避する方法を記載しておく。
torch.cuda.OutOfMemoryError: CUDA out of memory. Tried to allocate 18.00 MiB (GPU 0; 8.00 GiB total capacity; 6.23 GiB already allocated; 5.12 MiB free; 6.44 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation. See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF
こんなエラーが出たら、このメッセージにも書かれているように PYTORCH_CUDA_ALLOC_CONF という環境変数を設定すると良いらしい。ということで、python コマンドでプログラムを起動する前に、set コマンドで以下を設定する。
set PYTORCH_CUDA_ALLOC_CONF=backend:native,garbage_collection_threshold:0.6,max_split_size_mb:128
しかる後に
python demos\musicgen_app.py
で起動する。
PyTorch の公式ドキュメント によると、それぞれ以下の効果があるとのこと。
- backend : アロケータの実装を選択する。現在設定可能なオプションは、PyTorchのネイティブ実装である “native” と、CUDAの組み込み非同期アロケータである “cudaMallocAsync” のどちらか。これが “native” の場合 garbage_collection_threshold の設定が有効になる。
- garbage_collection_threshold : GPU メモリを再利用する際のしきい値。GPU メモリの使用量がこのしきい値(0.6 で設定した場合は 60%)を超えた場合に、アロケータは GPU メモリブロックの再利用するようになる。
- max_split_size_mb : アロケータがこのサイズ(MB単位)より大きなブロックを分割しないようにする。これによって断片化を低減し、メモリ不足になることなく境界線上のワークロードを完了させることができる。デフォルト値は無制限(全てのブロックが分割可能)。
これらを設定することでメモリを何とかやりくりして、できるだけ落ちないように動作してくれるようになるが、その分速度は遅くなる。あくまで低スペック PC で何とか頑張ってみたいという(私みたいな)方向けの参考情報として。