9
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Singularityコンテナを用いた環境構築

Last updated at Posted at 2025-10-08

松尾研LLMコンペ2025が開催され、その中で得られた知見の一つとして、環境構築について記載します。

背景

コンペ主催者からは、Verlという事後学習用のライブラリをConda構築する方法が共有されていました。しかしながら、いくつか課題がありました。

  • チームコンペという性質上、分担して実験を行いたいが、環境構築に時間がかかる、環境構築が個々人に依存するため必ずしも同じ状態を作れない
  • 環境構築に時間がかかり、バージョン依存も多いため、バージョンアップや他のライブラリを試すことが困難になる
  • 環境構築に貴重なGPUリソースをつかってしまう
  • Condaとpipのどちらになにをインストールすべきか判断が難しい

コンテナを用いる利点

上記の問題を解決し、開発の高速化を図るため、コンテナを利用しました。

コンテナでは必要なライブラリをインストールしておいた環境を予め容易することができます。そのため、コンテナを利用すれば、予め誰かが一人動作確認できれば、そのコンテナを用いるだけで、実験環境の共有ができます。

次に、NVCのPytorchコンテナを利用することで、インストールに時間のかかるapextransformer engineを予めインストールした状態から、使用したいライブラリをインストールして使用することが可能になります。これによって、バージョンアップや別ライブラリの試行が行いやすくなったと感じます。

さらに、GPUマシンが手元にあれば、自分のマシンでコンテナのbuildができるのも魅力的な点です。デバッグ作業などが手元でできるため、エージェントの補助を受けることができますし、スパコンの貴重なGPUリソースを使う必要がありません。

最後に、すべてシステムpythonにインストールするため、Condaとpipの使い分けの必要もありません。

Singularityについて

SingularityはDockerのようなコンテナエンジンです。Dockerとは異なり、ユーザ権限で起動できるため、スパコンのようなrootユーザを使用することができない環境において、セキュアにコンテナを利用することが可能です。詳細はこちらの資料を参照下さい。

構築方法

Singularityコンテナを構築するおすすめ手順は以下のとおりです。

  1. 手元のマシン(GPUあり)で、Dockerコンテナを構築し、Docker Hubにpushする
  2. DockerHubから、コンテナでサンドボックスモードで、Singularityコンテナを構築
  3. shellコマンドやrunコマンドを通じて、Singularityコンテナを使用する

以下詳細を述べます。

手元のマシン(GPUあり)で、Dockerコンテナを構築し、Docker Hubにpushする

こちらは通常のDockerコンテナを構築する方法と同様です。例えば、TRLのコンテナは以下のDockerfileを作成しました。

FROM nvcr.io/nvidia/pytorch:25.05-py3

RUN pip install --upgrade pip

COPY requirements.txt .
RUN pip install -r requirements.txt
RUN ln -s /usr/local/cuda/compat/lib.real /usr/local/cuda/compat/lib

まず、ベースコンテナをNVCのPytorchコンテナである、nvcr.io/nvidia/pytorch:25.05-py3としています。
このバージョンを用いるのは、 HuggingfaceのDatasetsと依存関係の不整合を起こすためです。drillというライブラリで不整合を起こしていました。
次に、必要なrequirements.txtを用意して、pip installをしています。直接Dockerfileに記載しても問題ありません。(むしろその方が、失敗時にCacheを利用できて良いかもしれません。)
最後の行ですが、25.05-py3バージョンでは、/usr/local/cuda/compat/lib が不在のため、torchがcudaを認識できないというエラーが起きました。そのため、シンボリックリンクをつけています。

Dockerfileが用意できたら、buildして、pushをします。

$ docker build . -t llm0compe-trl:v1
$ docker tag llm-compe-trl:v1 <your-account-name>/llm-compe-trl:v1
$ docker push <your-account-name>/llm-compe-trl:v1

DockerHubから、コンテナでサンドボックスモードで、Singularityコンテナを構築

以下のコマンドで、サンドボックスモードでsingulairtyコンテナを構築します。

 $ SINGULARITY_CACHEDIR=/path/to/cache singulairty \
    build -s /path/to/trl_container \
    docker://<your-account-name>/llm-compe-trl:v0.3

-s がサンドボックスモードを指します。 /path/to/trl_container 以下にコンテナの中身が展開されます。例えば、今回のコンペのチーム共有ディレクトリである、/home/Competition2025/P04/shareP04/trl_container に展開したコンテナは以下のとおりです。

user: P04U011 on osk-cpu01 P04/shareP04/trl_container
❯ ls
bin  boot  dev  environment  etc  home  lib  lib64  lib.usr-is-merged  media  mnt  opt  proc  root  run  sbin  singularity  srv  sys  tmp  usr  var  workspace

よく見かける、linuxの配置になっています。ちなみに、/workspaceはNVCのPytorchコンテナの使用例などが含まれています。

なお、sandboxモードにしないと、コンテナのイメージファイルが作成されます。.sifとするのが、慣例のようです。イメージファイルの場合、一度コンテナを抜けると状態が保存されません。

shellコマンドやrunコマンドを通じて、Singularityコンテナを使用する

singularity shellコマンドを用いることでコンテナ環境でshellを開くことができます。このコマンドは動作検証などで便利です。コマンドは以下の通りです。

$ singularity shell -w -nv -B /mount/path /path/to/container 

-wを用いることで、コンテナに書き込みができます。 -Bを用いるとボリュームマウントできます。-nvはGPUを使うために必要です。(ただし、nvidia-smiなどは使用できませんでした。)/mount/pathは、共有ディレクトリなどを指定することをおすすめします。今回のコンペでは/homeを使用すると、自分のhomeと共有ディレクトリを同時にマウントできて便利でした。なお、参考資料等にある、-fオプションは、今回のスパコン環境では使用できませんでした。

動作検証が終了して、bashやpythonコマンドをスクリプトに対して実行する場合は、singularity runコマンドが便利です。コマンドは以下の通りです。

$ singularity run -w --nv -B /mount/path /path/to/container/ bash your_script.sh

なお、スパコン環境によっては、singularityではなく、apptainerがインストールされている場合があります。ほとんど同じですが、こちらの記事等を参考にしてください。

注意点

  • TransformerEngineにバグがあるようで、NVCのPytorchコンテナを使っていれば、すべて問題がないというわけでもありません。

まとめ

今回は、松尾研LLMコンペ2025で開発効率化のために活用した、コンテナでの環境構築方法を紹介しました。途中で紹介した、こちらの資料には、概ね記載されていますが、入門として、スパコン利用される方の役に立てば幸いです。

謝辞

本プロジェクトは、国立研究開発法人新エネルギー・産業技術総合開発機構(以下「NEDO」)の「日本語版医療特化型LLMの社会実装に向けた安全性検証・実証」における基盤モデルの開発プロジェクトの一環として行われます。

9
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?