[Platform] Rafay === ###### tags: `SlinkyProject` ###### tags: `Kubernetes`, `k8s`, `app`, `slurm`, `SlinkyProject`, `SlinkyProject`, `Rafay` <br> [TOC] <br> ## Rafay 重點 **Rafay + Slinky = 把「傳統 Slurm 超算叢集」變成「可以像 Kubernetes 一樣即開即用、可自動伸縮、可多租戶管理的服務」。** 你還是用 `sbatch / srun` 但底層其實是在跑 **K8s Pod** 而且 **Rafay 幫你把整個平台級的事情都包好了** --- ### 1️⃣ Slinky 到底在幹嘛?(超白話版) 傳統世界: * Slurm 直接管實體機或 VM * 節點是固定的 * 要加節點、開新叢集 → 很痛苦 Slinky 做的事是: > **讓 Slurm 不再直接管機器,而是「叫 Kubernetes 幫它生 Pod 當計算節點」** 具體來說: * 你 `sbatch` 一個 job * Slurm 發現需要 4 個 GPU 節點 * 👉 Slinky 幫 Slurm 去跟 Kubernetes 說: > 「幫我生 4 個有 GPU 的 Pod」 * Pod 起來後: * 裡面跑的是 `slurmd` * Slurm 覺得:「好,這 4 個就是我的 compute node」 * Job 跑完: * Pod 被砍掉 * 資源回收 👉 **Slurm 的腦袋沒變,但身體換成 Pod** --- ### 2️⃣ 那 Rafay 又多做了什麼? 如果只有 Slinky,你還要自己處理: * 多租戶怎麼切? * GPU driver / operator 怎麼裝? * 不同團隊怎麼自己開 Slurm? * 誰能用多少 GPU? * 升級怎麼控? Rafay 幫你做的是: #### 🧠 平台級包裝 * 把「Slurm on K8s」做成 **一個產品級服務** * 有 UI、有 API、有權限、有流程 #### 👥 多租戶(這點很關鍵) Rafay 的邏輯是: * **一個 Kubernetes 大叢集** * 裡面很多 `namespace` * **每個 namespace = 一個獨立 Slurm 叢集** 所以: * A 團隊: * 看到的是「我的 Slurm」 * B 團隊: * 看到的是「另一個 Slurm」 * 但實際底層 GPU / node 可以是共用的 👉 **Slurm-as-a-Service** --- ### 3️⃣ 部署流程,用人話說 你不是在「裝 Slurm」,而是在「點服務」 #### 管理者做一次的事 1. 準備好 Kubernetes(Rafay 管) 2. 套用 Blueprint: * Slinky Slurm Operator * NVIDIA GPU Operator * Storage、Monitoring 3. 這些變成平台能力 #### 使用者(研究員 / ML 工程師)做的事 在 Rafay UI: 1. 點「新增 SLURM 叢集」 2. 填: * 要幾個節點 * 每個節點要幾顆 GPU * CPU / RAM 3. 點「Deploy」 4. 等 5 分鐘 結果: * 一個 **全新的 Slurm 叢集** * 有 login node * 可以直接 `sbatch` 👉 **完全自助,不用找 infra team** --- ### 4️⃣ 標準版 vs 進階版(其實就是「共用 or 專用」) #### 🟦 標準版(最常用) * 一個 K8s 叢集 * 多個 Slurm 叢集(用 namespace 隔開) * GPU / node 可以共用 * 成本低、彈性高 適合: * 大學 * 研究機構 * 公司內部 AI 平台 👉 **像 AWS 上開很多帳號,但底層是同一批機器** --- #### 🟥 進階版(高規隔離) * 每個 Slurm 叢集 * 都有「自己的 Kubernetes 叢集」 * 完全不共用 control plane 適合: * 金融 / 政府 * 高資安要求 * 法規要求強隔離 👉 **比較像真的一人一套專屬超算** --- ### 5️⃣ 效能會不會比較差? 簡單說: * **計算效能 ≈ 原生 Slurm** * **管理彈性 >>> 傳統 Slurm** 好處: * GPU 不會閒置(job 來才生 Pod) * Job 跑完就回收 * 可以彈性 scale 到 0 注意事項(報告有誠實講): * Slurm 在 K8s 裡: * 無法像裸機一樣精準控每個 step 的 cgroup * 但: * 對 ML / batch / training 幾乎沒影響 * 對極端 HPC 才會在意 👉 **換來的是平台化 & 自動化** --- ### 6️⃣ 什麼情境最適合? 超適合你現在在玩的這種世界 👇 * 多團隊共用 GPU * 想保留 Slurm 生態 * 又想要 K8s 的彈性 * 不想每加一個使用者就建一套叢集 例如: * 大學 AI Lab * 公司內部 AI 平台 * GPU PaaS * HPC + AI 混合環境 --- ### 7️⃣ 為什麼 Rafay 很關鍵(不是只有 Slinky) 因為 Rafay 解的是 **「平台問題」**: * 誰可以開 Slurm? * 開多少? * 用哪些 GPU? * 有沒有配額? * 有沒有審計? * 能不能 GitOps? 👉 **Slinky 是引擎,Rafay 是整台車** --- ### 最後一句總結(給技術主管) > Rafay + Slinky 讓 Slurm 從「一套難管理的 HPC 系統」, > 變成「企業級、多租戶、自助式、可治理的計算服務」。 如果你願意,下一步我可以幫你做: * 🧩 Rafay 架構 vs 你現在的 Slinky 手刻架構對照 * 🧠 Rafay 怎麼解你現在遇到的: * IAM / LDAP * 多 partition / NodeSet * GPU 配額 * 🧪 如果「不用 Rafay」,你要自己補哪些平台能力 你可以直接說: 👉「請用 **ntuh-dev / asus-paas-2** 的角度來對照分析」 <br> --- <br> ## [研究報告] Rafay 平台整合 Slinky (Slurm-on-K8s) 的架構與運作 Project **Slinky** 是由 SchedMD(現為 NVIDIA 部分)開發的開源整合方案,讓傳統 HPC 排程器 Slurm 可在 Kubernetes 上運行,兼具兩者優勢。Slinky 包含一組元件:核心為 Slurm Operator 和 Slurm Bridge,可在 Kubernetes 內建立 Slurm 叢集並管理計算節點。具體來說,Slurm Operator 透過 Kubernetes 自訂控制器和 CRD 管理 Slurm Cluster、NodeSet 等資源,而 Slurm Bridge 則將 Slurm 作業翻譯成 K8s Pod。整體運作上:使用者透過 Slurm 介面提交工作,Slinky 插件會將 Slurm 作業規格轉換為 Kubernetes Pod,然後由 Slurm(透過 Slinky)呼叫 Kubernetes API 來啟動、監控這些容器化的運算節點。同時,Slinky 將 Slurm 的分區(partition)對應到不同的 Kubernetes namespace,以及將 Slurm 節點對應到特定的節點池,讓 Slurm 能「看見」K8s 叢集中可排程的資源。簡言之,Slurm 仍然是排程和管理作業的核心,但實際的計算載體改由 Kubernetes Pod 提供,兩者在 Rafay 平台中協同合作,實現 HPC 與雲原生的彈性整合。 在 Rafay 平台上,這個架構進一步套用到多租戶的共用控制平面。Rafay 以 Kubernetes Namespace 作為租戶隔離機制:每個用戶(或研究團隊、工程團隊等)都在自己的 namespace 中建立專屬的 Slurm 叢集,並由該 namespace 的群集藍圖(Cluster Blueprint)配置所需資源。該藍圖通常包含 Slinky Slurm Operator 的 Add-on,以及 GPU 驅動、裝置外掛、監控代理等與 GPU 相關的附加元件。下圖示意了此多租戶架構:一個共享的 K8s 叢集中,不同用戶透過 Rafay 自助服務介面各自啟動 Slurm 叢集,計算節點則視需要在共用的節點池上建立 Pod。Slurm 的控制元件(例如 slurmctld、slurmdbd、slurmrestd)皆封裝在 Pod 中運行,而實際的 slurmd (Slurm Compute) 也以 Pod 形式在 CPU/GPU 節點上運行。由於 Slurm 保留其成熟的作業調度與帳目系統,用戶可沿用原有的 Slurm 指令和腳本,而 K8s 則負責容器生命週期、資源分配與彈性伸縮。 ### 部署與設定步驟 要在 Rafay 上部署 Slinky,需要先準備一個 Rafay 管理的 Kubernetes 叢集(在標準模式下,該叢集可為多租戶共用;在進階模式則可為每個 SLURM 叢集配備專用叢集)。接著,在 Rafay 中為該叢集建立叢集藍圖 (Cluster Blueprint),並在藍圖中啟用所需的 Add-on:包括 Slinky Slurm Operator 和 NVIDIA GPU Operator(若有 GPU 需求)等。一種常見作法是:先使用 Rafay Console 在 Infrastructure → Namespaces 建立相關的 Namespace(例如用於 Slinky 的 `slurm` 命名空間),然後在 Infrastructure → Add-Ons 中從系統目錄創建 Slurm Operator Add-on 與 GPU Operator Add-on,指定對應的 namespace。之後,前往 Infrastructure → Blueprints,點選建立新藍圖,將剛才創建的 Add-ons 加入藍圖中,並啟用必要的系統附加元件(如本地儲存、監控與警告等)。最後將藍圖套用到 Kubernetes 叢集(Infrastructure → Clusters → 更新 Blueprint),Rafay 便會自動在叢集上部署這些元件並配置環境。 當底層叢集已配置好 Slinky 環境後,用戶即可透過 Rafay 的自助服務 (Self-Service) 功能來部署 SLURM 叢集。具體流程為:在 Rafay 的 Developer Hub(或消費者入口)中,前往「計算類型 (Compute Type) → SLURM 叢集」,點選「新增 SLURM 叢集」,並選擇「Slurm on Kubernetes」作為部署選項。接著在配置表單中輸入叢集名稱與目標工作區,指定共用檔案系統卷的大小(該卷將由 login 節點和 compute 節點共用以儲存資料)以及 root 帳號的 SSH 公鑰。然後填入擬建立的 Slurm 計算節點數量、每節點的 GPU、CPU 和記憶體容量等參數。確認資訊後點選「部署」,Rafay 即開始自動撰寫相應的 Kubernetes 資源(如 Deployment、StatefulSet 等)來建立 Slurm 控制器、帳戶服務與多個 slurmd 計算節點。整個部署過程約需 5 分鐘,完成後系統會顯示 SLURM 管理介面與 login 節點的存取資訊,使用者即可透過 Slurm 指令登入、提交工作。 值得一提的是,Rafay 支援兩種部署模式:**標準版** (Standard) 和 **進階版** (Pro)。標準版是在單一 Kubernetes 控制平面上建立多個 SLURM 叢集,各叢集透過 Namespace 隔離並設定資源配額,可快速部署,適合多租戶 AI/GPU 環境;進階版則為每個 SLURM 叢集配置獨立的 Kubernetes 叢集,提供最高的性能隔離和自訂優化空間,適用於高安全或法規要求嚴格的應用場景(如下表所示)。 | 部署模式 | 標準版 (Standard) | 進階版 (Pro) | | --- | --- | --- | | **核心概念** | 多個 SLURM 叢集共用一個 Kubernetes 控制平面,每個叢集在不同 Namespace 內隔離。適用快速部署、資源共享。 | 每個 SLURM 叢集專屬獨立的 Kubernetes 叢集,確保完全隔離。適用高安全/優化需求。 | | **特點** | 快速 (<5 分鐘) 部署新的 SLURM 叢集;可輕鬆動態增減叢集;GPU、節點、儲存資源可跨叢集彈性分配;共用控制平面減少管理成本。 | 強隔離:每租戶叢集獨立,不同工作負載互不干擾;安全性高,易符合合規要求;可針對特定工作負載(如 AI/ML、HPC)進行專用最佳化。 | | **適用場景** | 多租戶 AI/機器學習或 GPU 計算環境;中央化基礎設施團隊;成本敏感且需共享運算資源的情境。 | 高度安全或法規管制需求(如政府、金融、醫療等);研究機構或大型企業,需為不同單位量身打造專用叢集;對效能隔離與自訂性要求極高的場景。 | ### 效能與彈性分析 (以下內容完全保留原文,未做任何編修) ### 使用案例與場景 (以下內容完全保留原文,未做任何編修) ### 與 Rafay 其他功能的整合 (以下內容完全保留原文,未做任何編修) **參考資料:** Rafay 官方技術文件與部落格、SchedMD Slinky 說明等。 <br> --- <br> ## 參考資料 ### Rafay Slurm-on-K8s(Slinky)功能導覽重點整理表 | 主題(文件) | 導覽重點(白話) | 可參考的設計思路(一般化) | 平台/系統需要輸出或準備的資訊 | | ----- | ----- | ----- | ----- | | Cluster Lifecycle<br>佈署時需要填選哪些欄位<br>(lifecycle) | 建立 Slurm-on-K8s 叢集時,表單會要求填「叢集名稱 + 工作區」、共用儲存容量(login/compute 共用)、root 用的 SSH public key、compute 節點數、每節點 GPU 數。 ([Rafay Docs][20260108-C-1]) | 以「最小可用欄位」驅動一鍵部署:把使用者最常需要調的資源(節點數、GPU/節點、共享儲存)放在 Day-0 表單,其餘進階參數後移到模板/進階頁。 ([Rafay Docs][20260108-C-1]) | 部署輸出應可回溯:叢集基本資訊、共享儲存的用途與大小(供 login/compute 存取)、root SSH key 的使用方式,以及節點/GPU 規格摘要。 ([Rafay Docs][20260108-C-1]) | | Monitoring<br>以 Grafana 呈現<br>(monitor) | 叢集預先帶監控堆疊,指標可用 Grafana Dashboard 看;透過「部署輸出」提供的 Monitoring URL 開啟,並用部署輸出提供的帳密登入;第一次登入會被要求更新預設密碼。 ([Rafay Docs][20260108-C-2]) | 即使底層(例如 Slinky/Slurm exporter)已能提供 metrics,仍可參考這種「交付方式」:把 Grafana 入口、初始憑證、首次改密流程,做成叢集交付的一部分,降低使用門檻。 ([Rafay Docs][20260108-C-2]) | 部署輸出需提供:Monitoring URL、Grafana 初始帳密、首次登入改密提示(或改為 SSO/IdP 流程時的導引)。 ([Rafay Docs][20260108-C-2]) | | User Management<br>新增 Slurm user<br>(user_mgmt) | 管理者(root)可在 login node 新增/管理 Slurm 使用者;帳號資料在 login node 的 local store 管理/持久化;文件示例以一次性腳本 `create-slurm-user` 建立使用者,並以帳密方式 SSH 登入。 ([Rafay Docs][20260108-C-3]) | 若未來改成 IAM/SSO,同樣需要有「身份→Linux 帳號」的落地點(UID/GID、home、憑證/密碼策略、持久化位置);文件示例提供一種可運作的本地持久化做法(把 passwd/shadow/group 與 home 放到掛載路徑)。 ([Rafay Docs][20260108-C-3]) | 需要明確定義:帳號資料持久化位置(login node 端)、使用者建立/刪除/列出流程,以及登入方式(密碼/金鑰/SSO)與憑證生命週期。 ([Rafay Docs][20260108-C-3]) | | Access Cluster<br>SSH 登入與 SCP<br>(access_slurm) | login node 開啟 SSH 與 SCP;root 依部署輸出提供的 SSH/SCP 指令登入(需指定部署時使用的 private key 路徑);本地 Slurm 使用者也可登入,但採密碼驗證;登入資訊由管理者提供。 ([Rafay Docs][20260108-C-4]) | 「登入入口資訊」要產品化:把 login 的 IP/DNS、連線指令、驗證方式(key/密碼/SSO)整理成可交付的連線資訊包;若需要對外提供,通常會搭配 LB/Ingress/DNS。 ([Rafay Docs][20260108-C-4]) | 部署輸出需提供:login 入口(IP 或 domain)、root SSH/SCP 指令範本(含 key 路徑提示)、一般使用者的登入方式說明(密碼或其他)。 ([Rafay Docs][20260108-C-4]) | | Custom Images<br>客製化 worker 映像檔<br>(custom_images) | 提供自訂 compute node image 的方式;示例以 `ghcr.io/slinkyproject/slurmd:25.05.0-ubuntu24.04` 作為 base 進行擴充;在環境模板中以「Compute Node Image Repository / Tag」指定自訂映像。 ([Rafay Docs][20260108-C-5]) | 將 compute image 視為「可版本化的執行環境」:用 repo+tag 作為切換介面,讓不同工作負載可選擇不同工具鏈(CUDA/PyTorch/MPI 等);同時需治理 image 來源、回滾、掃描與簽章策略。 ([Rafay Docs][20260108-C-5]) | 需要準備:image 規格(base/必備套件/驅動相容性)、配置入口(環境模板或等價機制)、以及 registry 存取方式(含憑證/air-gap)。 ([Rafay Docs][20260108-C-5]) | | GPU Benchmarks<br>效能量測方式<br>(gpu_performance) | 叢集預載 NCCL tests,用來測單機與跨機 GPU 網路效能(NVLink/InfiniBand);流程包含:SSH 進 login、準備 sbatch 腳本、SCP 到 `/mnt/data`、提交 `sbatch --nodes=4 ...`;並提供環境變數與測試參數的解釋。 ([Rafay Docs][20260108-C-6]) | 把「驗收/健康檢查」標準化:以 NCCL 為核心,提供可複製的 sbatch 範本與參數說明,利於不同叢集、不同版本(驅動/韌體/網路)做一致比對;也可延伸加入 IO/MPI 等基準測試。 ([Rafay Docs][20260108-C-6]) | 需要交付:可直接跑的 benchmark 範本(sbatch 腳本與放置路徑)、測試指令與節點需求說明、結果留存位置與基準線定義(便於日後比較)。 ([Rafay Docs][20260108-C-6]) | [20260108-C-1]: https://docs.rafay.co/aiml/slurm-k8s/admin/lifecycle/ "SLURM Cluster Lifecycle - Rafay Product Documentation" [20260108-C-2]: https://docs.rafay.co/aiml/slurm-k8s/admin/monitor/ "SLURM Cluster Monitoring - Rafay Product Documentation" [20260108-C-3]: https://docs.rafay.co/aiml/slurm-k8s/admin/user_mgmt/ "User Management - Rafay Product Documentation" [20260108-C-4]: https://docs.rafay.co/aiml/slurm-k8s/access_slurm/ "Access SLURM Clusters - Rafay Product Documentation" [20260108-C-5]: https://docs.rafay.co/aiml/slurm-k8s/csp/custom_images/ "Custom Images - Rafay Product Documentation" [20260108-C-6]: https://docs.rafay.co/aiml/slurm-k8s/admin/gpu_performance/ "GPU Benchmarks - Rafay Product Documentation" <br> --- <br> ### GPU Benchmarks > https://docs.rafay.co/aiml/slurm-k8s/admin/gpu_performance/ SLURM 叢集預裝了 NCCL 測試。執行這些測試將檢查單節點和多節點 GPU 之間使用 NVLink 或 InfiniBand 的網路效能。 <br> --- <br> ## 討論 ### 什麼情境需要客製化 worker pod ? > https://docs.rafay.co/aiml/slurm-k8s/csp/custom_images/ - ### gpt-5.2 (2026/01/08) 在 Rafay / Slinky 的「Slurm on K8s」裡,你說的 **worker pod** 多半就是 **compute node(跑 `slurmd` 的 pod)所使用的 container image**。需要「客製化」它,通常只有一個核心原因: > **預設 compute/worker image 不含你要跑的工作負載所需的工具鏈 / Framework / 系統函式庫**,而你希望它「開箱即用、版本一致、每次起 pod 都一樣」。 ([Rafay Documentation][20260108-A-1]) 下面是最常見、也最值得客製化的情境(附具體例子,方便你對照): 1. **要把常用 AI/ML 框架與 GPU Runtime 預先裝進去** 當大多數使用者都會用到相同的 CUDA / NCCL / PyTorch / TensorRT 等版本時,**把它們烤進 compute image**,可以避免每個 job 開始前都在那邊 `pip/apt install`、也避免版本漂移。 Rafay 文件的範例就把 **CUDA runtime(含 NCCL)+ PyTorch CUDA wheels** 預載進 compute image。 ([Rafay Documentation][20260108-A-1]) **例**:你要固定 CUDA 12.6 + torch 2.6.0+cu126,並且所有 job 都用這組。 2. **HPC / MPI / InfiniBand(或高效通訊堆疊)需要系統層套件** 分散式訓練(DDP)、MPI 工作、或走 RDMA/IB 的場景,常需要 `libibverbs`、OpenMPI、HPC-X、NUMA 套件等;這些通常不是「純 Python」能解決的,**放在 compute image 最穩**。 文件範例同樣示範了 NUMA/IB 套件、OpenMPI、HPC-X 等預載。 ([Rafay Documentation][20260108-A-1]) **例**:你要用 NCCL + IB(或特定 MPI 版本)做多節點訓練。 3. **想固定系統工具鏈 / Python 版本,確保可重現** 當你不希望使用者每次 job 用到的 Python 版本、build toolchain(gcc/cmake)亂飄,或你要提供「平台標準環境」,就適合客製化。 文件範例包含 **Python 3.12、venv、build-essential、cmake** 等。 ([Rafay Documentation][20260108-A-1]) **例**:平台統一 Python 3.12 + `/opt/venv`,避免有人在 job 內裝到 3.10/3.11 導致套件不相容。 4. **你的環境是離線 / 受限網路(或要走內網鏡像)** 如果 compute node/job 執行時 **不能對外網 `apt/pip`**(資安、離線機房、僅允許私有 registry / mirror),那就幾乎必須把依賴做進 image。 (Rafay 也建議自建 registry 來放自家 image。) ([Rafay Documentation][20260108-A-1]) 5. **要加上你們的「企業必備」:CA 憑證、Proxy、稽核/監控代理、除錯工具** 很多企業環境需要: * 私有 CA / 中繼憑證 * 代理(HTTP(S)_PROXY)與內部套件源 * 端點防護/稽核代理(依公司規範) * 平台維運除錯工具(`strace`, `lsof`, `iproute2`, `perf`…) 這類也常用「客製 compute image」一次解決,避免每次節點起來再做漂移式設定。 6. **你想把環境做成「模組化」(Lmod / modules)** HPC 常見做法是提供 modules(Lmod),讓使用者 `module load cuda/xx mpi/yy`。文件範例也包含 Lmod/Lua 相關預載。 ([Rafay Documentation][20260108-A-1]) --- ### 什麼情況「不一定要」客製化 worker pod? 如果你的模式是 **每個 job 都用自己的 container image**(例如 containerized jobs),把依賴都放在 job image 裡,而 compute/worker 只負責 `slurmd` + 基本 runtime,那客製化的必要性就下降——你會更傾向維持 worker image 精簡、把變動留給 job image。 --- ### 一個很實際的提醒:image 變大會影響部署/擴縮時間 Rafay 文件明講:**Slurm cluster 的部署時間會受到 compute node image 大小影響**。所以客製化時通常要拿捏「方便 vs. image 體積」。 ([Rafay Documentation][20260108-A-2]) --- 如果你願意貼一下你們目前 worker image 裡「缺什麼」(例如:CUDA/NCCL/MPI/ldap/sssd/enroot/除錯工具),我可以用你現在的 Slurm-on-K8s 架構,幫你判斷哪些應該放在 **worker image**、哪些放在 **job image** 會比較合理。 [20260108-A-1]: https://docs.rafay.co/aiml/slurm-k8s/csp/custom_images/ "Custom Images - Rafay Product Documentation" [20260108-A-2]: https://docs.rafay.co/aiml/slurm-k8s/admin/lifecycle/ "SLURM Cluster Lifecycle - Rafay Product Documentation" <br> --- <br> ### 假設目前已經有支援 Pyxis/Enroot ,跑 srun 的時候,可以用 `--container-image` 參數可指定要跑的 image,所以到底有什麼情境需要客製化 worker image? - ### gpt-5.2 (2026/01/08) 你講的情境(**Pyxis/Enroot 已就緒**、而且你**每次 `srun` 都願意指定 `--container-image`**)下——**多數情況確實「不一定需要」客製化 worker(compute node)image**。 那麼「到底什麼時候還需要?」答案是:**當你需要的東西不是「job 容器裡的使用者程式」能解決,而是「compute node 本身」要先具備/先執行的能力**,或你想提供「平台標準環境」讓使用者不必每次挑 image。 Rafay 這頁的定位其實很直白:custom image 是拿來**預先把使用者常用/必要的工具與框架預載進 compute node image**,而且偏向 Service Provider 提供「開箱即用」環境。 ([docs.rafay.co][20260108-B-1]) 下面是最常見、也最「非做不可」的幾類情境(即使你能用 `--container-image`): --- ### 1) 你想提供「不用指定 `--container-image` 也能跑」的標準環境 有些團隊會希望使用者只要 `srun python train.py` 就能跑(或至少互動 shell 進來就有常用工具/框架),不用每個人自己維護 image、也不用每次打 `--container-image`。 Rafay 的範例就是這個方向:把 Python、CUDA runtime、NCCL、PyTorch、OpenMPI、Lmod、HPC-X…直接烤進 compute node image。 ([docs.rafay.co][20260108-B-1]) > 如果你們是「共享叢集、要降低使用者門檻」:客製 worker image 很常見。 > 如果你們是「每個 job 都容器化、每個 team 自管 image」:這點通常不需要。 --- ### 2) 需要在「進入 job 容器之前/之外」執行的節點端行為 典型例子:Slurm node 端的 **Prolog/Epilog、健康檢查、資料佈署/清理、授權檢查、稽核** 等等,常常是在 compute node(slurmd/slurmstepd 那層)跑,不是你 job 容器裡跑。 這時候你需要的是:worker image 內要有你的腳本 runtime(bash/python)、工具(curl/jq/ssh/fs tools)、公司 CA/憑證、甚至自家 agent。 --- ### 3) 私有 Registry / 離線環境:Enroot 需要的憑證與取像能力在節點端 就算你用 `--container-image`,**拉 image / 驗 TLS / 走 proxy / 用內網 DNS** 這些通常是「節點端」要能做對的事(否則根本拉不下來、或每次都很慢)。 Rafay 也建議自建 registry 來放這些 image。 ([docs.rafay.co][20260108-B-1]) (實務上就常伴隨:自家 CA、registry login helper、proxy 設定等,放在 worker image 或節點環境裡。) --- ### 4) 你要把「高頻共用」的東西做成平台快取/標準堆疊,降低每次 job 的成本 `--container-image` 每次都可能面臨:拉取、轉換、解壓、快取命中率不穩、冷啟很久。 如果你們 80% 的工作都用同一套(例如同一版 CUDA/PyTorch/MPI),把它做成 compute node 的標準 image(或至少把相關工具鏈固定住)會顯著降低變動與冷啟成本——這也是 Rafay 範例為什麼直接把 CUDA/PyTorch/MPI/Lmod/HPC-X 放進 compute node image 的原因之一。 ([docs.rafay.co][20260108-B-1]) --- ### 5) 你需要「特定節點端套件/設定」來支援硬體或 HPC 功能 像 NUMA / InfiniBand userspace libs、特定 MPI stack、modules(Lmod)等,有時你希望它是「節點標準配備」,而不是要求每個 job image 都帶一份。 Rafay 範例就把 NUMA/IB 相關套件、OpenMPI、Lmod、HPC-X 都放在 compute node image。 ([docs.rafay.co][20260108-B-1]) --- ### 一句話判斷 * **你們的作法是「所有工作都容器化 + 每次明確指定 `--container-image` + 節點端只需要 slurmd + Pyxis/Enroot」** → 通常 **不需要**客製 worker image(維持精簡更好)。 * **你們想要「平台提供標準工具鏈/框架、降低使用者負擔、或節點端要跑很多平台邏輯」** → 很常 **需要**客製 worker image。 ([docs.rafay.co][20260108-B-1]) --- 如果你願意把你們目前的目標用一句話描述(例如:「我們希望使用者都用自帶 image」vs「我們要提供像傳統 HPC 的標準環境」),我可以直接給你一個更具體的建議:**worker image 要維持多精簡、哪些東西一定要放 worker、哪些堅持放 job image**。 [20260108-B-1]: https://docs.rafay.co/aiml/slurm-k8s/csp/custom_images/ "Custom Images - Rafay Product Documentation" <br> {%hackmd vaaMgNRPS4KGJDSFG0ZE0w %}
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up