NAIST小規模計算クラスタでDaskを動かす (2022年版)

November 27, 2022 (Updated on: August 15, 2023)
by Keichi Takahashi

以前NAISTの小規模計算クラスタでDaskを動作させる方法を書きましたが,今年度新しいクラスタにリプレースされたことにともない,Dask-jobqueueの設定方法が一部変わりました.ここでは,以前のクラスタとの設定方法の違いをメモしておきます.

インストール

まず,以前と同様にDaskとDask-jobqueueをインストールします.

$ pip install "dask[complete]" dask_jobqueue

venvを利用する場合,デフォルトでインストールされているPythonではvenvを利用できない (python3.8-venvがインストールされていない) ので,Pyenvなどを用いて自前でPythonをインストールする必要があります. なお,この記事の執筆時点ではDask-jobqueueがPython 3.11上で動かないバグがあるため, 3.10以下のPythonをインストールする必要がありました.

クラスタの起動

Dask-jobqueueを用いてクラスタを起動します.

import dask
from dask_jobqueue import SLURMCluster
from dask.distributed import Client

cluster = SLURMCluster(
    queue="cluster_short",
    cores=52,
    memory="380GB",
    local_directory="/var/tmp",
    interface="ens1f1.3219",
    scheduler_options={"interface": "bond1.3219"}
)

cluster.scale(jobs=1)
client = Client(cluster)

ジョブスケジューラ,キュー名,ハードウェア構成が変わったため,使用するクラスタクラス をSLURMClusterに変更し,queue, cores, memoryをそれぞれ変更しています.

また,NIC名も変わったので,interfacescheduler_optionsも合わせて変更しています.

動作確認

Daskのコードの書き方に変更はありません.例えば,次のコードが正常に動けば成功です.

import dask.array as da

x = da.random.random((100000, 100000, 10), chunks=(1000, 1000, 5))
y = da.random.random((100000, 100000, 10), chunks=(1000, 1000, 5))
z = (da.arcsin(x) + da.arccos(y)).sum(axis=(1, 2))
z.compute()