mc_ebc 是 Managed Collision Embedding Bag Collection 的缩写。
- ebc = EmbeddingBagCollection:torchrec 的标准嵌入表集合
- mc = ManagedCollision(管理冲突):torchrec 的一种特殊 Embedding 机制,用于自动处理哈希冲突
ManagedCollision 的作用
普通 EmbeddingBagCollection 使用固定大小的 hash bucket(num_buckets),不同 ID 哈希到同一个 bucket 时会发生冲突,共享同一个 embedding 向量。
ManagedCollisionEmbeddingBagCollection 在此基础上增加了一层冲突管理策略(ManagedCollisionCollection),能够:
- 动态追踪哪些 ID 实际出现过
- 智能分配 embedding 槽位,减少高频 ID 的哈希冲突
- 支持 ZCH(Zero Collision Hashing)等策略
在代码中的使用
从 embedding.py 可以看到模型中同时存在两类 Embedding:
ebc → 普通 EmbeddingBagCollection(固定哈希) mc_ebc → ManagedCollisionEmbeddingBagCollection(冲突管理)
在 INPUT_TILE=3 模式下还会进一步拆分出 user 侧:mc_ebc_user。
dist_util.py 中 mcebc_input_dist 函数的目的
_mc_ebc_input_dist 是一个 monkey-patch 修复函数(见注释 fix missing create_mean_pooling_callback of mc-ebc input_dist),用于修复 torchrec 在分布式场景下 mc_ebc 的 input_dist(输入分发)阶段缺少 mean_pooling_callback 初始化的问题。