ICI 与 DCN 表示
机群元数据横跨两个不同且互不重叠的坐标系统。ICI / 切片内系统为一个切片内的芯片命名;DCN / 跨切片系统为整个机群中的主机命名。它们不共享任何坐标,唯一的桥梁是每个切片的形状 blob。
并排对比
| 方面 | ICI / 切片内 | DCN / 跨切片 |
|---|---|---|
| 包 | superpod.routing.proto + tpu.* | xla.megascale.runtime.* |
| 拥有/配置方 | tpunetd | Megascale runtime coordinator |
| 芯片 / 节点名称 | ChipCoordinate {coordinates: int64[]} / asic_sw.proto.ChipLocation(物理) | (slice_id, host_id) 主机名;芯片通过每切片的 logical_device_id 表示 |
| 拓扑形状 | ToroidalTopology(3D/6D 环面、环绕、扭转、TwistedTorusShape、Faults) | SliceInfo + NetworkAddressMapping + DCNTopology 规约树的扁平列表 |
| 链路模型 | IciLink {src, dest, Direction};faulty_links | NetworkAddressMapping 端点(DCN NIC) |
| 坐标向量 | repeated int64(可变秩) | 标量 (slice_id, host_id) 整数 |
| 故障表示 | ToroidalTopology.Faults {faulty_vertices, faulty_links};TpuDegradedAxesProto | 清单中没有;故障只在 RapidEye FaultyNetworkLink 中浮现 |
| 传输 | ICI 链路(片上互连) | TCP 上的 gRPC(DCN) |
| 桥梁 | 切片的边界框形状 → TpuTopologyArgsProto | 嵌入为 SliceInfo.tpu_topology_args |
ICI 层(切片内)
在一个切片内,芯片形成环面网络。形状 proto:
protobuf
message ToroidalTopology {
int64 x_dimension = 1; int64 y_dimension = 2; int64 z_dimension = 3;
int64 a_dimension = 9; int64 b_dimension = 10; int64 c_dimension = 11; // 6D superpod
bool x_wrapping = 4; bool y_wrapping = 5; bool z_wrapping = 6;
bool a_wrapping = 12; bool b_wrapping = 13; bool c_wrapping = 14;
TwistedTorusShape twisted_torus_shape = 7;
Faults faults = 8;
message IciLink { ChipCoordinate src = 1; ChipCoordinate dest = 2; Direction direction = 3; }
message Faults { repeated ChipCoordinate faulty_vertices = 1; repeated IciLink faulty_links = 2; }
}
enum TwistedTorusShape {
TWIST_SHAPE_UNSPECIFIED=0; TWIST_SHAPE_K_K_2K=1;
TWIST_SHAPE_K_2K_2K=2; TWIST_SHAPE_K_2K_NK=3;
}
```text
芯片是一个 `ChipCoordinate {repeated int64 coordinates}`,也就是一个可变秩向量,并通过以下结构与物理 `asic_sw.proto.ChipLocation` 配对:
```protobuf
message ChipLocationToCoordinate { asic_sw.proto.ChipLocation location = 1; ChipCoordinate coordinate = 2; }
message ChipCoordinateMapping { repeated ChipLocationToCoordinate chip_mapping = 1; }tpunetd 在切片内启动期间通过 SetGlobalChipId、GetChipCoordinates 和 SetChipCoordinates 建立这些坐标。关于切片内互连交接,参见 tpunetd 关系。
DCN 层(跨切片)
跨切片层丢弃了所有这些结构。切片只是一个索引加一个形状;主机只是 (slice_id, host_id) 加一个 NIC 列表。清单由两个扁平列表组成:
repeated SliceInfo slice_info— 切片及其形状,repeated NetworkAddressMapping address_mappings— 主机端点。
另有一个单独的规约计划:
protobuf
message DCNTopology { // oneof "representation"
oneof representation {
SymmetricTree symmetric_tree = 1; // {repeated int32 branching_per_layer}
TreeNode tree = 2; // explicit tree of slice ranges
}
}
```text
`DCNTopology` 是切片如何一起规约(树或环)的*计划*,而不是有哪些切片存在的*清单*。它会与 `MultiSliceTopologyAndLocation` 一起传入 `MegaScaleMultiSliceConfig::Create`、`Communicator::Create` 和 `HostCommandSchedulerFactory`。
## 桥梁:每切片形状
从 ICI 跨到 DCN 的唯一数据项是切片的边界形状,它编码为 [`TpuTopologyArgsProto`](slice-shape.md),并嵌入每个 `SliceInfo.tpu_topology_args`。DCN 层读取 `product(host_bounds)` 来获得每切片主机数量,并验证各主机上的形状是否相等,但它从不把该形状重新解释回芯片坐标。ICI 坐标空间完全留在切片内部。
## 为什么拆分
- **关注点分离。** tpunetd 拥有 ICI 层的芯片路由和故障处理;Megascale coordinator 拥有主机会合和 DCN 可达性。二者都不需要对方的坐标空间。
- **规模。** 跨切片元数据是 O(slices + hosts),而不是 O(chips)。即使一个 pod 每个切片有数千个芯片,DCN 清单仍然很小。
- **故障局部性。** ICI 故障(`faulty_vertices` / `faulty_links`)留在切片内;只有主机粒度的 DCN 故障(`FaultyNetworkLink {src_worker, dst_worker}`)会浮现到跨主机的[错误聚合器](barrier-error-usage.md)。
## 交叉引用
- [拓扑模型](topology-model.md) — 本页与 DCN 对比的切片内 ICI 坐标空间
- [切片形状](slice-shape.md) — 跨越 ICI↔DCN 边界的不透明每切片 blob
- [Barrier / 错误用法](barrier-error-usage.md) — 主机粒度 DCN 故障浮现的位置
- [错误聚合器](../error-aggregator.md) — 这些 DCN 故障输入的机群级分类器
- [ICI › 概览](../../ici/overview.md) — 切片内光环面层
- [Bootstrap › ICI 交接](../bootstrap/ici-handoff.md) — ICI-up → DCN-rendezvous 交接