个人开发者实战:从0到1手搓局域网 GPU 算力共享平台,并成功上架微软商店
前言:为什么要做这个项目?
作为一个全栈独立开发者,我手头有一台带 RTX 3060 的主机。平时除了跑跑本地大模型、做做 AI 漫剧,大部分时间它的算力都在闲置。而另一边,很多高校学生、小型工作室在跑深度学习、ComfyUI 出图时,却因为云端 GPU 太贵而发愁。
于是,我萌生了一个想法:能不能做一个局域网内的“算力 Airbnb”?让闲置的显卡安全地共享给同网段的开发者使用。
经过几周的爆肝开发,这个名为「算力集市 (Compute Bazaar)」的项目不仅跑通了完整的业务闭环,还成功打包上架了微软商店。今天把开发过程中的架构设计与踩坑经验分享给大家。
项目官网:https://computebazaar.netlify.app
开源地址:https://gitee.com/tianyeHome/compute_bazaar (已采用 Apache-2.0 协议开源)
技术栈:Flutter (GetX + MVVM) + Python FastAPI + Docker + WSL2
一、核心功能与技术架构
为了保证安全性和极客感,平台采用了“双模式”设计:租客模式和出租模式。
🛠️ 整体架构
- 前端:Flutter + GetX + MVVM (Monorepo 架构),打包为 Windows 桌面端 MSIX。
- 后端:Python FastAPI +
pynvml(硬件监控) + SQLite (任务持久化)。 - 通信:UDP 广播 (局域网节点发现) + HTTP REST (指令下发) + SSE (实时监控流)。
- 隔离环境:Docker 容器。
✨ 四大核心亮点
- 局域网秒级发现:无需公网 IP,基于 UDP 广播自动发现同网段节点。
- Docker 沙盒隔离:所有任务在容器中执行,绝对保护房东的宿主机安全。
- 受控任务包 (YAML):支持自定义 YAML 定义镜像和命令,严格过滤特权模式。
- 虚拟算力点计费:不碰真实资金,通过心跳与时间片机制,精准计算消耗的“算力点”。
二、硬核踩坑实录(技术干货)
在开发过程中,我遇到了几个极其棘手的技术难点,这里重点复盘一下:
1. WSL2 下的 Docker GPU 透传(地狱难度)
为了让 Windows 用户能通过 Docker 隔离任务,必须让 WSL2 里的 Docker 能够使用宿主机的 NVIDIA 显卡。
- 踩坑:一开始试图在 WSL2 里装 K8s 和 HAMi 做显存切片,结果遇到了致命的
unresolvable CDI devices和 cgroups 格式错误。因为 WSL2 的 GPU 透传机制(/dev/dxg)与原生 Linux 完全不同。 - 解决:放弃复杂的硬切片,改用 Docker 原生 CDI 模式。将
nvidia-container-runtime配置为cdi,并手动修补 CDI spec 文件,注入libdxcore.so。最终成功实现了“单卡多容器”共享。
2. 幽灵 IP 与 UDP 发现
在局域网广播时,经常扫出172.25.xxx.xxx这样的幽灵节点。
- 踩坑:Python 在获取本机 IP 时,优先拿到了 WSL 虚拟网卡的 IP,导致前端连不上。
- 解决:废弃传统的遍历网卡方式,改用最稳健的UDP 路由探测法(向
8.8.8.8发送 UDP 包获取出口 IP),完美避开了所有虚拟网卡。
3. 动态 YAML 任务包与安全校验
如果让用户随便传 YAML,会有严重的安全隐患。
- 解决:后端引入
PyYAML和Pydantic,在接收 YAML 时做三层校验:语法校验 -> 必填字段校验 -> 安全拦截(直接拦截privileged: true和挂载C:/盘的特权操作)。只要校验不通过,直接打回。
4. 自动化拉起与心跳防误判
用户点击“开启服务”时,Flutter 需要自动静默拉起 Python 打包的后端 exe。
- 踩坑:拉起需要时间,此时前端的心跳检测会连续失败,导致界面疯狂闪红灯报错。
- 解决:引入
HeartbeatController.markAgentStarting()状态机。在 Agent 启动期间跳过失败计数,只有真正连续 3 次(90秒)未确认才判定断线。
三、界面展示
(发布到 CSDN 时,记得在这里插入你的 4 张高清截图)
1. 节点发现与 GPU 监控
真实的显卡利用率、显存与温度监控,基于
pynvml和fl_chart绘制的心电图式折线图。
2. 自定义 YAML 任务提交
支持用户粘贴自定义 YAML 任务包,实时进行安全校验,下方绿灯提示通过。
3. 任务管理与算力点计费
跑通完整的商业闭环,任务秒级完成,准确扣除 1 个算力点。
四、如何体验?
目前 v0.1.0 单机版已经正式发布,并且已提交微软商店审核。
- 源码编译:直接 clone Gitee 仓库,进入
apps/compute_bazaar_local执行flutter run -d windows。 - 绿色免安装版:在 Gitee 的 Releases 页面,下载
ComputeBazaar-v0.1.0-Windows-x64.zip,解压双击即可运行。
⚠️ 运行环境要求:需要 Windows 10/11,并提前在 WSL2 中安装并启动 Docker 环境。
五、总结与后续规划
作为一个个人独立项目,能走到这一步非常有成就感。
v0.2.0 的规划:
- 实现 Ubuntu 双系统下的 HAMi 部署,做真正的“显存硬切片”(A 租客只能用 3G,B 租客只能用 4G)。
- 实现联网版,加入 NAT 穿透,让跨城调度算力成为可能。
如果这个项目对你有启发,或者你也想把自己的闲置显卡变成“AI 时代的房东”,欢迎来 Gitee 提 Issue,或者给个 Star 支持一下!
🌟Gitee 传送门:https://gitee.com/tianyeHome/compute_bazaar