PAI-DLC可以協助您快捷地建立單機或分布式訓練任務,其底層使用Kubernetes拉起計算節點。這避免了您手動購買機器並配置運行環境,同時無需改變使用習慣。適用於需要快速啟動訓練任務的使用者,支援多種深度學習架構,並提供靈活的資源配置選項。
快速入門
以 MNIST 手寫體識別為案例,為您介紹使用DLC進行單機單卡訓練,或多機多卡的分布式訓練,詳情請參見分布式訓練 DLC 快速入門。
控制台全參數列表
基本資料
配置任务名称和标签。
環境資訊
|
參數 |
描述 |
|
镜像配置 |
除了可以選擇官方镜像外,還支援以下鏡像類型:
|
|
数据集挂载 |
資料集用於提供模型訓練時所需的資料檔案,支援以下兩種資料集類型:
挂载路径:表示資料集掛載到DLC容器的路徑,例如 重要
如果配置了CPFS類型的資料集,則DLC需要配置Virtual Private Cloud,且與CPFS的VPC一致。否則,提交的任務可能長時間處於環境準備中狀態。 |
|
存储挂载 |
您也可以通過直接掛載資料來源路徑來讀取需要的資料,或存放過程及結果檔案。
更多內容請參見使用雲端儲存。 |
|
启动命令 |
設定任務啟動命令,支援Shell命令,並且DLC會自動注入Pytorch和Tensorflow通用環境變數,如
|
資源資訊
|
參數 |
描述 |
|
资源类型 |
預設為通用计算。灵骏智算资源支援的地區包括:華北6(烏蘭察布)、新加坡、華南1(深圳)、華北2(北京)、華東2(上海)、華東1(杭州)、廣州、香港、馬來西亞、德國、亞特蘭大。 |
|
资源来源 |
|
|
框架 |
支援以下深度學習訓練架構和訓練工具:TensorFlow、PyTorch、ElasticBatch、XGBoost、OneFlow、MPIJob、Ray、Custom、DataJuicer、MPI。 說明
當资源配额選擇靈駿智算資源時,僅支援提交TensorFlow、PyTorch、ElasticBatch、MPIJob和Ray類型的任務。 |
|
任务资源 |
根據您選擇的框架,支援配置Worker、PS、Chief、Evaluator和GraphLearn類型節點的資源。當選擇Ray架構時,您可以通過單擊新增 Role自訂Worker角色,從而實現異構資源的混合運行。
|
專用網路配置
-
不配置專用網路,將使用公用網路和公有網關。由於公有網關的頻寬有限,可能導致任務執行過程中出現卡頓或無法正常進行的情況。
-
配置專用網路,並選擇對應的交換器與安全性群組後,可提升網路的頻寬、穩定性和安全性,並且,任務啟動並執行叢集可以直接存取此專用網路內的服務。
重要-
使用VPC時,需保障任務資源群組執行個體、資料集儲存(OSS)在同一地區的VPC網路環境中,且與代碼倉庫的網路是連通狀態。
-
使用CPFS類型的資料集時,需要配置專用網路,且選擇的專用網路需要與CPFS一致。否則,提交的DLC訓練任務可能長時間處於環境準備中狀態。
-
當使用靈駿智算競價資源提交DLC任務時,需要配置專用網路。
此外,還可以配置公网访问网关,支援以下兩種方式:
-
公有网关:其網路頻寬受限,在使用者高並發或下載大型檔案時,網路速度可能無法滿足需求。
-
专有网关:為解決公有網關頻寬節流設定問題,可以在DLC的專用網路中建立公網NAT Gateway、綁定EIP並配置SNAT條目,詳情請參考通過專有網關提升公網訪問速率。
-
容錯與診斷
|
參數 |
描述 |
|
自动容错 |
開啟自动容错開關並配置相應參數後,系統將提供作業檢測和控制能力,能夠及時檢測任務演算法層面的報錯並規避,從而提升GPU的利用率。詳情請參見AIMaster:彈性自動容錯引擎。 說明
啟用自動容錯功能後,系統將啟動一個AIMaster執行個體與任務執行個體一起運行,這會佔用一定的計算資源。關於AIMaster執行個體資源使用詳情如下:
|
|
健康检测 |
開啟健康检测開關,健康檢測會對參與訓練的資源進行全面檢測,自動隔離故障節點,並觸發後台自動化營運流程,有效減少任務訓練初期遇到問題的可能性,提升訓練成功率。詳情請參見SanityCheck:算力健康檢測。 說明
僅基於靈駿智算資源配額提交的Pytorch類型的訓練任務且GPU(卡數)大於0時,支援開啟健康檢測功能。 |
角色與許可權
執行個體RAM角色配置說明如下。關於該功能更詳細的內容介紹,請參見配置DLC RAM角色。
|
執行個體RAM角色 |
描述 |
|
PAI默认角色 |
基於服務角色AliyunPAIDLCDefaultRole運作,它僅擁有訪問ODPS、OSS的許可權,且許可權更加精細。基於PAI預設角色簽發的臨時訪問憑證:
|
|
自定义角色 |
選擇或填寫一個自訂的RAM角色。在執行個體內基於STS臨時憑證訪問雲產品時,擁有的許可權將與該自訂角色的許可權保持一致。 |
|
不关联角色 |
不為DLC任務關聯RAM角色,預設選擇該方式。 |
相關文檔
附錄
通過SDK或命令列建立任務
Python SDK
步驟一:安裝阿里雲的Credentials工具
當您通過阿里雲SDK調用OpenAPI進行資源操作時,必須安裝Credentials工具配置憑證資訊。要求:
-
Python版本 >= 3.7。
-
使用V2.0代系的阿里雲SDK。
pip install alibabacloud_credentials
步驟二:擷取帳號AccessKey
本樣本使用AK資訊配置訪問憑證,為防止帳號資訊洩漏,建議您將AccessKey配置為環境變數,id和secret環境變數名分別為ALIBABA_CLOUD_ACCESS_KEY_ID,ALIBABA_CLOUD_ACCESS_KEY_SECRET。
-
擷取AccessKey資訊,請參見建立AccessKey。
-
如何設定環境變數,請參見配置環境變數。
-
其它Credentials憑證配置方式,請參見安裝Credentials工具。
步驟三:安裝Python SDK
-
安裝工作空間SDK。
pip install alibabacloud_aiworkspace20210204==3.0.1 -
安裝DLC SDK。
pip install alibabacloud_pai_dlc20201203==1.4.17
步驟四:提交任務
使用公用資源提交任務
建立並提交任務的具體調用代碼如下所示。
使用預付費資源配額提交任務
-
登入PAI控制台。
-
查看工作空間ID:在左側導覽列單擊工作空間列表,找到目標工作空間,單擊其名稱旁的ⓘ表徵圖,在彈出的資訊卡片中查看並複製工作空間ID。
-
查看您的專有資源群組的資源配額ID。在左側導覽列選擇AI計算資源 > 資源配額(Quota),單擊通用計算資源頁簽,在資源配額列表的名稱/ID列中擷取目標資源配額的Quota ID。
-
使用以下代碼建立並提交任務。可使用的公用鏡像列表,詳情請參見步驟二:準備鏡像。
from alibabacloud_pai_dlc20201203.client import Client from alibabacloud_credentials.client import Client as CredClient from alibabacloud_tea_openapi.models import Config from alibabacloud_pai_dlc20201203.models import ( CreateJobRequest, JobSpec, ResourceConfig, GetJobRequest ) # 初始化一個Client,用來訪問DLC的API。 region = 'cn-hangzhou' # 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。 # 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。 # 本樣本通過Credentials SDK預設從環境變數中讀取AccessKey,來實現身分識別驗證為例。 cred = CredClient() client = Client( config=Config( credential=cred, region_id=region, endpoint=f'pai-dlc.{region}.aliyuncs.com', ) ) # 聲明任務的資源配置,關於鏡像選擇可以參考文檔中公用鏡像列表,也可以傳入自己的鏡像地址。 spec = JobSpec( type='Worker', image=f'registry-vpc.cn-hangzhou.aliyuncs.com/pai-dlc/tensorflow-training:1.15-cpu-py36-ubuntu18.04', pod_count=1, resource_config=ResourceConfig(cpu='1', memory='2Gi') ) # 聲明任務的執行內容。 req = CreateJobRequest( resource_id='<替換成您自己的資源配額ID>', workspace_id='<替換成您自己的WorkspaceID>', display_name='sample-dlc-job', job_type='TFJob', job_specs=[spec], user_command='echo "Hello World"', ) # 提交任務。 response = client.create_job(req) # 擷取任務ID。 job_id = response.body.job_id # 查詢任務狀態。 job = client.get_job(job_id, GetJobRequest()).body print('job status:', job.status) # 查看任務執行的命令。 job.user_command
使用競價資源提交任務
-
SpotDiscountLimit(Spot折扣)
#!/usr/bin/env python3 from alibabacloud_tea_openapi.models import Config from alibabacloud_credentials.client import Client as CredClient from alibabacloud_pai_dlc20201203.client import Client as DLCClient from alibabacloud_pai_dlc20201203.models import CreateJobRequest region_id = '<region-id>' # DLC任務所在地區ID,例如華東1(杭州)為cn-hangzhou。 cred = CredClient() workspace_id = '12****' # DLC任務所在工作空間ID。 dlc_client = DLCClient( Config(credential=cred, region_id=region_id, endpoint='pai-dlc.{}.aliyuncs.com'.format(region_id), protocol='http')) create_job_resp = dlc_client.create_job(CreateJobRequest().from_map({ 'WorkspaceId': workspace_id, 'DisplayName': 'sample-spot-job', 'JobType': 'PyTorchJob', 'JobSpecs': [ { "Type": "Worker", "Image": "dsw-registry-vpc.<region-id>.cr.aliyuncs.com/pai/pytorch-training:1.12-cpu-py39-ubuntu20.04", "PodCount": 1, "EcsSpec": 'ecs.g7.xlarge', "SpotSpec": { "SpotStrategy": "SpotWithPriceLimit", "SpotDiscountLimit": 0.4, } }, ], 'UserVpc': { "VpcId": "vpc-0jlq8l7qech3m2ta2****", "SwitchId": "vsw-0jlc46eg4k3pivwpz8****", "SecurityGroupId": "sg-0jl4bd9wwh5auei9****", }, "UserCommand": "echo 'Hello World' && ls -R /mnt/data/ && sleep 30 && echo 'DONE'", })) job_id = create_job_resp.body.job_id print(f'jobId is {job_id}') -
SpotPriceLimit(Spot價格)
#!/usr/bin/env python3 from alibabacloud_tea_openapi.models import Config from alibabacloud_credentials.client import Client as CredClient from alibabacloud_pai_dlc20201203.client import Client as DLCClient from alibabacloud_pai_dlc20201203.models import CreateJobRequest region_id = '<region-id>' cred = CredClient() workspace_id = '12****' dlc_client = DLCClient( Config(credential=cred, region_id=region_id, endpoint='pai-dlc.{}.aliyuncs.com'.format(region_id), protocol='http')) create_job_resp = dlc_client.create_job(CreateJobRequest().from_map({ 'WorkspaceId': workspace_id, 'DisplayName': 'sample-spot-job', 'JobType': 'PyTorchJob', 'JobSpecs': [ { "Type": "Worker", "Image": "dsw-registry-vpc.<region-id>.cr.aliyuncs.com/pai/pytorch-training:1.12-cpu-py39-ubuntu20.04", "PodCount": 1, "EcsSpec": 'ecs.g7.xlarge', "SpotSpec": { "SpotStrategy": "SpotWithPriceLimit", "SpotPriceLimit": 0.011, } }, ], 'UserVpc': { "VpcId": "vpc-0jlq8l7qech3m2ta2****", "SwitchId": "vsw-0jlc46eg4k3pivwpz8****", "SecurityGroupId": "sg-0jl4bd9wwh5auei9****", }, "UserCommand": "echo 'Hello World' && ls -R /mnt/data/ && sleep 30 && echo 'DONE'", })) job_id = create_job_resp.body.job_id print(f'jobId is {job_id}')
其中關鍵配置說明如下:
參數 | 描述 |
SpotStrategy | 競價策略。僅該參數設定為SpotWithPriceLimit時,出價類型才會生效。 |
SpotDiscountLimit | 出價類型為Spot折扣。 說明
|
SpotPriceLimit | 出價類型為Spot價格。 |
UserVpc | 使用靈駿競價資源提交任務時,該參數必填。配置任務所在地區的專用網路、交換器和安全性群組ID。 |
命令列
步驟一:下載用戶端並執行使用者認證
根據您使用的作業系統下載Linux 64或Mac版本的用戶端工具並完成使用者認證,詳情請參見準備工作。
步驟二:提交任務
-
登入PAI控制台。
-
按照以下操作指引,在工作空間列表頁面查看您所在的工作空間ID(WorkspaceID)。
在左側導覽列單擊工作空間列表,找到目標工作空間,單擊其名稱右側的ⓘ表徵圖,在彈出的資訊面板中即可查看工作空間ID。
-
按照以下操作指引,查看您的資源配額ID。
在左側導覽列選擇AI計算資源 > 資源配額(Quota),選擇目標資源類型頁簽(如通用計算資源),在資源配額列表的名稱/ID列中擷取資源配額ID。
-
參考以下檔案內容準備參數檔案
tfjob.params。更多關於參數檔案的配置方法,請參見提交命令。name=test_cli_tfjob_001 workers=1 worker_cpu=4 worker_gpu=0 worker_memory=4Gi worker_shared_memory=4Gi worker_image=registry-vpc.cn-beijing.aliyuncs.com/pai-dlc/tensorflow-training:1.12.2PAI-cpu-py27-ubuntu16.04 command=echo good && sleep 120 resource_id=<替換成您的資源配額ID> workspace_id=<替換成您的WorkspaceID> -
使用以下程式碼範例傳入params_file參數提交任務,可以將DLC任務提交到指定的工作空間和資源配額。
./dlc submit tfjob --job_file ./tfjob.params -
使用以下代碼查看您提交的DLC任務。
./dlc get job <jobID>
進階參數列表
|
參數(key) |
支援的架構類型 |
參數說明 |
參數取值(value) |
|
|
ALL |
配置自訂資源釋放規則。可不配置,不配置時資源以Job結束整體釋放所有Pod的資源。若配置,當前只支援設定為pod-exit,即在您的Pod退出時釋放該Pod的資源。 |
pod-exit |
|
|
ALL |
載入GPU驅動時是否開啟IBGDA功能。 |
|
|
|
ALL |
是否安裝GDRCopy核心模組,當前安裝的2.4.4版本。 |
|
|
|
ALL |
是否開啟numa。 |
|
|
|
ALL |
支援提交作業時檢測quota中總資源(節點規格)是否能夠滿足作業的所有role的規格。 |
|
|
|
PyTorch |
是否允許worker間網路互連。
開啟後,每個worker的網域名稱即為worker名,如 |
|
|
|
PyTorch |
允許使用者定義每個worker上開放的網路連接埠,可與 若未配置,則預設僅有master上開放23456號連接埠。因此也請注意在該自訂連接埠列表中避開23456號連接埠。 重要
該參數與 |
分號分隔的一組字串,其中每個字串為一個連接埠號碼,或由虛線串連的一個連接埠範圍,如 |
|
|
PyTorch |
允許使用者請求為每個worker開放若干個網路連接埠,可與 若未配置,則預設僅在master上開放23456號連接埠。DLC會根據參數定義的連接埠數目,為worker隨機分配連接埠,具體分配的連接埠號碼會通過環境變數 重要
|
整數(最大為65536) |
|
|
Ray |
當架構為Ray時,支援通過手動設定RayRuntimeEnv來定義運行環境。 重要
環境變數和三方庫配置將被此配置覆蓋。 |
配置環境變數和三方庫( |
|
|
Ray |
外部 GCS Redis 地址。 |
字串 |
|
|
Ray |
外部 GCS Redis 使用者名稱。 |
字串 |
|
|
Ray |
外部 GCS Redis 密碼。 |
字串 |
|
|
Ray |
Submitter 重試次數。 |
正整數(int) |
|
|
Ray |
為節點配置共用記憶體。例如,為每個節點配置1 GiB共用記憶體,配置樣本如下:
|
正整數(int) |
按鈕,選擇出價方式: