🔰

uvを用いてfairseqをeditableインストールする

2024/12/12に公開

はじめに

研究でfairseqを利用する際に、pipではなくuvでeditableインストールする方法がわからず詰まったので、動いた記録を共有します。
uvはpythonのバージョン管理からパッケージ管理まで行える便利なツールです。
利用を開始する際は以下の記事がわかりやすいです。
https://zenn.dev/turing_motors/articles/594fbef42a36ee

公式のpytorch導入のドキュメントもあります。
https://docs.astral.sh/uv/guides/integration/pytorch/

作業手順

プロジェクトの準備

# ディレクトリの準備
mkdir fairseq_test
cd fairseq_test

# プロジェクト初期化
uv init
uv python pin 3.10

# fairseqをクローン
git clone https://github.com/pytorch/fairseq

依存ライブラリを定義

fairseq==0.12.2torch==1.12.1+cu113numpy==1.26.4の組み合わせで動作することが確認できました。
このバージョンをインストールするためにpyproject.tomlを編集します。
以下のように書き換えてください。

[project]
name = "fairseq_test"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.10"
dependencies = [
    "fairseq",
    "torch==1.12.1+cu113",
    "torchvision==0.13.1+cu113",
    "numpy==1.26.4",
]

[tool.uv]
find-links = [
    "https://download.pytorch.org/whl/cu113/torch",
    "https://download.pytorch.org/whl/cu113/torchvision",
]

[tool.uv.sources]
fairseq = { path = "fairseq", editable = true }

fairseqの依存バージョンを修正

fairseqはtorch>=1.13しか受け付けません。1.12を利用したいので修正します。
fairseq/setup.pytorch>=1.13と記載の部分を1.11に書き換えてください。

~~~       
        long_description_content_type="text/markdown",
        install_requires=[
            "cffi",
            "cython",
            "hydra-core>=1.0.7,<1.1",
            "omegaconf<2.1",
            "numpy>=1.21.3",
            "regex",
            "sacrebleu>=1.4.12",
-            "torch>=1.13",
+            "torch>=1.11",
            "tqdm",
            "bitarray",
            "torchaudio>=0.8.0",
            "scikit-learn",
            "packaging",
        ],
 ~~~

インストール

この状態でインストールします。
私の環境ではCXXの変数を指定する必要がありました。

# インストール
CXX=g++ uv sync

テスト

正常にインストールできたか確認します。
ここでは、fairseqに含まれるexampleの推論を行ってみます。
https://github.com/facebookresearch/fairseq/tree/main/examples/translation#example-usage-cli-tools

上記の例を参考にshellファイルを作成します。
test.shというファイルに以下を貼り付けてください。
uv runを追加しています。

test.sh
mkdir -p data-bin
curl https://dl.fbaipublicfiles.com/fairseq/models/wmt14.v2.en-fr.fconv-py.tar.bz2 | tar xvjf - -C data-bin
curl https://dl.fbaipublicfiles.com/fairseq/data/wmt14.v2.en-fr.newstest2014.tar.bz2 | tar xvjf - -C data-bin
CUDA_VISIBLE_DEVICES=1 uv run fairseq-generate data-bin/wmt14.en-fr.newstest2014 \
    --path data-bin/wmt14.en-fr.fconv-py/model.pt \
    --beam 5 --batch-size 128 --remove-bpe | tee ./tmp/gen.out
# ...
# | Translated 3003 sentences (96311 tokens) in 166.0s (580.04 tokens/s)
# | Generate test with beam=5: BLEU4 = 40.83, 67.5/46.9/34.4/25.5 (BP=1.000, ratio=1.006, syslen=83262, reflen=82787)

# Compute BLEU score
grep ^H ./tmp/gen.out | cut -f3- >./tmp/gen.out.sys
grep ^T ./tmp/gen.out | cut -f2- >./tmp/gen.out.ref
uv run fairseq-score --sys ./tmp/gen.out.sys --ref ./tmp/gen.out.ref
# BLEU4 = 40.83, 67.5/46.9/34.4/25.5 (BP=1.000, ratio=1.006, syslen=83262, reflen=82787)

実行結果は以下のようになりました。

BLEU4 = 40.82, 67.5/46.9/34.4/25.5 (BP=1.000, ratio=1.006, syslen=83021, reflen=82565)

おわりに

この記事ではuvを用いてfairseqをeditableインストールする方法を紹介しました。
解決の手助けになれば幸いです。

GitHubで編集を提案

Discussion