AI 應用 / 分佈式系統

Hachimi Music Studio

分佈式音樂處理任務排程平台 — 轉錄、拆軌、樂譜識別、OCR 任務自動調度 GPU 運算。

使用的技術

Docker ComposePostgreSQLNode.js ExpressReact + ViteWebSocketCUDA GPU 排程

這是什麼項目

Hachimi Music Studio 是一個音樂處理任務排程平台: 用戶在網頁上提交任務(音樂轉錄 MIDI、音源分離/拆軌、樂譜識別、文檔 OCR 等), 排程器按照工作時間、GPU 顯存(VRAM)與積分規則自動調度,由 GPU 執行器實際運算, 完成後自動回傳結果。前端為 React + Vite 雙版本構建(公開用戶端 + 僅內網的管理端), 後端為 Node.js Express,資料庫 PostgreSQL 16,全部容器化於 Docker Compose。

雙機分工架構

互聯網用戶 → music.hachimi.qzz.io → NPM (SSL) → 常開機「大腦」
                                          ├─ scheduler_app       (用戶端 / 管理端)
                                          ├─ scheduler_postgres  (資料庫)
                                          └─ output/             (用戶文件永久存放)
                                                   │ 內網 HTTP 通道:執行命令 + 文件中轉
                                                   ▼
                                       GPU 機「工人」(可彈性關機)
                                          ├─ host-executor       (conda + CUDA)
                                          └─ pandocr OCR

為什麼需要「執行器橋接」?

Docker 容器是 Linux 環境,跑不了 Windows 的 .bat 腳本, 也無法直接使用宿主機的 conda/CUDA 環境。因此 GPU 任務由容器內的 taskRunner 攔截, 透過 HTTP 發給宿主機上的 host-executor(小型 Express 服務,帶 Token 驗證)實際執行, 輸入輸出文件經上傳/下載端點中轉。執行器絕不對公網暴露。

七種任務類型

A音樂轉錄 MIDI(muscriptor + CUDA)
B音源分離/拆軌(roformer + CUDA)
C紙面/PDF 樂譜識別(homr)
H實書掃描(人工任務)
I人工修軌(人工任務)
J人工 OCR 編輯(人工任務)
P文檔解析(pandocr 容器群)

離線容忍設計

排程器定期健康檢查 GPU 執行器與 OCR 服務。GPU 主機關機時,依賴它的任務留在隊列排隊,不失敗、不扣重試,前端顯示「GPU 主機離線」橫幅; 主機開機後自動發現,積壓任務按 VRAM 規則自動開跑。這讓昂貴的 GPU 機可以彈性開關。

對外訪問鏈路

music.hachimi.qzz.io
  → Cloudflare DNS → 公網
  → 路由器轉發 Web 端口 → NPM (Let's Encrypt SSL, 自動續期)
  → Proxy Host → scheduler_app(開 Websockets Support)

管理端不對外,僅限內網訪問
📦 相關文章
這個項目從 Windows 測試機搬遷到 Linux VM 的完整過程(PVE 磁碟直通、分區整理、Docker 遷移要點)寫在另一篇:《拔碟搬家實戰 — PVE 直通硬碟與專案跨平台遷移》