💧
Singularityを使ってtch-rsを使用したcrateでcargo runするまで
はじめに
スパコンでよく導入されているdockerみたいな技術のSingularityを使って,pytorch(libtorch)のRustバインディングであるtch-rsを使ったmnist学習コードを実行できたので,そのメモを公開します。
ローカルでの作業: Singularityのイメージファイルsifを作成する
Singularityのインストール
省略します。以下公式のインストールガイドに従ってwsl2環境でインストールを行いました。
特に問題なかったです。
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