Refactor server.js (647 → 99 lines) into 30+ modules under src/: - auth/: JWKS validation, JWT middleware, OAuth client_credentials - routes/v1/: jobs (POST/GET/:id) + promote with input validation - routes/legacy.js: existing /jobs multipart path (backward compatible) - services/: jobService, healthService, sseService, statusMapper, doneListener - middleware/: requestId, errorHandler, perClientRateLimit, uploadConcurrency, upload (multer + storage) - redis/: Lua scripts for atomic claim/release_active_job - storage/: local + minio adapters; fileAccessAgent/: PUT promote client - config.js: env var validation with fail-fast Phase 1 features (T1–T11): - T1 Auth middleware + JWKS (Member Center OAuth2 resource server) - T2 OAuth client (Member Center client_credentials, Basic auth) - T3 /api/v1/* router skeleton - T4 server.js refactor (legacy endpoints fully preserved, real-Redis regression verified — existing worker consumer group untouched) - T5 POST /api/v1/jobs (multipart, OWASP-audited, 2 Critical / 6 Major fixed; Risk-A/B documented as accepted) - T6 GET /api/v1/jobs + GET /:id (cursor pagination, ETag, IDOR-safe) - T7 POST /jobs/:id/promote (FAA PUT with own service token, 300s timeout, fail-fast on missing FAA URL) - T8 /health upgrade (healthy/degraded/unhealthy + 30s background cache) - T9 stage_timings (release_active_job in terminal states) - T10 env + Docker integration (MULTIPART_* + concurrency limiter) - T11 README (498 lines) + OpenAPI 3.0 spec (1588 lines) Tests: 630 pass across 29 suites. Updated Dockerfile + .dockerignore + docker-compose.yml env passthrough (no hardcoded secrets, fail-fast on missing required vars). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Kneron Toolchain Convert Orchestrator
本專案實作「Crash 即 Reset」的 Kneron Toolchain 轉換流程:
ONNX → BIE → NEF。系統以 Scheduler 為控制面,搭配 Worker Pool 與 MinIO 交換產物。
架構以 docs/Design.md 為準。
核心設計(Crash Reset)
- Redis 與 Queue 都是易失性,重啟即清空。
- Scheduler / Worker 不做任務復原。
- Crash 後需重新送出任務。
元件(目標架構)
- Web UI:上傳 model/quant、查狀態、下載結果。
- Task Scheduler:建立 job、更新狀態、派發任務、接收完成事件。
- Worker Pools:ONNX / BIE / NEF Worker,無狀態、pull-based。
- Redis:暫存 job 狀態(不保證持久)。
- Queue:任務/完成事件(不保證持久)。
- MinIO:跨 Worker 的 input/output/log 存放。
Job 流程
- UI 建立 job,並上傳 input 到 MinIO
- Scheduler 推入 queue:onnx
- ONNX Worker 執行完成
- Scheduler 推入 queue:bie
- BIE Worker 執行完成
- Scheduler 推入 queue:nef
- NEF Worker 執行完成
- Scheduler 標記 COMPLETED
Worker API Flags(可選)
這些旗標用於控制 evaluator / simulator 步驟。皆有預設值,不填不影響既有流程。
- ONNX
/api/onnx/processenable_evaluate(default:false): 是否執行 IP evaluator(原 Web GUI 流程為 OFF)enable_sim_fp(default:false): 是否執行浮點 E2E 模擬(尚未接線)
- BIE
/api/bie/processenable_sim_fixed(default:false): 是否執行定點 E2E 模擬(尚未接線)
- NEF
/api/nef/processenable_sim_hw(default:false): 是否執行硬體 E2E 模擬(尚未接線)
流程預設開關對照(原 Web GUI vs 現在 Workers)
| 步驟 | 原 Web GUI 預設 | 現在 Workers 預設 | 開關 |
|---|---|---|---|
| ONNX 轉換/最佳化 | ON | ON | 無 |
| IP Evaluator | OFF | OFF | enable_evaluate |
| FP E2E 模擬 | OFF | OFF | enable_sim_fp |
| BIE 量化 | ON | ON | 無 |
| Fixed-Point E2E 模擬 | OFF | OFF | enable_sim_fixed |
| NEF Compile | ON | ON | 無 |
| HW E2E 模擬 | OFF | OFF | enable_sim_hw |
非目標
- 不做任務持久化
- 不做 crash 後 resume
- 不做 exactly-once / at-least-once 保證
- 不做 Scheduler HA
- 不做自動 retry
備註
- docs/Design.md 為唯一真實設計文件。
- apps/ 與 infra 為實作中的目錄,後續可能變動。
- ktc 有本地 patch 紀錄,見 docs/KTC_PATCHES.md(若 ktc 更新需重新套用並測試)。
目錄結構(概要)
.
├── apps/ # 前端與 Scheduler(實作中)
├── infra/ # 基礎設施相關(實作中)
├── services/ # Worker 服務(ONNX/BIE/NEF)
├── ktc/ # Kneron Toolchain Python API 封裝
├── vendor/ # 上游/第三方模組(sys_flow, sys_flow_v2 等)
├── toolchain/ # 本地 toolchain/prebuild 與相關資源
├── libs/ # toolchain v1 相關資源(來源快照)
├── libs_V2/ # toolchain v2 相關資源(來源快照)
├── scripts/ # toolchain scripts / res / config
├── tests/ # 測試
├── docs/ # 設計文件
│ └── Design.md
└── requirements.txt # Python 依賴
Description
Languages
C++
58.9%
Python
15.2%
PureBasic
12.9%
C
7.8%
JavaScript
4.1%
Other
0.9%