已合并
[DOC] 资料优化:安装部署资料优化,新增功能特性章节 #2322
penghuiyang创建于 3月19日
[DOC] 资料优化:安装部署资料优化,新增功能特性章节 #2322
已合并
共 10 个文件变更+748-322
| @@ -1,5 +1,6 @@ | |||
| 1 | .idea/ | 1 | .idea/ |
| 2 | -cmake-build-debug/ | 2 | +cmake-build-*/ |
| 3 | .vscode/ | 3 | .vscode/ |
| 4 | .DS_Store | 4 | .DS_Store |
| 5 | -build/ | 5 | +build/ |
| 6 | +__pycache__/ | ||
| @@ -1,68 +1,25 @@ | |||
| 1 | # Rec SDK | 1 | # Rec SDK |
| 2 | 2 | ||
| 3 | <div align="center"> | 3 | <div align="center"> |
| 4 | - | 4 | + |
| 5 | [](https://zread.ai/Ascend/RecSDK) | 5 | [](https://zread.ai/Ascend/RecSDK) |
| 6 | [](https://deepwiki.com/Ascend/RecSDK) | 6 | [](https://deepwiki.com/Ascend/RecSDK) |
| 7 | - | 7 | + |
| 8 | </div> | 8 | </div> |
| 9 | 9 | ||
| 10 | ## 最新消息 | 10 | ## 最新消息 |
| 11 | 11 | ||
| 12 | * [20260224] 资料结构整改,更新Roadmap(2026Q1) | 12 | * [20260224] 资料结构整改,更新Roadmap(2026Q1) |
| 13 | 13 | ||
| 14 | -### Roadmap(2026Q1) | 14 | +### Roadmap |
| 15 | - | ||
| 16 | -#### HierarchicalKV | ||
| 17 | - | ||
| 18 | -1. 支持保存加载。 | ||
| 19 | -2. 支持基础属性查询设置功能。 | ||
| 20 | -3. 支持KV查询功能。 | ||
| 21 | -4. 支持KV插值功能。 | ||
| 22 | -5. 支持建表功能。 | ||
| 23 | -6. 功能适配封装。 | ||
| 24 | - | ||
| 25 | -#### TensorFlow(v1) | ||
| 26 | - | ||
| 27 | -1. 例行镜像、配套表更新。 | ||
| 28 | - | ||
| 29 | -#### TensorFlow(v2) | ||
| 30 | - | ||
| 31 | -1. 例行镜像、配套表更新。 | ||
| 32 | - | ||
| 33 | -#### TorchRec(v1) | ||
| 34 | - | ||
| 35 | -1. 支持在算力切分设备上推理。 | ||
| 36 | -2. 查表反向算子重构。 | ||
| 37 | -3. HSTU: | ||
| 38 | - 1. 算子重构。 | ||
| 39 | - 2. 反向性能优化。 | ||
| 40 | - 3. 支持int32。 | ||
| 41 | -4. 保存和加载功能增强: | ||
| 42 | - 1. 支持n卡保存,m卡加载。 | ||
| 43 | - 2. 支持增量保存、加载。 | ||
| 44 | -5. norm_mul融合算子。 | ||
| 45 | -6. ln_linear_silu融合算子。 | ||
| 46 | -7. concat_2d_jagged算子。 | ||
| 47 | - | ||
| 48 | -#### TorchRec(v2) | ||
| 49 | - | ||
| 50 | -1. Row-wise稀疏表: | ||
| 51 | - 1. 支持建表。 | ||
| 52 | - 2. 支持查表。 | ||
| 53 | - 3. 支持特征淘汰。 | ||
| 54 | - 4. 支持更新。 | ||
| 55 | - 5. 反向更新融合优化器。 | ||
| 56 | - 6. 支持全量保存和加载 | ||
| 57 | - 7. 支持梯度规约。 | ||
| 58 | -2. 适配TorchRec EmbeddingShardingPlanner。 | ||
| 59 | -3. 适配TorchRec EmbeddingCollectionSharder。 | ||
| 60 | 15 | ||
| 16 | +[Roadmap(2026Q1)](https://gitcode.com/Ascend/RecSDK/issues/1075) | ||
| 61 | 17 | ||
| 62 | ## 简介 | 18 | ## 简介 |
| 63 | 19 | ||
| 64 | -Rec SDK作为面向互联网市场搜索推荐广告的应用使能SDK产品,对于搜索推荐广告模型训练的应用场景需求,提供基于昇腾平台的搜索推荐广告框架,支撑大规模搜推广场景,助力完成搜推广模型的高效训练。Rec | 20 | +Rec SDK作为面向互联网市场搜索推荐广告的应用使能SDK产品,对于搜索推荐广告模型训练的应用场景需求,提供基于昇腾平台的搜索推荐广告框架,支撑大规模搜推广场景,助力完成搜推广模型的高效训练。 |
| 65 | -SDK的功能涉及: | 21 | + |
| 22 | +Rec SDK的功能涉及: | ||
| 66 | 23 | ||
| 67 | 1. 模型训练基础功能。支持单机单卡训练、多机多卡分布式训练。 | 24 | 1. 模型训练基础功能。支持单机单卡训练、多机多卡分布式训练。 |
| 68 | 2. 推荐场景特有功能。基于Rec SDK的稀疏表方案,Rec SDK提供必备功能,如特征保存和加载、特征准入、特征淘汰等。 | 25 | 2. 推荐场景特有功能。基于Rec SDK的稀疏表方案,Rec SDK提供必备功能,如特征保存和加载、特征准入、特征淘汰等。 |
| @@ -70,31 +27,44 @@ SDK的功能涉及: | |||
| 70 | 27 | ||
| 71 | ## 目录结构 | 28 | ## 目录结构 |
| 72 | 29 | ||
| 73 | -``` | 30 | +```text |
| 74 | -mxrec/ # 项目根目录 | 31 | +RecSDK/ # 项目根目录 |
| 75 | -|-- build/ # 构建脚本、生成的wheel包等 | 32 | + |-- build/ # 构建脚本、生成的wheel包等 |
| 76 | -| | 33 | + | |
| 77 | -|-- cust_op/ | 34 | + |-- cust_op/ |
| 78 | -| |-- ascendc_op # Ascend C编写,编译后在AI Core执行的算子和其编译脚本 | 35 | + | |-- ascendc_op # Ascend C编写,编译后在AI Core执行的算子和其编译脚本 |
| 79 | -| |-- framework # 算子适配层 | 36 | + | |-- framework # 算子适配层 |
| 80 | -| |-- hkv # hkv子模块代码,项目代码来自https://gitcode.com/Ascend/HierarchicalKV-ascend.git | 37 | + | |-- hkv # hkv子模块代码,项目代码来自https://gitcode.com/Ascend/HierarchicalKV-ascend.git |
| 81 | -| |-- test # 算子测试用例 | 38 | + | |-- test # 算子测试用例 |
| 82 | -| |-- tf_cpu_op # CPU算子 | 39 | + | |-- tf_cpu_op # CPU算子 |
| 83 | -| | 40 | + | |
| 84 | -|-- docs/ # 项目镜像构建脚本、公网和邮箱地址及通信矩阵文档 | 41 | + |-- docs/ # 项目资料文档、镜像构建脚本、公网和邮箱地址及通信矩阵文档 |
| 85 | -| | 42 | + | |
| 86 | -|-- training | 43 | + |-- training |
| 87 | - |-- common # 公共组件 | 44 | + |-- common # 公共组件 |
| 88 | - |-- tf_rec_v1 # 基于TensorFlow,适配NPU设备的非全下沉稀疏推荐框架 | 45 | + |-- tf_rec_v1 # 基于TensorFlow,适配NPU设备的非全下沉稀疏推荐框架 |
| 89 | - |-- tf_rec_v2 # 基于TensorFlow,适配NPU设备的全下沉稀疏推荐框架(POC状态) | 46 | + |-- tf_rec_v2 # 基于TensorFlow,适配NPU设备的全下沉稀疏推荐框架(POC状态) |
| 90 | - |-- torch_rec_v1 # 基于PyTorch、torchrec开源软件,适配NPU设备的非全下沉稀疏推荐框架 | 47 | + |-- torch_rec_v1 # 基于PyTorch、TorchRec开源软件,适配NPU设备的非全下沉稀疏推荐框架 |
| 91 | - |-- hybrid_torchrec # 适配NPU纯显存模式(Device Memory)的推荐训练框架 | 48 | + |-- torch_rec_v2 # 基于PyTorch、TorchRec开源软件,适配NPU设备的全下沉稀疏推荐框架(POC状态) |
| 92 | - |-- torchrec_embcache # 适配NPU多级缓存模式(Device Memory + Host DDR)的推荐训练框架 | ||
| 93 | - |-- torchrec_npu # 基于torchrec开源组件的NPU适配pacth | ||
| 94 | - |-- torch_rec_v2 # 基于PyTorch、torchrec开源软件,适配NPU设备的全下沉稀疏推荐框架(POC状态) | ||
| 95 | ``` | 49 | ``` |
| 96 | 50 | ||
| 51 | +### 各组件说明 | ||
| 52 | + | ||
| 53 | +| 组件名称 | 基础框架 | 适配状态 | 框架类型 | 功能描述 | | ||
| 54 | +|---------|---------|---------|---------|---------| | ||
| 55 | +| tf_rec_v1 | TensorFlow | 非全下沉 | 稀疏推荐框架 | 基于TensorFlow,适配NPU设备的非全下沉稀疏推荐框架 | | ||
| 56 | +| tf_rec_v2 | TensorFlow | 全下沉 | 稀疏推荐框架 | 基于TensorFlow,适配NPU设备的全下沉稀疏推荐框架(POC状态) | | ||
| 57 | +| torch_rec_v1 | PyTorch + TorchRec | 非全下沉 | 稀疏推荐框架 | 基于PyTorch、TorchRec开源软件,适配NPU设备的非全下沉稀疏推荐框架 | | ||
| 58 | +| torch_rec_v2 | PyTorch + TorchRec | 全下沉 | 稀疏推荐框架 | 基于PyTorch、TorchRec开源软件,适配NPU设备的全下沉稀疏推荐框架(POC状态) | | ||
| 59 | + | ||
| 60 | +### 关键术语说明 | ||
| 61 | + | ||
| 62 | +- **非全下沉**:指部分计算任务在NPU上执行,部分在CPU上执行的混合模式 | ||
| 63 | +- **全下沉**:指所有计算任务都下沉到NPU上执行,以获得更好的性能 | ||
| 64 | +- **POC状态**:Proof of Concept(概念验证)状态,表示该组件仍处于试验验证阶段,功能可能不完整或不稳定 | ||
| 65 | + | ||
| 97 | ## 版本说明 | 66 | ## 版本说明 |
| 67 | + | ||
| 98 | 通常,RecSDK一年会有4个正式release版本。 | 68 | 通常,RecSDK一年会有4个正式release版本。 |
| 99 | 69 | ||
| 100 | 具体版本更新内容,参见: | 70 | 具体版本更新内容,参见: |
| @@ -104,6 +74,7 @@ mxrec/ # 项目根目录 | |||
| 104 | ## 环境部署 | 74 | ## 环境部署 |
| 105 | 75 | ||
| 106 | 支持的产品型号如下: | 76 | 支持的产品型号如下: |
| 77 | + | ||
| 107 | * Atlas 200T A2 Box16 | 78 | * Atlas 200T A2 Box16 |
| 108 | * Atlas 800T A2 训练服务器 | 79 | * Atlas 800T A2 训练服务器 |
| 109 | * Atlas 900 A3 SuperPoD 超节点 | 80 | * Atlas 900 A3 SuperPoD 超节点 |
| @@ -124,7 +95,6 @@ mxrec/ # 项目根目录 | |||
| 124 | * [torch_rec_v1](./docs/zh/torch/torch_rec_v1/recsdk_torch_installation_guide.md#源码编译安装) | 95 | * [torch_rec_v1](./docs/zh/torch/torch_rec_v1/recsdk_torch_installation_guide.md#源码编译安装) |
| 125 | * [torch_rec_v2](./docs/zh/torch/torch_rec_v2/recsdk_torch_installation_guide.md#源码编译安装) | 96 | * [torch_rec_v2](./docs/zh/torch/torch_rec_v2/recsdk_torch_installation_guide.md#源码编译安装) |
| 126 | 97 | ||
| 127 | - | ||
| 128 | ## 快速入门 | 98 | ## 快速入门 |
| 129 | 99 | ||
| 130 | 参见具体组件: | 100 | 参见具体组件: |
| @@ -152,6 +122,25 @@ mxrec/ # 项目根目录 | |||
| 152 | * [torch_rec_v1](./docs/zh/torch/torch_rec_v1/api) | 122 | * [torch_rec_v1](./docs/zh/torch/torch_rec_v1/api) |
| 153 | * [torch_rec_v2](./docs/zh/torch/torch_rec_v2/api) | 123 | * [torch_rec_v2](./docs/zh/torch/torch_rec_v2/api) |
| 154 | 124 | ||
| 125 | +## 模式适配样例 | ||
| 126 | + | ||
| 127 | +| 模型名称 | 适配框架 | 组件名称 | 说明 | | ||
| 128 | +|---------|---------|---------|------| | ||
| 129 | +| DIN | PyTorch | torch_rec_v1 | [代码链接](https://gitcode.com/Ascend/RecSDK/tree/develop_torch_benchmark/torch2.6.0_examples_benchmark/develop/din) | | ||
| 130 | +| DLRM(DCNv2) | PyTorch | torch_rec_v1 | [代码链接](https://gitcode.com/Ascend/RecSDK/tree/develop_torch_benchmark/torch2.6.0_examples_benchmark/develop/dlrm) | | ||
| 131 | +| GR | PyTorch | torch_rec_v1 | Facebook GR模型,[代码链接](https://gitcode.com/Ascend/RecSDK/tree/develop_torch_benchmark/torch2.6.0_examples_benchmark/develop/gr/gr_meta) | | ||
| 132 | +| GR | PyTorch | torch_rec_v1 | NVIDIA recsys-GR模型,[代码链接](https://gitcode.com/Ascend/RecSDK/tree/develop_torch_benchmark/torch2.6.0_examples_benchmark/develop/gr_nv) | | ||
| 133 | +| mmoe、eta | PyTorch | torch_rec_v1 | [代码链接](https://gitcode.com/Ascend/RecSDK/blob/develop_torch_benchmark/torch2.6.0_examples_benchmark/develop/model_zoo/README.md) | | ||
| 134 | +| GR | PyTorch | torch_rec_v2 | NVIDIA recsys-GR模型,[代码链接](https://gitcode.com/Ascend/RecSDK/tree/develop_examples_and_tools/torch_rec_v2_examples/gr) | | ||
| 135 | + | ||
| 136 | +## 分支维护策略 | ||
| 137 | + | ||
| 138 | +| 分支名 | 描述 | 维护状态 | | ||
| 139 | +|---------|---------|---------| | ||
| 140 | +| develop | 主开发分支 | 长期维护 | | ||
| 141 | +| develop_examples_and_tools | demo,模型样例,模型相关工具 | 活跃维护 | | ||
| 142 | +| develop_torch_benchmark | benchmark模型适配 | 活跃维护 | | ||
| 143 | + | ||
| 155 | ## FAQ | 144 | ## FAQ |
| 156 | 145 | ||
| 157 | 参见具体组件: | 146 | 参见具体组件: |
| @@ -165,7 +154,7 @@ mxrec/ # 项目根目录 | |||
| 165 | 贡献代码前,请先签署[开放项目贡献者许可协议(CLA)](https://clasign.osinfra.cn/sign/gitee_ascend-1611222220829317930)。 | 154 | 贡献代码前,请先签署[开放项目贡献者许可协议(CLA)](https://clasign.osinfra.cn/sign/gitee_ascend-1611222220829317930)。 |
| 166 | 155 | ||
| 167 | 1. 如果您遇到bug,请[提交issue](https://gitcode.com/Ascend/RecSDK/issues)。 | 156 | 1. 如果您遇到bug,请[提交issue](https://gitcode.com/Ascend/RecSDK/issues)。 |
| 168 | -2. 如果您计划贡献bug-fixes,请提交Pull Requests,参见[具体要求](./contributing.md#PullRequest)。 | 157 | +2. 如果您计划贡献bug-fixes,请提交Pull Requests,参见[具体要求](./contributing.md#pullrequest)。 |
| 169 | 3. 如果您计划贡献新特性、功能,请先创建issue与我们讨论。写明需求背景/目的,如何设计,对现有API等的影响。未经讨论提交PR可能会导致请求被拒绝,因为项目演进方向可能与您的想法存在偏差。 | 158 | 3. 如果您计划贡献新特性、功能,请先创建issue与我们讨论。写明需求背景/目的,如何设计,对现有API等的影响。未经讨论提交PR可能会导致请求被拒绝,因为项目演进方向可能与您的想法存在偏差。 |
| 170 | 159 | ||
| 171 | ## 联系我们 | 160 | ## 联系我们 |
| @@ -197,6 +186,7 @@ Rec SDK docs目录下的文档适用CC-BY 4.0许可证,具体请参见[LICENSE | |||
| 197 | ## 致谢 | 186 | ## 致谢 |
| 198 | 187 | ||
| 199 | Rec SDK由华为公司的下列部门联合贡献: | 188 | Rec SDK由华为公司的下列部门联合贡献: |
| 189 | + | ||
| 200 | * 昇腾计算应用使能开发部 | 190 | * 昇腾计算应用使能开发部 |
| 201 | * 计算软件平台部 | 191 | * 计算软件平台部 |
| 202 | * 灵衢算力集群开发部 | 192 | * 灵衢算力集群开发部 |
| @@ -204,4 +194,3 @@ Rec SDK由华为公司的下列部门联合贡献: | |||
| 204 | * 泊松实验室 | 194 | * 泊松实验室 |
| 205 | 195 | ||
| 206 | 感谢来自社区的每一个PR,欢迎贡献Rec SDK! | 196 | 感谢来自社区的每一个PR,欢迎贡献Rec SDK! |
| 207 | - | ||
| @@ -1,9 +1,11 @@ | |||
| 1 | -- [接口说明](api_description.md) | 1 | +# API列表 |
| 2 | -- [创表接口](table_creation_apis.md) | 2 | + |
| 3 | -- [数据接口](data_apis.md) | 3 | +- [接口说明](api_description.md) |
| 4 | -- [优化器接口](optimizers_apis.md) | 4 | +- [创表接口](table_creation_apis.md) |
| 5 | -- [分表接口](subtable_apis.md) | 5 | +- [数据接口](data_apis.md) |
| 6 | -- [pipeline接口](pipeline_apis.md) | 6 | +- [优化器接口](optimizers_apis.md) |
| 7 | -- [多级缓存管理接口](multilevel_cache_management_apis.md) | 7 | +- [分表接口](subtable_apis.md) |
| 8 | -- [准入淘汰管理接口](access_and_elimination_management_apis.md) | 8 | +- [pipeline接口](pipeline_apis.md) |
| 9 | -- [自定义算子](specialized_operator.md) | 9 | +- [多级缓存管理接口](multilevel_cache_management_apis.md) |
| 10 | +- [准入淘汰管理接口](access_and_elimination_management_apis.md) | ||
| 11 | +- [自定义算子](specialized_operator.md) | ||
| @@ -20,10 +20,9 @@ | |||
| 20 | |get_default_sharders|get_default_hybrid_sharders|获取分表器| | 20 | |get_default_sharders|get_default_hybrid_sharders|获取分表器| |
| 21 | |TrainPipelineSparseDist|HybridTrainPipelineSparseDist|查询稀疏表| | 21 | |TrainPipelineSparseDist|HybridTrainPipelineSparseDist|查询稀疏表| |
| 22 | 22 | ||
| 23 | - | ||
| 24 | 接口示例: | 23 | 接口示例: |
| 25 | 24 | ||
| 26 | -- TorchRec示例: | 25 | +- TorchRec示例: |
| 27 | 26 | ||
| 28 | ```python | 27 | ```python |
| 29 | import torch.distributed as dist | 28 | import torch.distributed as dist |
| @@ -64,7 +63,7 @@ | |||
| 64 | output = pipeline.progress(batched_iterator) | 63 | output = pipeline.progress(batched_iterator) |
| 65 | ``` | 64 | ``` |
| 66 | 65 | ||
| 67 | -- Rec SDK Torch示例: | 66 | +- Rec SDK Torch示例: |
| 68 | 67 | ||
| 69 | ```python | 68 | ```python |
| 70 | import torch.distributed as dist | 69 | import torch.distributed as dist |
| @@ -109,11 +108,290 @@ | |||
| 109 | output = pipeline.progress(batched_iterator) | 108 | output = pipeline.progress(batched_iterator) |
| 110 | ``` | 109 | ``` |
| 111 | 110 | ||
| 112 | - | ||
| 113 | ## Rec SDK Torch迁移样例<a name="ZH-CN_TOPIC_0000002336268713"></a> | 111 | ## Rec SDK Torch迁移样例<a name="ZH-CN_TOPIC_0000002336268713"></a> |
| 114 | 112 | ||
| 115 | Rec SDK Torch支持Torch开源推荐模型迁移适配,迁移样例可以参考如下: | 113 | Rec SDK Torch支持Torch开源推荐模型迁移适配,迁移样例可以参考如下: |
| 116 | 114 | ||
| 117 | [Rec SDK Torch DCNv2迁移样例](https://gitcode.com/Ascend/RecSDK/blob/develop_torch_benchmark/torch2.6.0_examples_benchmark/develop/dlrm/README.md)。 | 115 | [Rec SDK Torch DCNv2迁移样例](https://gitcode.com/Ascend/RecSDK/blob/develop_torch_benchmark/torch2.6.0_examples_benchmark/develop/dlrm/README.md)。 |
| 118 | 116 | ||
| 117 | +## 功能特性介绍 | ||
| 119 | 118 | ||
| 119 | +Rec SDK Torch 支持纯显存模式和多级缓存模式两种训练模式。 | ||
| 120 | + | ||
| 121 | +纯显存模式指在训练时,所有稀疏表Embedding数据都存储在Device内存中。 | ||
| 122 | + | ||
| 123 | +多级缓存模式指在训练时,会以Device Memory + DDR(Host Memory)结合的方式存储Embedding。 | ||
| 124 | + | ||
| 125 | +本章节将介绍纯显存模式和多级缓存模式的相关功能特性和代码使用示例。 | ||
| 126 | + | ||
| 127 | +> [!NOTE]说明 | ||
| 128 | +> | ||
| 129 | +> 本文档中的**约束**章节内容仅介绍主要使用场景下的约束信息,详细信息请参见对应的API文档。 | ||
| 130 | + | ||
| 131 | +### 基于纯显存模式训练 | ||
| 132 | + | ||
| 133 | +**纯显存模式对比原生TorchRec框架的API差异** | ||
| 134 | + | ||
| 135 | +Rec SDK Torch纯显存模式在配置稀疏表、创建稀疏表、稀疏表分表、创建pipeline时使用的API接口对比原生TorchRec框架有差异。 | ||
| 136 | + | ||
| 137 | +|场景/API|原生TorchRec框架|Rec SDK Torch纯显存模式| | ||
| 138 | +|--|--|--| | ||
| 139 | +|配置稀疏表|EmbeddingBagConfig|HashEmbeddingBagConfig| | ||
| 140 | +|创建稀疏表|EmbeddingBagCollection|HashEmbeddingBagCollection| | ||
| 141 | +|稀疏表分表器|get_default_sharders()|get_default_hybrid_sharders()| | ||
| 142 | +|创建pipeline|TrainPipelineSparseDist|HybridTrainPipelineSparseDist| | ||
| 143 | + | ||
| 144 | +**约束** | ||
| 145 | + | ||
| 146 | +- 仅支持EBC模式。 | ||
| 147 | +- 支持pipeline模式和非pipeline模式(直接调用分片后的稀疏表前向)进行训练。 | ||
| 148 | +- 不支持保存/加载稀疏表数据。 | ||
| 149 | + | ||
| 150 | +**纯显存模式测试用例** | ||
| 151 | + | ||
| 152 | +纯显存模式的完整测试用例请参见[README](../../../../training/torch_rec_v1/hybrid_torchrec/test/st/README.md)。 | ||
| 153 | + | ||
| 154 | +#### 基础使用<a id="basic_usage_device_memory"></a> | ||
| 155 | + | ||
| 156 | +训练流程上和原生TorchRec框架pipeline模式相同,仅在创建稀疏表、稀疏表分表、创建pipeline时使用的API有差异。 | ||
| 157 | + | ||
| 158 | +**代码示例** | ||
| 159 | + | ||
| 160 | +```python | ||
| 161 | +import logging | ||
| 162 | +import os | ||
| 163 | + | ||
| 164 | +import torch | ||
| 165 | +import torch.distributed as dist | ||
| 166 | +from torch.utils.data import DataLoader | ||
| 167 | +import torchrec | ||
| 168 | +from torchrec.optim.keyed import CombinedOptimizer, KeyedOptimizerWrapper | ||
| 169 | +from torchrec.optim.optimizers import in_backward_optimizer_filter | ||
| 170 | +from torchrec.distributed import DistributedModelParallel | ||
| 171 | +from torchrec.distributed.types import ShardingEnv | ||
| 172 | +from torchrec.optim.apply_optimizer_in_backward import apply_optimizer_in_backward | ||
| 173 | +from torchrec.distributed.planner import ( | ||
| 174 | + EmbeddingShardingPlanner, | ||
| 175 | + Topology, | ||
| 176 | + ParameterConstraints, | ||
| 177 | +) | ||
| 178 | +from torchrec.distributed.embeddingbag import EmbeddingBagCollectionAwaitable | ||
| 179 | +from hybrid_torchrec import HashEmbeddingBagConfig, HashEmbeddingBagCollection | ||
| 180 | +from hybrid_torchrec.distributed.hybrid_train_pipeline import HybridTrainPipelineSparseDist | ||
| 181 | +from hybrid_torchrec.distributed.sharding_plan import get_default_hybrid_sharders | ||
| 182 | + | ||
| 183 | +from dataset import RandomRecDataset, Batch | ||
| 184 | + | ||
| 185 | +logging.getLogger().setLevel(logging.INFO) | ||
| 186 | + | ||
| 187 | +BATCH_NUM: int = 20 | ||
| 188 | +DENSE_OUTPUT_DIM: int = 2 | ||
| 189 | + | ||
| 190 | + | ||
| 191 | +class DenseModel(torch.nn.Module): | ||
| 192 | + def __init__(self, input_dim, output_dim): | ||
| 193 | + super().__init__() | ||
| 194 | + # 定义dense layer | ||
| 195 | + self.linear = torch.nn.Linear(input_dim, output_dim) | ||
| 196 | + | ||
| 197 | + def forward(self, x): | ||
| 198 | + # 定义dense层实现 | ||
| 199 | + return self.linear(x) | ||
| 200 | + | ||
| 201 | + | ||
| 202 | +class TestModel(torch.nn.Module): | ||
| 203 | + | ||
| 204 | + def __init__(self, sparse_model: torch.nn.Module, dense_model: torch.nn.Module, feat_names: list[str]): | ||
| 205 | + super().__init__() | ||
| 206 | + self.sparse_model: torch.nn.Module = sparse_model | ||
| 207 | + self.dense_model: torch.nn.Module = dense_model | ||
| 208 | + self.feat_names: list[str] = feat_names | ||
| 209 | + self.loss_fn: torch.nn.Module = torch.nn.CrossEntropyLoss() | ||
| 210 | + | ||
| 211 | + def forward(self, batch: Batch): | ||
| 212 | + # sparse前向 | ||
| 213 | + sparse_output: EmbeddingBagCollectionAwaitable = self.sparse_model(batch.sparse_features) | ||
| 214 | + feat_embeddings: list[torch.Tensor] = list() | ||
| 215 | + for feat_name in self.feat_names: | ||
| 216 | + feat_embeddings.append(sparse_output[feat_name]) # type: ignore | ||
| 217 | + # 合并所有稀疏特征的embedding | ||
| 218 | + embeddings: torch.Tensor = torch.concat(feat_embeddings, dim=-1) | ||
| 219 | + | ||
| 220 | + # dense前向 | ||
| 221 | + dense_output: torch.Tensor = self.dense_model(embeddings) | ||
| 222 | + | ||
| 223 | + # 计算loss | ||
| 224 | + loss: torch.Tensor = self.loss_fn(dense_output, batch.labels) | ||
| 225 | + | ||
| 226 | + # 自行定义output输出内容 | ||
| 227 | + output: dict[str, torch.Tensor] = dict() | ||
| 228 | + output["sparse"] = embeddings | ||
| 229 | + output["dense"] = dense_output | ||
| 230 | + | ||
| 231 | + # 返回前向输出 | ||
| 232 | + # 注意:forward必须返回loss和output两个值,且loss在前,output在后;该用法为TorchRec原生TrainPipelineSparseDist用法 | ||
| 233 | + return loss, output | ||
| 234 | + | ||
| 235 | + | ||
| 236 | +def weight_init(param: torch.nn.Parameter): | ||
| 237 | + if len(param.shape) != 2: | ||
| 238 | + return | ||
| 239 | + torch.manual_seed(param.shape[1]) | ||
| 240 | + result = torch.linspace(0, 1, steps=param.shape[1]).repeat(param.shape[0], 1) | ||
| 241 | + param.data.copy_(result) | ||
| 242 | + | ||
| 243 | + | ||
| 244 | +def set_distribute_env(): | ||
| 245 | + rank = int(os.environ.get("LOCAL_RANK", 0)) | ||
| 246 | + torch.npu.set_device(rank) # type: ignore | ||
| 247 | + os.environ["MASTER_ADDR"] = "127.0.0.1" | ||
| 248 | + os.environ["MASTER_PORT"] = "6000" | ||
| 249 | + os.environ["GLOO_SOCKET_IFNAME"] = "lo" | ||
| 250 | + dist.init_process_group(backend="hccl") | ||
| 251 | + | ||
| 252 | + | ||
| 253 | +def train(): | ||
| 254 | + # 0.设置分布式环境 | ||
| 255 | + set_distribute_env() | ||
| 256 | + rank = dist.get_rank() | ||
| 257 | + world_size = dist.get_world_size() | ||
| 258 | + npu_device = torch.device("npu") | ||
| 259 | + | ||
| 260 | + embedding_dims: list[int] = [64, 16, 32] | ||
| 261 | + num_embeddings: list[int] = [400, 4000, 400] | ||
| 262 | + table_num: int = len(num_embeddings) | ||
| 263 | + | ||
| 264 | + # 1.创建数据集 | ||
| 265 | + | ||
| 266 | + batch_size: int = 128 | ||
| 267 | + dataset = RandomRecDataset(BATCH_NUM, batch_size, num_embeddings, table_num) | ||
| 268 | + data_loader = DataLoader( | ||
| 269 | + dataset, | ||
| 270 | + batch_size=None, | ||
| 271 | + batch_sampler=None, | ||
| 272 | + pin_memory=True, | ||
| 273 | + pin_memory_device="npu", | ||
| 274 | + num_workers=1, | ||
| 275 | + ) | ||
| 276 | + | ||
| 277 | + # 2.创建稀疏表 | ||
| 278 | + embedding_configs: list[HashEmbeddingBagConfig] = [] | ||
| 279 | + table_names: list[str] = [f"table{i}" for i in range(len(num_embeddings))] | ||
| 280 | + feat_names: list[str] = [f"feat{i}" for i in range(table_num)] | ||
| 281 | + for i in range(table_num): | ||
| 282 | + emb_config = HashEmbeddingBagConfig( | ||
| 283 | + name=table_names[i], | ||
| 284 | + embedding_dim=embedding_dims[i], | ||
| 285 | + num_embeddings=num_embeddings[i], | ||
| 286 | + feature_names=[feat_names[i]], | ||
| 287 | + pooling=torchrec.PoolingType.MEAN, | ||
| 288 | + init_fn=weight_init, # type: ignore | ||
| 289 | + ) | ||
| 290 | + embedding_configs.append(emb_config) | ||
| 291 | + sparse_ebc: HashEmbeddingBagCollection = HashEmbeddingBagCollection(device="meta", tables=embedding_configs) | ||
| 292 | + | ||
| 293 | + # 3.创建模型:将稀疏表和Dense部分包装到一个模型中 | ||
| 294 | + dense_model: torch.nn.Module = DenseModel(sum(embedding_dims), DENSE_OUTPUT_DIM) | ||
| 295 | + test_model: torch.nn.Module = TestModel(sparse_ebc, dense_model, feat_names) | ||
| 296 | + | ||
| 297 | + # 4.定义稀疏表优化器 | ||
| 298 | + embedding_optimizer_class: type[torch.optim.Optimizer] = torch.optim.Adagrad | ||
| 299 | + optimizer_kwargs = {"lr": 0.01, "eps": 0.1} | ||
| 300 | + apply_optimizer_in_backward( | ||
| 301 | + embedding_optimizer_class, | ||
| 302 | + test_model.sparse_model.parameters(), | ||
| 303 | + optimizer_kwargs=optimizer_kwargs, | ||
| 304 | + ) | ||
| 305 | + | ||
| 306 | + # 5.稀疏表分表 | ||
| 307 | + host_gp = dist.new_group(backend="gloo") | ||
| 308 | + host_env = ShardingEnv(world_size=world_size, rank=rank, pg=host_gp) | ||
| 309 | + sharders = get_default_hybrid_sharders(host_env=host_env) | ||
| 310 | + constraints = { | ||
| 311 | + # 分表方式为row_wise,compute_kernels使用fused | ||
| 312 | + table_name: ParameterConstraints(sharding_types=["row_wise"], compute_kernels=["fused"]) | ||
| 313 | + for table_name in table_names | ||
| 314 | + } | ||
| 315 | + planner = EmbeddingShardingPlanner( | ||
| 316 | + topology=Topology(world_size=world_size, compute_device="npu"), | ||
| 317 | + constraints=constraints, | ||
| 318 | + ) | ||
| 319 | + plan = planner.collective_plan(test_model, sharders, dist.GroupMember.WORLD) | ||
| 320 | + # 此处分表会根据sharders参数匹配对应class类型:EmbeddingBagCollection/HashEmbeddingBagCollection, | ||
| 321 | + # 只会对稀疏表参数进行分表,不会对dense参数分表 | ||
| 322 | + ddp_model = DistributedModelParallel(test_model, device=npu_device, plan=plan, sharders=sharders) | ||
| 323 | + | ||
| 324 | + # 6.整合优化器 | ||
| 325 | + dense_optimizer = KeyedOptimizerWrapper( | ||
| 326 | + dict(in_backward_optimizer_filter(ddp_model.named_parameters())), | ||
| 327 | + lambda params: torch.optim.Adagrad(params, lr=0.1), | ||
| 328 | + ) | ||
| 329 | + optimizer = CombinedOptimizer([ddp_model.fused_optimizer, dense_optimizer]) | ||
| 330 | + | ||
| 331 | + # 7.创建pipeline | ||
| 332 | + pipeline = HybridTrainPipelineSparseDist( | ||
| 333 | + ddp_model, optimizer, npu_device, return_loss=True, execute_all_batches=True | ||
| 334 | + ) | ||
| 335 | + | ||
| 336 | + # 8.使用pipeline进行训练 | ||
| 337 | + dataset_iterator = iter(data_loader) | ||
| 338 | + for step in range(BATCH_NUM): | ||
| 339 | + # 前面创建pipeline时,设置了return_loss=True,所以pipeline.progress()会返回output和loss两个值 | ||
| 340 | + # 若创建pipeline时设置return_loss=False,则仅返回output | ||
| 341 | + output, loss = pipeline.progress(dataset_iterator) | ||
| 342 | + logging.info("rank: %d, step: %s, loss: %s, sparse output: %s", rank, step, loss, output["sparse"]) | ||
| 343 | + | ||
| 344 | + | ||
| 345 | +if __name__ == "__main__": | ||
| 346 | + train() | ||
| 347 | + # 脚本使用方式: | ||
| 348 | + # 1.将脚本写入到main.py文件中,并拷贝RecSDK/training/torch_rec_v1/hybrid_torchrec/test/st/dataset.py到py文件同一目录 | ||
| 349 | + # 2.启动单卡: WORLD_SIZE=1 RANK=0 python3 main.py | ||
| 350 | + # 3.启动多卡(2卡): torchrun --rdzv-backend=c10d --rdzv-endpoint=localhost:6000 --nnodes=1 --nproc-per-node=2 main.py | ||
| 351 | +``` | ||
| 352 | + | ||
| 353 | +更多demo样例请参见[Rec SDK Torch Little Demo样例](https://gitcode.com/Ascend/RecSDK/tree/develop_examples_and_tools/torch_examples/little_demo)。 | ||
| 354 | + | ||
| 355 | +#### 稀疏表数据并行(DP) | ||
| 356 | + | ||
| 357 | +**约束** | ||
| 358 | + | ||
| 359 | +- DP模式仅支持单个稀疏表。 | ||
| 360 | + | ||
| 361 | +**对比非DP模式** | ||
| 362 | + | ||
| 363 | +DP模式对比[非DP模式(基础使用)](#basic_usage_device_memory),主要区别在于训练时稀疏表参数存储方式不同。 | ||
| 364 | + | ||
| 365 | +DP模式下,稀疏表将不再切分到不同的Device,而是每个Device都持有完整的稀疏表参数。在反向传播时会聚合所有Device的梯度再统一更新。 | ||
| 366 | + | ||
| 367 | +**代码示例** | ||
| 368 | + | ||
| 369 | +DP模式完整代码示例请参见[DP模式测试用例](../../../../training/torch_rec_v1/hybrid_torchrec/test/st/test_hybrid_hash_embeddingbag_dp.py)。 | ||
| 370 | + | ||
| 371 | +简化代码示例(仅展示和基础使用模式差异部分): | ||
| 372 | + | ||
| 373 | +```python | ||
| 374 | + # 差异点:DP模式仅支持单表,不支持多表模式。 | ||
| 375 | + embedding_dims = [64] | ||
| 376 | + num_embeddings = [400] | ||
| 377 | + | ||
| 378 | + ... | ||
| 379 | + | ||
| 380 | + # 5.稀疏表分表 | ||
| 381 | + host_gp = dist.new_group(backend="gloo") | ||
| 382 | + host_env = ShardingEnv(world_size=world_size, rank=rank, pg=host_gp) | ||
| 383 | + sharders = get_default_hybrid_sharders(host_env=host_env) | ||
| 384 | + constraints = { | ||
| 385 | + # 差异点:分表方式为data_parallel,compute_kernels使用dense | ||
| 386 | + table_name: ParameterConstraints(sharding_types=["data_parallel"], compute_kernels=["dense"]) | ||
| 387 | + for table_name in table_names | ||
| 388 | + } | ||
| 389 | + planner = EmbeddingShardingPlanner( | ||
| 390 | + topology=Topology(world_size=world_size, compute_device="npu"), | ||
| 391 | + constraints=constraints, | ||
| 392 | + ) | ||
| 393 | + plan = planner.collective_plan(test_model, sharders, dist.GroupMember.WORLD) | ||
| 394 | + dmp_model = DistributedModelParallel(test_model, device=npu_device, plan=plan, sharders=sharders) | ||
| 395 | + | ||
| 396 | + ... | ||
| 397 | +``` | ||
| @@ -2,263 +2,321 @@ | |||
| 2 | 2 | ||
| 3 | ## 安装说明<a name="ZH-CN_TOPIC_0000002302229632"></a> | 3 | ## 安装说明<a name="ZH-CN_TOPIC_0000002302229632"></a> |
| 4 | 4 | ||
| 5 | -推荐Rec SDK Torch基于容器部署开发环境。如果需要查看Rec SDK Torch的历史安装记录,请参见[查看Rec SDK Torch安装与卸载记录](../../torch/torch_rec_v1/common_operations.md)。 | 5 | +### 配套版本<a name="section146113514599"></a> |
| 6 | 6 | ||
| 7 | -## 安装依赖<a id="ZH-CN_TOPIC_0000002302389236"></a> | 7 | +当前Rec SDK Torch支持两种配套版本,后续安装时请安装对应配套版本的软件包。 |
| 8 | 8 | ||
| 9 | -安装Rec SDK Torch软件包前需准备以下环境依赖及操作,请参见[表1](#table18461141184116)准备安装环境。 | 9 | +| 配套版本 | Python | PyTorch | torch_npu | fbgemm_gpu | Rec SDK Torch | |
| 10 | +| -------- | ------- | ------- | --------- | ---------- | ------------- | | ||
| 11 | +| 方案一 | 3.11+ | 2.6.0 | 2.6.0 | 1.1.0+cpu | 1.1.0 | | ||
| 12 | +| 方案二 | 3.11+ | 2.7.1 | 2.7.1 | 1.2.0+cpu | 1.2.0 | | ||
| 10 | 13 | ||
| 11 | -**表 1** Rec SDK Torch环境依赖 | 14 | +> [!NOTE]说明 |
| 12 | -<a id="table18461141184116"></a> | 15 | +> |
| 16 | +> - PyTorch:深度学习训练框架,相关资料请参见[PyTorch文档](https://docs.pytorch.org/docs/stable/index.html)。 | ||
| 17 | +> - torch_npu:PyTorch框架适配NPU设备的扩展插件,相关资料请参见[torch_npu](https://gitcode.com/Ascend/pytorch)。 | ||
| 18 | +> - fbgemm_gpu:TorchRec框架依赖的加速库,相关资料请参见[fbgemm_gpu](https://github.com/pytorch/FBGEMM)。 | ||
| 13 | 19 | ||
| 14 | -| 依赖名称/操作 | 推荐版本 | 说明/获取方式 | | 20 | +### 依赖软件说明 |
| 21 | + | ||
| 22 | +本章节为提前声明依赖软件列表和安装方式,请参见后续[安装Rec SDK Torch](#section182972951211)章节并按需安装。 | ||
| 23 | + | ||
| 24 | +**依赖关系介绍** | ||
| 25 | + | ||
| 26 | +各层级软件依赖关系如下表,安装依赖软件时请按照从下到上的顺序进行安装。 | ||
| 27 | + | ||
| 28 | +| 层级 | 组件名称 | 依赖项 | 说明 | | ||
| 29 | +|------|----------|--------|------| | ||
| 30 | +| **应用层** | Rec SDK Torch | hybrid_torchrec、torchrec_embcache | Rec SDK Torch组件 | | ||
| 31 | +| **自定义算子层** | 自定义算子相关包 | Ascend-recsdk-npu-ops-*、libfbgemm_npu_api.so | 自定义算子实现 | | ||
| 32 | +| **适配层** | Torchrec框架适配NPU | torchrec_npu | TorchRec的适配NPU版本 | | ||
| 33 | +| **依赖层** | Torchrec依赖 | fbgemm_gpu | TorchRec依赖的底层加速库 | | ||
| 34 | +| **框架层** | 训练框架 | PyTorch、torch_npu | 深度学习训练框架 | | ||
| 35 | +| **使能层** | NPU使能 | CANN | 提供NPU底层支持 | | ||
| 36 | +| **宿主机层** | 宿主机依赖 | NPU固件、驱动、Device配置 | 硬件层面的基础依赖 | | ||
| 37 | + | ||
| 38 | +#### 宿主机依赖 | ||
| 39 | + | ||
| 40 | +Rec SDK Torch基于NPU环境运行,如下为宿主机依赖软件说明。若宿主机未安装相关软件,请根据说明安装。 | ||
| 41 | + | ||
| 42 | +| 依赖名称/操作 | 推荐版本 | 获取方式/安装说明 | | ||
| 15 | |-----------------------|-------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | 43 | |-----------------------|-------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| |
| 16 | -| 昇腾硬件产品驱动和固件 | Ascend HDK 25.5.0 | 宿主机依赖,请在宿主机环境安装。<br>单击[获取链接](https://www.hiascend.com/developer/download/commercial/result?module=cann),在左侧配套资源的“编辑资源选择”中进行配置,筛选配套的软件包,确认版本信息后获取所需软件包。<br>安装驱动与固件请参见相关硬件产品配套的《[驱动和固件安装升级指南](https://support.huawei.com/enterprise/zh/ascend-computing/ascend-hdk-pid-252764743)》。 | | 44 | +| 昇腾硬件产品驱动和固件 | Ascend HDK 25.5.0 | 单击[获取链接](https://www.hiascend.com/developer/download/commercial/result?module=cann),在左侧配套资源的“编辑资源选择”中进行配置,筛选配套的软件包,确认版本信息后获取所需软件包。<br>安装驱动与固件请参见相关硬件产品配套的《[驱动和固件安装升级指南](https://support.huawei.com/enterprise/zh/ascend-computing/ascend-hdk-pid-252764743)》。 | |
| 17 | -| Ascend Docker Runtime | MindCluster 7.3.0 | 宿主机依赖,请在宿主机环境安装。若宿主机未安装Docker,请参见[Docker社区或官网](https://docs.docker.com/engine/install/)先安装Docker。<br>请参见《MindCluster 集群调度用户指南》的“安装 > [安装部署](https://www.hiascend.com/document/detail/zh/mindcluster/730/clustersched/dlug/dlug_installation_009.html)”章节进行Ascend Docker Runtime软件包安装。 | | 45 | +| Ascend Docker Runtime | MindCluster 7.3.0 | 若宿主机未安装Docker,请参见[Docker社区或官网](https://docs.docker.com/engine/install/)先安装Docker。<br>请参见《MindCluster 集群调度用户指南》的“安装 > [安装部署](https://www.hiascend.com/document/detail/zh/mindcluster/730/clustersched/dlug/dlug_installation_009.html)”章节下载和安装`Ascend Docker Runtime`软件包。 | |
| 18 | -| 配置Device网卡 | - | 宿主机依赖,请在宿主机环境操作。<br>请参考《Ascend Training Solution 23.0.0 组网指南 01》的“参数面网络配置示例->配置示例->[配置训练节点](https://support.huawei.com/enterprise/zh/doc/EDOC1100349028/f48f446c)”章节,通过HCCN_Tool配置NPU网口的Device IP。 | | 46 | +| 配置Device网卡 | - | 宿主机依赖,请在宿主机环境操作。<br>请参见《Ascend Training Solution 23.0.0 组网指南 01》的“参数面网络配置示例->配置示例->[配置训练节点](https://support.huawei.com/enterprise/zh/doc/EDOC1100349028/f48f446c)”章节,通过HCCN_Tool配置NPU网口的Device IP相关信息。 | |
| 19 | -| CANN软件包 | CANN 8.5.0 | 容器内依赖,请在[启动容器](#section12808621121114)后安装。<br>单击[获取链接](https://www.hiascend.com/developer/download/commercial/result?module=cann),在左侧配套资源的“编辑资源选择”中进行配置,筛选配套的软件包,确认版本信息后获取所需软件包。<br>根据设备架构获取`Ascend-cann-toolkit_{version}_linux-{arch}.run`和`Ascend-cann-{chip_type}-ops-{version}_linux-{arch}.run`,并参考《CANN 软件安装指南》的“[安装CANN](https://www.hiascend.com/document/detail/zh/canncommercial/850/softwareinst/instg/instg_0008.html?Mode=PmIns&InstallType=local&OS=Debian&Software=cannToolKit)”章节在容器内进行安装。 | | ||
| 20 | -| PyTorch昇腾适配插件 | 2.6.0/2.7.1 | 容器内依赖,请在[启动容器](#section12808621121114)后安装。<br>根据[配套版本](#section146113514599),可通过下述方式安装对应版本插件。<li>单击[获取链接](https://gitcode.com/Ascend/pytorch/releases/v7.1.0.2-pytorch2.6.0),根据设备架构获取torch_npu-2.6.0*-cp311-\*.whl软件包并在容器内安装。</li><li>单击[获取链接](https://gitcode.com/Ascend/pytorch/releases/v7.2.0-pytorch2.7.1),根据设备架构获取torch_npu-2.7.1*-cp311-*.whl软件包并在容器内安装。</li> | | ||
| 21 | 47 | ||
| 22 | ->[!NOTE] 说明 | 48 | +#### 容器内训练框架依赖 |
| 23 | -> 对于用户集成的开源和第三方软件,漏洞和问题请自行跟踪社区并及时进行修复;可以并且不限于通过[CVE(通用漏洞字典)官网](https://www.cve.org/)确认对应开源软件版本的已知漏洞,并通过版本升级、使用patch补丁包更新等方式修复。 | ||
| 24 | 49 | ||
| 50 | +| 依赖名称/操作 | 推荐版本 | 获取方式/安装说明 | | ||
| 51 | +| ------------------- | ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | ||
| 52 | +| CANN软件包 | CANN 8.5.0 | 容器内依赖,若容器内未安装,请在容器内安装。<br>单击[获取链接](https://www.hiascend.com/developer/download/commercial/result?module=cann),在左侧配套资源的“编辑资源选择”中进行配置,筛选配套的软件包,确认版本信息后获取所需软件包。<br>根据设备架构获取`Ascend-cann-toolkit_{version}_linux-{arch}.run`和`Ascend-cann-{chip_type}-ops-{version}_linux-{arch}.run`。<br>请参见《CANN 软件安装指南》的“[安装CANN](https://www.hiascend.com/document/detail/zh/canncommercial/850/softwareinst/instg/instg_0008.html?Mode=PmIns&InstallType=local&OS=Debian&Software=cannToolKit)”章节在容器内进行安装。<br>如需卸载,请参考上述安装CANN资料中的“卸载-卸载CANN”章节。 | | ||
| 53 | +| PyTorch和torch_npu | 2.6.0/2.7.1 | 容器内依赖,若容器内未安装,请在容器内安装。<br>根据[配套版本](#section146113514599),请参见[安装PyTorch和PyTorch昇腾适配插件](https://gitcode.com/Ascend/pytorch/blob/v2.7.1/docs/zh/installation_guide/installation_via_binary_package.md)章节分别安装PyTorch框架和torch_npu插件安装。<br>请根据PyTorch版本、Python版本、设备架构选择对应的安装指令,Python版本建议使用Python 3.11。<br>如需卸载,可通过`pip3 uninstall -y torch_npu torch`指令进行卸载。| | ||
| 25 | 54 | ||
| 26 | -## 获取Rec SDK Torch软件包<a name="ZH-CN_TOPIC_0000002336148981"></a> | 55 | +#### 容器内训练加速库依赖<a name="section146113514600"></a> |
| 27 | 56 | ||
| 28 | -### 源码编译安装 | 57 | +原生TorchRec框架依赖fbgemm_gpu库。基于NPU环境运行时,需安装fbgemm_gpu库的CPU版本。 |
| 29 | 58 | ||
| 30 | -源码编译前,请参考[CANN 软件安装指南](https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/900beta1/softwareinst/instg/instg_0000.html?Mode=PmIns&InstallType=local&OS=Ubuntu)安装CANN开发套件软件包;参考[Ascend Extension for PyTorch安装指南](https://www.hiascend.com/document/detail/zh/Pytorch/730/configandinstg/instg/docs/zh/installation_guide/installation_via_binary_package.md)安装PyTorch适配昇腾的框架插件包。 | 59 | +由于其CPU版本无法通过requirements依赖安装,因此需手动安装并在安装时指定安装源。 |
| 31 | - | 60 | + |
| 32 | -需要编译的源码包: | 61 | +根据[配套版本](#section146113514599),安装对应版本的fbgemm_gpu软件包。 |
| 62 | + | ||
| 63 | +| 软件版本 | 安装指令 | | ||
| 64 | +| -------- | ------------------ | | ||
| 65 | +| 1.1.0+cpu | `pip3 install fbgemm_gpu==1.1.0+cpu -i https://download.pytorch.org/whl/cpu` | | ||
| 66 | +| 1.2.0+cpu | `pip3 install fbgemm_gpu==1.2.0+cpu -i https://download.pytorch.org/whl/cpu` | | ||
| 67 | + | ||
| 68 | +### Rec SDK Torch软件包说明 | ||
| 69 | + | ||
| 70 | +Rec SDK Torch软件包如下表: | ||
| 33 | 71 | ||
| 34 | | 名称 | 说明 | | 72 | | 名称 | 说明 | |
| 35 | |-------------------------------------------|----------------------| | 73 | |-------------------------------------------|----------------------| |
| 36 | -| Ascend-mindxsdk-torchrec-\*-npu-\*.tar.gz | TorchRec昇腾适配包 | | 74 | +| Ascend-mindxsdk-torchrec-\*-npu-\*.tar.gz | TorchRec昇腾注册包 | |
| 37 | -| Ascend-mindxsdk-hybrid-torchrec-*.tar.gz | Rec SDK Torch推荐算法框架包 | | 75 | +| Ascend-mindxsdk-hybrid-torchrec-*.tar.gz | Rec SDK Torch推荐算法框架包(包含hybrid_torchrec和 torchrec_embcache) | |
| 38 | | Ascend-recsdk-npu-ops-\*-linux-\*.tar.gz | 自定义算子包 | | 76 | | Ascend-recsdk-npu-ops-\*-linux-\*.tar.gz | 自定义算子包 | |
| 39 | | libfbgemm_npu_api.so | 自定义算子PyTorch框架适配层 | | 77 | | libfbgemm_npu_api.so | 自定义算子PyTorch框架适配层 | |
| 40 | 78 | ||
| 41 | -1. 编译环境 | 79 | +## 安装Rec SDK Torch<a id="section182972951211"></a> |
| 42 | - | ||
| 43 | - 容器环境编译,参考[README](../build_torch_rec_images/README.md)。 | ||
| 44 | - | ||
| 45 | -2. 编译Ascend-mindxsdk-torchrec-\*-npu-*.tar.gz | ||
| 46 | - | ||
| 47 | - 参考[README](../../../../training/torch_rec_v1/torchrec_npu/README.md)。 | ||
| 48 | - | ||
| 49 | - 生成的tar包在 `RecSDK/training/torch_rec_v1/torchrec_npu/torchrec/` 路径下。 | ||
| 50 | - | ||
| 51 | - **安装方法** | ||
| 52 | - | ||
| 53 | - ```shell | ||
| 54 | - tar zxvf Ascend-mindxsdk-torchrec-*-npu-*.tar.gz | ||
| 55 | - pip3 install torchrec-*+npu-py3-none-linux_*.whl | ||
| 56 | - ``` | ||
| 57 | - | ||
| 58 | -3. 编译Ascend-mindxsdk-hybrid-torchrec-*.tar.gz | ||
| 59 | - | ||
| 60 | - 参考对应[README](../../../../training/torch_rec_v1/hybrid_torchrec/README.md)。 | ||
| 61 | - | ||
| 62 | - 生成的tar包在 `RecSDK/training/torch_rec_v1/hybrid_torchrec/` 路径下。 | ||
| 63 | - | ||
| 64 | - **安装方法** | ||
| 65 | - | ||
| 66 | - ```shell | ||
| 67 | - tar zxvf Ascend-mindxsdk-hybrid-torchrec-*.tar.gz | ||
| 68 | - pip3 install hybrid_torchrec-*-py3-none-linux_*.whl | ||
| 69 | - pip3 install torchrec_embcache-*-py3-none-linux_*.whl | ||
| 70 | - ``` | ||
| 71 | - | ||
| 72 | -4. 编译Ascend-recsdk-npu-ops-\*-linux-\*.tar.gz | ||
| 73 | - | ||
| 74 | - 参考对应[README](../../../../cust_op/ascendc_op/build/README.md)。 | ||
| 75 | - | ||
| 76 | -5. 编译libfbgemm_npu_api.so | ||
| 77 | - | ||
| 78 | - ```shell | ||
| 79 | - cd RecSDK/cust_op/framework/torch_plugin/torch_library/common/ | ||
| 80 | - bash build_ops.sh | ||
| 81 | - ``` | ||
| 82 | - | ||
| 83 | - 生成的so包在 `RecSDK/cust_op/framework/torch_plugin/torch_library/common/build` 路径下。 | ||
| 84 | - | ||
| 85 | - **安装方法** | ||
| 86 | - | ||
| 87 | - 编译完成后,会在common/build下生成so,并自动拷贝到python默认site-packages路径下。 | ||
| 88 | - | ||
| 89 | - hybrid_torchrec 软件包会自动加载python默认site-packages路径下libfbgemm_npu_api.so。 | ||
| 90 | 80 | ||
| 81 | +可通过如下三种方案安装Rec SDK Torch软件包: | ||
| 91 | 82 | ||
| 92 | -**配套版本<a name="section146113514599"></a>** | 83 | +- 方案一:基于容器安装(宿主机+容器) |
| 84 | + - 基于宿主机配置、镜像制作,并在容器内安装Rec SDK Torch软件包。介绍宿主机环境配置、基础容器镜像制作、运行容器和安装Rec SDK Torch软件包的完整操作说明。 | ||
| 85 | + - **推荐使用该方案**。 | ||
| 86 | +- 方案二:源码编译安装 | ||
| 87 | + - 基于**容器内**安装Rec SDK Torch软件包,默认已配置完成宿主机环境并进入Docker容器内。介绍如何通过源码编译的方式安装Rec SDK Torch软件包。 | ||
| 88 | + - 若使用的Docker容器镜像不是参考[基础镜像构建](../build_torch_rec_images/README.md)制作,**可能存在cmake、glibc等基础软件版本不兼容**的情况,需自行处理。 | ||
| 89 | +- 方案三:基于Release版本+源码编译安装 | ||
| 90 | + - 基于**容器内**安装Rec SDK Torch软件包,默认已配置完成宿主机环境并进入Docker容器内,介绍如何通过下载Release版本的二进制包+部分源码编译的方式安装Rec SDK Torch软件包。 | ||
| 91 | + - 若使用的Docker容器镜像不是参考[基础镜像构建](../build_torch_rec_images/README.md)制作,**可能存在cmake、glibc等基础软件版本不兼容**的情况,需自行处理。 | ||
| 93 | 92 | ||
| 94 | -当前Rec SDK Torch支持两种配套版本,可根据需要获取对应配套版本包。 | 93 | +如需查看Rec SDK Torch软件包的历史安装记录,请参见[查看Rec SDK Torch安装与卸载记录](../../torch/torch_rec_v1/common_operations.md)。 |
| 95 | 94 | ||
| 96 | -|配套版本|PyTorch|PyTorch昇腾适配插件|Rec SDK Torch| | 95 | +>[!NOTE] 说明 |
| 97 | -|--|--|--|--| | 96 | +> 对于用户集成的开源和第三方软件,漏洞和问题请自行跟踪社区并及时进行修复;可以并且不限于通过[CVE(通用漏洞字典)官网](https://www.cve.org/)确认对应开源软件版本的已知漏洞,并通过版本升级、使用patch补丁包更新等方式修复。 |
| 98 | -|方案一|2.6.0|2.6.0|1.1.0| | 97 | + |
| 99 | -|方案二|2.7.1|2.7.1|1.2.0| | 98 | +### 基于容器安装(宿主机+容器)<a id="ZH-CN_TOPIC_0000002302389237"></a> |
| 100 | 99 | ||
| 100 | +#### 简要步骤说明 | ||
| 101 | 101 | ||
| 102 | -其他软件配套版本信息请参考[基础镜像构建](../build_torch_rec_images/README.md)。 | 102 | +1. 配置宿主机环境。 |
| 103 | +2. 构建基础镜像。 | ||
| 104 | +3. 启动Docker容器。 | ||
| 105 | +4. 安装Rec SDK Torch。 | ||
| 103 | 106 | ||
| 104 | -**下载软件包<a name="section1852417242717"></a>** | 107 | +#### 操作流程图 |
| 105 | 108 | ||
| 106 | -请参考本章获取所需软件包和对应的数字签名文件,下载本软件即表示您同意[华为企业业务最终用户许可协议(EULA)](https://e.huawei.com/cn/about/eula)的条款和条件。 | 109 | +基于容器部署Rec SDK Torch,操作流程图请参见[图1](#fig1345216415476)。 |
| 107 | 110 | ||
| 108 | -| 组件名称 | 软件包 | 获取链接 | | 111 | +**图 1** 配置容器内的开发环境及训练镜像构建<a id="fig1345216415476"></a> |
| 109 | -|----------------------|------------------------------------------|----------------------------------------------------| | ||
| 110 | -| Rec SDK Torch推荐算法框架包 | Ascend-mindxsdk-hybrid-torchrec-*.tar.gz | [获取链接](https://gitcode.com/Ascend/RecSDK/releases) | | ||
| 111 | 112 | ||
| 112 | ->[!NOTE]说明 | ||
| 113 | ->当前提供的Rec SDK推荐算法框架包基于Python 3.11版本编译,请在相同的Python版本环境下安装使用。若需在其他Python版本环境下安装使用,请参见[README](https://gitcode.com/Ascend/RecSDK/blob/develop/training/torch_rec_v1/hybrid_torchrec/README.md)进行源码编译。 | ||
| 114 | - | ||
| 115 | -**软件包Hash值验证<a name="section10830205518487"></a>** | ||
| 116 | - | ||
| 117 | -为了防止软件包在传递过程中或存储期间被恶意篡改,请在软件包下载之后使用`sha256sum`命令校验Hash值是否和软件包下载页的Hash值一致。 | ||
| 118 | - | ||
| 119 | -## 部署容器内的开发环境<a name="ZH-CN_TOPIC_0000002336148877"></a> | ||
| 120 | - | ||
| 121 | -### 使用容器部署开发环境<a name="ZH-CN_TOPIC_0000002302229684"></a> | ||
| 122 | - | ||
| 123 | -基于容器部署Rec SDK Torch开发环境,可参考如[图1](#fig1345216415476)完成配置。 | ||
| 124 | - | ||
| 125 | -**图 1** 配置容器内的开发环境及训练镜像构建<a id="fig1345216415476"></a> | ||
| 126 |  | 113 |  |
| 127 | 114 | ||
| 128 | -**关键步骤说明<a name="section15488921175211"></a>** | 115 | +#### 详细操作步骤 |
| 129 | 116 | ||
| 130 | -1. 准备宿主机环境。请参见[安装依赖](#安装依赖)完成宿主机环境的部署。 | 117 | +1. 宿主机环境配置 |
| 131 | -2. 构建基础镜像,请参见[基础镜像构建](../build_torch_rec_images/README.md)。 | 118 | + |
| 132 | -3. 启动容器,请参见[启动容器](#section12808621121114)。 | 119 | + 请参见[宿主机依赖](#宿主机依赖)章节完成宿主机环境配置。 |
| 133 | -4. 安装Rec SDK Torch,请参见[安装Rec SDK Torch](#section182972951211)。 | ||
| 134 | 120 | ||
| 121 | +2. 制作基础训练镜像<a id="section104919392501"></a> | ||
| 122 | + | ||
| 123 | + 请参见[基础镜像构建](../build_torch_rec_images/README.md)里的Dockerfile和README制作镜像。 | ||
| 124 | + | ||
| 125 | + 制作基础镜像时,会同时安装[容器内训练框架依赖](#容器内训练框架依赖)和[容器内训练加速库依赖](#容器内训练加速库依赖)中的依赖软件(CANN、PyTorch、torch_npu、fbgemm_gpu)。后续安装Rec SDK Torch时可跳过`依赖软件安装`步骤。 | ||
| 135 | 126 | ||
| 136 | -### 制作Rec SDK Torch训练镜像<a name="ZH-CN_TOPIC_0000002336268705"></a> | 127 | +3. 运行容器<a id="ZH-CN_TOPIC_0000002302389300"></a> |
| 128 | + | ||
| 129 | + 创建启动脚本run_docker.sh,参考如下: | ||
| 137 | 130 | ||
| 138 | -#### 制作基础训练镜像<a id="section104919392501"></a> | 131 | + ```bash |
| 132 | + #!/bin/bash | ||
| 133 | + container_name=$1 | ||
| 134 | + image_name=$2 | ||
| 135 | + docker run \ | ||
| 136 | + -it \ | ||
| 137 | + --name ${container_name} \ | ||
| 138 | + --shm-size="300g" \ | ||
| 139 | + -m 300g \ | ||
| 140 | + -v /etc/localtime:/etc/localtime:ro \ | ||
| 141 | + -e ASCEND_VISIBLE_DEVICES=0-7 \ | ||
| 142 | + -v /etc/ascend_install.info:/etc/ascend_install.info:ro \ | ||
| 143 | + -v /usr/local/Ascend/driver:/usr/local/Ascend/driver:ro \ | ||
| 144 | + ${image_name} \ | ||
| 145 | + /bin/bash | ||
| 146 | + ``` | ||
| 139 | 147 | ||
| 140 | -请参见[基础镜像构建](../build_torch_rec_images/README.md)里的Dockerfile和README制作镜像。 | 148 | + >[!NOTE]说明 |
| 149 | + >部分参数含义: | ||
| 150 | + >- -m 300g 表示设置容器内可以使用的内存大小上限为300G,可根据实际情况进行配置。 | ||
| 151 | + >- -e ASCEND\_VISIBLE\_DEVICES=0-7 表示将服务器上编号为device0~device7的NPU设备挂载到容器内,可根据实际情况进行配置。 | ||
| 141 | 152 | ||
| 142 | -#### 启动容器<a id="section12808621121114"></a> | 153 | + 执行如下命令新建容器并进入容器内: |
| 143 | 154 | ||
| 144 | -创建启动脚本run_docker.sh,参考如下: | 155 | + ```shell |
| 156 | + bash run_docker.sh 容器名 镜像名称:镜像版本 | ||
| 157 | + ``` | ||
| 145 | 158 | ||
| 146 | -```bash | 159 | + > [!NOTE]说明 |
| 147 | -#!/bin/bash | 160 | + > 1. 上述指令中Docker容器为前台运行,退出交互后容器将停止。更多Docker容器使用请参见[Docker社区文档](https://docs.docker.com/)。 |
| 148 | -container_name=$1 | 161 | + > 2. 如需更新容器内依赖软件版本,请参见[容器内训练框架依赖](#容器内训练框架依赖)和[容器内训练加速库依赖](#容器内训练加速库依赖)中的说明,卸载依赖软件后重新安装。 |
| 149 | -image_name=$2 | ||
| 150 | -docker run \ | ||
| 151 | --it \ | ||
| 152 | ---name ${container_name} \ | ||
| 153 | ---shm-size="300g" \ | ||
| 154 | --m 300g \ | ||
| 155 | --v /etc/localtime:/etc/localtime:ro \ | ||
| 156 | --e ASCEND_VISIBLE_DEVICES=0-7 \ | ||
| 157 | --v /etc/ascend_install.info:/etc/ascend_install.info:ro \ | ||
| 158 | --v /usr/local/Ascend/driver:/usr/local/Ascend/driver:ro \ | ||
| 159 | -${image_name} \ | ||
| 160 | -/bin/bash | ||
| 161 | -``` | ||
| 162 | 162 | ||
| 163 | ->[!NOTE]说明 | 163 | +4. 安装Rec SDK Torch软件包 |
| 164 | ->部分参数说明如下: | 164 | + |
| 165 | ->- -m 300g 表示设置容器内可以使用的内存大小上限为300G,可根据实际情况进行配置。 | 165 | + 安装Rec SDK Torch可参考后文中[源码编译安装](#源码编译安装)或者[基于Release版本+源码编译安装](#基于release版本源码编译安装)章节,并可跳过其中的`依赖软件安装`步骤(制作基础镜像时已安装容器内的相关依赖)。 |
| 166 | ->- -e ASCEND\_VISIBLE\_DEVICES=0-7 表示将服务器上编号为device0-device7的NPU设备挂载到容器内。可根据实际情况进行配置。 | ||
| 167 | 166 | ||
| 168 | -执行如下命令新建容器并进入容器内: | 167 | +### 源码编译安装 |
| 169 | 168 | ||
| 170 | -```shell | 169 | +该方案默认已配置完成宿主机环境并进入Docker容器内。 |
| 171 | -bash run_docker.sh 容器名 {镜像名称}:{版本名称} | ||
| 172 | -``` | ||
| 173 | 170 | ||
| 174 | -> [!NOTE]说明 | 171 | +1. 依赖软件安装 |
| 175 | -> 1. 上述指令中Docker容器为前台运行,退出交互后容器将停止。更多Docker容器使用请参见[Docker社区文档](https://docs.docker.com/)。 | ||
| 176 | -> 2. 如需更新容器内的CANN和PyTorch版本,可在进入容器后进行安装,请参见[安装依赖](#ZH-CN_TOPIC_0000002302389236)中的容器内依赖安装。 | ||
| 177 | 172 | ||
| 178 | -#### 安装Rec SDK Torch<a id="section182972951211"></a> | 173 | + 请参见[容器内训练框架依赖](#容器内训练框架依赖)和[容器内训练加速库依赖](#容器内训练加速库依赖)完成容器内的依赖软件安装。 |
| 179 | 174 | ||
| 180 | -1. 请参见[获取Rec SDK Torch软件包](#获取rec-sdk-torch软件包)获取Rec SDK Torch软件包。 | 175 | +2. 安装TorchRec昇腾注册包 |
| 181 | -2. 将软件包拷贝到容器中。可通过以下方式: | 176 | + |
| 182 | - - 在启动容器时,指定一个宿主机目录挂载到容器内,并将下载的软件包放在其中,使容器可以访问到下载的软件包。 | 177 | + TorchRec昇腾注册包是基于TorchRec源码做的NPU设备适配。可通过Rec SDK Torch提供的patch文件和TorchRec源码的固定分支编译出该注册包。 |
| 178 | + | ||
| 179 | + 请参见[README](https://gitcode.com/Ascend/RecSDK/blob/develop/training/torch_rec_v1/torchrec_npu/README.md)进行源码编译和安装。 | ||
| 183 | 180 | ||
| 184 | - 宿主机目录挂载到容器的docker参数示例: | 181 | +3. 安装Rec SDK Torch推荐算法框架包<a id="source_build_hybrid_torchrec"></a> |
| 182 | + | ||
| 183 | + 请参见如下指令进行编译安装: | ||
| 185 | 184 | ||
| 186 | - ```bash | 185 | + ```bash |
| 187 | - -v /dir1:/dir1 | 186 | + git clone https://gitcode.com/ascend/RecSDK.git |
| 188 | - ``` | 187 | + cd RecSDK/training/torch_rec_v1/hybrid_torchrec |
| 188 | + bash build_whl.sh | ||
| 189 | + cd dist | ||
| 190 | + pip3 uninstall -y hybrid_torchrec | ||
| 191 | + pip3 install hybrid_torchrec-*.whl | ||
| 192 | + pip3 install -r requirements.txt | ||
| 193 | + pip3 uninstall -y torchrec_embcache | ||
| 194 | + pip3 install torchrec_embcache-*-py3-none-linux*.whl | ||
| 195 | + ``` | ||
| 189 | 196 | ||
| 190 | - - 在宿主机上,使用**docker cp**指令将软件包拷贝到容器内。 | 197 | +4. 安装自定义算子相关包<a id="install_costom_op"></a> |
| 198 | + | ||
| 199 | + 下载[RecSDK](https://gitcode.com/Ascend/RecSDK)源码,按如下指令进行算子相关包的编译和安装: | ||
| 200 | + | ||
| 201 | + ```bash | ||
| 202 | + # 编译算子前,需使能CANN环境变量。默认路径安装CANN包时,使能CANN环境变量指令如下: | ||
| 203 | + source /usr/local/Ascend/cann/set_env.sh | ||
默认路径的cann包在 source /usr/local/Ascend/ascend-toolkit/set_env.sh吧 ![]() ![]() | |||
| 204 | + unset ASCEND_CUSTOM_OPP_PATH | ||
| 205 | + | ||
| 206 | + # 编译并安装算子包(Ascend-recsdk-npu-ops-\*-linux-\*.tar.gz)。 | ||
| 207 | + cd RecSDK/cust_op/ascendc_op/build | ||
| 208 | + bash build_ai_core_op.sh A2 | ||
| 209 | + | ||
| 210 | + # 可选:若仅需安装部分算子,可在其他容器内编译,并将build/output/recsdk_ops路径下所需算子包拷贝到当前环境,参考如下指令安装: | ||
| 211 | + # bash mxrec_opp_split_embedding_codegen_forward_unweighted.run | ||
| 212 | + | ||
| 213 | + # 安装算子适配层(libfbgemm_npu_api.so) | ||
| 214 | + cd ../../framework/torch_plugin/torch_library/common/ | ||
| 215 | + bash build_ops.sh | ||
| 216 | + ``` | ||
| 217 | + | ||
| 218 | + 安装算子run包的参数如[表1](#table14435173717221)所示。 | ||
| 219 | + | ||
| 220 | + **表 1** 参数说明 | ||
| 221 | + <a id="table14435173717221"></a> | ||
| 222 | + | ||
| 223 | + |输入参数|说明| | ||
| 224 | + |--|--| | ||
| 225 | + |--help \| -h|查询帮助信息。| | ||
| 226 | + |--info|查询安装包的信息。| | ||
| 227 | + |--list|查询安装包的文件列表。| | ||
| 228 | + |--check|查询压缩包完整性。| | ||
| 229 | + |--quiet|静默安装方式。| | ||
| 230 | + |--nox11|不启动xterm终端。| | ||
| 231 | + |--noexec|不执行嵌入的安装脚本。| | ||
| 232 | + |--extract=\<path>|直接解压到目标目录,通常与--noexec配合使用,仅解压文件而不运行脚本。| | ||
| 233 | + |--tar arg1 [arg2 ...]|通过**tar**命令访问压缩包内容。| | ||
| 234 | + |--install-path|安装到指定目录路径。| | ||
| 191 | 235 | ||
| 192 | - **docker cp**指令示例: | 236 | + >[!NOTICE]须知 |
| 237 | + > | ||
| 238 | + > 安装算子后,/usr/local/Ascend/cann/opp/vendors/目录下会生成split\_embedding\_codegen\_forward\_unweighted、backward\_codegen\_adagrad\_unweighted\_exact、asynchronous\_complete\_cumsum、permute2d\_sparse\_data等文件夹。如果没有相关文件夹,请使用**unset ASCEND\_CUSTOM\_OPP\_PATH**取消环境变量后重新安装算子。 | ||
| 193 | 239 | ||
| 194 | - ```bash | 240 | +### 基于Release版本+源码编译安装 |
| 195 | - docker cp host_file_path container_name:container_file_path | ||
| 196 | - ``` | ||
| 197 | 241 | ||
| 198 | - 其中,host\_file\_path为宿主机文件路径,container\_name为待拷入的docker容器名称,container\_file\_path为待拷入的docker容器内的文件路径。 | 242 | +该方案默认已配置完成宿主机环境并进入Docker容器内。 |
| 199 | 243 | ||
| 200 | -3. 按照如下步骤进行编译和安装包。 | 244 | +该方案的安装步骤和[源码编译安装](#源码编译安装)章节类似。区别在于Rec SDK Torch推荐算法框架包可直接从Release版本获取,无需从源码编译。 |
| 201 | 245 | ||
| 202 | - 1. 安装TorchRec昇腾注册包 | 246 | +1. 依赖软件安装 |
| 247 | + | ||
| 248 | + 请参见[容器内训练框架依赖](#容器内训练框架依赖)和[容器内训练加速库依赖](#容器内训练加速库依赖)完成容器内的依赖软件安装。 | ||
| 203 | 249 | ||
| 204 | - TorchRec昇腾注册包是基于TorchRec源码做的NPU设备适配。可通过Rec SDK Torch提供的patch文件和TorchRec源码的固定分支编译出该注册包。 | 250 | +2. 安装TorchRec昇腾注册包 |
| 251 | + | ||
| 252 | + TorchRec昇腾注册包是基于TorchRec源码做的NPU设备适配。可通过Rec SDK Torch提供的patch文件和TorchRec源码的固定分支编译出该注册包。 | ||
| 253 | + | ||
| 254 | + 请参见[README](https://gitcode.com/Ascend/RecSDK/blob/develop/training/torch_rec_v1/torchrec_npu/README.md)进行源码编译和安装。 | ||
| 205 | 255 | ||
| 206 | - 具体的源码编译和安装可参考[README](https://gitcode.com/Ascend/RecSDK/blob/develop/training/torch_rec_v1/torchrec_npu/README.md)(该包的源码编译不区分PyTorch版本)。 | 256 | +3. 安装Rec SDK Torch推荐算法框架包 |
| 257 | + | ||
| 258 | + **下载软件包<a name="section1852417242717"></a>** | ||
| 259 | + | ||
| 260 | + 请参考本章获取所需软件包和对应的数字签名文件,下载本软件即表示您同意[华为企业业务最终用户许可协议(EULA)](https://e.huawei.com/cn/about/eula)的条款和条件。 | ||
| 261 | + | ||
| 262 | + | 组件名称 | 软件包 | 获取链接 | | ||
| 263 | + |----------------------|------------------------------------------|----------------------------------------------------| | ||
| 264 | + | Rec SDK Torch推荐算法框架包 | Ascend-mindxsdk-hybrid-torchrec-*.tar.gz | [获取链接](https://gitcode.com/Ascend/RecSDK/releases) | | ||
| 265 | + | ||
| 266 | + >[!NOTE]说明 | ||
| 267 | + >当前提供的Rec SDK推荐算法框架包基于Python 3.11版本编译,**请在相同的Python版本环境下安装使用**。若需在其他Python版本环境下安装使用,请参见[源码编译 - 安装Rec SDK Torch推荐算法框架包](#source_build_hybrid_torchrec)进行源码编译。 | ||
| 268 | + | ||
| 269 | + **软件包Hash值校验<a name="section10830205518487"></a>** | ||
| 270 | + | ||
| 271 | + 为了防止软件包在传递过程中或存储期间被恶意篡改,请在软件包下载之后使用`sha256sum`命令校验Hash值是否和软件包下载页的Hash值一致。 | ||
| 207 | 272 | ||
| 208 | - 2. 安装Rec SDK Torch推荐算法框架包 | 273 | + **安装软件包** |
| 209 | 274 | ||
| 210 | - ```bash | 275 | + 将下载的软件包上传到Docker容器内,实现方式可参考: |
| 211 | - # 安装Ascend-mindxsdk-hybrid-torchrec-*-linux-*.tar.gz | 276 | + |
| 212 | - tar zxvf Ascend-mindxsdk-hybrid-torchrec-*-linux-*.tar.gz | 277 | + - 方式1:在启动容器时,指定一个宿主机目录挂载到容器内,并将下载的软件包放在其中,使容器可以访问到下载的软件包。 |
| 213 | - pip3 install hybrid_torchrec-*-py3-none-linux_*.whl | 278 | + |
| 214 | - pip3 install torchrec_embcache-*-py3-none-linux_*.whl | 279 | + 将宿主机目录挂载到Docker容器内,在[启动容器](#ZH-CN_TOPIC_0000002302389300)时增加如下参数(`dirX`需改为实际使用的文件目录): |
| 215 | - ``` | 280 | + |
| 281 | + ```bash | ||
| 282 | + -v /dir1:/dir1 | ||
| 283 | + ``` | ||
| 284 | + | ||
| 285 | + - 方式2:在宿主机上,使用**docker cp**指令将软件包拷贝到容器内。 | ||
| 286 | + | ||
| 287 | + **docker cp**指令示例: | ||
| 288 | + | ||
| 289 | + ```bash | ||
| 290 | + docker cp host_file_path container_name:container_file_path | ||
| 291 | + ``` | ||
| 292 | + | ||
| 293 | + 其中,host\_file\_path为宿主机文件路径,container\_name为待拷入的docker容器名称,container\_file\_path为待拷入的docker容器内的文件路径。 | ||
| 216 | 294 | ||
| 217 | - 3. 安装Rec SDK Torch自定义算子相关包 | 295 | + 执行如下指令进行安装: |
| 218 | 296 | ||
| 219 | - 下载[RecSDK仓库](https://gitcode.com/Ascend/RecSDK)源码,进入源代码目录,按如下指令进行算子相关包的编译和安装(算子包的编译不区分PyTorch版本): | 297 | + ```shell |
| 298 | + tar zxvf Ascend-mindxsdk-hybrid-torchrec*.tar.gz | ||
| 299 | + # 如已安装,请先卸载 | ||
| 300 | + pip3 uninstall -y hybrid_torchrec torchrec_embcache | ||
| 301 | + # 安装软件包 | ||
| 302 | + pip3 install hybrid_torchrec-*-py3-none-linux*.whl | ||
| 303 | + pip3 install -r requirements.txt | ||
| 304 | + pip3 install torchrec_embcache-*-py3-none-linux*.whl | ||
| 305 | + ``` | ||
| 220 | 306 | ||
| 221 | - ```bash | 307 | +4. 安装自定义算子相关包 |
| 222 | - # 注:编译算子前,需使能CANN环境变量。默认路径安装CANN包时,使能CANN环境变量指令如下: | 308 | + |
| 223 | - source /usr/local/Ascend/cann/set_env.sh | 309 | + 本节内容和“源码编译 - 安装自定义算子相关包”内容相同,请参见前文[安装自定义算子相关包](#install_costom_op)章节。 |
| 224 | - unset ASCEND_CUSTOM_OPP_PATH | ||
| 225 | - | ||
| 226 | - # 编译并安装算子包 | ||
| 227 | - cd cust_op/ascendc_op/build | ||
| 228 | - bash build_ai_core_op.sh A2 | ||
| 229 | 310 | ||
| 230 | - # 可选:若仅需安装部分算子,可在其他容器内编译,并将build/output/recsdk_ops路径下所需算子包拷贝到当前环境,参考如下指令安装: | 311 | +## 安装验证 |
| 231 | - bash mxrec_opp_split_embedding_codegen_forward_unweighted.run | ||
| 232 | - | ||
| 233 | - # 安装算子适配层 libfbgemm_npu_api.so | ||
| 234 | - cd ../../framework/torch_plugin/torch_library/common/ | ||
| 235 | - bash build_ops.sh | ||
| 236 | - ``` | ||
| 237 | 312 | ||
| 238 | - 安装算子的参数如[表1](#table14435173717221)所示。 | 313 | +可通过执行已有用例验证Rec SDK Torch是否安装成功。 |
| 239 | 314 | ||
| 240 | - **表 1** 参数说明 | 315 | +hybrid_torchrec用例列表和运行方式请参见[README](../../../../training/torch_rec_v1/hybrid_torchrec/test/st/README.md)。 |
| 241 | - <a id="table14435173717221"></a> | ||
| 242 | - | ||
| 243 | - |输入参数|说明| | ||
| 244 | - |--|--| | ||
| 245 | - |--help \| -h|查询帮助信息。| | ||
| 246 | - |--info|查询安装包的信息。| | ||
| 247 | - |--list|查询安装包的文件列表。| | ||
| 248 | - |--check|查询压缩包完整性。| | ||
| 249 | - |--quiet|静默安装方式。| | ||
| 250 | - |--nox11|不启动xterm终端。| | ||
| 251 | - |--noexec|不执行嵌入的安装脚本。| | ||
| 252 | - |--extract=\<path>|直接解压到目标目录,通常与--noexec配合使用,仅解压文件而不运行脚本。| | ||
| 253 | - |--tar arg1 [arg2 ...]|通过**tar**命令访问压缩包内容。| | ||
| 254 | - |--install-path|安装到指定目录路径。| | ||
| 255 | - | ||
| 256 | - | ||
| 257 | ->[!NOTICE]须知 | ||
| 258 | -> | ||
| 259 | -> 安装算子后,/usr/local/Ascend/cann/opp/vendors/目录下会生成split\_embedding\_codegen\_forward\_unweighted、backward\_codegen\_adagrad\_unweighted\_exact、asynchronous\_complete\_cumsum、permute2d\_sparse\_data等文件夹。如果没有相关文件夹,请使用**unset ASCEND\_CUSTOM\_OPP\_PATH**取消环境变量后重新安装算子。 | ||
| 260 | 316 | ||
| 317 | +torchrec_embcache用例列表和运行方式请参见[README](../../../../training/torch_rec_v1/torchrec_embcache/tests/acc_test/README.md)。 | ||
| 261 | 318 | ||
| 319 | +用例执行后,若显示`xx passed`且没有`xx failed`则说明用例执行通过,Rec SDK Torch安装成功。 | ||
| 262 | 320 | ||
| 263 | ## 配置环境变量<a name="ZH-CN_TOPIC_0000002336268805"></a> | 321 | ## 配置环境变量<a name="ZH-CN_TOPIC_0000002336268805"></a> |
| 264 | 322 | ||
| @@ -286,7 +344,7 @@ Rec SDK Torch环境变量的说明如[表1](#table126401659163820)所示。 | |||
| 286 | | DO_EC_LOCAL_UNIQUE | 多级缓存是否启用EC local unique | 可选 | 字符串,支持"true"、"1"、"yes"表示启用,其他值表示不启用。默认为false。 | | 344 | | DO_EC_LOCAL_UNIQUE | 多级缓存是否启用EC local unique | 可选 | 字符串,支持"true"、"1"、"yes"表示启用,其他值表示不启用。默认为false。 | |
| 287 | | LOCAL_UNIQUE_PARALLEL_BATCH_NUM | EmbCacheTrainPipelineSparseDist中Local unique并行处理批次数 | 可选 | 整数,默认为2,取值范围:[1, 24]。 | | 345 | | LOCAL_UNIQUE_PARALLEL_BATCH_NUM | EmbCacheTrainPipelineSparseDist中Local unique并行处理批次数 | 可选 | 整数,默认为2,取值范围:[1, 24]。 | |
| 288 | | ENABLE_PARALLEL_GLOBAL_UNIQUE | 是否启用并行Global Unique处理 | 可选 | 字符串,1表示启用,其他值表示不启用。默认为0,表示不启用。 | | 346 | | ENABLE_PARALLEL_GLOBAL_UNIQUE | 是否启用并行Global Unique处理 | 可选 | 字符串,1表示启用,其他值表示不启用。默认为0,表示不启用。 | |
| 289 | -| GLOG_stderrthreshold | 设置多级缓存C++模块的日志级别。 | 可选 | 整数,默认为0。取值范围:<ul><li>-2:TRACE</li><li>-1:DEBUG</li><li>0:INFO</li><li>1:WARN</li><li>2:ERROR</li><ul> | | 347 | +| GLOG_stderrthreshold | 设置多级缓存C++模块的日志级别。 | 可选 | 整数,默认为0。取值范围:<ul><li>-2:TRACE</li><li>-1:DEBUG</li><li>0:INFO</li><li>1:WARN</li><li>2:ERROR</li></ul> | |
| 290 | 348 | ||
| 291 | ## 卸载<a name="ZH-CN_TOPIC_0000002302389376"></a> | 349 | ## 卸载<a name="ZH-CN_TOPIC_0000002302389376"></a> |
| 292 | 350 | ||
| @@ -303,11 +361,11 @@ pip3 uninstall torchrec -y | |||
| 303 | 361 | ||
| 304 | 用户如需移除Rec SDK Torch自定义算子相关包,可参考以下命令进行卸载。其中, | 362 | 用户如需移除Rec SDK Torch自定义算子相关包,可参考以下命令进行卸载。其中, |
| 305 | 363 | ||
| 306 | -- 自定义算子在CANN中的默认安装路径为/usr/local/Ascend/cann/opp/vendors/ | 364 | +- 自定义算子在CANN中的默认安装路径为/usr/local/Ascend/cann/opp/vendors/ |
| 307 | -- 卸载自定义算子时,删除vendors路径下自定义算子名称对应的文件夹即可。可以通过[ai\_core\_op](https://gitcode.com/Ascend/RecSDK/tree/develop/cust_op/ascendc_op/ai_core_op)查看Rec SDK的自定义算子目录。 | 365 | +- 卸载自定义算子时,删除vendors路径下自定义算子名称对应的文件夹即可。可以通过[ai\_core\_op](https://gitcode.com/Ascend/RecSDK/tree/develop/cust_op/ascendc_op/ai_core_op)查看Rec SDK的自定义算子目录。 |
| 308 | 366 | ||
| 309 | ```bash | 367 | ```bash |
| 310 | -# 卸载算子指令示例 | 368 | +# 卸载算子指令示例(仅列出部分,其他算子卸载指令同理) |
| 311 | rm -rf /usr/local/Ascend/cann/opp/vendors/asynchronous_complete_cumsum | 369 | rm -rf /usr/local/Ascend/cann/opp/vendors/asynchronous_complete_cumsum |
| 312 | rm -rf /usr/local/Ascend/cann/opp/vendors/backward_codegen_adagrad_unweighted_exact | 370 | rm -rf /usr/local/Ascend/cann/opp/vendors/backward_codegen_adagrad_unweighted_exact |
| 313 | rm -rf /usr/local/Ascend/cann/opp/vendors/permute2d_sparse_data | 371 | rm -rf /usr/local/Ascend/cann/opp/vendors/permute2d_sparse_data |
| @@ -322,25 +380,9 @@ else | |||
| 322 | fi | 380 | fi |
| 323 | ``` | 381 | ``` |
| 324 | 382 | ||
| 325 | -部分自定义算子安装到CANN的vendors文件夹(CANN安装路径/opp/vendors)下时,原自定义算子名称与安装路径不同,卸载时需删除安装后的路径。存在差异的自定义算子如下表。 | ||
| 326 | - | ||
| 327 | -|自定义算子名称|安装到vendors文件夹下的名称| | ||
| 328 | -|--|--| | ||
| 329 | -|cust_op_by_addr|customize| | ||
| 330 | -|pcie_through|customize| | ||
| 331 | -|fused_lazy_adam|mxrec_fused_lazy_adam| | ||
| 332 | -|fused_sgd|mxrec_sgd| | ||
| 333 | - | ||
| 334 | - | ||
| 335 | ->[!NOTE]说明 | ||
| 336 | ->用户自定义算子在未配置安装文件夹名称时,默认安装在CANN的vendors/customize文件夹下。当删除的customize文件夹中存在用户自定义算子时,则对应算子需重新安装。 | ||
| 337 | - | ||
| 338 | - | ||
| 339 | ## 升级<a name="ZH-CN_TOPIC_0000002302389340"></a> | 383 | ## 升级<a name="ZH-CN_TOPIC_0000002302389340"></a> |
| 340 | 384 | ||
| 341 | 用户如需将当前版本的Rec SDK Torch升级至最新版本,可将最新的Rec SDK Torch软件包上传至安装环境后,在软件包所在目录下使用命令进行升级,具体命令如下。 | 385 | 用户如需将当前版本的Rec SDK Torch升级至最新版本,可将最新的Rec SDK Torch软件包上传至安装环境后,在软件包所在目录下使用命令进行升级,具体命令如下。 |
| 342 | 386 | ||
| 343 | -1. 升级Rec SDK Torch新版本时,需要先手动卸载旧版本。具体操作请参考[卸载](#卸载)。 | 387 | +1. 升级Rec SDK Torch新版本时,需要先手动卸载旧版本。具体操作请参考[卸载](#卸载)。 |
| 344 | -2. 参考[安装Rec SDK Torch](#section182972951211)重新安装Rec SDK Torch。 | 388 | +2. 参考[安装Rec SDK Torch](#section182972951211)重新安装Rec SDK Torch。 |
| 345 | - | ||
| 346 | - | ||
| @@ -1,5 +1,5 @@ | |||
| 1 | 1 | ||
| 2 | -# Hybrid-torchrec NPU适配方案 | 2 | +# Hybrid-Torchrec NPU适配方案 |
| 3 | 3 | ||
| 4 | ## 软件介绍 | 4 | ## 软件介绍 |
| 5 | 5 | ||
| @@ -11,11 +11,13 @@ Python版本要求:Python >= 3.11。 | |||
| 11 | 11 | ||
| 12 | | 配套版本 | PyTorch | torch_npu | torchrec | fbgemm_gpu | hybrid_torchrec | | 12 | | 配套版本 | PyTorch | torch_npu | torchrec | fbgemm_gpu | hybrid_torchrec | |
| 13 | |-------|---------|-----------|-----------|------------|-----------------| | 13 | |-------|---------|-----------|-----------|------------|-----------------| |
| 14 | -| 配套版本1 | 2.6.0 | 2.6.0 | 1.1.0+npu | 1.1.0 | 1.1.0 | | 14 | +| 方案一 | 2.6.0 | 2.6.0 | 1.1.0+npu | 1.1.0 | 1.1.0 | |
| 15 | -| 配套版本2 | 2.7.1 | 2.7.1 | 1.2.0+npu | 1.2.0 | 1.2.0 | | 15 | +| 方案二 | 2.7.1 | 2.7.1 | 1.2.0+npu | 1.2.0 | 1.2.0 | |
| 16 | 16 | ||
| 17 | 说明: | 17 | 说明: |
| 18 | + | ||
| 18 | 1. torch_npu是Ascend Extension for PyTorch插件,使昇腾NPU可以适配PyTorch框架。相关文档和**下载/安装**请参见[Ascend文档](https://www.hiascend.com/developer/software/ai-frameworks/pytorch)。 | 19 | 1. torch_npu是Ascend Extension for PyTorch插件,使昇腾NPU可以适配PyTorch框架。相关文档和**下载/安装**请参见[Ascend文档](https://www.hiascend.com/developer/software/ai-frameworks/pytorch)。 |
| 20 | + | ||
| 19 | 2. torchrec 1.1.0+npu/1.2.0+npu为基于开源torchrec适配NPU设备,增加NPU适配后编译的包。相关文档请参见[README](../torchrec_npu/README.md)。 | 21 | 2. torchrec 1.1.0+npu/1.2.0+npu为基于开源torchrec适配NPU设备,增加NPU适配后编译的包。相关文档请参见[README](../torchrec_npu/README.md)。 |
| 20 | 22 | ||
| 21 | ## 使用方法 | 23 | ## 使用方法 |
| @@ -29,6 +31,7 @@ Python版本要求:Python >= 3.11。 | |||
| 29 | 请参见[Rec SDK文档](../../../docs/zh/torch/torch_rec_v1/recsdk_torch_installation_guide.md#section182972951211)中“安装Rec SDK Torch”章节。 | 31 | 请参见[Rec SDK文档](../../../docs/zh/torch/torch_rec_v1/recsdk_torch_installation_guide.md#section182972951211)中“安装Rec SDK Torch”章节。 |
| 30 | 32 | ||
| 31 | #### 2.1 依赖软件安装 | 33 | #### 2.1 依赖软件安装 |
| 34 | + | ||
| 32 | - PyTorch: 容器内已包含torch软件包,若torch软件包版本不满足配套需求,可进行软件升级。升级PyTorch版本为2.7.1指令示例:`pip3 install torch==2.7.1+cpu -i https://download.pytorch.org/whl/cpu` | 35 | - PyTorch: 容器内已包含torch软件包,若torch软件包版本不满足配套需求,可进行软件升级。升级PyTorch版本为2.7.1指令示例:`pip3 install torch==2.7.1+cpu -i https://download.pytorch.org/whl/cpu` |
| 33 | - torch_npu: 参考[Ascend文档](https://www.hiascend.com/developer/software/ai-frameworks/pytorch),根据配套版本和环境架构下载软件包并解压安装。 | 36 | - torch_npu: 参考[Ascend文档](https://www.hiascend.com/developer/software/ai-frameworks/pytorch),根据配套版本和环境架构下载软件包并解压安装。 |
| 34 | - fbgemm_gpu: | 37 | - fbgemm_gpu: |
| @@ -38,6 +41,7 @@ Python版本要求:Python >= 3.11。 | |||
| 38 | - 参考[README](../torchrec_npu/README.md) 进行源码编译安装。 | 41 | - 参考[README](../torchrec_npu/README.md) 进行源码编译安装。 |
| 39 | 42 | ||
| 40 | #### 2.2 hybrid_torchrec安装 | 43 | #### 2.2 hybrid_torchrec安装 |
| 44 | + | ||
| 41 | - 基于软件包安装 | 45 | - 基于软件包安装 |
| 42 | 46 | ||
| 43 | 从[RecSDK release版本](https://gitcode.com/Ascend/RecSDK/releases),选择最新版本,下载Ascend-mindxsdk-hybrid-torchrec-*.tar.gz软件包。 | 47 | 从[RecSDK release版本](https://gitcode.com/Ascend/RecSDK/releases),选择最新版本,下载Ascend-mindxsdk-hybrid-torchrec-*.tar.gz软件包。 |
| @@ -45,12 +49,10 @@ Python版本要求:Python >= 3.11。 | |||
| 45 | ```shell | 49 | ```shell |
| 46 | tar zxvf Ascend-mindxsdk-hybrid-torchrec*.tar.gz | 50 | tar zxvf Ascend-mindxsdk-hybrid-torchrec*.tar.gz |
| 47 | # 如果已安装,请先卸载 | 51 | # 如果已安装,请先卸载 |
| 48 | -pip3 uninstall -y hybrid_torchrec | 52 | +pip3 uninstall -y hybrid_torchrec torchrec_embcache |
| 49 | # 安装软件包 | 53 | # 安装软件包 |
| 50 | pip3 install hybrid_torchrec-*-py3-none-linux*.whl | 54 | pip3 install hybrid_torchrec-*-py3-none-linux*.whl |
| 51 | pip3 install -r requirements.txt | 55 | pip3 install -r requirements.txt |
| 52 | -# [可选] 若需使用多级缓存功能,则需安装torchrec_embcache软件包 | ||
| 53 | -pip3 uninstall -y torchrec_embcache | ||
| 54 | pip3 install torchrec_embcache-*-py3-none-linux*.whl | 56 | pip3 install torchrec_embcache-*-py3-none-linux*.whl |
| 55 | ``` | 57 | ``` |
| 56 | 58 | ||
| @@ -61,17 +63,20 @@ git clone https://gitcode.com/ascend/RecSDK.git | |||
| 61 | cd RecSDK/training/torch_rec_v1/hybrid_torchrec | 63 | cd RecSDK/training/torch_rec_v1/hybrid_torchrec |
| 62 | bash build_whl.sh | 64 | bash build_whl.sh |
| 63 | cd dist | 65 | cd dist |
| 64 | -pip3 uninstall -y hybrid_torchrec | 66 | +pip3 uninstall -y hybrid_torchrec torchrec_embcache |
| 65 | pip3 install hybrid_torchrec-*.whl | 67 | pip3 install hybrid_torchrec-*.whl |
| 66 | pip3 install -r requirements.txt | 68 | pip3 install -r requirements.txt |
| 67 | -# [可选] 若需使用多级缓存功能,则需安装torchrec_embcache软件包 | ||
| 68 | -pip3 uninstall -y torchrec_embcache | ||
| 69 | pip3 install torchrec_embcache-*-py3-none-linux*.whl | 69 | pip3 install torchrec_embcache-*-py3-none-linux*.whl |
| 70 | ``` | 70 | ``` |
| 71 | 71 | ||
| 72 | 注:如果pip3 uninstall hybrid_torchrec提示file找不到,请换一个执行路径,不要在子目录有hybrid_torchrec的路径下执行该命令 | 72 | 注:如果pip3 uninstall hybrid_torchrec提示file找不到,请换一个执行路径,不要在子目录有hybrid_torchrec的路径下执行该命令 |
| 73 | 73 | ||
| 74 | +### 3 运行测试 | ||
| 75 | + | ||
| 76 | +请参见[hybrid_torchrec测试套件](./test/st/README.md)。 | ||
| 77 | + | ||
| 74 | ## 相关网站 | 78 | ## 相关网站 |
| 75 | -[TorchRec介绍](https://pytorch.org/torchrec) | 79 | + |
| 80 | +[TorchRec介绍](https://meta-pytorch.org/torchrec/) | ||
| 76 | 81 | ||
| 77 | [TorchRec开源项目](https://github.com/pytorch/torchrec) | 82 | [TorchRec开源项目](https://github.com/pytorch/torchrec) |
| @@ -0,0 +1,53 @@ | |||
| 1 | +# hybrid_torchrec测试套件 | ||
| 2 | + | ||
| 3 | +本目录包含hybrid_torchrec组件的多个测试用例,用于验证**NPU纯显存模式下**EmbeddingBagCollection,HashEmbeddingBagCollection的功能和精度正确性。 | ||
| 4 | + | ||
| 5 | +> 说明 | ||
| 6 | +> | ||
| 7 | +> EmbeddingBagCollection为开源TorchRec原生稀疏表实现。 | ||
| 8 | +> | ||
| 9 | +> HashEmbeddingBagCollection为hybrid_torchrec组件新增的稀疏表实现,对应TorchRec原生的EmbeddingBagCollection,支持特征ID Hash映射、ID去重等功能。 | ||
| 10 | + | ||
| 11 | +## 目录结构 | ||
| 12 | + | ||
| 13 | +```shell | ||
| 14 | +st/ | ||
| 15 | +├── README.md # 测试套件说明文档 | ||
| 16 | +├── dataset.py # 数据集定义和随机数据生成器 | ||
| 17 | +├── model.py # 测试模型定义 | ||
| 18 | +├── util.py # 工具函数(日志设置等) | ||
| 19 | +├── test_all.sh # 执行全部测试用例的脚本 | ||
| 20 | +├── test_hybrid_embeddingbag.py # 测试TorchRec原生的EmbeddingBagCollection前反向查表 | ||
| 21 | +├── test_hybrid_hash_embeddingbag.py # 测试支持特征ID Hash映射的HashEmbeddingBagCollection前反向查表 | ||
| 22 | +├── test_hybrid_hash_embeddingbag_dp.py # 测试DP分表模式下的HashEmbeddingBagCollection | ||
| 23 | +├── test_hybrid_pipeline_hash_embeddingbag.py # 测试pipeline场景下的HashEmbeddingBagCollection前反向查表 | ||
| 24 | +├── test_ids_process.py # 测试C++侧实现的特征ID去重分桶相关功能 | ||
| 25 | +├── test_module.py # 测试HashEmbeddingBagCollection的在CPU/NPU设备上功能/精度正确性 | ||
| 26 | +└── test_train_and_eval.py # 测试训练和评估功能 | ||
| 27 | +``` | ||
| 28 | + | ||
| 29 | +## 运行测试 | ||
| 30 | + | ||
| 31 | +### 环境准备 | ||
| 32 | + | ||
| 33 | +请参见[hybrid_torchrec文档](../../README.md)安装hybrid_torchrec及其依赖项。 | ||
| 34 | + | ||
| 35 | +### 运行单个测试 | ||
| 36 | + | ||
| 37 | +```bash | ||
| 38 | +# 运行单个测试文件 | ||
| 39 | +pytest test_hybrid_embeddingbag.py | ||
| 40 | +``` | ||
| 41 | + | ||
| 42 | +### 运行所有测试 | ||
| 43 | + | ||
| 44 | +```bash | ||
| 45 | +# 使用提供的脚本运行所有测试 | ||
| 46 | +bash test_all.sh | ||
| 47 | +``` | ||
| 48 | + | ||
| 49 | +## 注意事项 | ||
| 50 | + | ||
| 51 | +1. 确保在NPU环境下运行测试 | ||
| 52 | +2. 分布式测试需要足够的NPU资源(2张NPU卡) | ||
| 53 | +3. 测试数据是随机生成的,结果可能因种子而异 | ||
Rtraining/torch_rec_v1/hybrid_torchrec/test/st/test_hybrid_pipline_hash_embeddingbag.py→training/torch_rec_v1/hybrid_torchrec/test/st/test_hybrid_pipeline_hash_embeddingbag.py+0-0
文件重命名但无更改。
| @@ -1,6 +1,7 @@ | |||
| 1 | # TorchRec-EmbCache NPU适配方案 | 1 | # TorchRec-EmbCache NPU适配方案 |
| 2 | 2 | ||
| 3 | ## 软件介绍 | 3 | ## 软件介绍 |
| 4 | + | ||
| 4 | 本项目是基于开源项目TorchRec的1.1.0/1.2.0版本开发的embedding多级缓存扩展,助力开发者快速应用TorchRec框架并适配到NPU进行模型训练和推理。 | 5 | 本项目是基于开源项目TorchRec的1.1.0/1.2.0版本开发的embedding多级缓存扩展,助力开发者快速应用TorchRec框架并适配到NPU进行模型训练和推理。 |
| 5 | 6 | ||
| 6 | Python版本要求:Python >= 3.11。 | 7 | Python版本要求:Python >= 3.11。 |
| @@ -9,8 +10,8 @@ Python版本要求:Python >= 3.11。 | |||
| 9 | 10 | ||
| 10 | | 配套版本 | PyTorch | torch_npu | torchrec | fbgemm_gpu | hybrid_torchrec | torchrec_embcache | | 11 | | 配套版本 | PyTorch | torch_npu | torchrec | fbgemm_gpu | hybrid_torchrec | torchrec_embcache | |
| 11 | |-------|---------|-----------|-----------|------------|-----------------|-------------------| | 12 | |-------|---------|-----------|-----------|------------|-----------------|-------------------| |
| 12 | -| 配套版本1 | 2.6.0 | 2.6.0 | 1.1.0+npu | 1.1.0 | 1.1.0 | 1.1.0 | | 13 | +| 方案一 | 2.6.0 | 2.6.0 | 1.1.0+npu | 1.1.0 | 1.1.0 | 1.1.0 | |
| 13 | -| 配套版本2 | 2.7.1 | 2.7.1 | 1.2.0+npu | 1.2.0 | 1.2.0 | 1.2.0 | | 14 | +| 方案二 | 2.7.1 | 2.7.1 | 1.2.0+npu | 1.2.0 | 1.2.0 | 1.2.0 | |
| 14 | 15 | ||
| 15 | ### 1.环境准备 | 16 | ### 1.环境准备 |
| 16 | 17 | ||
| @@ -21,11 +22,13 @@ Python版本要求:Python >= 3.11。 | |||
| 21 | 请参见[Rec SDK文档](../../../docs/zh/torch/torch_rec_v1/recsdk_torch_installation_guide.md#section182972951211)中“安装Rec SDK Torch”章节。 | 22 | 请参见[Rec SDK文档](../../../docs/zh/torch/torch_rec_v1/recsdk_torch_installation_guide.md#section182972951211)中“安装Rec SDK Torch”章节。 |
| 22 | 23 | ||
| 23 | #### 2.1 前提条件 | 24 | #### 2.1 前提条件 |
| 25 | + | ||
| 24 | torchrec_embcache依赖于hybrid_torchrec包,请先参考[hybrid_torchrec README](../hybrid_torchrec/README.md)完成hybrid_torchrec及其依赖包安装。 | 26 | torchrec_embcache依赖于hybrid_torchrec包,请先参考[hybrid_torchrec README](../hybrid_torchrec/README.md)完成hybrid_torchrec及其依赖包安装。 |
| 25 | 27 | ||
| 26 | 本章节仅介绍torchrec_embcache软件包安装。 | 28 | 本章节仅介绍torchrec_embcache软件包安装。 |
| 27 | 29 | ||
| 28 | #### 2.2 torchrec_embcache安装 | 30 | #### 2.2 torchrec_embcache安装 |
| 31 | + | ||
| 29 | - 基于软件包安装 | 32 | - 基于软件包安装 |
| 30 | 33 | ||
| 31 | 从[RecSDK release版本](https://gitcode.com/Ascend/RecSDK/releases),选择最新版本,下载Ascend-mindxsdk-hybrid-torchrec-*.tar.gz软件包。 | 34 | 从[RecSDK release版本](https://gitcode.com/Ascend/RecSDK/releases),选择最新版本,下载Ascend-mindxsdk-hybrid-torchrec-*.tar.gz软件包。 |
| @@ -42,6 +45,7 @@ pip3 install -r requirements.txt | |||
| 42 | ``` | 45 | ``` |
| 43 | 46 | ||
| 44 | - 基于源码编译安装 | 47 | - 基于源码编译安装 |
| 48 | + | ||
| 45 | ```shell | 49 | ```shell |
| 46 | git clone https://gitcode.com/ascend/RecSDK.git | 50 | git clone https://gitcode.com/ascend/RecSDK.git |
| 47 | cd RecSDK/training/torch_rec_v1/torchrec_embcache | 51 | cd RecSDK/training/torch_rec_v1/torchrec_embcache |
| @@ -52,7 +56,12 @@ pip3 uninstall -y torchrec_embcache | |||
| 52 | pip3 install ./dist/torchrec_embcache-*.whl | 56 | pip3 install ./dist/torchrec_embcache-*.whl |
| 53 | ``` | 57 | ``` |
| 54 | 58 | ||
| 59 | +### 3 运行测试 | ||
| 60 | + | ||
| 61 | +请参见[torchrec_embcache测试套件](tests/acc_test/README.md)。 | ||
| 62 | + | ||
| 55 | ## 相关网站 | 63 | ## 相关网站 |
| 56 | -[TorchRec介绍](https://pytorch.org/torchrec) | 64 | + |
| 65 | +[TorchRec介绍](https://meta-pytorch.org/torchrec/) | ||
| 57 | 66 | ||
| 58 | [TorchRec开源项目](https://github.com/pytorch/torchrec) | 67 | [TorchRec开源项目](https://github.com/pytorch/torchrec) |
| @@ -1,6 +1,53 @@ | |||
| 1 | -## 精度测试脚本 | 1 | +# torchrec_embcache测试套件 |
| 2 | -### 执行脚本 | 2 | + |
| 3 | +本目录包含torchrec_embcache组件的多个测试用例,用于验证**多级缓存模式下**EmbcacheEmbeddingCollection,EmbcacheEmbeddingBagCollection的功能和精度正确性。 | ||
| 4 | + | ||
| 5 | +> 说明 | ||
| 6 | +> | ||
| 7 | +> EmbcacheEmbeddingCollection为torchrec_embcache组件新增的稀疏表实现,对应TorchRec原生的EmbeddingCollection。 | ||
| 8 | +> | ||
| 9 | +> EmbcacheEmbeddingBagCollection为torchrec_embcache组件新增的稀疏表实现,对应TorchRec原生的EmbeddingBagCollection。 | ||
| 10 | + | ||
| 11 | +## 目录结构 | ||
| 12 | + | ||
| 13 | +```text | ||
| 14 | +acc_test/ | ||
| 15 | +├── README.md # 测试用例说明文档 | ||
| 16 | +├── dataset.py # 数据集定义和随机数据生成器 | ||
| 17 | +├── model.py # 测试模型定义 | ||
| 18 | +├── run_test.sh # 执行所有测试用例的脚本 | ||
| 19 | +├── test_embedding_cache_pipeline.py # 测试多级缓存pipeline+EmbcacheBagEmbeddingCollection的功能和精度 | ||
| 20 | +├── test_embedding_ec_cache_aggregation.py # 测试多级缓存pipeline+EmbcacheEmbeddingCollection+梯度累积优化器的功能和精度 | ||
| 21 | +├── test_embedding_ec_cache_pipeline.py # 测试多级缓存pipeline+EmbcacheEmbeddingCollection的功能和精度 | ||
| 22 | +├── test_feature_filter.py # 测试(基于特征时间戳和计数)特征准入淘汰功能 | ||
| 23 | +├── test_kjt_with_time.py # 测试带时间戳的KeyedJaggedTensor功能 | ||
| 24 | +├── test_save_and_load.py # 测试保存和加载功能 | ||
| 25 | +├── test_show_click.py # 测试(基于特征展示次数和点击次数的加权分数)特征准入淘汰功能 | ||
| 26 | +└── util.py # 工具函数(日志设置等) | ||
| 27 | +``` | ||
| 28 | + | ||
| 29 | +## 运行测试 | ||
| 30 | + | ||
| 31 | +### 环境准备 | ||
| 32 | + | ||
| 33 | +请参见[README文档](../../README.md)安装torchrec_embcache及其依赖项。 | ||
| 34 | + | ||
| 35 | +### 运行单个测试 | ||
| 3 | 36 | ||
| 4 | ```bash | 37 | ```bash |
| 38 | +# 运行单个测试文件示例 | ||
| 39 | +pytest test_embedding_cache_pipeline.py | ||
| 40 | +``` | ||
| 41 | + | ||
| 42 | +### 运行所有测试 | ||
| 43 | + | ||
| 44 | +```bash | ||
| 45 | +# 使用提供的脚本运行测试 | ||
| 5 | bash run_test.sh | 46 | bash run_test.sh |
| 6 | ``` | 47 | ``` |
| 48 | + | ||
| 49 | +## 注意事项 | ||
| 50 | + | ||
| 51 | +1. 确保在NPU环境下运行测试 | ||
| 52 | +2. 分布式测试需要足够的NPU资源(大部分用例需2张NPU卡,保存和加载测试用例需3张NPU卡) | ||
| 53 | +3. 测试数据是随机生成的,结果可能因种子而异 | ||


问题类型: 编码规范
问题描述: README.md 中"模式适配样例"表格的 GR 模型两行说明列格式不统一,一行使用
<br>换行另一行没有。文件路径: README.md
代码行号: 131
修改建议: 统一表格中多行内容的格式,建议都使用
<br>换行或添加额外列区分不同实现。