日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

DeepSpeed分布式訓(xùn)練

更新時(shí)間:

DeepSpeed是一個(gè)開源的深度學(xué)習(xí)優(yōu)化庫,提供了分布式訓(xùn)練和模型優(yōu)化的功能,可以有效的加速訓(xùn)練過程。本文介紹如何使用Arena快速、方便地提交DeepSpeed的分布式訓(xùn)練作業(yè),并通過TensorBoard可視化查看訓(xùn)練作業(yè)。

索引

前提條件

使用說明

本示例使用DeepSpeed訓(xùn)練一個(gè)掩碼語言模型(Masked Language Model)。為方便運(yùn)行,已將示例代碼和數(shù)據(jù)集下載至示例鏡像registry.cn-beijing.aliyuncs.com/acs/deepspeed:hello-deepspeed中;若您無需使用示例鏡像,您也可以從Git URL下載源代碼,并將數(shù)據(jù)集存放在共享存儲(chǔ)系統(tǒng)(基于NAS的PV和PVC)中。本示例假設(shè)您已經(jīng)獲得了名稱為training-data的PVC實(shí)例(一個(gè)共享存儲(chǔ)),用來存放訓(xùn)練結(jié)果。

如需自定義訓(xùn)練鏡像,可參見如下方式。

  • 可參見Dockerfile,在基礎(chǔ)鏡像中安裝OpenSSH。

    說明

    訓(xùn)練任務(wù)需要通過SSH免密訪問,生產(chǎn)環(huán)境中請您保障密鑰Secret的安全性。

  • 或者使用ACK提供的DeepSpeed基礎(chǔ)鏡像。

    registry.cn-beijing.aliyuncs.com/acs/deepspeed:v072_base

操作步驟

  1. 執(zhí)行如下命令,檢查可用的GPU資源。

    arena top node

    預(yù)期輸出:

    NAME                       IPADDRESS      ROLE    STATUS  GPU(Total)  GPU(Allocated)
    cn-beijing.192.1xx.x.xx   192.1xx.x.xx   <none>  Ready   0           0
    cn-beijing.192.1xx.x.xx   192.1xx.x.xx   <none>  Ready   0           0
    cn-beijing.192.1xx.x.xx   192.1xx.x.xx   <none>  Ready   1           0
    cn-beijing.192.1xx.x.xx   192.1xx.x.xx   <none>  Ready   1           0
    cn-beijing.192.1xx.x.xx   192.1xx.x.xx   <none>  Ready   1           0
    ---------------------------------------------------------------------------------------------------
    Allocated/Total GPUs In Cluster:
    0/3 (0.0%)

    預(yù)期輸出表明,有3個(gè)包含GPU的節(jié)點(diǎn)可用于運(yùn)行訓(xùn)練作業(yè)。

  2. 執(zhí)行arena submit deepspeedjob [--falg] command形式的命令,提交DeepSpeed作業(yè)。

    • 如果您使用ACK提供的DeepSpeed基礎(chǔ)鏡像,可執(zhí)行如下代碼,提交包含1個(gè)Launcher節(jié)點(diǎn),3個(gè)Worker節(jié)點(diǎn)的DeepSpeed訓(xùn)練任務(wù)。

      arena submit deepspeedjob \
          --name=deepspeed-helloworld \
          --gpus=1 \
          --workers=3 \
          --image=registry.cn-beijing.aliyuncs.com/acs/deepspeed:hello-deepspeed \
          --data=training-data:/data \
          --tensorboard \
          --logdir=/data/deepspeed_data \
          "deepspeed /workspace/DeepSpeedExamples/HelloDeepSpeed/train_bert_ds.py --checkpoint_dir /data/deepspeed_data"

      參數(shù)

      是否必選

      說明

      默認(rèn)值

      --name

      必選

      提交的作業(yè)名稱,全局唯一,不能重復(fù)。

      --gpus

      可選

      作業(yè)Worker節(jié)點(diǎn)需要使用的GPU有卡數(shù)。

      0

      --workers

      可選

      作業(yè)Worker節(jié)點(diǎn)的數(shù)量。

      1

      --image

      必選

      訓(xùn)練環(huán)境的鏡像地址。

      --data

      可選

      通過掛載共享存儲(chǔ)卷PVC到運(yùn)行環(huán)境中,使您的代碼可以訪問PVC的數(shù)據(jù)。它由兩部分組成,通過英文冒號(hào)(:)分割。

      • 冒號(hào)左側(cè)是您已經(jīng)準(zhǔn)備好的PVC名稱。通過執(zhí)行arena data list命令,查看當(dāng)前集群可用的PVC列表。

      • 冒號(hào)右側(cè)是您想將PVC的掛載到運(yùn)行環(huán)境中的路徑,也是您訓(xùn)練代碼要讀取數(shù)據(jù)的本地路徑。

      如果沒有可用的PVC,您可創(chuàng)建PVC。具體操作,請參見配置NAS共享存儲(chǔ)

      --tensorboard

      可選

      為訓(xùn)練任務(wù)開啟一個(gè)TensoBoard服務(wù),用作數(shù)據(jù)可視化。您可以結(jié)合--logdir指定TensorBoard要讀取的event路徑。不指定該參數(shù),則不開啟TensorBoard服務(wù)。

      --logdir

      可選

      需要結(jié)合--tensorboard一起使用,該參數(shù)表示TensorBoard需要讀取event數(shù)據(jù)的路徑。

      /training_logs

    • 如果您使用非公開Git代碼庫。則可以使用如下命令,提交DeepSpeed作業(yè)。

       arena submit deepspeedjob \
              ...
              --sync-mode=git \ # 同步代碼的模式,您可以指定模式為git或rsync。
              --sync-source=<非公開Git代碼庫地址>  \ # 同步代碼的倉庫地址,需要和--sync-mode一起使用。如果--sync-mode=git,該參數(shù)可以為任何github項(xiàng)目地址。
              --env=GIT_SYNC_USERNAME=yourname \
              --env=GIT_SYNC_PASSWORD=yourpwd \
              "deepspeed /workspace/DeepSpeedExamples/HelloDeepSpeed/train_bert_ds.py --checkpoint_dir /data/deepspeed_data"

      arena命令使用git-sync同步源代碼。您可以設(shè)置在git-sync項(xiàng)目中定義的環(huán)境變量。

    預(yù)期輸出:

    trainingjob.kai.alibabacloud.com/deepspeed-helloworld created
    INFO[0007] The Job deepspeed-helloworld has been submitted successfully
    INFO[0007] You can run `arena get deepspeed-helloworld --type deepspeedjob` to check the job status
  3. 執(zhí)行如下命令,查看當(dāng)前通過Arena提交的所有作業(yè)。

    arena list

    預(yù)期輸出:

    NAME                  STATUS   TRAINER         DURATION  GPU(Requested)  GPU(Allocated)  NODE
    deepspeed-helloworld  RUNNING  DEEPSPEEDJOB    3m        3               3               192.168.9.69
  4. 執(zhí)行如下命令,檢查作業(yè)使用的GPU資源。

    arena top job

    預(yù)期輸出:

    NAME                  STATUS   TRAINER         AGE  GPU(Requested)  GPU(Allocated)  NODE
    deepspeed-helloworld  RUNNING  DEEPSPEEDJOB    4m   3               3               192.168.9.69
    
    Total Allocated/Requested GPUs of Training Jobs: 3/3
  5. 執(zhí)行如下命令,檢查集群所使用的GPU資源。

    arena top node

    預(yù)期輸出:

    NAME                       IPADDRESS      ROLE    STATUS  GPU(Total)  GPU(Allocated)
    cn-beijing.192.1xx.x.xx   192.1xx.x.xx   <none>  Ready   0           0
    cn-beijing.192.1xx.x.xx   192.1xx.x.xx   <none>  Ready   0           0
    cn-beijing.192.1xx.x.xx   192.1xx.x.xx   <none>  Ready   1           1
    cn-beijing.192.1xx.x.xx   192.1xx.x.xx   <none>  Ready   1           1
    cn-beijing.192.1xx.x.xx   192.1xx.x.xx   <none>  Ready   1           1
    ---------------------------------------------------------------------------------------------------
    Allocated/Total GPUs In Cluster:
    3/3 (100%)
  6. 執(zhí)行如下命令,獲取作業(yè)詳情,并獲取TensorBoard Web服務(wù)地址。

    arena get deepspeed-helloworld

    預(yù)期輸出:

    Name:      deepspeed-helloworld
    Status:    RUNNING
    Namespace: default
    Priority:  N/A
    Trainer:   DEEPSPEEDJOB
    Duration:  6m
    
    Instances:
      NAME                           STATUS   AGE  IS_CHIEF  GPU(Requested)  NODE
      ----                           ------   ---  --------  --------------  ----
      deepspeed-helloworld-launcher  Running  6m   true      0               cn-beijing.192.1xx.x.x
      deepspeed-helloworld-worker-0  Running  6m   false     1               cn-beijing.192.1xx.x.x
      deepspeed-helloworld-worker-1  Running  6m   false     1               cn-beijing.192.1xx.x.x
      deepspeed-helloworld-worker-2  Running  6m   false     1               cn-beijing.192.1xx.x.x
    
    Your tensorboard will be available on:
    http://192.1xx.x.xx:31870

    本示例已開啟了TensorBoard,因此上述作業(yè)詳情的最后兩行顯示TensorBoard的Web訪問地址;如果沒有開啟TensorBoard,最后兩行信息將不存在。

  7. 通過瀏覽器查看TensorBoard。

    1. 執(zhí)行如下命令,將集群中的TensorBoard映射到本地9090端口。

      kubectl port-forward svc/deepspeed-helloworld-tensorboard 9090:6006
    2. 在瀏覽器中訪問localhost:9090,即可查看TensorBoard。如下圖所示。

      效果圖
  8. 獲取作業(yè)日志信息。

    • 您可執(zhí)行如下命令,獲取作業(yè)日志信息。

      arena logs deepspeed-helloworld

      預(yù)期輸出:

      deepspeed-helloworld-worker-0: [2023-03-31 08:38:11,201] [INFO] [logging.py:68:log_dist] [Rank 0] step=7050, skipped=24, lr=[0.0001], mom=[(0.9, 0.999)]
      deepspeed-helloworld-worker-0: [2023-03-31 08:38:11,254] [INFO] [timer.py:198:stop] 0/7050, RunningAvgSamplesPerSec=142.69733028759384, CurrSamplesPerSec=136.08094834473613, MemAllocated=0.06GB, MaxMemAllocated=1.68GB
      deepspeed-helloworld-worker-0: 2023-03-31 08:38:11.255 | INFO     | __main__:log_dist:53 - [Rank 0] Loss: 6.7574
      deepspeed-helloworld-worker-0: [2023-03-31 08:38:13,103] [INFO] [logging.py:68:log_dist] [Rank 0] step=7060, skipped=24, lr=[0.0001], mom=[(0.9, 0.999)]
      deepspeed-helloworld-worker-0: [2023-03-31 08:38:13,134] [INFO] [timer.py:198:stop] 0/7060, RunningAvgSamplesPerSec=142.69095076844823, CurrSamplesPerSec=151.8552037291255, MemAllocated=0.06GB, MaxMemAllocated=1.68GB
      deepspeed-helloworld-worker-0: 2023-03-31 08:38:13.136 | INFO     | __main__:log_dist:53 - [Rank 0] Loss: 6.7570
      deepspeed-helloworld-worker-0: [2023-03-31 08:38:14,924] [INFO] [logging.py:68:log_dist] [Rank 0] step=7070, skipped=24, lr=[0.0001], mom=[(0.9, 0.999)]
      deepspeed-helloworld-worker-0: [2023-03-31 08:38:14,962] [INFO] [timer.py:198:stop] 0/7070, RunningAvgSamplesPerSec=142.69048436022115, CurrSamplesPerSec=152.91029839772997, MemAllocated=0.06GB, MaxMemAllocated=1.68GB
      deepspeed-helloworld-worker-0: 2023-03-31 08:38:14.963 | INFO     | __main__:log_dist:53 - [Rank 0] Loss: 6.7565
    • 您還可以通過命令arena logs $job_name -f實(shí)時(shí)查看作業(yè)的日志輸出,通過命令arena logs $job_name -t N查看尾部N行的日志,以及通過arena logs --help查詢更多參數(shù)使用情況。

      例如,執(zhí)行如下命令,查看尾部5行的日志信息。

      arena logs deepspeed-helloworld -t 5

      預(yù)期輸出:

      deepspeed-helloworld-worker-0: [2023-03-31 08:47:08,694] [INFO] [launch.py:318:main] Process 80 exits successfully.
      deepspeed-helloworld-worker-2: [2023-03-31 08:47:08,731] [INFO] [launch.py:318:main] Process 44 exits successfully.
      deepspeed-helloworld-worker-1: [2023-03-31 08:47:08,946] [INFO] [launch.py:318:main] Process 44 exits successfully.
      /opt/conda/lib/python3.8/site-packages/apex/pyprof/__init__.py:5: FutureWarning: pyprof will be removed by the end of June, 2022
        warnings.warn("pyprof will be removed by the end of June, 2022", FutureWarning)