DLC 可快捷建立分布式或單機訓練任務,無需手動購買機器和配置環境。本文以MNIST手寫體識別為例,示範單機單卡訓練和多機多卡分布式訓練的完整流程。
MNIST手寫體識別是深度學習最經典的入門任務之一,任務目標是通過構建機器學習模型,來識別10個手寫數字(0~9)。
一. 前提條件
使用主帳號開通PAI並建立工作空間。登入PAI控制台,左上方選擇開通地區,然後一鍵授權和開通產品。
二. 計費說明
本文案例將使用公用資源建立DLC任務,計費方式為隨用隨付,計費規則參見分布式訓練(DLC)計費說明。
三. 單機單卡訓練
3.1 建立資料集
資料集用於儲存模型訓練的代碼、資料、以及訓練結果。本文以Object Storage Service類型資料集為例進行說明。
在PAI控制台左側功能表列單擊数据集 > 自定义数据集 > 新建数据集。
配置資料集參數。關鍵參數配置如下,其他參數預設即可。
名称:如:
dataset_mnist存储类型:对象存储(OSS)
OSS路径:單擊表徵圖
,選擇bucket並建立目錄如:dlc_mnist。如果您尚未開通OSS,或在當前地區下沒有可選的Bucket,可參考如下步驟開通OSS,並建立Bucket:
單擊確定建立資料集。
上傳訓練代碼和資料。
下載代碼。本文已經為您準備好了訓練代碼,單擊mnist_train.py下載。為減少您的操作,代碼運行時會自動將訓練資料下載到資料集的dataSet目錄中。
您在後續實際業務使用時,可以預先把代碼和訓練資料上傳到PAI的資料集中。
上傳代碼。在資料集詳情頁,單擊查看数据跳轉至OSS控制台。然後單擊上傳檔案 >掃描檔案 > 上傳文件,將訓練代碼上傳至OSS中。
3.2 建立DLC任務
在PAI控制台左側功能表列單擊分布式训练(DLC) > 新建任务。
配置DLC任務參數。關鍵參數配置如下,其他參數預設即可。全量參數請參見建立訓練任務。
镜像配置:選擇镜像地址,然後根據您所在地域填寫對應鏡像地址。
在控制台頂部導覽列的地區選取器中確認當前所在地區(如華東1(杭州))。
地區
對應鏡像地址
北京
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分鐘。執行過程中可以單擊日誌查看訓練過程。
訓練日誌顯示MNIST模型在Epoch 18驗證準確率達到9886/10000(約99%),任務狀態為已成功,最終輸出
Training complete. writer.close()。執行完成後,會在掛載資料集的
output路徑下輸出最佳的模型檢查點,以及TensorBoard日誌。OSS Bucket 的
dlc_mnist/目錄下包含dataSet/子目錄(訓練資料)、output/子目錄(模型輸出)以及mnist_train.py訓練指令檔。
3.3 查看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曲線(反映驗證集損失)。

3.4 部署訓練後的模型
詳情請參見五. 使用 EAS 部署模型服務。
四. 單機多卡或多機多卡分布式訓練
當單個GPU的顯存無法滿足訓練需求,或者想要加快訓練速度時,您可以建立單機多卡或多機多卡的分布式訓練任務。
本文以使用2台各有1個GPU的執行個體為例進行說明,該樣本同樣適用於其他配置的單機多卡或多機多卡訓練。
4.1 建立資料集
如果您在三. 單機單卡訓練時已經建立了資料集,只需單擊下載代碼mnist_train_distributed.py並上傳。否則請先3.1 建立資料集,再上傳該代碼。
4.2 建立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日誌。
4.3 查看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曲線(反映驗證集損失)。

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