クラウドエンジニアのノート

情報技術系全般,自分用メモを公開してます。

singularityでcuda+pytorchのコンテナの作り方

はじめに

tmyoda.hatenablog.com

この記事の亜種です。

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オプションをつけることでpipaptなどを使って外部ライブラリをインストールできる

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を作成する方法は過去記事に書きましたので、そちらを参照してください。

#6: 研究室機器の使い方/サーバ室/Singularityの使い方 #gpu