Stable Audio Openをローカルに構築(docker使用)

スポンサーリンク

Stable Audio Openがテキストで音楽を作成できるということで、自分のPCにインストールします。

Stable Audio Open とは

Stable Audio Open は、テキストプロンプトから最大47秒のオーディオサンプルとサウンドエフェクトを生成できるオープンソースのAIモデルです。このモデルを使うことで、ドラムビート、楽器リフ、アンビエントサウンド、フォーリーなど、音響制作に必要なさまざまなオーディオ要素を作成できます。

主な機能と利点

  • テキストプロンプトからの生成: 簡単なテキストプロンプトを入力するだけで、オーディオサンプルやサウンドエフェクトを生成できます。
  • 多様なオーディオエフェクト: ドラムビートや楽器リフ、アンビエントサウンド、フォーリーなど、さまざまなサウンドエフェクトを作成可能です。
  • オーディオ・バリエーションとスタイル転送: 生成されたオーディオのバリエーションを簡単に作成したり、異なるスタイルに変換することができます。
  • カスタムオーディオデータでの微調整: 自分のオーディオデータを使ってモデルを微調整し、より個別のニーズに合ったサウンドを生成できます。

使用方法

Stable Audio Open は、音楽やサウンドデザインの分野で広く利用できます。例えば、ドラマーは自分のドラム録音を微調整して新しいビートを作成したり、映画制作者は独自のサウンドエフェクトを生成して映画の音響を強化したりできます。

Stable Audio との違い

Stable Audio は商用製品であり、最大3分までの一貫した音楽構造を持つ高品質なフルトラックを作成できます。また、オーディオからオーディオへの生成やマルチパート作曲などの高度な機能も備えています。一方、Stable Audio Open は短いオーディオサンプルやサウンドエフェクトの生成に特化しており、フルソングやメロディー、ボーカルには最適化されていません。

学習データと倫理的な配慮

Stable Audio Open のモデルは、FreeSoundやFree Music Archiveのデータを使用してトレーニングされています。これにより、クリエイターの権利を尊重しながら、オープンなオーディオモデルを提供しています。

無料で利用できるか?

Stable Audio 2がリリースされたため、Stable Audio Open(バージョン1)は無料で使用できるようになっています。Hugging Faceでモデルのウェイトをダウンロードし、自由に利用できます。

以下のGitHubを参考に作業をします。Stable Audio Openの公式GitHubとDockerで実現できるGitHubのページです。

GitHub - Stability-AI/stable-audio-tools: Generative models for conditional audio generation
Generative models for conditional audio generation - Stability-AI/stable-audio-tools
GitHub - SaladTechnologies/stable-audio-open
Contribute to SaladTechnologies/stable-audio-open development by creating an account on GitHub.

必要な要件を確認すると以下のようになっています。

Requires PyTorch 2.0 or later for Flash Attention support

Development for the repo is done in Python 3.8.10

Docker版のStable Audio OpenをGitHubページでテストしたのですが動作しました。Flash Attentionのエラーが出ますが動作はしました。

No module named ‘flash_attn’
flash_attn not installed, disabling Flash Attention

PyTorch 2.0以降とPython 3.8.10のいずれかがあれば良いということです。このエラーメッセージは、flash_attnがインストールされていないため、その機能が無効になっていることを示しています。しかし、もしflash_attnの機能を使用しない場合、これは無視しても問題ありません。

もし、flash_attnの機能を使用したい場合には、その依存関係を正しくインストールする必要がありますが、現時点では特に必要ないのであれば、無視しても動作に支障はないはずです。

それでは作業をしていきましょう。WSL(ubuntu24.04)でStable Audio Openが動作するようにします。WSLにdockerをインストールしておきます。またNVIDIAコンテナツールキットもインストールしておきます(GPUを使用する場合)。

自分のパソコンにDocker版のStable Audio Openのクローンを作成します。

git clone https://github.com/SaladTechnologies/stable-audio-open.git

作成されたディレクトリに移動します。

cd stable-audio-open

ローカルで実現するため以下を行います。
hello-gradio.pyを編集します。
demo.launch(server_name=”0.0.0.0″, server_port=8000)がコメント扱いになっているので解除します。逆にdemo.launch(server_name=”[::]”, server_port=8000)をコメント扱いにします。
必要に応じて上のDockerfileに書き換えます。

Dockerイメージのビルドをします。

docker image build -t sao1 -f Dockerfile .

イメージをホストに残しておき、コンテナの削除後も再度イメージのダウンロードが必要ないようにするためには、--rmオプションを削除するだけで済みます。これにより、コンテナが停止してもイメージはホストに残ります。

以下は、修正後のコマンドです。ここでHugging Faceでトークンを取得しておく必要があります。さらにStable Audio Openのページでサインアップを済ませてログインしておく必要があります。これをやっておかないとコンテナを起動することができません。Hugging Faceのプラットフォームには、ユーザー登録が必要なモデルやリソースがいくつか存在します。

トークン取得先
https://huggingface.co/settings/tokens

サインアップ先
https://huggingface.co/stabilityai/stable-audio-open-1.0

以上を済ませんたらコンテナを立ち上げます。

修正後のコマンド

docker run -it -p 8000:8000 --gpus all -e HF_TOKEN="YOUR_HUGGINGFACE_ACCESS_TOKEN_READ" YOUR_IMAGE_NAME

これで、コンテナが停止しても、イメージはホストに残り、再度ダウンロードする必要がなくなります。

イメージとコンテナの管理

さらに、頻繁に使用する場合は、コンテナを名前付きで作成し、停止した後に再起動できるようにしておくと便利です。

コンテナの作成と起動

docker run -it --name my_stable_audio_container -p 8000:8000 --gpus all -e HF_TOKEN="YOUR_HUGGINGFACE_ACCESS_TOKEN_READ" YOUR_IMAGE_NAME

コンテナの停止

コンテナを停止するには、別のターミナルから以下のコマンドを実行します。もしくはコンテナをインタラクティブに実行しているターミナルで、CTRL+Cを押すことでコンテナを停止できます。これは特に -it フラグを使用してコンテナを実行している場合に有効です。

docker stop my_stable_audio_container

コンテナの再起動

停止したコンテナを再起動するには、以下のコマンドを実行します。

docker start -ai my_stable_audio_container

docker start -aiのオプションについて。

  • -a--attach の短縮形で、コンテナの標準出力と標準エラー出力にアタッチします。
  • -i--interactive の短縮形で、コンテナを対話的に起動し、標準入力を開いたままにします。

これで、コンテナが停止しても削除されず、再起動して再利用することができます。これらの方法を組み合わせることで、効率的にコンテナとイメージを管理できます。

コンテナを起動すると以下のような表示がされると思います。

/opt/conda/lib/python3.10/site-packages/torch/nn/utils/weight_norm.py:28: UserWarning: torch.nn.utils.weight_norm is deprecated in favor of torch.nn.utils.parametrizations.weight_norm.
warnings.warn(“torch.nn.utils.weight_norm is deprecated in favor of torch.nn.utils.parametrizations.weight_norm.”)
Running on local URL: http://0.0.0.0:8000

WSLで実行している場合、0.0.0.0:8000のアドレスはコンテナ内のローカルアドレスを指しています。WSLのIPアドレスを取得して、正しいURLでアクセスする必要があります。

WSLのIPアドレスを確認する ターミナルでWSLのIPアドレスを確認します。ip aコマンドを使用します。

ip a

WSLのネットワークインターフェースの一つにinetで始まるIPアドレスがあります。例えば、以下のような出力が得られるかもしれません。

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:15:5d:43:a4:7b brd ff:ff:ff:ff:ff:ff
inet 172.25.209.126/20 brd 172.25.223.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::215:5dff:fe43:a47b/64 scope link
valid_lft forever preferred_lft forever

ブラウザでアクセスする 取得したIPアドレスを使用してブラウザでアクセスします。例えば、IPアドレスが172.25.209.126の場合、次のようにアクセスします。

http://172.25.209.126:8000
タイトルとURLをコピーしました