🤖

ABCI上でPyTorchを使いこなそう

2024/04/15に公開

TL;DR

  • この記事は,「深層学習系の研究室の学生でABCIを使いたいが,基本的な使い方が分からない人」 をターゲットとしている.
  • この記事では,以下の項目を扱う.基本的な操作のみを扱う.
    • ABCIに接続するためのSSHの設定
    • ABCI上でのPyTorchの環境構築・実行方法
      • condaの仮想環境
      • singularity [wip]
  • ABCIのユーザガイドに全部書いてあるので,詳しいオプションを知りたいはそっちを見よう.

SSHの設定

ローカルPCから,ABCIに繋げるようにしよう.

  1. ABCIのユーザポータルサイトから,SSH公開鍵をアップロードする.
  2. SSHの設定ファイル(多くの人の場合,~/.ssh/config)に,以下の項目を追加する.ただし,
  • {userName}は,自身のABCIのユーザ名に置き換える.
  • {/path/to/private_key_file}は,アップロードしたSSH公開鍵に対応する秘密鍵のパスに置き換える.
Host abci
  HostName es1
  User {userName}
  ProxyJump %r@as.abci.ai
  IdentityFile {/path/to/private_key_file}
  ForwardAgent yes
Host ab.abci.ai
  IdentityFile {/path/to/private_key_file}
  1. ローカルPCのターミナル上からssh abciと叩いて,ABCIに接続できることを確認する.

PyTorchの環境構築・実行方法

ABCI上でPyTorchの環境を構築するには,以下の2種類の方法がある.

  • condaの仮想環境
  • singularity

自分の経験則上だと,以下のルールに従って選ぶと良い.

  • 基本的にはcondaの仮想環境を使おう.
    • singularityでの環境構築はカッコいいが,おすすめしない.実行までに必要な手順が多い上に,マウントの設定で苦戦することが多い.
    • condaの場合は,ローカルPCと同じような感じで環境構築・実行ができる.
  • 以下の場合のみ,singularityを使おう.
    • condaで環境構築したけど,ABCI上だと動かなかった.
    • dockerに慣れていて,ビルドやマウントについての知識が豊富である.

conda

仮想環境の構築

  1. ABCI上にminicondaをインストールする.
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh
  1. condaで仮想環境を構築する.ここでは,仮想環境の名前を{envName}としている.
conda create --name {envName} python=3.19 -y # 一から環境構築する場合
conda create -f environment.yml # environment.yml(condaの仮想環境の設定ファイルみたいなもの)がある場合

インタラクティブジョブ

インタラクティブジョブには,以下のようにして入る.rt_G.small=1(使用するマシンのスペック)やh_rt=1:00:00(確保する時間)の部分は,ABCIのユーザガイドを見て適宜自分に合ったものを設定する.

conda activate {envName} # 仮想環境をアクティベート
qrsh -g {groupID} -l rt_G.small=1 -l h_rt=1:00:00 # インタラクティブジョブに入る

インタラクティブジョブから出る時は,以下のコマンドを打つ.

exit

バッチジョブ

例えば,python main.pyというコマンドをバッチジョブ上で実行したい場合,以下のようなジョブスクリプトを作成する.

jobscript.sh
#!/bin/bash

#$ -l rt_G.small=1 # マシンのスペック
#$ -l h_rt=24:00:00 # ジョブの最大実行時間
#$ -j y
#$ -cwd

### condaのセットアップ
### ABCI上にminicondaをinstallした際,`~/.bashrc`に自動的に書かれている内容をコピペすれば大丈夫
__conda_setup="$('/home/{userName}/miniconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
    eval "$__conda_setup"
else
    if [ -f "/home/{userName}/miniconda3/etc/profile.d/conda.sh" ]; then
        . "/home/{userName}/miniconda3/etc/profile.d/conda.sh"
    else
        export PATH="/home/{userName}/miniconda3/bin:$PATH"
    fi
fi
unset __conda_setup

### 仮想環境をアクティベート
conda activate {envName}

source /etc/profile.d/modules.sh # 魔法のコマンド
module load cuda/11.8 # 使用しているcudaのバージョンに合わせて書き換える.

### コマンドの実行
python main.py 

作成したジョブスクリプトを,以下のようにして実行する.{groupName}には,自身のABCIアカウントが所属するグループ名を入れる.

qsub -g {groupName} jobscript.sh

Singularity [wip]

その他のTips

  • インタラクティブジョブは動作確認用に,バッチジョブは本番の実行に使おう.
    • インタラクティブジョブで長時間大量の計算機を使うことは良くないとされている.
    • ABCI上でtmuxを使ってインタラクティブジョブを実行しても,SSHを切るとそのインタラクティブジョブは止まってしまう.
  • インタラクティブジョブに対する課金は,確保した時間ではなく実際に使用した時間に応じて行われる.
  • バッチジョブに対する課金も,設定したジョブの最大実行時間ではなく,実際に実行された時間に応じて行われる.
  • 各コマンドの詳細なオプションはABCIのユーザガイドで確認しよう.

Discussion