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