06平台的工程真相

这一页把前面五层的产品叙事放下,看代码和部署里实际是什么样: 后端负责什么、开源边界在哪、怎么装、推理该放哪一边。

前端会话 vs 后端真相 许可证不统一 交互式 vs 批量

一、后端为什么不能省

直觉上"画框在前端,那前端就够了"。这个直觉在一种情况下确实成立, 而"标注平台"的定义恰好排除了那种情况。

如果只是一个人标 100 帧,打开浏览器、载入本地文件、画框、导出下载, 纯前端工具确实存在,而且够用。所以问题不是技术上行不行,是规模假设是什么。

一句话分清
前端 = 一次会话中的交互
       谁在用、在哪台设备、这次打开要做什么
       易失的、多副本的、不可信的

后端 = 跨越所有会话、所有人、所有时间的【唯一真相】
       数据是什么、谁在标、标到哪了、标签从哪来
       持久的、单副本的、权威的

前端天然是多副本的。你开两个浏览器标签就是两份内存状态,互相不知道对方存在。 两个副本要一致,就必须有一个权威节点做仲裁。这是架构上的不可能,不是能力问题。

只有前端时,哪些需求会崩

需求只有前端为什么必须后端
刷新页面后标注还在❌需要持久化存储
20 个人标不同帧❌需要共享状态
防止两个人标同一帧❌需要中心化仲裁
进度看板❌需要全局聚合视图
审核流,标完再审再打回❌需要状态机
上传 20 TB 数据集❌浏览器存不下也拉不动
跑 AI 预标注❌需要 GPU 服务器
统一类别定义❌需要权威 schema
记录标签来源❌需要数据库
权限与审计❌需要身份系统和日志

第三行最容易被忽略,但它是硬需求。一百个标注员并发工作时, "这一帧有人正在标,别人不能碰"只能靠一个中心节点保证,前端之间无法互相协调。

后端具体在管什么

MySQL   元数据、标注对象、用户、任务、模型运行记录
MinIO   原始文件(点云、图片),对象存储
Redis   缓存
Flyway  启动时自动做数据库 schema 迁移

一个 PCD 可能有几十 MB,一个数据集可能几 TB。原始文件绝不能进浏览器, 必须由后端管理分发:签名 URL、按需分块、断点续传。

真正值钱的是业务数据模型:标注对象有哪些字段、什么约束; 角色与组织结构;任务与领取;以及最关键的来源追踪。

sourceId = -1        这条标注是人标的,也就是 Ground Truth
sourceId = 模型ID    这条标注是某个模型版本的预标注

每条标注都记录它从哪来。有了这个字段,人在环、模型评估、导出纯净训练集才都做得出来。 没有后端,这套来源追踪无处安放。

再往外是三类重计算,交给独立的 Python 微服务:PCD 解析与渲染预处理、 全数据集的相似度图、点云和图像的预标注(需要 GPU)。为什么要拆出去, 理由很直接:几十 MB 的 PCD 用 JS 解又慢又占内存,而降维和推理都要 GPU。

二、开源的真实边界

Xtreme1 是真开源,全栈。许可证 Apache-2.0,由 LF AI & Data Foundation 孵化, 是第一个进入该基金会的开源标注项目。主仓库包含 Java 后端和 TypeScript 前端。

前端不是一个应用,是四个子应用:主应用、点云工具、图像工具、文本工具。 其中点云工具是工业级的浏览器 3D 标注器,想学"3D 标注交互怎么做",读这个目录比读任何文档都有用。

坑一:许可证不统一

主项目号称 Apache-2.0,但组成它的微服务五花八门
许可证哪些仓库
Apache-2.0主仓库、SDK、文档站、资源库
MIT相似度图服务
GPL-3.0图像预标注服务,传染性许可证
无许可证PCD 渲染工具、点云预标注服务。法律上等于保留所有权利

自己内部部署基本没问题,因为 GPL 的义务主要在分发时触发,不是使用时。

但要打包进对外销售的产品,这两个无许可证的仓库加一个 GPL-3.0 是必须过法务的点。 更麻烦的是 PCD 渲染工具是默认启动的必需服务,绕不开。

坑二:活跃度集中在主仓库

活跃,2026 年 9 月还有推送
    主仓库 · SDK · 文档站 · PCD 工具 · 点云预标注

停滞,2024 年 8 月起没动
    图像预标注 · 相似度图服务

星标分布更能说明问题:组织总计约 1414,主仓库独占 1384。 98% 的关注度集中在主仓库,所有微服务加起来不到 20。

诚实的活跃度判断

一、它活着,不是弃坑项目,最近提交很密集,修的都是真问题。

二、但近期提交以修 bug 和工程清理为主,不是功能扩张期。 别指望它快速长出具身原生能力。

三、真正跑起来的人很少。关注者只有三十几个,发布包下载量四十几次, 大量星标只是收藏式关注。

四、最该知道的一点:它由商业公司主导,开源版是商业版的引流入口。 所以开源版的功能策略一定够用但不富。

三、部署形态

一个 10 KB 的压缩包说明了架构

项值
文件名xtreme1-v0.9.3.zip
大小10,210 字节

十 KB 装不下任何源码。这个包里只有 compose 文件和 deploy 目录, 所以官方的"下载解压然后 compose up"路径,全部软件都来自镜像仓库。

nginx / mysql / redis / minio     第三方官方镜像

backend      basicai/xtreme1-backend:v0.9.3     源码构建被注释掉
frontend     basicai/xtreme1-frontend:v0.9.3    同上
pcd-tools    以及另外三个微服务                   连 build 行都没有

关键差别:只有后端和前端留了源码构建的入口,四个 Python 微服务根本没有 build 路径。 也就是说,改点云解析或预标注没有官方路径,得自己克隆、编译、重新打标签, 并且接受无许可证的状态。

pull_policy always 的三个后果

每次启动都会去镜像仓库重新拉,于是:

一、离线起不来。 二、本地自己编译的同名镜像会被覆盖,想用自己编的必须把策略改成 missing。

三、tag 是可变的。同一个 tag 理论上能被上游重新推送成不同内容。 生产部署应该固定 digest,而不是 tag。

两个安全事实

一、必须用 v0.9.3 或更新,老版本有 SSRF 漏洞。 修复说明里写得很清楚:白名单为空时放行一切,设置时只做子串匹配, 于是任何登录用户都能让后端去请求云元数据服务、数据库、对象存储的管理端口。

二、密码硬编码,端口全部对外。 compose 文件里 MySQL 密码、用户密码、对象存储密码都是明文, 端口映射的写法默认绑定到 0.0.0.0。 自己机器上玩没关系,部署到服务器第一件事是改密码加防火墙,或者改成只绑本地回环。

四、推理该放客户端还是服务端

这是个真问题,答案是分两类:交互式推理放客户端,批量推理放服务端。 两类都放错的情况也常见,所以先澄清两个事实。

事实一:WebNN 现在还上不了生产

API2026 年状态
WebGPU✅ 2026 年 1 月达成基线,三大浏览器全线稳定
WebNN❌ 仅 Chrome 的实验性 Origin Trial,Safari 和 Firefox 完全没实现

业界对 WebNN 的判断是:2026 年还不能生产用,作为默认路径最乐观也是 2027 年。

但你要的能力用 WebGPU 今天就能拿到。2026 年的生产栈是 WebGPU 加 ONNX Runtime Web, 已经有生产案例:设计工具、三维渲染库、浏览器里跑大模型的项目都在跑。

事实二:桌面客户端加 WebNN 是个奇怪的组合

如果打包成桌面客户端
  = Chromium + Node.js,有完整原生模块能力
  → 可以直接打包 ONNX Runtime 的 CUDA 后端、LibTorch、TensorRT
  → 性能远超 WebGPU,而且能吃到全套 CUDA 生态
  → 这时候根本不需要 WebNN

如果只用浏览器,不装客户端
  → 没有原生模块
  → WebGPU 加 ONNX Runtime Web 是唯一路径,WebNN 得等 2027

关键区分:交互式与批量

交互式推理批量推理
触发方式标注员正在看这一帧,点一下提交"跑完这十万帧"的任务
数据在哪✅ 已经在客户端❌ 在服务端对象存储
延迟要求100 ms 以内,否则交互卡顿无所谓
一致性要求低,人马上会检查修正极高,直接进训练集
该放哪客户端服务端

交互式放客户端,完全正确

点一下自动抠出物体
  服务端:网络往返加排队加推理,三百到八百毫秒,手感崩了
  客户端:直接推理,三十到八十毫秒,顺手

而且数据本来就在客户端,人正在看这一帧,不用传任何东西

批量放客户端,五个理由都不成立

一、数据不在客户端。批量跑十万帧预标注,客户端要先把十万帧下载下来, 而标注员只会标其中几百帧。这等于为了跑模型把整个数据集推到所有人机器上。 分布式计算的铁律是算力向数据移动,反过来不划算。

二、一致性没有保证。二十台客户端,GPU 型号不同、驱动版本不同、 量化精度不同、浮点累加顺序不同,产出二十个略有差异的标签分布混进同一个训练集。 这是静默的数据质量问题。

三、来源追踪会被摧毁。来源标记的整个价值是"这批标签来自模型 X 的版本 Y"。 二十台客户端各跑各的,这句话就不成立了。

四、闲置算力这个假设不成立。标注员在工作时 GPU 正在渲染点云, 不是闲置,强行跑推理会卡界面降低产能;标注员不在线时机器已经关机。 "闲置"和"在线"这两个条件几乎不同时成立。

五、运维成本。服务端更新模型是更新一个容器,所有人立刻用上; 客户端要推送到 N 台机器,还要处理版本漂移、离线机器、回滚和排障。

五、这一页带走什么

后端的价值不是"存数据",是"唯一真相"和"中心化仲裁"。只要用户超过一个,它就省不掉。

开源的边界要看两处:许可证是不是统一、活跃度是不是集中在主仓库。 这两处都容易在评估时只看主页。

推理的判据只有一条:数据在哪,就算在哪。 交互式的数据已经在客户端,批量的数据在服务端,所以答案天然分开。

← 上一页:决定「标哪些」 ·  下一篇:传感器体系 →
京ICP备19013239号