TorchEasyRec中INPUT_TILE 环境变量的三个模式

简介: `NPUT_TILE` 是 tzrec 推荐系统在模型导出与在线推理阶段的优化策略,针对“1 用户 → N 商品”场景,避免用户特征重复计算。支持三种模式:`INPUT_TILE=1`(无优化)、`=2`(Embedding前tile)、`=3`(Embedding后tile,计算最优但需拆分Embedding表、依赖FG模式及torchrec,不支持macOS)。

NPUT_TILE 是 tzrec 在模型导出和在线推理(Predict)阶段的优化策略,核心场景是:推荐系统中,1 个 user 对应 N 个 item(如召回后排序),可以避免 user 侧特征的重复计算。

INPUT_TILE=1(无 tile / 默认模式)

  • 含义:标准模式,不做任何 user/item 拆分优化
  • 行为:每条 (user, item) 对独立计算,user 特征会被重复处理 N 次
  • 数据格式:所有特征 batchsize = B(正常 batch)
  • 用于:训练阶段、不需要 tile 优化的预测场景

INPUT_TILE=2(DataParser 层 tile)

  • 含义:在 DataParser(数据解析层) 对 user 侧稀疏特征做 tile 扩展
  • 行为
  • user 侧稀疏特征:batch_size=1,在 data_parser.py_to_sparse_features_user1tile_itemb 中 tile 到 B
  • user 侧稠密特征:batch_size=1,在 embedding.py_tile_and_combine_dense_kt 中 tile
  • item 侧特征:batch_size=B,正常处理
  • tile 位置:Embedding 查找之前,先把 user 数据复制 N 份,再一起做 Embedding
  • 优点:实现简单,兼容性好
  • 缺点:user 的 Embedding 查找仍然重复 N 次

INPUT_TILE=3(Embedding 层 tile)

  • 含义:在 Embedding 查找之后 才做 tile 扩展,进一步减少计算
  • 行为
  • user 侧稀疏特征:batch_size=1,单独用 ebc_user(独立的 EmbeddingBagCollection)做 Embedding 查找,查找结果再 .tile(tile_size, 1) 扩展到 B
  • user 侧稠密特征:batch_size=1,同样在 Embedding 后 tile
  • item 侧特征:batch_size=B,正常处理
  • tile 位置:Embedding 查找之后
  • 优点:user 的 Embedding 只查找 1 次,然后复制 N 份——计算量最优
  • 缺点:需要将模型中的 ebc 拆分为 ebc + ebc_user 两个 Embedding 表,导出时需要做参数名映射(见 write_mapping_file_for_input_tile)

总结对比

维度 INPUT_TILE=1 INPUT_TILE=2 INPUT_TILE=3
tile 时机 不 tile Embedding 前 Embedding 后
user Embedding 查找次数 N 次 N 次 1 次
user 稀疏特征 batch_size B 1 → tile 到 B 1 → emb 后 tile
模型结构 单 ebc 单 ebc ebc + ebc_user
典型场景 训练 / 简单推理 在线推理优化 在线推理最优
结果一致性 基准 与 =1 一致 与 =1 一致


三种模式的最终预测结果是完全一致的(集成测试中有严格验证),区别仅在于推理效率的优化程度。


INPUT_TILE=3 的限制条件

1. 必须明确区分 user/item 特征

这是最核心的前提。每个特征必须能被识别为 user 侧或 item 侧:

  • FG 模式(FG_DAG / FG_NORMAL):通过 pyfg.FgArrowHandler.user_features() 自动识别,特征的 expression 字段需要以 user:item: 声明(如 expression="user:int_d"
  • 非 FG 模式:通过 feature.side_inputs 中的 side 判断,所有 side_inputs 均为 "user" 的特征才会被标记为 is_user_feat=True
  • 如果特征的 user/item 归属不明确,tile 逻辑会出错

2. 仅用于导出(Export)和推理(Predict),不用于训练

INPUT_TILE 是一个环境变量,在 exportpredict 阶段设置:


QUANT_EMB=1 INPUT_TILE=3 python -m tzrec.export ...

训练阶段不需要也不应该设置 INPUT_TILE。

3. 模型结构限制:会拆分 Embedding 表

INPUT_TILE=3 在导出时会将 Embedding 层拆分为两组独立模块:

  • ebcebc (item 侧) + ebc_user (user 侧)
  • mc_ebcmc_ebc + mc_ebc_user
  • ec_listec_list + ec_list_user

需要通过 write_mapping_file_for_input_tile 做参数名映射,将训练时的权重正确加载到拆分后的模型中。

4. 推理数据格式要求

  • user 侧特征的 batch_size 必须为 1(即同一个 batch 内所有样本共享同一个 user)
  • item 侧特征的 batch_size 为 N(N 个候选 item)
  • 数据需要通过 create_predict_data 这样的工具预处理,确保 user 特征只取第一条然后 repeat

5. 需要 FG 模式(FG_DAG 或 FG_NORMAL)

从 data_parser.py 可以看到,is_input_tile() 时需要初始化 FgArrowHandler 来获取 user_inputsuser_feats。因此必须使用 FG 模式(FG_DAG 或 FG_NORMAL),FG_ENCODED 的纯预处理数据模式不支持。

6. INPUT_TILE_3ONLINE 子模式的额外限制

如果同时设置 INPUT_TILE_3_ONLINE=1

  • 序列特征直接使用 jt.values() 而非 jt.to_padded_dense(seq_len) — 参见 embedding.py L1341-1345
  • 不支持离线 predict(仅支持在线推理) — 见 is_input_tile_3_online 注释

7. 依赖 torchrec(macOS 不可用)

整个 INPUT_TILE 机制依赖 KeyedJaggedTensorEmbeddingBagCollection 等 torchrec 组件,因此在 macOS 上无法使用。

总结

限制 说明
user/item 特征必须明确标注 expression 需声明 user: / item:
仅 Export + Predict 阶段 训练不设置 INPUT_TILE
需要 FG 模式 必须是 FG_DAG 或 FG_NORMAL
user batch_size=1 同 batch 所有样本共享一个 user
模型结构拆分 ebc 拆为 ebc + ebc_user
依赖 torchrec macOS 不可用
3ONLINE 不支持离线 predict 仅在线推理
相关文章
|
13天前
|
分布式计算 MaxCompute iOS开发
TorchEasyRec 在 macOS 上的功能限制总结
本文总结tzrec在macOS上的功能限制:核心依赖(如torchrec、fbgemm-gpu、graphlearn等)无法安装;分布式训练、原生数据管线、Embedding模块、Triton/CUDA算子、TDM树模型等功能完全不可用;优化器与模型导出部分失效;单元测试大多因强依赖而失败。
108 15
|
20天前
|
SQL 关系型数据库 MySQL
5个提升MySQL查询效率的实用技巧
5个提升MySQL查询效率的实用技巧
|
20天前
|
安全 PHP
PHP 技巧:5 个让代码更优雅的实用方法
PHP 技巧:5 个让代码更优雅的实用方法
282 140
|
11天前
|
机器学习/深度学习 存储 大数据
阿里云2026优惠券全攻略:学生300元无门槛+企业出海补贴+迁云算力补贴详解
2026年,阿里云推出多层次优惠券体系,涵盖学生、企业迁移及出海三大场景。学生可领300元无门槛券,降低技术学习成本,适用于搭建网站、开发测试等。企业迁移享5亿算力补贴,通过消费凭证申请,降低迁移门槛,助力数字化转型。出海企业获最高10万元抵扣金及全球基础设施、合规支持等生态赋能。用户应根据身份与需求,优先完成认证并规划使用策略,以最大化利用优惠券价值,实现成本优化与业务增长。
|
8天前
|
运维 Kubernetes 调度
基于 HiClaw 的运维场景多智能体协同实践
有了个人养虾的背书,企业养虾开始进入决策期,评估通过企业采购行为设计虾场的应用场景和短中长期的目标,甚至有企业已经将此作为业务创新的牵引力。
251 11
|
13天前
|
应用服务中间件
手慢无!阿里云轻量服务器2026最新秒杀价:2核4G配置199元/年,200M带宽不限流
阿里云2026轻量服务器秒杀开启!轻量应用服务器官方页面:https://t.aliyun.com/U/PEdlFP 新用户专享:2核2G低至38元/年(9.9元/月限时抢),2核4G仅199元/年,4核8G/16G分别1159元、1599元/年。全系配200M峰值带宽+不限流量,性价比远超友商。手慢无!
|
12天前
|
人工智能 API 网络安全
2026年阿里云轻量服务器部署 OpenClaw 图文教程|iMessage集成+千问Qwen3.6-Plus配置+常见问题解答
2026年,开源AI智能体框架OpenClaw(曾用名Clawdbot,社区昵称“龙虾AI”)凭借轻量化、强执行、多平台适配的特性,成为搭建专属AI助手的首选方案。它突破传统AI“仅能对话”的局限,实现“自然语言指令→任务规划→自动执行→结果反馈”的完整闭环,覆盖办公自动化、消息处理、跨平台协作等多元场景。
144 11
|
1月前
|
Arthas 人工智能 Java
我们做了比你更懂 Java 的 AI-Agent -- Arthas Agent
Arthas Agent 是基于阿里开源Java诊断工具Arthas的AI智能助手,支持自然语言提问,自动匹配排障技能、生成安全可控命令、循证推进并输出结构化报告,大幅降低线上问题定位门槛。
1027 64
我们做了比你更懂 Java 的 AI-Agent -- Arthas Agent
|
11天前
|
SQL 运维 监控
【生产避坑】Flink CDC + SQL Server 无增量?5分钟定位,直接抄解决方案
【生产避坑】Flink CDC同步SQL Server时增量失效?80%问题源于SQL Server Agent未启动!本文5分钟定位根因:先查CDC开关→再验CT表数据→最终确认Agent状态。附完整排查流程、3种启动方案及监控建议,直击要害,照抄即用,快速恢复实时同步!
114 6
|
11天前
|
运维 Kubernetes 应用服务中间件
CI/CD流水线镜像拉取耗时从47分钟降到2分钟,我做了这几件事
换镜像加速源,CI/CD构建从47分钟骤降至2分钟!非代码/硬件优化,仅切换为毫秒镜像(1ms.run)——全源加速(Docker Hub、GHCR、k8s.gcr等),30台服务器10分钟批量配置,失败率归零,凌晨发布成功率100%。
100 17
下一篇
开通oss服务