🌊

[Tips] NGC PyTorchのversion lockを解除する方法

に公開

はじめに

Turingの基盤AIチームに業務委託として所属している東京科学大学(Institute of Science Tokyo)の藤井です。本記事では、NVIDIA NGC PyTorchのcontainerを利用する際に直面するversion lock問題に関する知見や注意点について紹介します。

普段はSwallow Project横田研究室にて大規模モデルの分散並列学習や低精度学習について研究を行っていますので、そちらもご覧いただけますと幸いです。

NGC PyTorchとは

NGC PyTorchとは、NVIDIAが提供しているコンテナの総称であり、LLMの学習やNLP研究などに必要とされる主要なライブラリの依存関係をNVIDIAが確認し、installしてくれている便利なコンテナのことを指します。約1ヶ月ごとに定期的にversion up等の処理がなされているのも魅力的です。
コンテナの環境内には、CUDA Toolkit, nccl等もインストールされているため、特殊なライブラリを利用するわけではない場合は、すぐに実験や研究を開始できます。

以下のリンクから使用方法等を確認できます。
https://catalog.ngc.nvidia.com/orgs/nvidia/containers/pytorch

NGC PyTorch 直面する問題

多くの方がPre-Trained modelを利用して研究開発を行う際に利用するhuggingface transformersですが、あるversion以上でないと特定のモデルをサポートしていないことがあります。このように、研究開発で利用するライブラリのversionを上げたい or 下げたいという欲求はよくあると思います。

しかし、NGC PyTorchにdefaultでインストールされているライブラリにはversion lockがかけられており、versionを自由に変更することができません。
以降では、このversion lockをどのように外すのかについて解説を行います。

version lock

NGC PyTorchは、PyTorchを利用したDeepLearningを行う上で必須のライブラリが大体インストールされている便利なコンテナなのですが、少々使いづらい点があります。
そのうちの1つは、上述したversion lockです。

version lockとは、container内にdefaultでinstallされているらpython package versionを特定のversionに固定するものであり、以下のようにpip installで異なるversionのライブラリをインストールしようとするとエラーが発生してしまいます。

ERROR: Cannot install nvidia-modelopt==0.27.0 because these package versions have conflicting dependencies.

The conflict is caused by:
    The user requested nvidia-modelopt==0.27.0
    The user requested (constraint) nvidia-modelopt==0.25.0

To fix this you could try to:
1. loosen the range of package versions you've specified
2. remove package versions to allow pip to attempt to solve the dependency conflict

ERROR: ResolutionImpossible: for help visit https://pip.pypa.io/en/latest/topics/dependency-resolution/#dealing-with-dependency-conflicts

解除方法

version lcokの解除方法はいたってシンプルです。
コンテナ内に入ると/etc/pip/constraint.txtにinstall済みのpackage versionを固定するためのファイルが存在しています。こちらをvim等のコマンドで開き、versionとして指定されているものを変更するだけです。

以下は一部分を抜粋したものですが、以下のようにpackageごとにversionが規定されています。

black==25.1.0
expecttest==0.3.0
cudf-polars==25.2.0
isoduration==20.11.0
referencing==0.36.2
jsonschema-specifications==2024.10.1
sortedcontainers==2.4.0
spacy-legacy==3.0.12
pybind11==2.13.6
jedi==0.19.2

そのため、仮にblackのversionを変えたい場合は、以下のように変更すれば、pip installにて変更したversionのblackをinstallすることができます。

+ black==25.2.0
- black==25.1.0

modelopt と transformers

こちらのIssueにあるように、transformers>=4.50かつnvidia-modelopt<0.27.0を利用している場合は、以下のようなエラーが発生します。

  File "/usr/local/lib/python3.12/dist-packages/modelopt/torch/opt/plugins/huggingface.py", line 84, in _new_from_pretrained
    model = types.MethodType(cls._modelopt_cache["from_pretrained"].__func__, cls)(
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/dist-packages/transformers/modeling_utils.py", line 279, in _wrapper
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/dist-packages/transformers/modeling_utils.py", line 4399, in from_pretrained
    ) = cls._load_pretrained_model(
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: _new__load_pretrained_model() missing 1 required positional argument: 'pretrained_model_name_or_path'

これを解消するには、上述の version lock解除方法と同様に以下のように修正します。

vim /etc/pip/constraint.txt
- nvidia-modelopt==0.25.0
- nvidia-modelopt-core==0.25.0
+ nvidia-modelopt==0.27.0
+ nvidia-modelopt-core==0.27.0

修正した後に、以下のようにmodeloptをインストールします。

pip install nvidia-modelopt==0.27.0

これで問題が解決できます。

おわりに

本記事では、NGC PyTorchを利用する上でpackageのversionを変えたい場合に直面するversion lock問題に関するTipsを紹介してきました。
コンテナを利用した機械学習、研究を行う一助になれれば幸いです。

普段からこのような形で、企業、大学における研究開発に携わる方に向けたTipsに関して発信していますので、よろしければ以下もご覧ください。

https://zenn.dev/turing_motors/articles/3a434d046bbf48

Tech Blog - Turing

Discussion