企业级 GPU 资源管理 & 训练任务调度系统 · 为深度学习而生
面向 AI / ML 场景的一站式计算平台:SSH 对接计算集群 · 智能排队调度 · Web 终端 · 文件管理 · 实时监控
「让每一张 GPU 都被充分利用,让每一次训练都井然有序」
CloudQue 为团队的 GPU 计算资源提供可观测、可调度、可管理的全生命周期能力:
- 告别手动排队:再也不用 SSH 上去看谁在跑 —— 提交任务自动排队,显卡空闲立即启动
- 环境隔离无忧:Conda 环境自动切换、CUDA 设备精准绑定、用户目录权限隔离
- 随时接管训练:浏览器直接 SSH 进服务器,终端输出实时同步,断线重连不丢历史
- 实时资源全景:CPU / 内存 / GPU / 磁盘 / 进程全链路监控,秒级刷新
|
|
|
|
|
|
flowchart TD
subgraph Client["🖥️ 前端 / 用户端"]
Browser[浏览器]
end
subgraph Gateway["🌐 API 网关层 · Gin"]
Router[路由总装]
Middleware[中间件链<br/>Recovery · Logger · CORS · Auth · OpLog]
end
subgraph Business["⚙️ 业务服务层 · Service"]
Scheduler[任务调度器<br/>5s 循环 + PID 监控]
JobSvc[任务服务<br/>提交/取消/列表]
TerminalSvc[终端服务<br/>SSH PTY + 缓存]
FileSvc[文件服务<br/>SFTP 隔离]
GpuSvc[GPU 服务<br/>占用/释放]
Collector[资源采集器<br/>2s 快照]
AuthSvc[认证服务<br/>JWT + SSH 会话]
RBAC[RBAC 服务<br/>角色/权限/菜单]
end
subgraph Data["💾 数据 & 基础设施层"]
MySQL[(MySQL<br/>用户/任务/权限/进程)]
Redis[(Redis<br/>优先队列 + 分布式锁<br/>GPU 位态缓存 + 会话)]
SSH1["SSH 计算服务器 1<br/>(GPU 0..N)"]
SSH2["SSH 计算服务器 2<br/>(GPU 0..N)"]
end
Browser -- "HTTP / REST API" --> Router
Browser -- "WebSocket (3路)" --> Router
Router --> Middleware
Middleware --> Business
Scheduler -- "轮询队头" --> JobSvc
Scheduler -- "占用/释放" --> GpuSvc
Scheduler -- "远程启动 python" --> SSH1
Scheduler -- "远程启动 python" --> SSH2
JobSvc -- "任务持久化" --> MySQL
JobSvc -- "ZSet 优先队列" --> Redis
GpuSvc -- "持久化" --> MySQL
GpuSvc -- "位态缓存" --> Redis
Collector -- "广播推送" --> Browser
TerminalSvc -- "PTY 会话" --> SSH1
FileSvc -- "SFTP" --> SSH1
AuthSvc -- "用户" --> MySQL
AuthSvc -- "Token 会话" --> Redis
RBAC -- "权限数据" --> MySQL
① 准备环境
确保你已安装:
- Go 1.24+
- MySQL 8.0+
- Redis 6.0+
- 一台可 SSH 的 Linux GPU 服务器(作为实际计算节点)
# 克隆项目
git clone https://github.com/your-org/cloudque.git
cd cloudque
# 安装依赖
go mod tidy② 配置文件
cp configs/config.yaml.example configs/config.yaml编辑 configs/config.yaml,填入 4 类关键信息:
database:
mysql: { host: "your-host", port: 3306, username: "root", password: "***", database: "cloudque" }
redis: { host: "your-host", port: 6379, password: "***", db: 5 }
jwt:
secret: "PLEASE-CHANGE-THIS-IN-PRODUCTION-🔥"
server:
host: "gpu-node-01:22"
root_username: "root"
private_key_path: "/root/.ssh/id_rsa"
base_path: "/home"
enabled: true初始化数据库:
mysql -u root -p < scripts/cloudque.sql③ 启动服务
# 直接跑
go run cmd/server/main.go
# 或者用 Makefile
make run
# 或者编译
make build && ./bin/cloudque-api.exe✅ 默认端口 8080,访问健康检查:
GET http://localhost:8080/api/v1/health
→ { "status": "ok", "message": "CloudQue API is running" }
| 层级 | 技术选型 |
|---|---|
| 语言 | Go 1.24 |
| Web 框架 | Gin v1.11 |
| ORM | GORM v1.31 |
| 数据库 | MySQL 8.0 |
| 缓存/队列/锁 | Redis (go-redis/v9) |
| 认证 | JWT v5 + bcrypt + base64Captcha |
| WebSocket | Gorilla WebSocket v1.5 |
| SSH / SFTP | 自研 SessionManager + pkg/sftp |
| 系统监控 | gopsutil/v3 |
| 配置 | Viper v1.21 |
| 日志 | Zap + Lumberjack |
| 邮件 | gomail.v2 |
| 测试 | testify v1.11 |
| 设计 | 说明 |
|---|---|
| 应用启动器 | main 仅 20 行,所有初始化和 10 步优雅关闭集中在 app.go |
| 依赖注入 | Repository → Service → Controller 全构造函数注入,完全面向接口编程 |
| 分布式调度锁 | SETNX + Lua 原子释放 + 看门狗 TTL 续期,多实例部署零冲突 |
| 终端环形缓存 | 2MB 输出缓存 + UTF-8 边界切片,断线重连体验丝滑 |
| 崩溃恢复 | 启动时扫描 DB 运行中任务,核实 PID 存活后重新接管监控 |
| 操作日志异步化 | 批量 + 定时器写入 DB,不阻塞主请求链路 |
欢迎任何形式的贡献!无论是 🐛 Bug 报告、💡 新功能提议,还是 ✍️ 文档完善。
- Fork 本仓库
- 创建你的特性分支:
git checkout -b feat/awesome-feature - 提交你的变更:
git commit -m 'feat: add awesome feature' - 推送到分支:
git push origin feat/awesome-feature - 提交 Pull Request 🎉
💡 提交前确保通过:
make fmt && make vet && make test
本项目采用 MIT License 开源 — 详见 LICENSE 文件。
如果 CloudQue 对你有帮助,欢迎点个 ⭐ Star 支持一下!
有任何问题或建议:
- 📮 提 Issue
- ✉️ 邮箱:
your-email@example.com - 💬 加入社群交流
Made with ❤️ using Go · Gin · WebSocket · SSH
© 2025 CloudQue Team. Let every GPU count.