Fleet 拓扑模型
fleet 是一个五级层次结构:fleet → slice → host → chip → core。每一层 由不同的 proto 或 class 拥有,并且只有最上面的四层会跨越 host 边界。
层次结构
| 层级 | 所属 proto / class | 键 |
|---|---|---|
| fleet (multi-slice) | MultiSliceTopologyAndLocation (class) / MultiSliceTopologyAndLocationProto | incarnation_id |
| slice | SliceInfo {slice_id, tpu_topology_args} | slice_id |
| host | NetworkAddressMapping {slice_id, host_id, addresses[]} | (slice_id, host_id) |
| host NIC / endpoint | HostNetworkAddress {address, interface_name, numa_node, host_name_for_debugging} | — |
| slice 内芯片 (ICI) | ChipCoordinate {coordinates: int64[]} / asic_sw.proto.ChipLocation | 坐标 |
| core (fleet handle) | 包装 TpuCoreLocationProto{core_type, logical_device_id} 的 MultiSliceTpuCoreLocation (class) | (slice_id, logical_device_id, core_type) |
| core (flat id) | global_core_id / global_chip_id | 计算得出 |
DCN 层(前四行)是会跨越 host 边界的部分。ICI 层(芯片行)完全位于一个 slice 内部,并且只以该 slice 的 TpuTopologyArgsProto 形状汇总给 DCN 层。
Fleet 层
fleet 是整个 multi-slice 作业。在内存中,它是 MultiSliceTopologyAndLocation class;在线缆上,它是 MultiSliceTopologyAndLocationProto:
protobuf
message MultiSliceTopologyAndLocationProto {
int32 local_slice_id = 1; // THIS process's slice
int32 local_host_id = 2; // THIS process's host (in slice)
repeated SliceInfo slice_info = 3; // every slice in the fleet
int64 incarnation_id = 4; // fleet generation token
}
```text
`local_slice_id` / `local_host_id` 字段使该 proto 具备自定位能力:接收方
无需带外上下文,就能在 `slice_info` 列表中找到自己的条目。
## Slice 层
一个 slice 是一个连续的 ICI 域,即一个环面芯片网络。在 fleet metadata 中,
它只是一个索引加一个形状:
```protobuf
message SliceInfo {
int32 slice_id = 1;
// field 2 retired (gap)
tpu.TpuTopologyArgsProto tpu_topology_args = 3; // slice 3D shape
}一个 slice 中的每个 host 都必须报告等价的 tpu_topology_args;如果一个 slice 中的 host 不一致,coordinator 会拒绝该 slice(它会运行 proto2::util::MessageDifferencer::Compare)。DCN 层需要的按 slice host 数量是 product(tpu_topology_args.host_bounds)。
Host 层
host 命名为 (slice_id, host_id),并可通过一个或多个 DCN NIC 访问:
protobuf
message NetworkAddressMapping {
int32 slice_id = 1;
int32 host_id = 2;
repeated HostNetworkAddress addresses = 3; // one per DCN interface
}
```text
`(slice_id, host_id)` 对是 fleet 的**通用键**:它为[端点表](field-decode.md)、
[barrier](barrier-error-usage.md) 到达集合、error-aggregator worker 键,
以及 Communicator 的端点映射
`flat_hash_map<tuple<int,int>, NetworkAddressMapping>` 提供键。
## Chip 和 core 层
在 host 之下,DCN metadata 不再携带结构:芯片只通过按 slice 的
*logical device id* 命名,而完整的芯片坐标位于 ICI 层(`ChipCoordinate`,
即 `ToroidalTopology` 内部的可变秩 int64 向量)。fleet 范围的 *core*
handle 是 C++ class `MultiSliceTpuCoreLocation`,它将
`TpuCoreLocationProto{core_type, logical_device_id}` 与其所属 slice 绑定。
完整的转换链参见 [全局寻址](global-addressing.md),slice 内坐标模型参见
[ICI vs DCN](ici-vs-dcn.md)。
## 跨 slice 归约计划
不同于 inventory,`DCNTopology` 描述 slice 如何排列成用于跨 slice
collective 的归约树或 ring。它**不是** host inventory 的一部分;它会被计算
/配置,并与 `MultiSliceTopologyAndLocation` 一起传入 Communicator。该消息
参见 [字段解码](field-decode.md#dcntopology),其位置参见
[ICI vs DCN](ici-vs-dcn.md)。
## 交叉引用
- [Slice 形状](slice-shape.md) — 填充 inventory 的按 slice 边界框
- [全局寻址](global-addressing.md) — 基于此模型构建的 `(slice, host, core)` ↔ global-id 映射
- [字段解码](field-decode.md) — `DCNTopology` 和 inventory proto 的线缆解码
- [ICI vs DCN](ici-vs-dcn.md) — slice 内 ICI 与跨 slice DCN 之间的层级划分
- [Collectives › 概览](../../collectives/overview.md) — `DCNTopology` 归约计划服务的跨 slice collective