Stable Audio Open 1.0のインストールに関する備忘録
音楽生成AIであるStable Audioの無料版、Stable Audio Open 1.0が公開されたとのことで、さっそくWindows環境へインストールしようとしたのですが、ちょっとつまずいたので、備忘録がてらここにメモしておきます。
概要
Stable Audio Open 1.0のページ
https://huggingface.co/stabilityai/stable-audio-open-1.0
前提条件
- Python 3.10のインストール
- PyTorchのインストール
- stable-audio-toolsのインストール
参考にした資料
ジコログ様のページ:【音楽生成AI】Stable Audio Open 1.0のインストール
Hugging Faceのアカウントとcliツールのインストールが必要
Stable Audio Open 1.0のインストールは下記2行だけで済むと聞いて実行してみたのですが、失敗しました。pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121 pip install stable-audio-tools
エラーメッセージ:
Cannot access gated repo for url https://huggingface.co/stabilityai/stable-audio-open-1.0/resolve/main/model_config.json
なにやら、下記URLへのアクセス権がないぞ!と怒られています。
https://huggingface.co/stabilityai/stable-audio-open-1.0/resolve/main/model_config.jsonほうほう、とブラウザにURLを入力してみたところ、
Access to model stabilityai/stable-audio-open-1.0 is restricted. You must be authenticated to access it.
と表示され、開けません。
あぁ、Hugging Faceへのログインが必要なのかな?ということで、さっそくアカウントを作成。メールアドレスと名前入力するだけで作れました。
しかし、これだけではPythonスクリプトからHugging Faceへのログインは出来ないはずです。
それはそうでしょうとも。ログイン情報はブラウザのクッキーにトークンという形で保存されているはずで、よしんば勝手にブラウザをチェックするにいくとしても、どのブラウザをユーザーが使っているかなんてわかるはずがありません。
ということで、「Cannot access gated repo for url https://huggingface.co」でググってみたところ、huggingface-cliのインストールが必要、とわかりました。
そいや、Hugging Faceのアカウント作った直後にhuggingface-cli入れろみたいなこと言われたけど無視してました…。
pip install huggingface_hub[cli]
huggingface-cliとだけ入力して実行するとヘルプが表示されたので、その中のloginコマンドを使ってみることにします。
huggingface-cli login To login, `huggingface_hub` requires a token generated from https://huggingface.co/settings/tokens . Token can be pasted using 'Right-Click'.
https://huggingface.co/settings/tokens でトークンを生成せよ、とのことです。
Hugging FaceのページでNew Tokenをクリックすると下記のようなダイアログが出てくるので、テキトーな名前を付けてトークンを生成。
するとこのようにトークンが生成されますが、メッセージのとおり、このダイアログを閉じたら二度と表示されないので、コピーして保存しましょう。
そしてコマンドプロンプトへと戻り、右クリックでトークンを貼り付けて[ENTER]を押せばログイン完了。
Token can be pasted using 'Right-Click'. Enter your token (input will not be visible): Add token as git credential? (Y/n) Token is valid (permission: fineGrained). Your token has been saved in your configured git credential helpers (manager). Your token has been saved to [ユーザーフォルダ]\.cache\huggingface\token Login successful
メッセージ上に書かれているとおり、右クリックしてもコマンドプロンプトにトークンは表示されないため、誤って何度も貼り付けないよう注意。まぁログイン失敗したら、またhuggingface-cli loginを実行すれば良いだけです。
これでstable-audio-toolsのインストールが出来るはずです。
pip install stable-audio-tools
Stable Audio Open 1.0のサンプルコードの実行とランタイムエラー
下記ページに、音楽生成のサンプルコード(Python)があるため、コピペして使うのですが、ランタイムエラーが発生してちょっと悩みました。
https://huggingface.co/stabilityai/stable-audio-open-1.0
import torch
import torchaudio
from einops import rearrange
from stable_audio_tools import get_pretrained_model
from stable_audio_tools.inference.generation import generate_diffusion_cond
device = "cuda" if torch.cuda.is_available() else "cpu"
# Download model
model, model_config = get_pretrained_model("stabilityai/stable-audio-open-1.0")
sample_rate = model_config["sample_rate"]
sample_size = model_config["sample_size"]
model = model.to(device)
# Set up text and timing conditioning
conditioning = [{
"prompt": "128 BPM tech house drum loop",
"seconds_start": 0,
"seconds_total": 30
}]
# Generate stereo audio
output = generate_diffusion_cond(
model,
steps=100,
cfg_scale=7,
conditioning=conditioning,
sample_size=sample_size,
sigma_min=0.3,
sigma_max=500,
sampler_type="dpmpp-3m-sde",
device=device
)
# Rearrange audio batch to a single sequence
output = rearrange(output, "b d n -> d (b n)")
# Peak normalize, clip, convert to int16, and save to file
output = output.to(torch.float32).div(torch.max(torch.abs(output))).clamp(-1, 1).mul(32767).to(torch.int16).cpu()
torchaudio.save("output.wav", output, sample_rate)
コードと言ってもスクリプトなのでコンパイル等は不要。単にテキストファイルにコピペしてPythonで実行するだけ。
例えば test.py というテキストファイルに上のコードをコピペしたら、コマンドプロンプトで python test.py と実行するばOK。VBScriptやJavaScript、PHPスクリプトと何ら変わりません。
しかし、今回、下記のようなランタイムエラーが発生してしまいました。
C:\>python test.py Traceback (most recent call last): File "test.py", line 24, in <module> output = generate_diffusion_cond( File "C:\Python31\lib\site-packages\stable_audio_tools\inference\generation.py", line 138, in generate_diffusion_cond seed = seed if seed != -1 else np.random.randint(0, 2**32 - 1) File "mtrand.pyx", line 746, in numpy.random.mtrand.RandomState.randint File "_bounded_integers.pyx", line 1336, in numpy.random._bounded_integers._rand_int32 ValueError: high is out of bounds for int32
参考にさせて頂いたジコログ様のページでもエラーが発生したと書いてあったので、同じかと思ったのですが、clip/clip.pyには問題ないようなので違うエラーの模様。
「high is out of bounds for int32」と書いてあるとおり、ランダム値を生成する際の値が32bitの数値を超えてるよ、ってことらしいです。そりゃそうだ。
該当箇所は、generation.pyの138行目と書いてあるため、実際に中を開いてコードを修正しました。
ちなみに、ファイルの場所は、うちの環境だと「C:\Python31\lib\site-packages\stable_audio_tools\inference\generation.py」ですが、これはpythonを C:\Python31 にインストールしているからなので、環境によって場所は違います。
誤)seed = seed if seed != -1 else np.random.randint(0, 2**32 - 1) 正)seed = seed if seed != -1 else np.random.randint(0, 2**32 - 1, dtype=np.int64)
誤り…というより、random.randint関数の第三引数は新しいバージョンで追加されたか、あるいはWindowsのコマンドプロンプトで実行する場合のみの問題でしょうか。Pythonまともに使ったことないから知らんけど。
ともあれ、関数名で検索すれば、dtypeというパラメータがあり、64ビットの指定が出来ることがわかるため、そう修正しただけです。
実際これで問題なく動いたのでOKでしょう。
まとめ
Stable Audio Open 1.0をインストールする際の注意点
- Hugging Faceのアカウントが必要
- huggingface-cliのインストールも必要
- インストール前に huggingface-cli login によるコマンドプロンプトでのログインをしておくこと
- あとは php install stable-audio-tools で勝手にモデルもDLしてくれる
- 環境によるかもだが、generation.pyの138行目に ,dtype=np.int64 の記述を追加
おまけ
Stable Audio Open 1.0 をローカルにインストールして生成してみた音楽。
Prompt: 128 BPM tech house drum loop
Prompt: J-POP ambient piano
FacebookのAudioCraftを試した際にも感じましたが、128BPM Drumみたいなのはわりとよく出来ているけど、これならMusic Makerのサウンドプールとあまり変わらないんですよねー。それはそれですごいことではありますが、若干残念な気持ちがあるのも事実。
音楽生成AIの有料サービスのデモ等を見ていると、もっと素晴らしい音楽を生成できているので、Promptをもっと詳しく書かないといけないのかしら。
追記:
…あらためてStable Audio Open 1.0の説明を読んでいたら、長尺の音楽には向いておらず、短めの自然の音、つまり効果音などに向いていると書かれていたので、雨音を試してみました。
Prompt: rain sound
おぉぉ~~~いいじゃん、いいじゃん!