Amazon EC2で楽曲生成AI「YuE」を使ってみる
Introduction
楽曲生成AIといえばSunoが有名ですが、
先月、YuEというオープンソースの楽曲生成ソフトウェアが公開されました。
YuEは、Multimodal Art Projectionと香港科技大学(HKUST)が共同で開発した、
Apache2ライセンスで提供される楽曲生成ソフトウェアです。
名前の由来は、中国語で「音楽」と「幸せ」を意味する言葉だそうで、
「yeah」と呼んでよいらしいです。
YuEでは、歌詞を入力するだけでインスト部分とボーカル部分が別々に生成されます。
※中国語、日本語、英語、韓国語などに対応
本記事では、YuEをAmazon EC2でセットアップして楽曲を生成してみます。
Environment
- MacBook Pro (14-inch, M3, 2023)
- OS : MacOS 14.5
- aws-cli : 2.15.56
作業はすべてEC2上で実施します。
Create EC2 instance
まずはYuEを実行するためのEC2インスタンスを起動します。
今回はGPUやメモリを考慮し、g5.2xlargeを使用しました。
AMIはUbuntu 22.04 LTSのものを指定しています。
(Amazon Linux 2023でもいけるかもしれませんが未確認)
# EC2インスタンス起動コマンド例
% aws ec2 run-instances \
--region <your region> \
--image-id ami-xxxxxxxx \
--instance-type g5.2xlarge \
--key-name <your pem key> \
--security-group-ids <your security group> \
--block-device-mappings "[
{
\"DeviceName\": \"/dev/sda1\",
\"Ebs\": {
\"VolumeSize\": 150,
\"VolumeType\": \"gp3\",
\"DeleteOnTermination\": true
}
}
]" \
--tag-specifications "ResourceType=instance,Tags=[{Key=Name,Value=YuE}]"
起動したらsshでログインしてセットアップします。
# ubuntuのAMIをつかった場合
% ssh -i <pem key> ubuntu@<public ip>
Setup YuE
YuEをセットアップする環境を確認。
cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04.5 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.5 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
uname -a
Linux ip-xxxxxxxxx 6.8.0-1021-aws
#23~22.04.1-Ubuntu SMP Tue Dec 10 16:50:46 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
NVIDIAドライバとGPU、CUDAなどの確認。
GPUはA10Gを使用。
% nvidia-smi
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 550.144.03 Driver Version: 550.144.03 CUDA Version: 12.4 |
|-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
|=========================================+========================+======================|
| 0 NVIDIA A10G On | 00000000:00:1E.0 Off | 0 |
...
CUDAの情報も確認。
nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2022 NVIDIA Corporation
Built on Wed_Sep_21_10:33:58_PDT_2022
Cuda compilation tools, release 11.8, V11.8.89
Build cuda_11.8.r11.8/compiler.31833905_0
Conda環境の作成&必要パッケージのインストール
Miniconda のインストーラーをダウンロードして実行。
% wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
% bash Miniconda3-latest-Linux-x86_64.sh
インストール後は以下コマンドを実行して有効化。
% conda init bash
% source ~/.bashrc
YuE用のPython環境(Python 3.8)を作成します。
% conda create -n yue python=3.8 -y
% conda activate yue
Conda環境確認。
% conda info
active environment : yue
active env location : /opt/conda/envs/yue
conda version : 24.11.2
python version : 3.12.8.final.0
チャンネル設定確認。
% conda config --show channels
channels:
- conda-forge
- nvidia
- pytorch
% conda config --show channel_priority
channel_priority: flexible
conda環境ができたらPyTorchなど必要パッケージをインストールします。
% conda install pytorch torchvision torchaudio cudatoolkit=11.8 -c pytorch -c nvidia
YuEリポジトリを取得してセットアップ
GitHubからYuEリポジトリをcloneしてパッケージをセットアップします。
% git clone https://github.com/multimodal-art-projection/YuE.git
% cd YuE
% pip install -r <(curl -sSL https://raw.githubusercontent.com/multimodal-art-projection/YuE/main/requirements.txt)
FlashAttentionもインストール。
% pip install flash-attn
flash-attnインストール時に--no-build-isolationを指定している解説もあったのですが、
私の環境だとビルドが1時間以上たってもおわらなかったので指定してません。
各種パッケージ情報を確認しておきます。
python -c "import torch; print('Torch version:', torch.version); print('CUDA version (PyTorch):', torch.version.cuda); print('cuDNN version:', torch.backends.cudnn.version()); print('CUDA available:', torch.cuda.is_available())"
Torch version: <module 'torch.version' from '/opt/conda/envs/yue/lib/python3.8/site-packages/torch/version.py'>
CUDA version (PyTorch): 12.4
cuDNN version: 90100
CUDA available: True
ここまでできたらYuEの実行準備はOKです。
Execute YuE interence
以下のように、サンプルで用意されている歌詞と音楽ジャンル情報をつかって
推論スクリプトを実行してみましょう。
以下のコマンドを実行すると、モデルファイルのダウンロードからはじまり、ファイル生成が実行されます。
% cd path/your/YuE/inference
% python infer.py \
--cuda_idx 0 \
--stage1_model m-a-p/YuE-s1-7B-anneal-en-cot \
--stage2_model m-a-p/YuE-s2-1B-general \
--genre_txt ../prompt_egs/genre.txt \
--lyrics_txt ../prompt_egs/lyrics.txt \
--run_n_segments 2 \
--stage2_batch_size 4 \
--output_dir ../output \
--max_new_tokens 3000
プロンプト情報はここです。
genre_txtで音楽のジャンルを指定します。
以下のようにスペース区切りで、ボーカルの方向性や音楽のジャンルなどのタグを複数指定できます。
inspiring female uplifting pop airy vocal electronic bright vocal vocal
上位200個のタグはここです。
これ以外にもいろいろタグが使えるらしいです。
lyrics_txtでは歌詞を指定します。
↓はデモで用意されている歌詞。
[verse]
Staring at the sunset, colors paint the sky
Thoughts of you keep swirling, can't deny
I know I let you down, I made mistakes
But I'm here to mend the heart I didn't break
[chorus]
Every road you take, I'll be one step behind
Every dream you chase, I'm reaching for the light
You can't fight this feeling now
I won't back down
You know you can't deny it now
I won't back down
・・・
英語、中国語、日本語、韓国語などの複数の言語が使用可能。
歌詞プロンプトは、構造ラベル (例: [verse]、[chorus]、[bridge]、[outro]) を先頭に付けて
セッションに分割して各歌詞を指定するとのこと。
おそらくラベルは以下の意味と思われる。
- [verse](ヴァース): 曲の節にあたる部分。Aメロ。
- [bridge](ブリッジ)= 曲の中盤に登場する転換部。Bメロ。
- [chorus](コーラス): 曲の「サビ」。
- [outro](アウトロ) : 曲の締めくくり。
※構造ラベルに以下4つ以外に何があるか不明
生成された音楽ファイルのダウンロード
スクリプト実行後、5分〜10分くらいで生成完了しました。
output_dirで指定したディレクトリにファイルが保存されます。
ボーカルのみのmp3ファイル、インストのみのmp3ファイル、それらを組み合わせたmp3ファイルが生成されてます。
scpとかでローカルにダウンロードして確認。
% scp -i <your pem> ubuntu@<EC2_IP>:"/path/your/YuE/output/your-generated.mp3" .
↑のパラメータだと、英語で女性がうたってる曲が生成されます。
日本語の曲も生成してみる
lyrics_txtに日本語で歌詞を記述し、
m-a-p/YuE-s1-7B-anneal-jp-kr-cotモデルを指定して実行すると
日本語の曲も生成できました。
% python infer.py \
--cuda_idx 0 \
--stage1_model m-a-p/YuE-s1-7B-anneal-jp-kr-cot \
--stage2_model m-a-p/YuE-s2-1B-general \
--genre_txt ../my_data/genre.txt \
--lyrics_txt ../my_data/lyrics.txt \
--run_n_segments 2 \
--stage2_batch_size 4 \
--output_dir ../output \
--max_new_tokens 3000
Cleanup
使い終わったら後片付けしましょう。
% aws ec2 stop-instances --region <your region> --instance-ids <your instance id>
Summary
今回はOSSの音楽生成AI、YuEをつかってみました。
今回はやりませんでしたが、既存の曲データを元に音楽を生成することもできます。
また、YuEにGUIがついたとのことです。
Windowsのインストーラもでようなので、さらに簡単に使えそうです。