据 MarkTechPost 10月7日报道,Meta 已开源 Rebalancer,这是一个带 Python 接口的 C++ 库,用于求解分配问题,即决定哪些对象进入哪些箱子(bins),并满足约束和目标。Meta 在 Engineering at Meta 的帖子中称,Rebalancer 已在公司内部承担资源分配任务超过 9 年。该库以 Apache 2.0 许可发布,附带文档、PyPI 包以及名为 Rebalancer Explorer 的调试界面。
发布信息显示,用户可通过 pip install rebalancer 安装 v1.0.4,适用于 Python 3.12 及以上版本,并提供面向 Linux x86-64 和 macOS 14+ ARM64 的预构建 wheels。项目还提供 .deb、.rpm 和 Homebrew 包。不过,PyPI 仍将其归类为 Alpha 阶段。
Rebalancer 面对的是 Meta 技术栈中常见的分配场景:机架进入数据中心,服务器分配给服务,任务放到服务器,用户流量导向数据中心。Meta 提到的两个障碍是可用性和可扩展性。工程师难以把策略转化成精确公式,而许多分配问题属于 NP-hard,规模又超出商业求解器能力。Rebalancer 的思路是把问题如何指定与如何求解分开。其设计细节写在 OSDI 2024 论文《Optimizing Resource Allocation in Hyperscale Datacenters》中。
在规格层面,Rebalancer 的规范语言包含建模构造、表达式 API 和 Spec API。建模构造包括维度、分区、作用域和利用率,其中维度可表示 CPU 或存储等属性,分区是对象组,作用域是箱子组。表达式 API 可用 SUM 或 MAX 聚合利用率,也可用 SQUARE 等操作进行变换。Spec API 则提供数十个预定义目标和约束。Meta 给出的例子是把任务建模为对象,把服务器建模为箱子,把机架建模为作用域;CapacitySpec 限制每台服务器的 CPU 和存储,GroupCountSpec 让每个机架保持一种作业类型,BalanceSpec 平衡每台服务器在两个维度上的利用率。
Rebalancer 会把规格编译成有向无环表达式图。叶节点保存利用率数值,聚合和变换节点位于其上。用户需要提供初始分配和停止条件,初始分配已经违反的约束会成为高优先级目标。最优求解器把图翻译成混合整数规划,交给 FICO Xpress、Gurobi 或 HiGHS 求解,并通过变量聚合和对称破缺缩小模型,但最坏情况下的模型规模仍是 O(objects × bins)。Meta 最大的问题对任何 MIP 求解器来说都太大。本地搜索则直接在表达式图上工作,探索把对象移到其他箱子的动作,最坏邻域为 O(objects + bins),然后应用不违反任何约束的最佳候选。其评估被并行化,可达到每秒数百万次评估,同时搜索空间会被剪枝。Meta 几乎在所有大型问题上使用本地搜索,对小到中型问题使用 MIP,并且经常先用 MIP 做原型。
生产数据方面,Meta 每天解决约 4000 万个分配问题,涉及 30 多种独特公式。对于 26.5 万个对象和 3200 个箱子的问题,P99 求解时间为 12 秒。对于超过 100 万个对象和 5000 个箱子的问题,平均求解时间为 171 秒,数据来自 3400 多次运行。
Meta 列出的典型用途包括把分片、任务或容器放到集群上,在 CPU 和内存上限下把工作分配给服务器,同时把副本分散到不同机架,Meta 的 Shard Manager 和 RAS 运行的就是这种模式。另一类是在区域之间平衡流量和工作负载,把用户流量或作业路由到数据中心,在延迟和负载之间取舍,Taiji 负责边缘流量,Meta 还按优先级平衡机器学习训练。还有一类是基础设施之外的运营分配,例如在容量规则下把支持工单分给工程师、把会议安排到房间或把桌位分给人。Meta 表示这三类都做过。
针对建模人员的调试需求,Rebalancer Explorer 是一个 Docker 化的 Web 界面。Meta 的建模人员此前把大部分时间花在调试求解器行为上。Explorer 可显示绑定约束、松弛效果,以及某个对象为何落入某个箱子。