快速提交Slurm訓(xùn)練任務(wù)
本文為您介紹如何提交Slurm類型的訓(xùn)練任務(wù)。
前提條件
已開通DLC后付費,并創(chuàng)建默認(rèn)工作空間。具體操作,請參見開通PAI并創(chuàng)建默認(rèn)工作空間。
(可選)配置OSS數(shù)據(jù)存儲時,需要完成以下準(zhǔn)備工作:
已開通OSS并完成PAI訪問授權(quán),詳情請參見開通OSS和PAI服務(wù)賬號授權(quán)。
已創(chuàng)建OSS存儲空間(Bucket),詳情請參見控制臺快速入門。
已創(chuàng)建OSS存儲空間(Bucket),詳情請參見控制臺快速入門。
提交Slurm類型的訓(xùn)練任務(wù)
步驟一:準(zhǔn)備訓(xùn)練腳本
準(zhǔn)備訓(xùn)練腳本文件mnist_train.py,并上傳到已創(chuàng)建的對象存儲OSS存儲空間中,詳情請參見控制臺快速入門。本任務(wù)使用的腳本文件示例內(nèi)容如下:
import tensorflow as tf
from tensorflow.keras import datasets, layers, models
# 加載MNIST數(shù)據(jù)集。
(train_images, train_labels), (test_images, test_labels) = datasets.mnist.load_data()
# 歸一化數(shù)據(jù)集。
train_images, test_images = train_images / 255.0, test_images / 255.0
# 增加一個通道維度。
train_images = train_images[..., tf.newaxis]
test_images = test_images[..., tf.newaxis]
# 構(gòu)建模型。
model = models.Sequential([
layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),
layers.MaxPooling2D((2, 2)),
layers.Conv2D(64, (3, 3), activation='relu'),
layers.MaxPooling2D((2, 2)),
layers.Conv2D(64, (3, 3), activation='relu'),
layers.Flatten(),
layers.Dense(64, activation='relu'),
layers.Dense(10)
])
# 編譯模型。
model.compile(optimizer='adam',
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
# 創(chuàng)建TensorBoard回調(diào)。
tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir="/mnt/test/mnist_logs", histogram_freq=1)
# 訓(xùn)練模型。
model.fit(train_images, train_labels, epochs=5,
validation_data=(test_images, test_labels),
callbacks=[tensorboard_callback])
步驟二:提交訓(xùn)練任務(wù)
進(jìn)入新建任務(wù)頁面。
登錄PAI控制臺,在頁面上方選擇目標(biāo)地域,并在右側(cè)選擇目標(biāo)工作空間,然后單擊進(jìn)入DLC。
在分布式訓(xùn)練(DLC)頁面,單擊新建任務(wù)。
在新建任務(wù)頁面,配置以下關(guān)鍵參數(shù),其他參數(shù)配置說明,請參見創(chuàng)建訓(xùn)練任務(wù)。
參數(shù)
描述
基本信息
任務(wù)名稱
自定義任務(wù)名稱,例如mnist_cnn_tb。
環(huán)境信息
節(jié)點鏡像
基于Linux操作系統(tǒng)的鏡像,無其他特殊要求。本方案使用的鏡像為tensorflow-training:2.13-gpu-py310-cu122-ubuntu22.04。
掛載配置
當(dāng)腳本文件過大時,您可以選擇采用掛載的方式,將腳本文件掛載到容器的指定目錄下進(jìn)行操作。
本任務(wù)以對象存儲(OSS)掛載為例,為您說明如何進(jìn)行掛載配置:
單擊添加,掛載類型選擇對象存儲(OSS),并配置以下參數(shù):
OSS:選擇腳本文件mnist_train.py所在的對象存儲OSS的存儲路徑。
掛載路徑:表示將腳本文件掛載到DLC容器的指定路徑。例如
/mnt/test
。
啟動命令
任務(wù)需要執(zhí)行的命令:
必須以
#!/bin/bash
開頭。系統(tǒng)允許自定義SBATCH參數(shù)配置,但建議避免手動設(shè)定資源分配參數(shù),因為平臺已自動化該過程,能根據(jù)需求動態(tài)分配資源。
# 支持。 #SBATCH --job-name=mnist_cnn_tb # 作業(yè)名。 #SBATCH --output=/mnt/test/mnist_train_%j.out # 標(biāo)準(zhǔn)輸出與錯誤輸出的文件名。 # 不建議使用,不保障正確性。 #SBATCH --cpus-per-task=<N> # 指定每個任務(wù)請求的CPU核心數(shù)。 #SBATCH --mem=<M> # 指定所需的內(nèi)存量,單位為MB。 #SBATCH --mem-per-cpu=<M> # 每個CPU核心的內(nèi)存需求。 #SBATCH --gres=<resource>:<N> # 請求特定類型的資源,例如GPU(如gpu:1)或其他通用資源。 #SBATCH --nodes=<N> # 指定請求的節(jié)點數(shù)。 #SBATCH --ntasks=<N> # 指定總共要運行的任務(wù)數(shù)。 #SBATCH --ntasks-per-node=<N> # 每個節(jié)點要運行的任務(wù)數(shù)。 #SBATCH --partition=<partition> # 指定要提交作業(yè)的分區(qū)。 #SBATCH --time=<time> # 指定作業(yè)的最大運行時間。 #SBATCH --account=<account> # 指定要使用的賬戶。
本任務(wù)使用的啟動命令如下所示:
#!/bin/bash #SBATCH --job-name=mnist_cnn_tb # 作業(yè)名 #SBATCH --output=/mnt/test/mnist_train_%j.out # 標(biāo)準(zhǔn)輸出與錯誤輸出的文件名 # 該命令啟動訓(xùn)練腳本。 srun /usr/bin/python3 /mnt/test/mnist_train.py
資源信息
資源來源
本任務(wù)選擇公共資源。您也可以根據(jù)需要選擇其他類型的資源。
框架
選擇Slurm。
任務(wù)資源
需要分別配置Master和Worker資源,本任務(wù)資源配置如下:
節(jié)點數(shù)量:配置為1。
資源規(guī)格:配置為ecs.g6.xlarge。
保留時長
建議將任務(wù)執(zhí)行完成后的實例保留時長設(shè)為1小時,以便在任務(wù)執(zhí)行不成功時能進(jìn)入容器內(nèi)部進(jìn)行問題排查。
說明開啟任務(wù)保留會持續(xù)占用系統(tǒng)資源。
單擊確定。
系統(tǒng)將自動彈出任務(wù)預(yù)檢測對話框。
其中Slurm sbatch命令是系統(tǒng)自動生成的用于提交任務(wù)的命令。一旦任務(wù)被提交,系統(tǒng)將會自動將對應(yīng)的腳本文件掛載到目錄
/usr/config/user_script
下,并按所選的資源參數(shù)來執(zhí)行該腳本。單擊仍要提交。
頁面將自動跳轉(zhuǎn)到分布式訓(xùn)練(DLC)頁面,您可以在該頁面查看已成功提交的訓(xùn)練任務(wù)。
管理訓(xùn)練任務(wù)
您可以對已創(chuàng)建的Slurm類型的任務(wù)進(jìn)行以下管理操作,更詳細(xì)的內(nèi)容介紹,請參見管理訓(xùn)練任務(wù)。
通過過濾框架類型,來篩選Slurm類型的任務(wù)。
查看任務(wù)詳情。
在分布式訓(xùn)練(DLC)頁面,單擊目標(biāo)任務(wù)名稱,進(jìn)入任務(wù)概覽頁面,在該頁面查看Surm類型任務(wù)的基本信息、資源信息、環(huán)境信息以及實例信息等。
定位任務(wù)運行失敗的原因
本任務(wù)在啟動命令中配置了錯誤輸出日志路徑
/mnt/test/mnist_train_%j.out
,如下圖所示:當(dāng)任務(wù)運行失敗時,您可以在任務(wù)概覽頁面的實例區(qū)域,單擊失敗實例操作列下的進(jìn)入容器,在指定目錄下查看錯誤輸出日志mnist_train_%j.out。本任務(wù)示例如下圖所示,您的任務(wù)以實際為準(zhǔn)。查看任務(wù)結(jié)果
本任務(wù)在訓(xùn)練腳本中預(yù)置了如圖所示輸出路徑以保存結(jié)果。當(dāng)任務(wù)運行成功后,您可以使用以下兩種方法查看任務(wù)結(jié)果:
在任務(wù)概覽頁面的實例區(qū)域,單擊目標(biāo)實例操作列下的進(jìn)入容器,在指定目錄下查看節(jié)點運行日志。本任務(wù)示例如下圖所示,您的任務(wù)以實際為準(zhǔn)。
在創(chuàng)建訓(xùn)練任務(wù)時已掛載的對象存儲OSS的路徑中,查看任務(wù)結(jié)果。
相關(guān)文檔
分布式訓(xùn)練DLC(Deep Learning Containers)是基于云原生容器服務(wù)的深度學(xué)習(xí)訓(xùn)練平臺,為開發(fā)者和企業(yè)提供靈活、穩(wěn)定、易用和高性能的機(jī)器學(xué)習(xí)訓(xùn)練環(huán)境。您可以使用DLC提交多種類型的訓(xùn)練任務(wù),更多關(guān)于DLC的內(nèi)容介紹,請參見分布式訓(xùn)練(DLC)。