0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

さくらインターネットのGPUサービス高火力 DOKでYuE(音楽生成モデル)を試す

Last updated at Posted at 2025-05-08

高火力 DOKはコンテナー型のGPUサービスで、NVIDIA V100とかH100を実行時間課金で利用できるサービスです。

image.png

コンテナー型GPUクラウドサービス 高火力 DOK(ドック) | さくらインターネット

今回はこの高火力 DOKで、YuE(乐。音楽生成モデル) を試してみました。

参考

YuEを使って音楽生成を始めよう! 🎵を参考にさせてもらっています。

とりあえず試す

コンテナレジストリにプッシュ済みのイメージを使って実行してみたい方は、DOKにて新しいタスクを作成し、以下の情報を入力してください。

項目 設定
イメージ dok-handson.sakuracr.jp/yue
環境変数 LYRIC = https://raw.githubusercontent.com/multimodal-art-projection/YuE/refs/heads/main/prompt_egs/lyrics.txt
GENRE = inspiring female uplifting pop airy vocal electronic bright vocal vocal

LYRICは歌詞が書かれたファイル、GENREは生成する音楽の雰囲気を指定します。実行完了すると、MP3ファイルが生成されます。H100で15分7秒 (907 秒)かかりました。

コンテナイメージの作成と登録

上記タスクで利用したDockerイメージを作成する手順は以下の通りです。完成版はgoofmint/dok-yueにありますので、実装時の参考にしてください。

Dockerfile の作成

YuEを使って音楽生成を始めよう! 🎵の内容に沿って、Dockerfileを作成します。

ベースイメージ

ベースは FROM nvidia/cuda:12.5.1-devel-ubuntu22.04 です。

FROM nvidia/cuda:12.5.1-devel-ubuntu22.04

ライブラリのインストール

Pythonと、必要なライブラリをインストールします。

RUN apt-get update && \
    apt-get install -y \
        git \
	git-lfs \
        python3 \
        python3-pip \
        wget && \
    mkdir /app /opt/artifact && \
    apt-get clean && \
    git lfs install && \
    rm -rf /var/lib/apt/lists/*

リポジトリのクローンと依存ライブラリのインストール

multimodal-art-projection/YuE: YuE: Open Full-song Music Generation Foundation Model, something similar to Suno.ai but openをクローンして、依存ライブラリをインストールします。

WORKDIR /app
RUN git clone https://github.com/multimodal-art-projection/YuE.git yue
WORKDIR /app/yue
# 依存ライブラリのインストール
RUN pip install -r requirements.txt && \
  pip install packaging && \
  pip install flash-attn --no-build-isolation && \
  pip uninstall -y protobuf && \
  pip install protobuf==3.20.0 && \
  pip install --upgrade tensorflow && \
  pip install --upgrade transformers

WORKDIR /app/yue/inference
RUN git clone https://huggingface.co/m-a-p/xcodec_mini_infer

後は 後述する docker-entrypoint.sh をコピーします。

WORKDIR /
COPY docker-entrypoint.sh /docker-entrypoint.sh
# 実行権限を付与
RUN chmod +x /docker-entrypoint.sh

# Dockerコンテナー起動時に実行するスクリプトを指定して実行
CMD ["/bin/bash", "/docker-entrypoint.sh"]

Dockerfile全体

Dockerfileの全体は以下の通りです。

FROM nvidia/cuda:12.5.1-devel-ubuntu22.04
ENV DEBIAN_FRONTEND=noninteractive
# ENV CUDA_HOME=/usr/local/cuda
# ENV PATH=${CUDA_HOME}/bin:${PATH}
# ENV LD_LIBRARY_PATH=${CUDA_HOME}/lib64:${LD_LIBRARY_PATH}

# 必要なパッケージのインストール
# /appはアプリのディレクトリ、/opt/artifactはアウトプット先のディレクトリ
RUN apt-get update && \
    apt-get install -y \
        git \
	git-lfs \
        python3 \
        python3-pip \
        wget && \
    mkdir /app /opt/artifact && \
    apt-get clean && \
    git lfs install && \
    rm -rf /var/lib/apt/lists/*

WORKDIR /app
RUN git clone https://github.com/multimodal-art-projection/YuE.git yue
WORKDIR /app/yue
# 依存ライブラリのインストール
RUN pip install -r requirements.txt && \
    pip install packaging && \
    pip install flash-attn --no-build-isolation && \
    pip uninstall -y protobuf && \
    pip install protobuf==3.20.0 && \
    pip install --upgrade tensorflow && \
    pip install --upgrade transformers

WORKDIR /app/yue/inference
RUN git clone https://huggingface.co/m-a-p/xcodec_mini_infer

WORKDIR /
COPY docker-entrypoint.sh /docker-entrypoint.sh
# 実行権限を付与
RUN chmod +x /docker-entrypoint.sh

# Dockerコンテナー起動時に実行するスクリプトを指定して実行
CMD ["/bin/bash", "/docker-entrypoint.sh"]

docker-entrypoint.sh の作成

docker-entrypoint.sh はDockerコンテナー起動時に実行するスクリプトです。ここでは環境変数をチェックして、YuEが用意しているPythonスクリプトを実行します。

引数で歌詞とジャンルを受け取りますが、それぞれファイルとして保存してPythonスクリプトに渡しています。

#!/bin/bash

set -ue
shopt -s nullglob

export TZ=${TZ:-Asia/Tokyo}

# アウトプット先ディレクトリ(自動付与) /opt/artifact固定です
if [ -z "${SAKURA_ARTIFACT_DIR:-}" ]; then
  echo "Environment variable SAKURA_ARTIFACT_DIR is not set" >&2
  exit 1
fi

# DOKのタスクID(自動付与)
if [ -z "${SAKURA_TASK_ID:-}" ]; then
  echo "Environment variable SAKURA_TASK_ID is not set" >&2
  exit 1
fi

# 歌詞
if [ -z "${LYRIC:-}" ]; then
  echo "Environment variable LYRIC is not set" >&2
  exit 1
fi

if [ -z "${GENRE:-}" ]; then
  echo "Environment variable GENRE is not set" >&2
  exit 1
fi

# 歌詞とジャンルをファイルに保存
wget -O /app/yue/prompt_egs/lyrics.txt ${LYRIC}
echo "${GENRE}" > /app/yue/prompt_egs/genre.txt

pushd /app/yue/inference
  python3 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 \
    --repetition_penalty 1.1
  mv ../output/*.mp3 ${SAKURA_ARTIFACT_DIR}
popd

MP3ファイルは output ディレクトリに保存されますので、DOKの保存ディレクトリである /opt/artifact に移動します。

Dockerイメージのビルド

上記の内容で、Dockerイメージをビルドします。Linux環境などで行います。

コンテナレジストリの用意

Dockerイメージを登録するコンテナレジストリを作成します。さくらのクラウドではLAB機能で、コンテナレジストリを提供しています。さくらのクラウドにログインしたら さくらのクラウド を選択します。

image.png

左側のメニューの LAB の中にある コンテナレジストリ を選択します。

image.png

追加 を押して、コンテナレジストリを作成します。最低限、以下の入力が必要です。

項目 設定
名前 分かりやすい、任意の名前を入力してください
コンテナレジストリ名 ドメイン名に使われます。以下では、 EXAMPLE.sakuracr.jp として説明します
公開設定 Pullのみとします

ユーザーの作成

コンテナレジストリを作成したら、作成したコンテナレジストリを一覧でダブルクリックします。

image.png

詳細表示にて、ユーザータブをクリックします。

image.png

追加ボタンを押し、ユーザーを作成します。 YOUR_USER_NAMEPASSWORD は任意のものを指定してください。

項目 設定
ユーザー名 YOUR_USER_NAME
パスワード YOUR_PASSWORD
ユーザ権限設定 All

Dockerイメージのビルド

DockerイメージはLinuxで行います。今回はUbuntu 24.04を使っています。Dockerが使える環境であれば、Windows + WSL2でも問題ありません。macOSの場合、アーキテクチャが異なるので動かせないかも知れません(未検証です)。

EXAMPLE.sakuracr.jp の部分は、作成したコンテナレジストリのドメイン名に置き換えてください。また、 animagine は任意の名前で大丈夫です(以下はその名称で読み替えてください)。

sudo docker build -t EXAMPLE.sakuracr.jp/animagine:latest .

コンテナレジストリへのログイン

作成したコンテナレジストリにログインします。ログインIDとパスワードが求められるので、作成したものを入力してください。

sudo docker login EXAMPLE.sakuracr.jp

イメージのプッシュ

作成したイメージをコンテナレジストリにプッシュします。イメージサイズが大きいので、数十分かかります。

sudo docker push EXAMPLE.sakuracr.jp/animagine:latest

タスクを作成する

後は最初と同じようにDOKでタスクを作成、実行します。

項目 設定
イメージ dok-handson.sakuracr.jp/yue
環境変数 LYRIC = https://raw.githubusercontent.com/multimodal-art-projection/YuE/refs/heads/main/prompt_egs/lyrics.txt
GENRE = inspiring female uplifting pop airy vocal electronic bright vocal vocal

FireShot Capture 393 - 高火力 DOK - タスク › 新規作成 - secure.sakura.ad.jp.jpg

実行が完了し、MP3ファイルが生成できていれば成功です。

まとめ

今回はYuEを使って、DOK上で音楽生成を行いました。まずは実行できるのみ、次にDockerイメージの作成と段階的に進められるようにしています。音楽生成のように、処理に時間がかかるものを利用する際にDOKは便利です。

高火力 DOKはタスクを多数立ち上げて、後は結果を待つのみと言った使い方ができます。ぜひAI・機械学習に活用してください。

コンテナー型GPUクラウドサービス 高火力 DOK(ドック) | さくらインターネット

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?