Seed-VCを自分のPCにインストールして声優の声を真似する

Seed-VCとは?

以下のGitHubの説明によると、Seed-VCは、トレーニングなしで1〜30秒の音声サンプルを使用して声をクローンできる、ゼロショットのヴォイスチェンジャーおよび歌声変換ツールです。現在公開されているモデルは、以前の音声変換モデルよりも高い音声の明瞭さと話者の類似性を実現しています。

GitHub - Plachtaa/seed-vc: zero-shot voice conversion & singing voice conversion, with real-time support
zero-shot voice conversion & singing voice conversion, with real-time support - Plachtaa/seed-vc

評価では、LibriTTSデータセットの音声を使って、2つのベースラインモデル(OpenVoiceとCosyVoice)と比較したところ、Seed-VCの方が知能性(明瞭さ)と話者の類似性の両面で優れた結果を出しています。

簡潔に言えば、Seed-VCは、音声変換やクローン技術において他のモデルよりも優れた性能を持っていると説明しています。

今日はこのSeed-VCをWindowsPCにインストールします。その前にSeed-VCの評価方法について説明しておきます。コマンドが多いと初心者にとっては少し難しいかもしれません。ですので、まずは簡単に理解してもらうために、Gradioを使って、GUI(グラフィカル・ユーザー・インターフェース)で実行できる方法を提案しますが、評価方法(evaluation)や使用方法(usage)も説明しておきます。

はじめに

Seed-VCは、トレーニングなしで音声サンプルをもとに話者の声を変換できる、最新のゼロショット音声変換ツールです。このツールは、クローン技術や音声変換において高い精度と話者の類似性を実現しており、初心者でも簡単に始められることが特徴です。本記事では、Seed-VCの評価方法、インストール手順、使用方法を詳しく説明し、効率的に導入できるようサポートします。

評価方法(Evaluation)

1. Seed-VCの評価方法(evaluation)について

Seed-VCでは、音声変換の結果を評価するために、いくつかの手法やモデルが使われています。具体的には、他の「ゼロショットではない」モデル(例えば、あらかじめ特定の話者でトレーニングされたモデル)と比較して、Seed-VCがより良い結果を出すことができるとされています。

  • ゼロショットモデルとは?
    通常、音声変換モデルはあらかじめ特定の話者の声でトレーニングされていますが、ゼロショットモデルはトレーニングを必要とせず、初めて聞く話者の声でもクローンや変換が可能です。Seed-VCは、このゼロショット変換ができるモデルです。
  • SoVITSモデルとの比較
    他の音声変換モデル(SoVITS)と比較されています。具体的には、「Tokai Teio」「Matikane Tannhäuser」「Milky Green」といったモデルの名前が出てきます。これは、音声変換分野で使われる特定のモデルです。
  • 評価を再現する方法
    提供されているeval.pyスクリプトを使って、自分でも評価を再現することができます。評価には、FacebookのHubertモデルやResemblyzerというツールが使われており、これらを用いて音声変換結果のクオリティを評価します。

eval.pyの実行方法(評価を再現する手順)

eval.pyを使ってSeed-VCの音声変換の評価を再現できます。以下がその手順です。

python eval.py 
--source ./examples/libritts-test-clean
--target ./examples/reference
--output ./examples/eval/converted
--diffusion-steps 25
--length-adjust 1.0
--inference-cfg-rate 0.7
--xvector-extractor "resemblyzer"
--baseline "" # OpenVoiceまたはCosyVoiceを使用したい場合、ここに記入
--max-samples 100 # 最大100個の音声で評価

各オプションの意味:

  • source: 変換したい元の音声ファイル。
  • target: 参考にする目標の声の音声ファイル。
  • output: 変換結果を保存するディレクトリ。
  • diffusion-steps: 音声変換の精度を左右するステップ数。ステップ数を多くするとクオリティが上がるが、処理時間も増えます。
  • length-adjust: 音声の長さを調整する。1.0はそのままの長さ。短くしたい場合は<1.0、長くしたい場合は>1.0に設定。
  • xvector-extractor: 話者の特徴量を抽出するために使われるモデル(Resemblyzer)。
  • baseline: 他のモデル(OpenVoiceやCosyVoice)との比較が可能。

2. 使用方法(Usage)について

この部分では、Seed-VCを実際に使う方法が説明されています。具体的には、コマンドラインを使って音声を変換する方法が詳しく記載されています。

コマンドラインでの音声変換手順

python inference.py --source <source-wav>
--target <referene-wav>
--output <output-dir>
--diffusion-steps 25 # 音声変換は25、歌声変換には50~100がおすすめ
--length-adjust 1.0
--inference-cfg-rate 0.7
--f0-condition False # 歌声変換の場合はTrue
--auto-f0-adjust False # 通常はFalseだが、ピッチを自動調整する場合はTrue
--semi-tone-shift 0 # 半音単位でピッチを調整する場合

オプションの解説:

  • source: 変換する元の音声ファイル。
  • target: 変換先の参考にする音声ファイル(目標の声)。
  • output: 結果を保存するフォルダ。
  • diffusion-steps: 音声変換の精度を決めるステップ数。25が標準で、歌声変換には50〜100ステップが推奨されています。
  • length-adjust: 音声の長さを調整するオプション。デフォルトは1.0でそのままの長さ。スピードアップしたいなら<1.0、スローにしたいなら>1.0
  • inference-cfg-rate: 出力結果の微妙な調整に使うオプション。デフォルトは0.7
  • f0-condition: 出力音声のピッチを元の音声に合わせるかどうか。歌声変換にはTrueを使います。
  • auto-f0-adjust: 元のピッチを自動的に目標の声のピッチに調整するオプション(通常は歌声変換では使わない)。
  • semi-tone-shift: ピッチを半音単位で調整するオプション。歌声変換の際に、半音単位で音の高さを調整したい場合に使います。

3. インストール手順

こちらは、後で説明しますが、Gradioの場合でも必要でpip install -r requirements.txtを使って必要なパッケージをインストールします。また、Python 3.10が推奨されています。

この説明では、Seed-VCの評価方法や実際の音声変換の使い方が記されています。評価手順を使って、他のモデルと比較しながら音声変換のクオリティを確認することができます。実際にプロジェクトを動かす際には、指定されたオプションを適切に設定しながら、音声を変換してみましょう。

コマンドは少し苦手な方向けに、Gradioを動作させる方法も紹介します。Gradioは、コマンドラインの代わりに、ウェブブラウザを通じて音声変換を簡単に試すことができるので、初心者にはとても親切な方法です。

Gradioの簡単な説明
Gradioは、Pythonコードを簡単にウェブアプリケーションとして公開できるツールです。Seed-VCもGradioを使って音声変換機能を簡単に実行できます。ありがたいことに、コマンドを覚えたり、ターミナルを使う必要がありません。以下からはGradioで動かす方法を示します。

1. Gitリポジトリのクローン(コピー)をする方法

Gitリポジトリのクローンとは、インターネット上にあるプロジェクトのファイルやコードを、自分のコンピュータにコピーすることです。GitHubには様々なプロジェクトが公開されており、その一つがSeed-VCです。

まず、以下のコマンドを使います。

git clone https://github.com/Plachtaa/seed-vc.git

コマンドの説明:

  • git: これはGitというバージョン管理ツールを使うためのコマンドです。
  • clone: リポジトリをクローン(コピー)するという命令です。
  • https://github.com/Plachtaa/seed-vc.git: これはクローンしたいリポジトリのURLです。リポジトリとは、そのプロジェクトのすべてのファイルや変更履歴が保管されている場所のことです。

このコマンドを実行すると、Seed-VCというプロジェクトが自分のコンピュータにダウンロードされ、現在作業しているディレクトリの中にseed-vcという名前のフォルダが作成されます。

実行手順:

  1. コマンドライン(WindowsではPowerShellやコマンドプロンプト、macOSやLinuxではターミナル)を開きます。
  2. 上記のコマンドを入力し、Enterキーを押します。

これでSeed-VCのコードがコンピュータにコピーされます。実のところ、VS Codeが一番便利で使いやすいです。


2. Pythonのバージョンについて: Python 3.10が必要

Seed-VCを動かすためには、Pythonというプログラム言語が必要です。そうGitHubのページに書かれています。Pythonは非常に柔軟で多くのプロジェクトで使われていますが、バージョンによって動作が異なることがあります。

Suggested python 3.10 とは?

Seed-VCプロジェクトでは、Python 3.10が推奨されています。つまり、Pythonの3.10バージョンで動かすことが最適で、それ以外のバージョンではエラーが出る可能性があるということです。バージョンが違う場合、インストールしなおすことをせず、pyenvを使うのも手です。

Pythonのインストール手順:

もしPython 3.10がインストールされていない場合、以下の手順でインストールできます(新規向け)。

  1. Python公式サイトにアクセスします。
  2. 自分のコンピュータのOSに合ったインストーラをダウンロードします(Windows、macOS、Linuxなど)。
  3. インストール中に「Add Python 3.x to PATH」というチェックボックスが表示されるので、必ずチェックを入れます(これにより、Pythonを簡単に使えるようになります)。

インストール後、コマンドラインで以下のコマンドを入力して、Python 3.10が正しくインストールされたか確認します。

python --version

これでPython 3.10.xというバージョンが表示されれば成功です。


3. Seed-VCプロジェクトの設定を進める

クローンが完了し、Python 3.10がインストールできたら、次のステップとしてrequirements.txtファイルに書かれた必要なパッケージをインストールする必要があります。

1. requirements.txtファイルの内容の説明

まず、requirements.txtの中身を見ると以下が記述されています。これについて説明します。

--extra-index-url https://download.pytorch.org/whl/cu113
torch
torchvision
torchaudio
scipy==1.13.1
librosa==0.10.2
huggingface-hub
munch
einops
descript-audio-codec
git+https://github.com/openai/whisper.git
gradio
pydub
resemblyzer
jiwer
transformers
onnxruntime

パッケージの説明

  • --extra-index-url: これはPyTorchの特定のバージョンをダウンロードするためのURLです。PyTorchは機械学習やディープラーニングのフレームワークで、Seed-VCの音声変換機能で使われます。
  • torch, torchvision, torchaudio: これらはPyTorchに関連するパッケージで、音声や画像の処理を支援します。
  • scipy, librosa: 科学計算や音声解析に使われるパッケージです。
  • huggingface-hub, transformers: これらはNLP(自然言語処理)で有名なHugging Faceのパッケージで、機械学習モデルの管理や実行に使います。
  • munch, einops, descript-audio-codec: データの操作や変換に使われるパッケージです。
  • git+https://github.com/openai/whisper.git: OpenAIのWhisperプロジェクトから直接ライブラリを取得します。音声認識機能を提供します。
  • gradio: 簡単にウェブインターフェースを作成できるツールです。Seed-VCのデモや操作を簡単にするために使われます。
  • pydub: 音声ファイルの操作に使われるパッケージです。
  • resemblyzer, jiwer: 音声類似度の評価や音声認識結果の評価に使います。
  • onnxruntime: 機械学習モデルを効率的に実行するためのツールです。

2. requirements.txtを使ってパッケージをインストールする手順

次に、このファイルに書かれたパッケージをインストールする手順を説明します。

手順:

  1. Python仮想環境の作成(推奨)
    仮想環境を使うと、プロジェクトごとに異なるPythonバージョンやライブラリをインストールできます。これで、他のプロジェクトとの競合を防ぐことができます。つまり、パソコンがぐちゃぐちゃにならずに済みます。仮想環境を作成するには、次のコマンドを使います。
    python -m venv venv
    これで、プロジェクトフォルダ内にvenvという仮想環境が作成されます。
  2. 仮想環境の有効化
    仮想環境を有効にするには、以下のコマンドを使います。
    • Windowsの場合:→.\venv\Scripts\activate VS Codeではvenv\Scripts\activateでもうまくいきました。

    • macOS/Linuxの場合:→source venv/bin/activate
    仮想環境が有効になると、コマンドラインの左側に(venv)と表示されるはずです。
  3. requirements.txtを使ってパッケージをインストール
    仮想環境が有効になった状態で、次のコマンドを実行します。
    pip install -r requirements.txt
    これによって、requirements.txtに書かれたすべてのパッケージが自動的にインストールされます。

3. インストール中のトラブルシューティング

もし以下のような問題が発生した場合の解決策をいくつか紹介します。

  • エラーが発生する場合:
    特定のパッケージがインストールできないことがあります。その場合、メッセージを確認して足りない依存パッケージ(例えばC++ビルドツールなど)をインストールしてください。前に説明したVisual C++ Build Toolsのように、必要なツールをインストールすることが一般的です。実際に出たエラーが発生したので以下に示しておきます。
  • CUDAに関するエラー:
    PyTorchの一部のバージョンはGPU(CUDA)を使います。もしCUDAがない環境の場合、PyTorchの異なるバージョン(CPU用)をインストールする必要があるかもしれません。CUDAが不要な場合は、以下のように変更できます。実際に試しましたがかなり遅かったです。
    --extra-index-url https://download.pytorch.org/whl/cpu

4. 最後に

これでrequirements.txtを使って必要なライブラリがインストールできるはずです。Seed-VCプロジェクトの準備が整ったので、次は実際にプロジェクトを動かす手順に進みます。

実際に発生したエラー内容

DEPRECATION: webrtcvad is being installed using the legacy ‘setup.py install’ method, because it does not have a ‘pyproject.toml’ and the ‘wheel’ package is not installed. pip 23.1 will enforce this behaviour change. A possible replacement is to enable the ‘–use-pep517’ option. Discussion can be found at https://github.com/pypa/pip/issues/8559
Running setup.py install for webrtcvad … error
error: subprocess-exited-with-error

× Running setup.py install for webrtcvad did not run successfully.
│ exit code: 1
╰─> [11 lines of output]
running install
C:\youtube\seed-vc\venv\lib\site-packages\setuptools\command\install.py:34: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools.
warnings.warn(
running build
running build_py
creating build
creating build\lib.win-amd64-cpython-310
copying webrtcvad.py -> build\lib.win-amd64-cpython-310
running build_ext
building ‘_webrtcvad’ extension
error: Microsoft Visual C++ 14.0 or greater is required. Get it with “Microsoft C++ Build Tools”: https://visualstudio.microsoft.com/visual-cpp-build-tools/
[end of output]

note: This error originates from a subprocess, and is likely not a problem with pip.
error: legacy-install-failure

× Encountered error while trying to install package.
╰─> webrtcvad

note: This is an issue with the package mentioned above, not pip.
hint: See above for output from the failure.

[notice] A new release of pip is available: 23.0.1 -> 24.2
[notice] To update, run: python.exe -m pip install –upgrade pip

このエラーは、webrtcvadというパッケージをインストールする際に、Microsoft Visual C++ Build Toolsが必要であることを示しています。具体的には、Microsoft Visual C++ 14.0以上がインストールされていないため、コンパイルに失敗している可能性があります。

対処方法:
Microsoft C++ Build Toolsのインストール: エラーメッセージにあるリンクに従い、Microsoft C++ Build Toolsをインストールする必要があります。以下の手順を試してください。

Microsoft C++ Build Toolsにアクセスして、インストーラをダウンロード。
インストーラを実行して、Desktop development with C++というワークロードを選択してインストールします。これにはVisual C++ 14.0や他の必要なツールが含まれます。

VSCodeを使っている場合でも、特にrequirements.txtに記載されている一部のパッケージ、例えばtorchwebrtcvadなどは、コンパイルが必要です。この際、Microsoft C++ Build Toolsが必要になる場合があります。

なぜMicrosoft C++ Build Toolsが必要なのか?

特定のPythonライブラリは、C++で書かれた部分を含んでおり、それらをインストールする際にコンパイルが必要です。Windows環境では、これを行うためにMicrosoft C++ Build Toolsが必要です。

Seed-VCプロジェクトでも、いくつかのパッケージ(例えば、torchwebrtcvadなど)がその例に該当するため、C++ Build Toolsをインストールしておくことが推奨されます。


pipのアップグレード(推奨): なお、エラーメッセージの最後にpipの新しいバージョンが利用可能と表示されています。最新バージョンにアップデートすることもおすすめです。以下のコマンドでpipをアップグレードできます。

python.exe -m pip install --upgrade pip

Microsoft C++ Build Toolsのインストール画面では、Pythonで必要なパッケージをコンパイルするために、最小限のコンポーネントをインストールする必要があります。ここでは、具体的に選択すべき項目について説明します。

1. Desktop development with C++

  • 最も重要な項目は「C++によるデスクトップ開発(Desktop development with C++)」です。これをチェックします。
    • これを選択する理由: このワークロードには、Pythonのパッケージをコンパイルするために必要なMicrosoft Visual C++コンパイラや関連するツールが含まれているためです。

2. 追加のコンポーネント

「C++によるデスクトップ開発」を選択すると、いくつかのオプションが自動的に選択されますが、ここでは初心者向けに推奨される最小限のセットアップを説明します。必要であれば、インストール画面で以下のコンポーネントがチェックされていることを確認してください。

必須項目(通常自動で選択される)

  • MSVC v143 – VS 2022 C++ x64/x86 build tools(最新バージョンの場合はMSVC v143)
    • Visual StudioでのC++ビルドツールです。これがPythonパッケージのコンパイルに必要なコンパイラです。
  • Windows 11 SDK
    • Windows上での開発に必要なライブラリやヘッダーファイルが含まれています。
  • C++ CMake tools for Windows
    • CMakeは、ビルドプロセスを管理するツールで、Pythonパッケージのコンパイルで使用されることがあります。

さらに自動選択された項目についても説明します。

  1. ツールのコア機能テスト (Core Tools for Testing)
    説明: これはVisual Studioでアプリケーションをテストするためのツールです。
    必要性: Seed-VCやPythonパッケージのインストールには直接関係しないため、オプションですが、このままインストールしても特に問題はありません。
  2. C++ Address Sanitizer
    説明: C++ Address Sanitizerは、メモリ関連のエラーを検出するためのツールです。
    必要性: これも特にPythonパッケージのインストールには不要です。高度なC++開発環境向けのツールであり、Seed-VCを使う上では不要です。
    推奨する選択
    これらの自動選択されたツールは、特に不要であればアンチェックしても大丈夫です。C++によるデスクトップ開発、MSVCコンパイラ、Windows SDK、およびCMakeがインストールされていれば、Pythonパッケージのコンパイルに必要な環境は整っています。

最小限で進めたい場合は、以下のように整理できます。

Windows 11 SDK: 必要
ツールのコア機能テスト: オプション(不要なら外してOK)
C++ Address Sanitizer: オプション(不要なら外してOK)
これで、必要最低限の環境が整います。

オプション項目(通常不要)

上記の基本セットアップで十分ですが、もしさらに高度な設定をする予定がある場合は、以下のオプションも検討できます。ただし、初心者や基本的なPythonプロジェクトのためには、これらは不要です。

  • C++ Clang tools for Windows(不要)
  • C++/CLI support(不要)

3. インストールを開始

これらを選択して、「インストール」ボタンをクリックします。インストールには多少時間がかかりますが、完了すると、Pythonのパッケージインストール中に発生するコンパイルエラーが解消されるはずです。

4. インストール後の確認

インストールが完了したら、再度次のコマンドを実行して、必要なパッケージをインストールします。

pip install -r requirements.txt

これで、Visual C++ Build Toolsが正しくセットアップされ、Seed-VCプロジェクトの動作に必要なパッケージがインストールされるはずです。

Microsoft C++ Build Toolsのエラーは、通常はWindows環境でのみ発生します。Microsoft C++ Build Toolsは、Windows上でC++コードをコンパイルするために必要なツールで、Windows特有のものです。したがって、WSL(Windows Subsystem for Linux)やLinux環境では、Microsoft C++ Build Toolsのエラーは発生しません

WSLやLinux環境でのコンパイルエラー

ただし、WSLやLinuxでも依存するC++パッケージやライブラリが必要な場合は、対応する開発ツールをインストールする必要があります。たとえば、Pythonの一部のパッケージ(torchなど)をインストールする際に、Linuxでは以下のような開発ツールが必要になることがあります。

必要なツールのインストールコマンド(Linux/WSL用)

sudo apt update
sudo apt install build-essential

build-essentialには、C++コンパイラ(g++)や他の開発ツールが含まれており、これによりC++コードをコンパイルするための環境が整います。

また、以下の追加ツールが必要になる場合もあります。

sudo apt install libssl-dev libffi-dev python3-dev
  • Windowsでは、C++コンパイルのためにMicrosoft C++ Build Toolsが必要です。
  • WSLやLinuxでは、build-essentialなどの開発ツールが必要ですが、Microsoft C++ Build Toolsは不要です。
  • WSLやLinuxでも、適切な開発ツールがインストールされていれば、C++関連のエラーは避けられます。

build-essential は、WSLやLinux環境において、Windowsの Microsoft C++ Build Tools に相当するものです。これには、CやC++のコンパイラ(gccg++)や、Makefileのサポートなど、コンパイルに必要な基本的なツール群が含まれています。これらがインストールされていれば、PythonパッケージやC++で書かれたライブラリのビルドに必要な環境が整います。

  • Windowsでは、Microsoft C++ Build ToolsがC++ライブラリのコンパイルに必要。
  • WSLやLinuxでは、build-essentialが同様にC++ライブラリのコンパイルに必要なツールを提供します。

つまり、LinuxやWSLで必要な開発環境は、build-essentialをインストールすることで整えられます。

そしていよいろブラウザ版を立ち上げます。以下のコマンドで立ち上がるはずです。

python app.py

このスクリプトは、いくつかの異なるモデルをダウンロードし、それを使って音声変換を行うための準備をしています。

具体的には、以下のような流れになっています。

  1. モデルのダウンロード:
    • load_custom_model_from_hf という関数を使って、複数のモデルを Hugging Face(HF)からダウンロードしています。たとえば、次のモデルがダウンロードされます:
      • Plachta/Seed-VC: 音声変換用のモデル
      • funasr/campplus: 音声スタイルの抽出に使用されるモデル
      • nvidia/bigvgan_v2_22khz_80band_256x: BigVGANによる高品質な音声生成モデル
      • lj1995/VoiceConversionWebUI: F0(基本周波数)推定用のモデル
      • openai/whisper-small: Whisperモデルによる音声処理
  2. モデルのロードと設定:
    • 各モデルをロードし、設定を行っています。torch.deviceを使って、使用するハードウェア(GPUやCPU)を決定し、モデルの各パラメータを初期化します。
  3. 音声変換の実行:
    • 実際の音声変換を行うための関数 voice_conversion が定義されています。これは、Gradioを通じてウェブブラウザ上でユーザーが音声ファイルをアップロードし、設定を調整して音声変換を実行できるようになっています。

このスクリプトは、必要な音声変換モデルや補助的なモデルを自動でHugging Faceからダウンロードし、設定を行っています。ダウンロードされたモデルは、音声の変換や高品質な音声生成、F0調整などに使われます。その後、Gradioを使ってユーザーがブラウザで簡単に音声変換を実行できるようにする流れになっています。

次にブラウザでアクセスしてみます。

http://127.0.0.1:7860/

肝心な使い方ですが、Reference Audioにクローンしたい音声を、Source Audioにこれに模したい音声をアップロードします。作成がうまくいくとReference Audioにいれた音質で、クローンが作成されます。しかし、GPUを使用しているにもかかわらず作成があまりにに遅いので調べてみした。まずはインストールしたPCのCUDAのバージョンを確認します。

nvcc --version

出力された内容は以下の通りです。

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2024 NVIDIA Corporation
Built on Thu_Mar_28_02:30:10_Pacific_Daylight_Time_2024
Cuda compilation tools, release 12.4, V12.4.131
Build cuda_12.4.r12.4/compiler.34097967_0

現在の環境でのCUDAバージョンを確認すると、CUDA 12.4 がインストールされているため、--extra-index-url で指定されている CUDA 11.3 (cu113) 用のPyTorchは適合しない可能性があります。

以下のページで確認すると、現時点でCUDA12.4が最新バージョンとして表示されていました。

https://pytorch.org

PyTorchのバージョンとCUDAのバージョンが一致していないと、動作に問題が発生することがあります。CUDA 12.4を使う場合は、それに対応したPyTorchバージョンをインストールする必要があります。

対処方法: CUDA 12.4に対応するPyTorchをインストール

そこで、そこで、requirements.txtの修正をします。requirements.txtの中で、–extra-index-urlの部分を次のように修正します。

--extra-index-url https://download.pytorch.org/whl/cu124

次に、古い仮想環境の削除をします。仮想環境のフォルダ、つまりvenvフォルダを削除するだけで済みます。後は先と同じ手順でインストールをします。速度は格段に上がりました。

上記の手順を実行した後、速度が「格段に向上した」理由について、もう少し詳しく説明します。

1. GPUとCPUの違い

まず、GPU(グラフィックカードのプロセッサ)は、大量のデータを並列処理することが得意です。これに対して、CPUは一般的な処理には適していますが、並列処理にはそれほど強くありません。音声変換やディープラーニングのように、大量のデータを処理する作業では、GPUを活用することで非常に高速に処理を行うことができます。

2. CUDAとは?

CUDA(Compute Unified Device Architecture)は、NVIDIAが提供する技術で、GPUを使って一般的な計算処理を高速化するためのフレームワークです。PyTorchはこのCUDAを利用することで、GPUの性能を最大限に引き出し、処理速度を大幅に向上させています。

しかし、PyTorchとCUDAのバージョンが一致していないと、GPUをうまく使えず、処理が遅くなることがあります。最初にインストールしたPyTorchがCUDA 11.3に対応していたため、このPCにインストールされていたCUDA 12.4をうまく活用できていませんでした。その結果、処理速度が低下していたのです。

3. 正しいバージョンをインストールすることの重要性

今回、requirements.txtを修正し、CUDA 12.4に対応するPyTorchをインストールすることで、GPUの力をフルに活用できるようになりました。その結果、処理速度が大幅に向上したのです。これは、CUDAバージョンに対応した正しいPyTorchをインストールすることで、GPUが最適に動作し、並列処理によって作業が迅速に行われたためです。

4. 具体的な速度の向上の例

例えば、CPUのみを使っている場合、音声変換に数分から十数分かかっていた処理が、GPUを使うと数十秒程度で完了することがあります。このように、同じ作業を数倍から数十倍速く終わらせることができるのがGPUのパワーです。

最初にインストールされていたCUDA 11.3用のPyTorchは、自分のPCにインストールされていたCUDA 12.4と互換性がなかったため、GPUの力をうまく使えず、処理が遅くなっていました。しかし、CUDA 12.4対応のPyTorchに切り替えたことで、GPUをフル活用でき、作業速度が大幅に向上しました。

この手順を踏むことで、ディープラーニングや音声変換のような重い処理も、非常に高速に実行できるようになります。

Seed-VCとVALL-E Xの関係

Seed-VCの開発者は、実はVALL-E Xという音声変換プロジェクトの開発者でもあります。VALL-E Xは音声変換分野で非常に高性能なモデルとして知られていますが、Seed-VCはその後にリリースされました。
Seed-VCがVALL-E Xに比べて性能が向上しているかどうかは不明ですが、後発であるため、さらなる改善が図られている可能性も考えられます。自分としては性能は向上していると感じました。

Seed-VCとVALL-E Xの違い

Seed-VCとVALL-E Xはどちらも音声変換技術に関連していますが、アプローチに大きな違いがあります。

  • Seed-VC: これは、音声から音声への変換を行う技術です。ある話者の音声を、別の話者の音声に変換することができます。例えば、1つの音声を入力すると、それを別の話者の声に変換することが可能です。
  • VALL-E X: 一方で、VALL-E Xはテキストから音声を生成する技術です。入力されたテキストに基づいて、特定の話者の声で自然な音声を生成することができるモデルです。テキスト入力に対して、リアルな音声を出力する点で、Seed-VCとは異なる技術を使用しています。

両者は同じ開発者によって作られましたが、音声変換と音声生成という異なる目的に特化しており、それぞれの分野で強みを発揮しています。

CPU最適化のための提案

CPUで実現するには次の課題を克服しなければならないでしょう。

  1. 並列処理の活用:
    • torch.set_num_threads(os.cpu_count()) はすでに実装されていますが、さらに torch.set_num_interop_threads(1) を追加することで、並列処理の効率を高められる可能性があります。
  2. モデルの量子化:
    • モデルを int8 に量子化することで、メモリ使用量を削減し、推論速度を向上させることができます。例: pythonCopymodel = torch.quantization.quantize_dynamic( model, {torch.nn.Linear}, dtype=torch.qint8 )
  3. JIT コンパイル:
    • PyTorch の JIT (Just-In-Time) コンパイラを使用して、モデルをコンパイルし、実行速度を向上させることができます。 pythonCopymodel = torch.jit.script(model)
  4. バッチ処理の最適化:
    • 可能であれば、複数のサンプルを同時に処理するバッチ処理を実装することで、全体的なスループットを向上させることができます。
  5. メモリ効率の改善:
    • 不要なテンソルを積極的に削除し、torch.cuda.empty_cache() を使用してGPUメモリを解放します(これはGPU用ですが、CPUメモリの管理にも注意を払うべきです)。
  6. データ型の最適化:
    • 可能な場合は、float32 の代わりに float16 を使用して、メモリ使用量を削減し、計算速度を向上させます。
  7. 非同期処理の活用:
    • I/O操作(ファイルの読み書きなど)を非同期で行うことで、CPUの待機時間を減らすことができます。
  8. プロファイリングとボトルネックの特定:
    • cProfileline_profiler などのツールを使用して、コードの実行時間を詳細に分析し、最も時間がかかっている部分を特定します。
  9. NumPy の使用:
    • 可能な場合は、PyTorch の操作の代わりに NumPy を使用することで、特定の計算で速度向上が見込める場合があります。
  10. モデルのプルーニング:
    • モデルの重要でないパラメータを削除することで、モデルサイズを縮小し、推論速度を向上させることができます。

これらの最適化を適用する際は、精度とのトレードオフに注意し、各変更後にパフォーマンスをテストすることが重要です。

FFmpegが必要かどうか

requirements.txtにFFmpeg自体の直接の記載はありませんが、librosapydubなどのライブラリが含まれており、これらは音声処理を行う際にFFmpegを使用することがあります。特にpydubはFFmpegに依存しているため、プロジェクトが音声処理を行う際にはホストにFFmpegが必要となる可能性が高いです。

ホストにFFmpegが必要かどうかは、以下のポイントによって決まります。

  1. 音声ファイルの処理を仮想環境内で完結させるか、ホストで行うか
    • 仮想環境内で完結する場合:仮想環境内で音声処理(変換やエンコード)が行われ、必要なライブラリがFFmpegを呼び出すなら、ホストにFFmpegは不要です。すべてが仮想環境内のPythonスクリプトで処理されます。
    • ホストで行う場合:音声ファイルの出力や入力をホストOS(Windows)で直接行う必要がある場合、ホストにFFmpegが必要です。pydubや他のライブラリがFFmpegを呼び出して音声ファイルを操作するため、ホスト側にFFmpegがインストールされている必要があります。

まとめると

  • 音声ファイルがホスト(Windows)で直接操作される場合、FFmpegはホストにインストールが必要です。
  • 仮想環境内で処理が完結するなら、ホストにインストールする必要はありません。

Windows上で音声ファイルの処理がホスト側で必要であれば、FFmpegをホストにインストールすることをおすすめします。

タイトルとURLをコピーしました