
上一個系列「128GB 統一記憶體的三十天」談的是怎麼把開放權重模型在 DGX Spark 上跑起來,選哪個推論引擎、量化怎麼取捨、成本怎麼算。三十天寫完,機器確實跑得動了,但同一段時間裡真正花掉我最多時間的,其實都不在那三十一篇裡。
容器升級後 GPU 突然抓不到,回頭才發現 image 的 tag 被上游換過。NFS 模型庫裡多了三份同名不同版的權重,沒人記得哪一份是實測用的那一份。連續生成影片兩小時之後節點降頻,沒有任何告警,是隔天看紀錄才知道。備份排程有跑,但還原和驗證真的確實嗎? 這些事情跟模型聰不聰明無關,跟推論引擎快不快也無關,它們全部都是維運問題。
所以第二個三十天,接續的新題目是維運。主要的場域是自建的地端資訊環境。這次要協助解決的問題是,一套跑得起來的地端環境,要補上哪些東西,才能好好長期維運呢?
由於不能把某些工作或客戶的機房資料拿來當範例,先把本系列文的場域講清楚,後面三十天所有的實作與數字,主要會來自這裡,其他則是日常維運中可以分享的心得和經驗。
| 角色 | 設備 | 備註 |
|---|---|---|
| GPU 運算節點 | NVIDIA DGX Spark(GB10,128GB 統一記憶體)兩台 | 兩台之間以 QSFP28 100GbE 直連,各自另接 10GbE 交換器 |
| 集中儲存 | QNAP TS-464 | NFS 集中模型庫,所有運算節點掛載同一份模型目錄 |
| 虛擬化 | Proxmox VE 節點伺服器三台 | 承載管理服務、監控與各類工作用 VM |
| GPU 工作站 | Intel 平台,128GB RAM,RTX 5060 Ti 16GB | ComfyUI 與封裝測試用 |
| GPU 工作站 | AMD 平台,32GB RAM,RTX 3060 12GB | 對照組與輕量任務 |
| 工作用筆電 | Apple 平台,24GB RAM,Mac M5 Air | 日常工作與輕量任務 |
| 網路骨幹 | 10GbE 交換器 | Mercury SE106 Pro 有切 VLAN |
| 無線網路 | Wifi5 基地台 | Fortinet FAP-221E 二台 |
| 路由器 | 防火牆 | Fortigate 60F |
| 空調 | 冷暖變頻冷氣機 | Panasonic UJ |
這不是企業機房的規模,但它具備企業機房會遇到的所有維運問題,多節點、集中儲存、GPU 熱與記憶體的邊界、跨設備的備份與還原、以及沒有人願意寫但稽核時一定會被問的變更紀錄。規模小反而是優點,每一個環節都能親手走一遍,並且把過程開源。
我把這段時間碰到的問題整理之後,發現它們可以歸成四類。
第一類,服務沒有被封裝
用 docker compose 手動拉起來的服務,升級靠記憶,設定散在各處,換一台機器就要重來一次。要解決的是把服務變成可安裝、可升級、可驗證的套件,而且打包過程本身要可重現。
第二類,節點沒有被守護
GPU 節點在長時間負載下會遇到熱與記憶體的邊界,DGX Spark 的統一記憶體架構讓這件事比傳統 VRAM 更難觀察。要解決的是取樣、告警與自動降載。其他用到如採用 RTX 4090、RTX Pro 6000 的工作站、B200 伺服器之類的機器 (大到要用施耐德電器給機櫃特規的全套散熱設備與監控系統等),都需要有守護的概念。
第三類,儲存與備份沒有被治理
模型庫的權限、版本、校驗碼,備份的排程、保留期限、還原演練,這些在單機時期都可以省略,多節點之後省不掉。
第四類,變更沒有被記錄
這是最容易被忽略的一類。升級了什麼、誰升的、什麼時候、能不能回滾,沒有紀錄的環境在出事時只能靠猜測。我主要的工作室是資訊安全、系統維運與 ISO 27001 事務,這一段會用 ITGC 的角度來寫,但落地的形式會是腳本與範本,不會是那種上課用的講義。
三十天的結構,主要會依這四類展開,並且在實務上會上調整和運用。
第一段,開源服務封裝(Day 1 到 8)
以 Docker 或 QNAP Container Station 為目標平台,把 Open WebUI 加 Ollama、ComfyUI、Jellyfin、Roon、changedetection.io、Homepage 等服務封裝成 NAS 套件。這一段會公開打包骨架、GitHub Actions 自動打包與 release 流程、image digest 鎖定與 SHA256SUMS 的做法,讓任何人都能照同一套流程封裝自己的服務。
第二段,容量規劃、GPU 節點、儲存與備份(Day 9 到 18)
從容量規劃開始,用模型與硬體搭配矩陣推算節點與儲存規格,接著是 DGX Spark 的節點基線與熱、記憶體守護,NFS 集中模型庫的權限與版本治理,儲存路徑實測,Proxmox VE 雙節點 HA 與備份還原,NAS 的快照與 3-2-1 備份,最後一天談媒體庫外移 GCS 與 S3 的雲地整合。
第三段,可觀測性、資安維運與可稽核的變更管理(Day 19 到 30)
指標收集與 Grafana 儀表板、日誌集中與保存、防火牆日誌判讀、網路封包擷取與分析、維運工作站、資產 EOL 監看,然後進入變更管理與稽核軌跡,最後一天談 AI Agent 進入維運流程時的授權閘道,並以一年的成本與用電費用計算做總結。
這個系列,我自己有一個小小的規則,每一天的文章都儘量能對應到 GitHub 上一個我自己做過的可執行專案,可能是一個套件、一支腳本或一份範本。專案數量大約二十個到三十個,主要都是我以前做到現在的既有專案,一部分則是將我以前寫過的舊私有專案改成公開專案版釋出。我會另外開一個總索引 repo,三十天結束時會有三十個可以對照的節點。
上一個系列文,談的是地端 AI 模型和架構規劃的選擇和測試、選型,而這個系列呢,談的是自己在 IT 維運相關 repo 中,放的是怎麼做的內容。
Day 2 從封裝的第一步開始,聊看看薄殼架構。為什麼薄殼架構的套件中,不放大量程式碼,只放生命週期腳本與狀態頁,以及這個設計上,怎麼讓套件跟著上游 image 升級,而不用重新再打包。
系列文章與程式碼索引:onprem-ops-30days
我的前一系列文:128GB 統一記憶體的三十天:DGX Spark 地端 LLM 與生成式 AI 部署實戰
Day 1|系列規劃與場域總覽:從跑得起來到可長期維運,先談為什麼要封裝
Day 2|Container Station 薄殼架構:QPKG 骨架、生命週期腳本與狀態頁
Day 3|版本鎖定與供應鏈:image digest、SHA256SUMS 與授權檔
Day 4|GitHub Actions 自動打包與 release:從 git tag 到可驗證的套件
Day 5|案例 Jellyfin 與 Roon:硬體轉碼的裝置直通與主機網路
Day 6|案例 changedetection.io 與 Homepage:資安與資訊公告監看 + 整合入口
Day 7|在地自建 ComfyUI 的生存指南:自建 Image 鎖定、GPU 直通與三層目錄架構
Day 8|案例實戰:Open WebUI + Ollama 重構記,把專案回到通用框架會省下什麼呢?
Day 9|容量規劃:用模型與硬體搭配矩陣決定地端節點與儲存規格
Day 10|上游引擎一改版,地端 AI 環境用的配方壞了怎麼辦 ? patch 移植實戰紀錄
Day 11|DGX Spark 節點基線:DGX OS 初始設定、帳號與 SSH 加固
Day 12|熱與統一記憶體守護:取樣器、自動降載與長時間負載實測
Day 13|別讓節點踩爆模型!NFS 集中模型庫的單寫多讀、權限凍結與完整性治理
Day 14|儲存規劃與路徑實測:RAID 60 與 RAIDZ2 試算,SSD、NFS、iSCSI 載入時間解析
Day 15|Proxmox VE 雙節點 HA:Virtualization Station 上的 QDevice
Day 16|Proxmox VE 備份與還原:HDP for Business Beta 的排程、保留與還原演練
Day 17|儲存設備備份策略與還原演練:快照、HBS 3 與 3-2-1 備份策略
Day 18|3-2-1 的最後一步:異地物件儲存、保留政策與冷熱資料成本精算
Day 19|指標收集:把前十八天的取樣器接進同一個時間序列
Day 20|儀表板與告警,打造一個簡潔的單一面板
Day 21|日誌集中與保存:節點不裝新代理,封存要能比對
Day 22|被擋下的封包才是便宜情報:從防火牆靜默盲點到日誌降噪與自動化告警
Day 23|日誌找不到原因?從 tcpdump 最小權限封包擷取到 WORM 封存的網路排錯實戰
Day 24|稽核問「某台工作站上個月連到哪裡了」?FortiGate AUP 雙軌日誌實踐:線上 LogsQL 檢索與離線對帳修煉
Day 25|資產生命週期與授權 EOL 監看:到期日只是一個數字,通通收進 Prometheus 時間序列!
Day 26|變更管理實戰:串起 Git 變更單、監控與日誌,讓每次改動都有跡可循
Day 27|自動化稽核比對:當機器留下的日誌,對上工程師寫的變更單(VictoriaLogs × FortiGate × PVE)
Day 28|Rollback 實戰演練:沒真正執行過的復原步驟,永遠只是一場美麗的假設
Day 29|打造地端維運的 AI 圍欄:Agent 授權閘道實作,無工單即無工具,無核准即無不可逆變更
Day 30|完賽總結|算清一年的電費、硬體折舊與雲端代價:地端 AI 維運 30 天留下的真實資產