作曲AIを動かす環境構築

AWS, Python, 生成AI

はじめに

こんにちは、レコチョクの海津です。
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がないというエラーが出てしまいました。

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

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

しかしさらに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のインストールを行いました。

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

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

無事動作!

起動時間の設定

ずっと動かす必要もなく少しでもコスト削減するために、起動時間を設定しておきました。
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
    • 信頼ポリシーは以下に記載

  • 設定した内容を確認しスケジュールを作成する

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

まとめ

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

AWS, Python, 生成AI