Amazon EC2で楽曲生成AI「YuE」を使ってみる

Amazon EC2で楽曲生成AI「YuE」を使ってみる

Clock Icon2025.02.06

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のインストーラもでようなので、さらに簡単に使えそうです。

References

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.