Fairseqを利用したRVCアプリのGradio v5アップグレードに伴う依存関係エラーとその対策
Hugging Face Spacedでホスティングしているfairseqを利用したアプリをGradio v5へ更新する際に発生した依存関係エラーと対応メモ。
要旨
- 目的:Hugging Face Spaces上のRVCアプリでGradioをv3からv5へ更新。
- 事象:pip install時にomegaconf==2.0.6の依存関係エラーでビルド失敗。
- 結論:根本原因は開発停止したfairseqの古い依存関係。回避策としてpipのバージョンを固定して対応。
問題
まずローカルでアプリのGradioをv3からv5に更新、動作確認を行った。
そして次のコマンドを実行し、Hugging Face Spaces用にrequirements.txtを生成した。
uv pip compile pyproject.toml -o requirements.txt
これらの変更をHugging Faceにプッシュしたところ、ビルド時に次のエラーが発生した。
WARNING: Ignoring version 2.0.6 of omegaconf since it has invalid metadata:
...
Please use pip<24.1 if you need to use this version.
...
ERROR: No matching distribution found for omegaconf==2.0.6
原因
直接的な原因は、Hugging Face環境のデフォルトpip(24.1以上)が、omegaconf 2.0.6の古いパッケージメタデータ(.* suffix
)を不正として処理、同バージョンを無視するためインストール失敗することであるとエラーから推測できる。
一方、requiments.txtを見るとfairseq 0.12.2がhydra-core 1.0.7に依存し、hydra-core 1.0.7がomegaconf 2.0.6が依存していることが分かる。つまり根本的な原因はHugging Face環境のpipの更新によりfairseq 0.12.2が抱えていた古い依存関係の問題が顕在化したことだと考えられる。
回避策:pipのバージョン固定
Huggin Face Spacesではpre-requirements.txt
を作成し、次のようにpipなどのバージョンを指定できる。
pip<24.1
この変更を実際に試すと、アプリのビルドが成功することが確認できた。
根本的な解決の探求
omegaconf
のメタデータ問題はバージョン2.3.0以降で解消されている。
そこで、omegaconf
のバージョンを2.3.0以降に指定することで解消できないか試みた。しかし、fairseq
及びhydra-core
は2.1未満のomegaconf
に依存しているため、次のように依存関係のコンフリクトが発生する。
fairseq 0.12.2 depends on omegaconf<2.1 hydra-core 1.0.7 depends on omegaconf<2.1 and >=2.0.
さらに、fairseq
ライブラリ自体の開発が長らく停止しているため、新しいomegaconfに対応したfairseqの公式リリースは今後も期待できない。
結論
fairseq
が開発停止しているため、依存関係の根本解決はfairseq
を利用し続ける限り不可能。現実的な解として、回避策であるpipのバージョン固定が最適と判断した。
余裕があればfairseq
の代替として、 公式の後継であるfairseq2
やHugging Faceのtransformers
などがあるため、これらへの移行を検討したい。