💧

Singularityを使ってtch-rsを使用したcrateでcargo runするまで

2023/08/16に公開

はじめに

スパコンでよく導入されているdockerみたいな技術のSingularityを使って,pytorch(libtorch)のRustバインディングであるtch-rsを使ったmnist学習コードを実行できたので,そのメモを公開します。

ローカルでの作業: Singularityのイメージファイルsifを作成する

Singularityのインストール

省略します。以下公式のインストールガイドに従ってwsl2環境でインストールを行いました。
特に問題なかったです。
https://github.com/sylabs/singularity/blob/main/INSTALL.md

defファイルの作成

Singularityのイメージファイルをビルドするための定義ファイルを作ります。
書き方が違いますが,Dockerfileのような感じです。

rust-torch.def

Bootstrap: docker
From: pytorch/pytorch:2.0.0-cuda11.7-cudnn8-devel

%post
    apt-get update
    apt-get install -y \
    build-essential \
    curl xz-utils pkg-config libssl-dev zlib1g-dev libtinfo-dev libxml2-dev
    apt-get update

    curl https://sh.rustup.rs -sSf | bash -s -- -y


    echo '. $HOME/.cargo/env' >>$SINGULARITY_ENVIRONMENT

%environment
    export LIBTORCH_USE_PYTORCH=1
    export LD_LIBRARY_PATH=/opt/conda/lib/python3.10/site-packages/torch/lib:LD_LIBRARY_PATH

cargoは.bashrcに記述されているコマンドが実行されないと使えませんが,Singularityでは.bashrcが読み込まれないようなので,そういう場合は$SINGULARITY_ENVIRONMENTに書き込むとOKなようです。そのため,以下の行をpostに追加しています。

echo '. $HOME/.cargo/env' >>$SINGULARITY_ENVIRONMENT

また,%environmentに環境変数を記述します。tch-rsをビルドするために最低限記述しています。

sifファイルのビルド

sudoが必要です。

sudo singularity build rust-torch.sif rust-torch.def

ビルドが完了したら,rust-torch.sifファイルが生成されます。6GBくらいでした。

Singularityイメージを使ってcargo run

以下のようにして実行します。

singularity exec --nv --bind $PWD:$PWD rust-torch.sif cargo run

--nvはgpuを使用するためのオプションです。
rust-torch.sifのところはsifファイルのパスを直接指定します。

wsl2で試す場合,wsl2内のフォルダでないとPermission Deniedが出るので注意です。
/mnt/cとか/mnt/d以下のフォルダにアクセスできませんでした。

おわり

Singularityのインストールが少々面倒でしたが,イメージの作成やコンテナでの実行などは難しいところがない印象です。

Discussion