DLC可以快捷地建立分布式或單機訓練任務。其底層基於Kubernetes,省去您手動購買機器並配置運行環境,無需改變使用習慣即可快速使用。本文以 MNIST 手寫體識別為例,介紹如何使用DLC進行單機單卡訓練,或多機多卡的分布式訓練。
MNIST手寫體識別是深度學習最經典的入門任務之一,任務目標是通過構建機器學習模型,來識別10個手寫數字(0~9)。

前提條件
使用主帳號開通PAI並建立工作空間。登入PAI控制台,左上方選擇開通地區,然後一鍵授權和開通產品。
計費說明
本文案例將使用公用資源建立DLC任務,計費方式為隨用隨付,詳細計費規則請參見分布式訓練(DLC)計費說明。
單機單卡訓練
建立資料集
資料集用於儲存模型訓練的代碼、資料、以及訓練結果。本文以Object Storage Service類型資料集為例進行說明。
在PAI控制台左側功能表列單擊資料集 > 自訂資料集 > 建立資料集。

配置資料集參數。關鍵參數配置如下,其他參數預設即可。
名稱:如:
dataset_mnist儲存類型:Object Storage Service
OSS路徑:單擊表徵圖
,選擇Bucket並建立目錄如:dlc_mnist。如果您尚未開通OSS,或在當前地區下沒有可選的Bucket,可參考如下步驟開通OSS,並建立Bucket:
單擊確定建立資料集。
上傳訓練代碼和資料。
下載代碼。本文已經為您準備好了訓練代碼,單擊mnist_train.py下載。為減少您的操作,代碼運行時會自動將訓練資料下載到資料集的dataSet目錄中。
您在後續實際業務使用時,可以預先把代碼和訓練資料上傳到PAI的資料集中。
上傳代碼。在資料集詳情頁,單擊查看資料跳轉至OSS控制台。然後單擊上傳檔案 > 掃描檔案 > 上傳檔案,將訓練代碼上傳至OSS中。

建立DLC任務
在PAI控制台左側功能表列單擊分布式訓練DLC > 建立任務。

配置DLC任務參數。關鍵參數配置如下,其他參數預設即可。全量參數請參見建立訓練任務。
鏡像配置:選擇鏡像地址,然後根據您所在地區填寫對應鏡像地址。

地區
對應鏡像地址
北京
dsw-registry-vpc.cn-beijing.cr.aliyuncs.com/pai/modelscope:1.28.0-pytorch2.3.1tensorflow2.16.1-gpu-py311-cu121-ubuntu22.04
上海
dsw-registry-vpc.cn-shanghai.cr.aliyuncs.com/pai/modelscope:1.28.0-pytorch2.3.1tensorflow2.16.1-gpu-py311-cu121-ubuntu22.04
杭州
dsw-registry-vpc.cn-hangzhou.cr.aliyuncs.com/pai/modelscope:1.28.0-pytorch2.3.1tensorflow2.16.1-gpu-py311-cu121-ubuntu22.04
其他
查詢地區ID,並替換鏡像地址中的<地區ID>擷取完整連結:
dsw-registry-vpc.<地區ID>.cr.aliyuncs.com/pai/modelscope:1.28.0-pytorch2.3.1tensorflow2.16.1-gpu-py311-cu121-ubuntu22.04
該鏡像已在互動式建模 DSW 快速入門中驗證沒有環境問題。使用PAI建模時,通常先在DSW中驗證環境、開發代碼,然後再使用DLC訓練。
資料集掛載:選擇自訂資料集,選擇上一步中建立的資料集。掛載路徑預設
/mnt/data。啟動命令:
python /mnt/data/mnist_train.py該啟動命令與在DSW或本地運行時相同。但由於
mnist_train.py現已掛載至/mnt/data/,因此僅需要修改代碼的路徑為/mnt/data/mnist_train.py。資源來源:選擇公用資源,資源規格選擇
ecs.gn7i-c8g1.2xlarge即可。如果該規格執行個體庫存不足,您也可以選擇其他GPU執行個體。
單擊確定建立任務,任務大約需要執行15分鐘。執行過程中可以單擊日誌查看訓練過程。

執行完成後,會在掛載資料集的
output路徑下輸出最佳的模型檢查點,以及TensorBoard日誌。
(可選)查看Tensorboard
您可以藉助視覺化檢視TensorBoard查看loss曲線,瞭解訓練的具體情況。
DLC任務如果想使用TensorBoard,必須配置資料集。
單擊DLC任務詳情頁上方的Tensorboard > 建立Tensorboard。

配置類型選擇按任務,在Summary目錄處填寫訓練代碼中Summary儲存的路徑:
/mnt/data/output/runs/,單擊確定啟動。對應程式碼片段:
writer = SummaryWriter('/mnt/data/output/runs/mnist_experiment')單擊查看Tensorboard查看train_loss曲線(反映訓練集損失)與 validation_loss曲線(反映驗證集損失)。

部署訓練後的模型
詳情請參見使用EAS將模型部署為線上服務。
單機多卡或多機多卡分布式訓練
當單個GPU的顯存無法滿足訓練需求,或者想要加快訓練速度時,您可以建立單機多卡或多機多卡的分布式訓練任務。
本文以使用2台各有1個GPU的執行個體為例進行說明,該樣本同樣適用於其他配置的單機多卡或多機多卡訓練。
建立資料集
如果您在單機單卡訓練時已經建立了資料集,只需單擊下載代碼mnist_train_distributed.py並上傳。否則請先建立資料集,再上傳該代碼。
建立DLC任務
在PAI控制台左側功能表列單擊分布式訓練DLC > 建立任務。

配置DLC任務參數。關鍵參數配置如下,其他參數預設即可。全量參數請參見建立訓練任務。
鏡像配置:選擇鏡像地址,然後根據您所在地區填寫對應鏡像地址。

地區
鏡像地址
北京
dsw-registry-vpc.cn-beijing.cr.aliyuncs.com/pai/modelscope:1.28.0-pytorch2.3.1tensorflow2.16.1-gpu-py311-cu121-ubuntu22.04
上海
dsw-registry-vpc.cn-shanghai.cr.aliyuncs.com/pai/modelscope:1.28.0-pytorch2.3.1tensorflow2.16.1-gpu-py311-cu121-ubuntu22.04
杭州
dsw-registry-vpc.cn-hangzhou.cr.aliyuncs.com/pai/modelscope:1.28.0-pytorch2.3.1tensorflow2.16.1-gpu-py311-cu121-ubuntu22.04
其他
查詢地區ID,並替換鏡像地址中的<地區ID>擷取完整連結:
dsw-registry-vpc.<地區ID>.cr.aliyuncs.com/pai/modelscope:1.28.0-pytorch2.3.1tensorflow2.16.1-gpu-py311-cu121-ubuntu22.04
該鏡像已在互動式建模 DSW 快速入門中驗證沒有環境問題。使用PAI建模時,通常先在DSW中驗證環境及代碼,然後再使用DLC訓練。
資料集掛載:選擇自訂資料集,並選擇上一步中建立的資料集。掛載路徑預設
/mnt/data。啟動命令:
torchrun --nproc_per_node=1 --nnodes=${WORLD_SIZE} --node_rank=${RANK} --master_addr=${MASTER_ADDR} --master_port=${MASTER_PORT} /mnt/data/mnist_train_distributed.pyDLC會自動注入
MASTER_ADDR、WORLD_SIZE等通用環境變數,通過$環境變數名來擷取。資源來源:選擇公用資源,節點數量為2,資源規格選擇
ecs.gn7i-c8g1.2xlarge。如果該規格執行個體庫存不足,您也可以選擇其他GPU執行個體。
單擊確定建立任務,任務大約需要執行10分鐘。執行過程中可以在概覽頁面,查看兩台執行個體的訓練日誌。

執行完成後,會在掛載資料集的
output_distributed路徑下輸出最佳的模型檢查點,以及TensorBoard日誌。
(可選)查看Tensorbord
您可以藉助視覺化檢視TensorBoard查看loss曲線,瞭解訓練的具體情況。
DLC任務如果想使用TensorBoard,必須配置資料集。
單擊DLC任務詳情頁上方的Tensorboard > 建立Tensorboard。

配置類型選擇按任務,在Summary目錄處填寫訓練代碼中Summary儲存的路徑:
/mnt/data/output_distributed/runs,單擊確定啟動。對應程式碼片段:
writer = SummaryWriter('/mnt/data/output_distributed/runs/mnist_experiment')單擊查看Tensorboard查看train_loss曲線(反映訓練集損失)與 validation_loss曲線(反映驗證集損失)。

部署訓練後的模型
詳情請參見使用EAS將模型部署為線上服務。
相關文檔
更多DLC功能請參見分布式訓練DLC。
