短いプロンプトを入力するだけで、オーディオドラマなどの音声コンテンツを自動生成できる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/app
内COPY
する前にそのレポジトリを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の論文を紹介しておきます。どのように音声コンテンツを生成しているかがわかります。