博客 / 詳情

返回

Post-Training on PAI (2):Ray on PAI,雲上一鍵提交強化學習

1. 前言

1.1 Ray

Ray是一個開源的分佈式計算框架,集成了多個AI庫,擁有豐富的生態系統,包括Ray Tune(超參數調優)、Ray RLlib(強化學習)、Ray Serve(模型部署)、RaySGD 的分佈式運行環境,提供了全面的AI解決方案,使得AI並行訓練更容易和高效。 OpenAI 聲明使用了 Ray 作為ChatGPT 大模型訓練的底層平台,參考 ​​How Does Ray, a Distributed AI System, Powers OpenAI’s ChatGPT?​​

1.2 PAI

人工智能平台 PAI(Platform for Artificial Intelligence)是阿里雲面向企業客户及開發者的一站式開發平台,提供包括數據標註、模型開發、模型訓練、模型推理在內的AI開發全鏈路服務,內置豐富的大模型最佳實踐和行業場景插件,為用户提供開箱即用、高性能、高穩定的企業級雲原生AI工程化能力。

Ray 與 PAI 平台相結合,能夠充分發揮兩者優勢,為用户帶來更易用、調度能力更強、高可用的模型訓練體驗,本文將詳細介紹 Ray 在 PAI DLC 中的最佳實踐,助力用户更好地利用這一組合,最大化模型訓練效率和效果。

2. Ray on PAI

Ray on PAI 是由 PAI 分佈式訓練產品 DLC 推出的一項全新任務類型,通過將 Ray 無縫集成到 DLC 中,用户可以將 Ray 框架的訓練腳本直接提交至 DLC 進行訓練,無需手動部署 Ray 集羣,也無需關注底層 Kubernetes 基礎設置的複雜配置。

一鍵提交Ray任務,開發人員真正實現上手0成本, 並可享受到PAI 平台提供高效調度、自愈和企業級的管理能力。

2.1 Ray+PAI:開箱即用,一鍵提交

PAI DLC 提供直觀的用户界面和易於理解的API,對於用户,無需搭建Ray集羣,一鍵提交Ray任務,支持Ray原生能力,實現了雲上提交Ray,免部署、免運維、上手0成本。

2.2 Ray+PAI:統一調度,高利用率

在PAI DLC 上提交Ray任務, 將完整享受PAI 統一調度引擎能力,包括自動支持網絡拓撲感知、算力拓撲感知,智能、FIFO、遍歷、均衡排隊策略, 多級Quota的共享、搶佔調度機制, 最終實現集羣90%+的算力利用率。

除了Ray,PAI DLC 還支持 Megatron、Deepspeed、Pytorch、MPI、Slurm 等10+業內主流AI訓練框架,使用PAI DLC, 意味着一份算力,可以運行Ray任務,也可以一鍵提交其他任務,隨時在多種AI場景切換和使用。

2.3 Ray+PAI:LLM容錯,穩定可靠

RayNative的容錯機制:針對Ray框架,按照應用層面和系統層,分別提供優化容錯機制,全面提升容錯能力。支持某大模型團隊,多個千卡RL任務,故障識別率90%+,Ray的RL訓練任務穩定運行超過一週(RL 任務pattern:千卡規模 x 運行幾天)

高可用:通過AIMaster彈性容錯引擎、 節點自愈引擎和 EasyCKPT 大模型CKPT引擎, 實現故障節點分鐘級自愈,任務分鐘級恢復、CKPT秒級保存, 保障Ray任務持續運行, 有效降低人力和避免算力的浪費

可觀測:構建覆蓋多資源類型的精細化Metric體系,為訓練穩定性監控、訓練調優、算力管理等場景,提供可視化數據支撐。提供 任務、POD、卡等多維度,數百個監控指標,支持Ray Dashboard, 並且對接雲監控和ARMS, 滿足客户雲上多樣的可觀測需求。

2.4 Ray+PAI:企業級能力

針對大型客户,PAI提供完整的企業級能力,實現AI算力、AI任務、AI資產、AI數據的可管可控,具體來説:

工作空間:為企業和團隊提供統一的計算資源管理及人員權限管理能力,為AI開發者提供支持團隊協作的全流程開發工具以及AI資產管理能力。

用户管理:提供用户、角色、組織、權限、安全,企業用户訪問控制,以及平台審計能力。

資源管理:精細化計算資源分配,資源觀測與多維度指標監控能力。

任務管理:任務調度策略的配置,事件通知管理能力,任務狀態異常告警。

資產管理:企業自有數據處理和存儲,數據集、模型、鏡像、代碼配置、自定義組件的管理。

被集成:提供面向MLOps流程的workflow編排能力,PAIFlow;全鏈路標準OpenAPI及SDK,實現與企業自有系統集成。

3. 使用案例

3.1 進入DLC

登錄PAI控制枱, 左側目錄選擇DLC,DLC 產品頁面,新建DLC任務,選擇Ray框架

3.2 參數配置

節點鏡像

節點鏡像會被同時用於 head 和 worker 節點容器。用户所用 Ray 鏡像版本應 ​​>= 2.6​​,可以使用 Ray 社區提供的 docker 鏡像 ,目前的測試均基於​​2.9​​版本。Ray 社區還提供了 鏡像,內置了包括 pytorch、tensorflow 等機器學習框架的支持。使用 GPU 時需提供包含支持 cuda 的鏡像。更多支持的鏡像版本請參考​​官方Docker鏡像文檔​​。

運行時環境
目前 DLC 僅支持通過配置三方庫配置的三方庫列表(ThirdpartyLibs),後續會逐步開放通過框架高級配置(Settings.AdvancedSettings)來配置 Ray 的​​環境運行依賴​​(​​runtime_env​​)。在生產環境中,強烈建議使用已經打包好的鏡像來執行任務,避免因為臨時安裝依賴庫造成的任務失敗。

啓動命令

PAI DLC 任務的啓動命令會被用作 ​​ray job submit​​ 所提交的 entrypoint 命令,通常為運行一個 Python 腳本文件。例如:

python /root/code/sample.py

需注意,目前只有第一行命令會被 ray 提交至 ray cluster 運行,如果有多個命令請用 ​​;​​ 或者 ​​&&​​連接。如果需要在命令裏直接放入 Python 腳本,可以採用參考下面的例子:

`echo 'import ray
import os
import requests

ray.init()

@ray.remote
class Counter:

def __init__(self):
    # Used to verify runtimeEnv
    self.name = os.getenv("counter_name")
    # assert self.name == "ray"
    self.counter = 0

def inc(self):
    self.counter += 1

def get_counter(self):
    return "{} got {}".format(self.name, self.counter)

counter = Counter.remote()

for _ in range(50000):

ray.get(counter.inc.remote())
print(ray.get(counter.get_counter.remote()))' >> sample.py && python sample.py`

資源準備

任務節點

DLC 支持 Ray Cluster 的兩種可配置的任務節點類型:Head 和 Worker。
配置資源數量時,Head 節點的數量必須為1。同時在 DLC 平台上,Head 節點只會被用於運行 entrypoint 腳本,不會被用作 Ray Worker 節點。

除此以外,每個 Ray 任務 DLC 會自動生成一個 Submitter 節點用於執行任務啓動命令,同時用户可以通過 Submitter 節點的日誌來瀏覽查看提交的 Ray 任務日誌。在預付費任務中,該節點會共享佔用極小部分用户資源用於啓動任務;而在後付費任務中,會生成一個最小可用的資源類型節點。

資源數量

Ray Cluster worker 節點上的 ​​Logical Resources​​​與用户在提交任務時配置的物理資源一致。例如,當用户配置了1個8卡的GPU節點時,Ray cluster worker 節點默認的資源大小也為 8 GPUs。如使用如下 ​​@ray.remote​​ 修飾函數或者類,會產生兩個 Tasks 或者 Actors:

@ray.remote(num_gpus=4)

資源的配置需要符合任務的需求。一般而言,少而大的節點好過多而小的節點。通常每個節點建議的內存大小為至少 2 GiB,並且根據 Task/Actor 數量增長而增加,否則容易出現 OOM 錯誤。

3.3 實操案例

• Train PyTorch ResNet model with GPUs on DLC

  1. 選擇鏡像地址,參考使用 ray-ml:2.9.3-py310-cu118
  2. ​​https://github.com/ray-project/ray/blob/master/release/air_tests/air_benchmarks/workloads/pytorch_training_e2e.py​​將代碼克隆並上傳至 PAI 代碼配置,或直接本地上傳
  3. 輸入任務啓動命令
  4. 選擇 Ray 框架,並配置 head 和 worker 資源
  5. 創建任務;等待任務完成,並查看任務日誌
user avatar tugraph 頭像
1 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.