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?

More than 1 year has passed since last update.

オーディオドラマ自動生成「WavJourney」をEC2で構築する

Posted at

短いプロンプトを入力するだけで、オーディオドラマなどの音声コンテンツを自動生成できるWavJourneyが発表されました。

スクリプトの生成から、Text-to-Speech、Text-to-Audio、Text-to-Musicを使った音声合成まで全自動で行ってくれ、複数話者による音声コンテンツを気軽に作成することができます。

WavJourneyはHugging Face内で試すことが出来る他、開発者向けにDockerコンテナでの実行が出来るようになっています。

しかし、コンテナでの実行のためにはGPUが必要となってくるため、今回はAWSのEC2インスタンス内でDockerコンテナを実行する方法を紹介します。

GitHub上のDockerfileを編集

上であげたGithub内に、Dockerコンテナ生成用のDockerfileが一応ありますが、EC2上でコンテナが作成できるようにいくつか編集を行います。

以下の通りコピペしてください。

FROM nvidia/cuda:11.7.1-cudnn8-devel-ubuntu22.04
ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update && \
    apt-get upgrade -y && \
    apt-get install -y --no-install-recommends \
    git \
    git-lfs \
    wget \
    curl \
    build-essential \
    libssl-dev \
    zlib1g-dev \
    libbz2-dev \
    libreadline-dev \
    libsqlite3-dev \
    libncursesw5-dev \
    xz-utils \
    tk-dev \
    libxml2-dev \
    libxmlsec1-dev \
    libffi-dev \
    liblzma-dev \
    ffmpeg \
    libsndfile-dev && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

# Install miniconda
RUN wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh \
    && bash Miniconda3-latest-Linux-x86_64.sh -b -p /opt/miniconda3 \
    && rm -f Miniconda3-latest-Linux-x86_64.sh

# Set up a new user named "user" with user ID 1000
RUN useradd -m -u 1000 user

# Switch to the "user" user
USER user

# Add conda binary to PATH variable
ENV HOME=/home/user \
    PATH=/opt/miniconda3/bin:/home/user/.local/bin:$PATH \
    CONDA_PREFIX=/opt/miniconda3/envs
RUN mkdir $HOME/app
WORKDIR $HOME/app
COPY --chown=user . $HOME/app

# Conda envs setup 
RUN bash ./scripts/EnvsSetup.sh

# pre-download all models
RUN conda run --live-stream -n WavJourney python scripts/download_models.py
RUN mkdir $HOME/app/services_logs

# WAVJOURNEYサービスの環境変数を設定
ENV WAVJOURNEY_SERVICE_PORT=8021
ENV WAVJOURNEY_SERVICE_URL=127.0.0.1
ENV WAVJOURNEY_MAX_SCRIPT_LINES=999
ENV WAVJOURNEY_OPENAI_KEY=

# entrypoint
ENTRYPOINT bash /home/user/app/scripts/start_service_and_ui.sh

一番のハマりポイントとしては、EC2内では、$HOME/appCOPYする前にそのレポジトリをmkdirで作成しておく必要があるということでした。

また、環境変数のWAVJOURNEY_OPENAI_KEYには、ご自身のAPIキーを入れてください。

AWSのEC2インスタンスを作成

ここから、実際にEC2にデプロイしていきます。
WavJourneyの実行にはGPUが必要(CPUでも出来なくはないが実行時間がすごくかかる)なため、EC2インスタンスもGPUをサポートしているものを選ぶ必要があります。
しかしデフォルトではGPUインスタンスを作れないようになっているので、事前に緩和申請を出す必要があります。

AWSインスタンス構成

  • インスタンスタイプ:g4dn.xlarge
  • AMI:Deep Learning Base GPU AMI (Ubuntu 20.04)
  • ストレージ:256GB以上

GPUインスタンスは、一番安いものを選択しています。それでも1日動かすと7USDほどかかるので気をつけてください。
GPUをプログラムから使うにはいくつかドライバが必要となりますが、それをすでにインストールしてくれているAMIを選択します。
WavJourneyのコンテナイメージは50GBほどあるので、ストレージは余裕を持って設定しましょう。

Dockerコンテナを作成

作成したGPUインスタンスにSSHで入った後、以下のコマンドを実行してGPU関連のドライバが使えるか確認しましょう。

nvidia-smi  ## GPU
nvcc -V  ## CUDA
nvidia-docker info  ## nvidia-docker

何かしらの情報が表示されればOKです。

Gitからコードを引っぱってきたら以下のコマンドでDockerイメージを作成し、コンテナを立ち上げましょう。
特にbuildはかなり時間がかかります。

docker build .
nvidia-docker run IMAGE_ID

ポイントとしては、runするときに、通常のdocker runではなく、nvidia-docker runを使用することです。そうすることで、Dockerコンテナ内からでもGPUが使えるようになります。

コンテナが立ち上がったら、中に入ってconda環境を作成します。

docker exec -it CONTAINER_ID bash
conda init
exit  ## 一度抜ける
docker exec -it CONTAINER_ID
conda activate WavJourney

ここまでで準備は完了です。

音声コンテンツを作成する

Githubにもありますが、以下のようなコードで音声コンテンツを作成しましょう。

python wavjourney_cli.py -f --input-text "Generate a one-minute introduction to quantum mechanics" 

最後に、WavJourneyの論文を紹介しておきます。どのように音声コンテンツを生成しているかがわかります。

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?