高火力 DOK × OpenVoice ハンズオン

この記事は、さくらインターネットが実施した高火力 DOKハンズオンの参加者に提供していた資料を、一般公開するために記事化したものです。

はじめに

OpenVoiceとは?

OpenVoiceは、ボイスクローンができるAIモデルです。OpenVoiceは、以下の特徴を持っています。

  1. 正確なトーンカラーのクローニング
  2. 柔軟なボイススタイルコントロール
  3. ゼロショット学習

OpenVoice V2

OpenVoice V2は、2024年4月にリリースされました。V1と比べて、以下の特徴があります。

  1. より良いオーディオ品質
  2. ネイティブの多言語サポート

V2では、以下の言語がサポートされています。

  • 英語
  • 日本語
  • フランス語
  • スペイン語
  • 中国語
  • 韓国語

複数のイントネーション

英語はイントネーション別として、イギリス・アメリカ・インド・オーストラリアの4つのアクセントがサポートされています。

まずは試してみる

高火力 DOKにログインする

さくらのクラウドからログインしてください。

さくらのクラウドユーザーとしてログインする

ユーザーコード・会員ID・パスワードは指定したものを使ってください。

メニューから高火力 DOKを選択する

タスクの作成と実行

なお、実行例の画面はダークテーマを使用しています(デフォルトはライトテーマです)。左メニューの設定にてダークテーマを使用にチェックを入れるとダークテーマになります。

タスクの新規作成を選ぶ

以下の通りに入力

環境変数は + 追加 ボタンを押して追加してください。

  • イメージ
    dok-handson.sakuracr.jp/openvoice
  • 環境変数
    • TEXT
      Hello, everyone. We're holding the DOK hands-on, today.
    • LANG
      EN
入力イメージ

入力が終わったら、 作成 ボタンを押してください。

確認ダイアログが出るので、作成 ボタンを押してください。

実行中の画面です。 状態 のところの文字で状況が判断できます。

DOKのタスクで行っていること

  1. Dockerイメージの取得
  2. コンテナの実行
  3. コンテナの破棄

メモ

  • Dockerイメージの取得には、それなりに時間がかかります(10GB超えもざらなので…)。
  • コンテナ実行時にモデルを取得するものが多く、そこも時間がかかります。
  • HTTP URIは、タスク実行中にアクセスできるHTTPサーバーです。
    スクリプト側でリクエストを受け取って処理できます。

タスクの実行完了後

実行完了すると、 アーティファクト の項目に ダウンロード が表示されます。

音声の確認

ダウンロードしたtar.gzファイルを解凍すると、MP3ファイルが確認できます。再生して、 Hello, everyone. We're holding the DOK hands-on, today. を話しているのを確認してください。

英語の場合、各イントネーションでのMP3ファイルが作成されます。

リファレンス音声を作る

自分の声をクローンする場合には、まずリファレンス(参考)になる音声データが必要です。

スマートフォンのボイスレコーダーで録音したり、Online Voice Recorder - マイクからの音声録音が利用できます。

音声を録音する

ある程度長い方が良いので、青空文庫のアクセスランキングから気に入った作品を読んでみてください(3〜4分程度)。

例: グリム兄弟 Bruder Grimm 楠山正雄訳 赤ずきんちゃん ROTKAPPCHEN

音声ファイルをアップロードする

音声ファイルを、HTTPアクセスできる場所に保存します。

以下は、さくらのクラウドのオブジェクトストレージを利用する例ですが、ご自身で別なクラウドストレージを使ってもらっても大丈夫です。

オブジェクトストレージを選択する

さくらのクラウドのホームに戻ります。

オブジェクトストレージを選択

サイトを選択

バケットを選択

さらに バケットの追加 ボタンを押してください。

バケットの追加

分かりやすいものを設定してください。

アップロード

作成したバケットを選んで、 アップロード ボタンを押します。

アップロードする

public-read を付けておいてください。

アップロードしたら、以下のURLでMP3ファイルにアクセスできるか確認してください。このURLをDOKの環境変数 REFERENCE として指定します。

タスクのコピー

先ほど実行完了したタスクを開きます。

コピーする

コピーして新規作成 を押します。

リファレンスを追加する

環境変数に REFERENCE を追加して、先ほどアップロードしたMP3ファイルのURLを設定してください。

タスクを再実行する

タスクを再度実行して、自分の声のクローニングが成功しているか確認してください。

ハンズオン終了

ハンズオンの内容は以上になります。DOKの面白さとして「タスクをたくさん作成できる」点があります。ぜひタスクをコピーして、さまざまな条件で実行してください。

Dockerイメージの作り方

ここからはハンズオンの中では実施しなかったDockerイメージの作成を行います。テクニカルな内容になるので、作成には1時間以上かかると思われます。

必要なもの

  • ターミナル

オプショナル

  • Docker
  • 手元にDocker環境がある方は、ローカルでも構築可能です。
  • Docker環境がない場合は、さくらのクラウドを利用できます。

さくらのクラウドでサーバを立てる

さくらのクラウドのホームに戻り、 さくらのクラウド を選択します。

追加ボタンを押す

サーバ追加 ボタンを押します

情報を入力する

サーバのスペックを以下のように設定してください。

  • 仮想コア
    4
  • メモリ
    4GB
  • 新規ディスクを作成
  • アーカイブ
    Ubuntu Server 24.04.1 LTS 64bit
  • ディスクサイズ
    100GB
  • インターネットに接続
  • 管理者のパスワード
    十分分かりづらいもの
  • ホスト名
    分かりやすいもの(dokなど)
  • 公開鍵
    必要であれば
  • サーバーの名前
    分かりやすいもの(dokなど)

サーバを追加

作成 ボタンを押します。

確認する

確認ダイアログが出るので、 作成 ボタンを押してください。

サーバを確認

少し待つと、サーバが立ち上がります。

サーバに接続する

サーバへは ssh で接続してください。ユーザー名は ubuntu です。

サーバ内での作業

ここからはサーバ内(またはローカル)での作業になります。

Dockerのインストール

Dockerをインストールします。

Dockerを試す

今のコマンドが通れば、Dockerはインストールされています。

ベースになるリポジトリ

ベースはmyshell-ai/OpenVoiceを利用し、この中に必要なファイルを作成していきます。

checkpoint のダウンロードと解凍

checkpointをダウンロードし、 checkpoints_v2 ディレクトリに解凍します。

Dockerfile の作成

ここからはDockerfileの中で行っていきます。リポジトリの中に Dockerfile を作成して、編集してください。

ベースイメージ

ベースは FROM continuumio/miniconda3 です。

conda の設定

condaの設定を行います。

必要なライブラリのインストール

OpenVoiceはffmpegを使っているので、それをインストールします。 /opt/artifact はDOKのアウトプット先のディレクトリです。

必要なPythonライブラリのインストール

OpenVoiceのリポジトリのファイルをすべてコピーします。そして、OpenVoice用にMeloTTSをインストールします。argparseやboto3はCLI実行用です。

docker-entrypoint.sh の準備

Docker実行の際に呼び出す docker-entrypoint.sh (内容は後述)を準備します。

Dockerfile全体

Dockerfileの全体はGitHubリポジトリで確認してください。

docker-entrypoint.sh の作成

docker-entrypoint.sh はDockerコンテナー起動時に実行するスクリプトです。ここでは環境変数をチェックして、 runner.py を呼び出します。

docker-entrypoint.shの内容

行っている処理はシンプルなので、内容はGitHubリポジトリで確認してください。

runner.py の作成

runner.py は実際に処理を行うスクリプトです。まず必要なライブラリをインポートします。

パラメータの取得

docker-entrypoint.sh から渡されたパラメータを取得します。

オブジェクトストレージ用のオブジェクトを準備

S3_ではじまる環境変数があれば、それを使ってS3オブジェクトを作成します。

OpenVoiceの設定

OpenVoice/demo_part3.ipynb at main · myshell-ai/OpenVoiceの内容に沿って、OpenVoiceを準備します。

音声の生成とアップロード

音声を生成し、アップロードします。たとえば EN を指定した場合、インド風英語やオーストラリア風英語など複数のキーが speaker_ids に入ってきます。

全体の処理

runner.py の全体の内容は GitHubリポジトリで確認してください。

Dockerイメージのビルド

ここまでの内容で、Dockerイメージをビルドします。

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

Dockerイメージを登録するコンテナレジストリを作成します。さくらのクラウドのホームで、さくらのクラウド を選択します。

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

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

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

ユーザーの作成

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

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

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

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

Dockerイメージのビルド

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

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

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

イメージのプッシュ

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

DOKで実行する

リポジトリがプッシュできたら、一番最初に行ったようにDOKでタスクを実行します。

  • イメージ
    EXAMPLE.sakuracr.jp/openvoice
  • 環境変数
    • TEXT
      お疲れ様でした!
    • LANG
      JP

終了時のお片付け

忘れずに停止・削除をお願いします。

  • さくらのクラウドのサーバ
  • オブジェクトストレージ

高火力 DOKについては、特に作業はありません。
以上でハンズオンとDokcerイメージの作り方は終了です。