Ray 在 AI 執行環境上

Important

這項功能目前處於 公開預覽版。

備註

如果你在 Databricks classic 運算中使用 Ray,搭配 Databricks 執行時機器學習,請參考 Ray 在 Databricks 上的應用。

Ray 是一個用於擴展 Python 工作負載的開放原始碼框架。 你可以在 AI 執行環境上執行 Ray,而不需要配置或管理底層 GPU 基礎設施。

為什麼要在 AI 執行時使用 Ray。

Ray 常用於分配 Python 工作負載,如模型訓練、批次推論、資料處理及超參數調整。 在 AI 執行時,Ray 可以存取 Unity 目錄卷中的資料,使用 MLflow 追蹤實驗,並作為生產工作流程的一部分執行。

你可以在 AI 執行時使用常見的光線函式庫,如 Ray Core、 Ray Data、 Ray Train 和 Ray Tune 。 現有的 Ray 工作負載仍可繼續使用函式庫的標準 API。

Ray 如何與 AI 執行階段協同運作

每個 Ray 應用程式都運行在一個 Ray 叢集上,該叢集可以包含一個或多個節點。 AI 執行時負責節點配置,Ray 則根據可用 CPU 與 GPU 資源排程任務與演員。 你怎麼啟動 Ray,取決於執行介面:

Interface Nodes 啟動 Ray
Notebook 連接到筆記本的單一節點 從 ray_init() 套件呼叫 serverless_gpu
Databricks 命令行介面 一組固定的一個或多個節點 先在節點 0 啟動主節點,並使用可重複使用的啟動腳本讓其餘節點以工作節點身分加入

在筆記本中使用 Ray

當您的筆記本連線至 AI Runtime GPU 運算時,請使用 ray_init() 套件中的 serverless_gpu,在所連接的節點上啟動 Ray:

from serverless_gpu import ray_init

ray_init()

ray_init() 呼叫標準 ray.init() API,設定 Ray 儀表板以允許透過 Databricks 驅動代理存取,並在筆記本輸出中列印儀表板 URL。 在程式碼執行時,使用儀表板檢查 Ray 工作、任務、演員、日誌和資源使用情況。

備註

ray_init() 需要環境版本 5 及以上。 Databricks AI v6 包含了 Ray。 如果你使用 Standard v6,請在呼叫 ray_init(). 前先安裝 Ray。 請參閱 「建立你的環境」。

筆記本範例

範例 Description
Ray Core Hello World 在已連接的運算資源上提交非同步 GPU 任務,在 Ray 儀表板中檢視排程情況,並擷取結果。
使用 Ray Tune 進行 CIFAR-10 超參數調整 同時對 PyTorch 影像分類器進行分數-GPU 試驗,並使用非同步連續減半演算法(ASHA)及早阻止表現不佳的配置。
使用 Ray Data 和 vLLM 進行 Qwen2.5-32B 批次推論 在 8 顆 H100 GPU 上執行八個持久化 vLLM 副本的多語言批次推論,並將結果以 Parquet 格式儲存在 Unity 目錄卷中。

使用 Ray 搭配 Databricks CLI 來操作

Databricks 的 CLI 指令用於 AI 執行時,支援單節點及多節點 Ray 工作負載。 在工作負載配置中,指定固定 accelerator_type 和 總數 num_accelerators。 Ray hello world 的例子包括可重複使用的 bootstrap 腳本。 在工作負載的 command 中,將 RAY_ENTRYPOINT 設為 Python 檔案的路徑,然後執行 bootstrap 指令碼。 bootstrap 腳本會做以下工作:

  • 在節點 0 上,啟動 Ray head 節點並執行已設定的入口點。
  • 在其餘每個節點上,它都會啟動一個 Ray 工作程序,並在入口點執行期間保持其連線。
  • 入口點結束後,會停止 Ray 程序。

在應用程式中,使用 ray.init(address="auto") 連線至叢集。

在 Standard 環境中,將 ray 或所需的額外項目(例如 ray[data]、ray[train] 或 ray[tune])新增至工作負載相依性。 Databricks AI v6 包含了 Ray。

CLI 範例

範例 Description
Ray Hello 世界範例 以下是 Ray Core、Ray Train、Ray Data 及 Ray Tune 的最小單節點與多節點範例,包括叢集引導模式。
使用 Ray Train 進行分散式訓練 利用 Ray Train 和 PyTorch 在單一節點上,微調一個跨越 8 顆 H100 GPU 的大型語言模型。
使用 Ray Data 與 vLLM 進行批次推論 使用雷線資料進行大規模批次推論,進行分散式資料載入,並以 vLLM 進行高效模型服務。
使用 Ray Tune 進行超參數搜尋 使用 Ray Tune 為 Qwen2.5 搜尋 LoRA 微調超參數,每個 GPU 執行一個試驗,並使用 ASHA 排程器提早停止表現不佳的試驗。

與資料及 Databricks 功能相關的工作

Ray 工作負載可存取 Unity Catalog 磁碟區中的資料、使用 MLflow 記錄執行情況,並作為由宣告式自動化套件定義的 Lakeflow Jobs 任務執行。

存取 Unity Catalog 中的資料

對於 Unity Catalog 資料表中的表格資料,請使用 ray.data.read_databricks_tables() 讀取資料表或透過 Databricks SQL 倉庫執行 SQL 查詢。 請指定倉庫 ID、目錄和結構,因為 AI Runtime 不提供本地 Spark 會話。 你可以用 SQL 在 Ray 處理結果前先執行連接、聚合和篩選。

對於檔案式及非結構化資料,請使用 Unity 目錄磁碟區。 Ray 工作節點可透過 /Volumes/<catalog>/<schema>/<volume>/... 路徑存取檔案。 例如,Ray Data 可以使用 ray.data.read_parquet() 讀取 Parquet 檔案,並使用 Dataset.write_parquet() 寫入結果。

追蹤並協調工作負載

使用 MLflow 記錄 Ray 工作負載中的參數、指標和產物。 參見 實驗追蹤與可觀測性。

若要排程工作負載,或將其與 CPU 資料準備任務結合,請使用 Lakeflow Jobs 和 Declarative Automation Bundles。 請參見 將訓練工作負載投入生產環境。

遷移現有的 Ray 工作負載

遷移自我管理的 Ray 工作負載涉及以 AI 執行執行模型取代其基礎設施配置與服務整合。

評估您的工作量

遷移前,先檢視 限制。 確認工作負載能在固定大小叢集上運行,且只有一種加速器類型。

移轉工作負載

若要移轉自行管理的 Ray 工作負載:

  1. 選擇筆記型電腦進行互動式單節點開發,或 Databricks CLI 用於單節點或多節點工作。
  2. 將現有叢集資源映射到 AI 執行時加速器類型及加速器數量。 請參閱 硬體選項。
  3. 在筆記本中,以 ray_init() 取代現有的叢集啟動;或者在 Databricks CLI 工作負載中,以文件中記載的 head 和 worker 啟動程序取代。
  4. 宣告工作負載的 Python 相依性,並更新其資料、檢查點、模型和輸出路徑。
  5. 驗證最小適用配置的工作負載。 在測試預期的固定拓撲之前,先確認其資料存取、資源請求與輸出。

Limitations

AI 執行時的 Ray 有以下限制:

  • Ray 叢集在工作負載期間有固定節點數。 不支援光線叢集自動縮放。
  • 工作負載中的所有節點都使用相同的 accelerator_type。 Ray 叢集不能包含獨立的 CPU 與 GPU 工作群組,或獨立擴展 CPU 與 GPU 容量。
  • Notebook 會在其所連接的單一節點上啟動 Ray。 使用 Databricks CLI 來建立多節點 Ray 叢集。
  • 目前透過 Databricks 驅動程式代理存取 Ray 儀表板,僅適用於筆記本工作負載。

Tip

如果 CPU 準備與 GPU 處理可作為獨立階段執行,請使用多任務 Lakeflow 作業,並透過 Unity 目錄卷在任務間傳遞資料。