singularityでcuda+pytorchのコンテナの作り方
はじめに
この記事の亜種です。
singularityは--nv
を付ければホストのGPUをマウントするので、本来はホストのcudaを使いますが、harmo2とharmo5のcudaバージョンが微妙に違ったりして環境構築に手間取ったので、cudaが入ったsingularityコンテナを作りました。
構成
- ubuntu18.04.5LTS(元のcuda dockerコンテナのデフォルト)
- cuda11.0
- pytorch1.7.1
- python3.8.5
- pyenv
- その他よく使うコマンド(git, vim, wget, curl...)
が入ってます。 pytorchをそのまま使う目的と、一応pipenvを使えるようにpyenvを入れておきました。(不要でしたら、.defからpyenv抜いてbuildしてください)
使い方
以下のsingularity libraryで公開しました。 https://cloud.sylabs.io/library/tmyoda/default/cuda-torch-pyenv
実行方法
python_pyenv
というsandboxを作成する例-w
オプションをつけることでpip
やapt
などを使って外部ライブラリをインストールできる
sandbox作成
singularity build --sandbox torch_cuda_pyenv library://tmyoda/default/cuda-torch-pyenv
shellに入る
その他run, execも可 (詳細は 過去記事参照)
singularity shell -w --nv torch_cuda_pyenv
.defファイル
man apt によると apt(8) ではなく apt-get(8) をスクリプトで使用するよう推奨されているため、defファイル等のスクリプトでインストールを動かす場合はapt-get
を使用した方が良いみたいです。
Bootstrap: docker From: pytorch/pytorch:1.7.1-cuda11.0-cudnn8-runtime %environment export LC_ALL=C.UTF-8 export Lang=C.UTF-8 export PATH="/usr/local/opt/openssl/bin:$PATH" # pyenv export PYENV_ROOT="/pyenv" export PATH="$PYENV_ROOT/bin:$PATH" eval "$(pyenv init -)" %post apt-get update DEBIAN_FRONTEND=noninteractive apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev \ libreadline-dev libsqlite3-dev wget curl llvm \ xz-utils tk-dev libffi-dev liblzma-dev python3-distutils apt-utils\ openssl git bzip2 vim bash-completion git clone https://github.com/pyenv/pyenv.git ${PYENV_ROOT} export PYENV_ROOT="/pyenv" export PATH="$PYENV_ROOT/bin:$PATH" eval "$(pyenv init -)" # pipenv pip install -U pip # clean up apt-get clean rm -rf /var/lib/apt/lists/* %labels Author tmyoda Version v1.0.1
ローカルでこの.defから.sifを作成する方法は過去記事に書きましたので、そちらを参照してください。