IT系おじさんのチラシの裏
2018年10月~
当サイトの記事にはアフィリエイト広告のリンクが含まれる場合があります

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をクリックすると下記のようなダイアログが出てくるので、テキトーな名前を付けてトークンを生成。

Hugging FaceのページでNew Token

するとこのようにトークンが生成されますが、メッセージのとおり、このダイアログを閉じたら二度と表示されないので、コピーして保存しましょう。

Hugging Faceのトークン表示

そしてコマンドプロンプトへと戻り、右クリックでトークンを貼り付けて[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をインストールする際の注意点

  1. Hugging Faceのアカウントが必要
  2. huggingface-cliのインストールも必要
  3. インストール前に huggingface-cli login によるコマンドプロンプトでのログインをしておくこと
  4. あとは php install stable-audio-tools で勝手にモデルもDLしてくれる
  5. 環境によるかもだが、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

おぉぉ~~~いいじゃん、いいじゃん!

関連記事

コメント

新しいコメントを投稿する

[新規投稿]
 
TOP