同じGPUで複数のSLURMジョブを実行する

同じGPUで複数のSLURMジョブを実行する

したがって、私はシステム管理者ではありませんが、大量の作業(約5000件)を開始するには、既存のSLURMインストールを使用する必要があります。

クラスタは10個のGPU(各GPUのメモリは8GB)と56個のCPUを持つ1つのノードで構成されています。

sbatch <file>各タスクは、私が実行した後にsview何が起こっているのかを判断するために使用するバッチスクリプトです。

これらの作業はGPUで実行する必要がありますが、GPUのメモリ要件がかなり低いため(約2GB)、単一のGPUに3つを入れることができると思いました。

私は同じGPUで3つのタスクを同時に実行する方法を見つけようとしましたが、ドキュメントが大きすぎて完全に迷子になった気がしました。

私がこれを正しく使用しているかどうかはわかりません。

タスクは次のとおりです。

#!/bin/bash
#SBATCH --time=00:10:00                 
#SBATCH -p n1                        
#SBATCH --nodes=1                       
#SBATCH --ntasks=1                      
#SBATCH --cpus-per-task=[nb_cpu]               
#SBATCH --mem-per-gpu=1                        
#SBATCH --job-name=[job_name]           
#SBATCH --mail-user=[list_mail]  
#SBATCH --mail-type=NONE                 
#SBATCH --gid=dl
#SBATCH --output=[folder]/%x.log    

echo "Current GPU: $CUDA_VISIBLE_DEVICES"
# a bunch of initialization
module load opencv/4.5.4 deeplearning
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/raid1/CLUSTER/LIB/custom_libs/
export OPENCV_LOG_LEVEL=DEBUG
export OPENCV_VIDEOIO_DEBUG=1
run_dl --nn-dir=/home/dl/networks --root-dir=[root_dir] [file]
if [ $? -eq 0 ]
then
    mkdir -p [folder]/done
    echo [id] > [folder]/done/[job_name]
else
    mkdir -p [folder]/fail
    echo [id] > [folder]/fail/[job_name]
fi

これらの操作はスクリプトによって生成され、必要に応じて簡単に変更できます。私は正しい方向を使用していますかsbatch?私は迷っています。

答え1

22.05以降で利用可能なgres:GPUの代わりに「シャーディングされた」GRES(gres:shard)を使用する必要があります。

https://slurm.schedmd.com/gres.html#Sharding

これにより、オーバーサブスクライブされたコアおよびRAMリソースと同様に、さまざまなタスクがGPUを共有できます。既存のgres:gpuは、メモリ使用量に関係なく、ジョブにのみGPUを割り当てます。

関連情報