目次

目次

作曲AIを動かす環境構築

アバター画像
海津 純平
アバター画像
海津 純平
最終更新日2025/12/02 投稿日2025/02/20

はじめに

こんにちは、レコチョクの海津です。
Maker Faire Tokyo2024に出展した カメレオンノーツという作品の開発に携わりました。
この作品で使われている作曲AIを動かすための環境構築について記載します。

前提

  • 作曲AI:Meta社のMusicGen(AudioCraft)
  • サーバー:AWSのEC2(GPUインスタンス)

を利用します。

自分で環境構築

会社の基本ルールとして、EC2のAMIは会社の基盤チームで作られているAMIを使用します。
なのでまずはルールに則り、会社で共有されているAMIを使い一から環境構築をはじめてみました。
またGPUインスタンスはインスタンスサイズの最小がxlargeでコストが高いため、少しでもコスト削減しようとARMインスタンスを検討しました。
なので以下環境で構築をはじめました。

  • AMI:会社のAMI(OSはAmazon Linux 2)
  • インスタンスタイプ:g5g.xlarge

audiocraftはPython3.8以上が必要になったため、まずはpyenvのインストールを行いました。
ここでgccが必要になりインストールしてみると、kernel-headersがないというエラーが出てしまいました。

$ sudo yum install gcc
...
エラー: パッケージ: glibc-headers-2.26-64.amzn2.0.3.aarch64 (amzn2-core)
             要求: kernel-headers

なのでkernel-headersをインストールしようとしましたが、yumに用意されておらず。。。

$ sudo yum list kernel-headers
...
エラー: 表示するパッケージはありません

直接インストールすることで回避できました。

$ wget http://buildlogs-seed.centos.org/c7-kernels.aarch64/kernel/20201021171654/5.4.72-200.el7.aarch64/kernel-headers-5.4.72-200.el7.aarch64.rpm
$ rpm -ivh kernel-headers-5.4.72-200.el7.aarch64.rpm

しかしさらにNvidiaのCUDA周りの設定がうまくいかなかったり色々つまずいたため、初心に帰ってx86_64インスタンスで構築することにしてみました。

楽に環境構築

x86_64インスタンスでの構築。
ここでGPU周りの設定がしてあるAMIがあることに気づき、今回はお願いしてそちらを使用しました。
以下環境で構築しました。

  • AMI:Deep Learning OSS Nvidia Driver AMI GPU PyTorch 2.3.0 (Ubuntu 20.04)
  • インスタンスタイプ:g5.xlarge

今回の環境ではPythonのバージョンは問題なくそのまま使えました。 まずはaudiocraftのインストールを行いました。

$ pip install audiocraft

次に、audiocraftがnumpy2系だと動かないようなので、numpy1系をインストールしています。

$ pip install numpy==1.26.4

動作確認のため、作曲AIモデルを使って簡単な音楽を作成してみます。
このコードはカメレオンノーツの実装の処理をかなり簡略化したものになります。

from audiocraft.models import MusicGen
from audiocraft.data.audio import audio_write

model = MusicGen.get_pretrained("small", device="cuda") 
model.set_generation_params(duration=30)
wav = model.generate("prompt", progress=True)[0]
audio_write("file_name", wav.cpu(), model.sample_rate)

無事動作!

起動時間の設定

ずっと動かす必要もなく少しでもコスト削減するために、起動時間を設定しておきました。
Amazon EventBridge Schedulerを使用したら簡単にできました。
以下の流れで設定しました。

  • AWSコンソールでAmazon EventBridge Schedulerに移動し、スケジュールの作成を選択する
  • 月曜〜金曜の10時に起動するように定期的なスケジュールを選びパターンを設定
    • cronベースのスケジュールを選択、cron式は0 10 ? * Mon-Fri *
    • 直近10個のトリガー日が出てくれるので確認する
eventbridge_scheduler_1.png
  • ターゲットはAmazon EC2のStartInstanceを選択
eventbridge_scheduler_2.png
eventbridge_scheduler_3.png
  • パラメータに作成したインスタンスのインスタンスIDを指定
eventbridge_scheduler_4.png
  • スケジュール完了後のアクションはNONEを指定しておく
eventbridge_scheduler_5.png
  • 実行ロールは以下のようなロールを作成しアタッチ
    • 許可ポリシーはAmazonEC2FullAccess
    • 信頼ポリシーは以下に記載
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "scheduler.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}    
  • 設定した内容を確認しスケジュールを作成する

停止も同じ流れで設定しておきます。

まとめ

GPUを利用するのに色々つまずいた話でした。
最後はあっさりできましたが、色々試してみるのは知見がついて大事ですね。

アバター画像

海津 純平

目次