发布者(Publisher):Huawei
应用领域(Application Domain): Click-Through-Rate
版本(Version):1.1
修改时间(Modified) :2022.10.26
大小(Size):237KB
框架(Framework):Pytorch 1.5.0
精度(Precision):Mixed
处理器(Processor):昇腾910
应用级别(Categories):Official
描述(Description):基于Pytorch框架的广告点击率预测模型xDeepFM训练代码
概述
xDeepFM模型是用于预测广告点击率的模型,为了实现自动学习显式的高阶特征交互,同时使得交互发生在向量级上,xDeepFM首先提出了一种新的名为压缩交互网络(Compressed Interaction Network,简称CIN)的模型 。
参考论文:
参考实现
适配昇腾 AI 处理器的实现:
默认配置
训练数据集、测试数据集预处理:
- 运行 data/forXDeepFM/xDeepFM_dataPreprocess_PyTorch.py 实现数据集预处理
- 运行命令(切换到forXDeepFM目录):python3 xDeepFM_dataPreprocess_PyTorch.py
训练超参
- Batch size: 2048
- Learning rate(LR): 0.01
- Optimizer: apex.optimizers.NpuFusedSGD
- Train epoch: 5
支持特性
特性列表 | 是否支持 |
---|---|
分布式训练 | 否 |
混合精度 | 是 |
并行数据 | 是 |
混合精度训练
昇腾910 AI处理器提供自动混合精度功能,可以针对全网中float32数据类型的算子,按照内置的优化策略,自动将部分float32的算子降低精度到float16,从而在精度损失很小的情况下提升系统性能并减少内存使用。
开启混合精度
已默认开启混合精度。
训练环境准备
硬件环境准备请参见各硬件产品文档"驱动和固件安装升级指南"。需要在硬件设备上安装与CANN版本配套的固件与驱动。
当前模型支持的镜像列表如表1所示。
表 1 镜像列表
- ARM架构:ascend-pytorch-arm
- x86架构:ascend-pytorch-x86
快速上手
- 数据集准备
模型训练使用Criteo数据集。
数据集训练前需要做预处理操作。
数据集处理后,对应路径下会产生训练集和测试集数据。
模型训练
单击“立即下载”,并选择合适的下载方式下载源码包。
启动训练之前,首先要配置程序运行相关环境变量。
环境变量配置信息参见:
单卡训练
配置训练参数。
首先准备好超参数:指定具体NPU, 若果是GPU则不需要指定
启动训练。
启动单卡GPU训练(切换到Model目录)
python3 xDeepFM_PyTorch_GPU_1P.py
启动单卡NPU训练(切换到Model目录)
python3 xDeepFM_PyTorch_NPU_1P.py
迁移学习指导
数据集准备。
数据集要求如下:
获取数据。
将下载的train.txt文件放到 data/Criteo 目录后,进行预处理数据集,产生的数据集存放路径如下:
- 训练集: /forXDeepFM/train_data
- 测试集: /forXDeepFM/test_data
数据集文件结构,目录参考:
|--|train_data | part-0 | part-1 | part-2 | ... |--|test_data | part-9 | part-42 | ...
高级参考
示例代码
├── data
│ ├── Criteo
│ ├── forXDeepFM
│ ├──xDeepFM_dataPreprocess.py //数据预处理代码
│ ├── aid_data
│ ├── raw_data
│ ├── test_data //测试集
│ ├── train_data //训练集
│ ├──train.txt
│ ├──util.py
│ ├──__init__.py
│ ├──__init__.py
├── Model
│ ├── common
│ ├── util
│ ├──xDeepFM_PyTorch.py //xDeepFM_PyTorch原代码
│ ├──xDeepFM_PyTorch_GPU_1P.py //GPU运行
│ ├──xDeepFM_PyTorch_NPU_1P.py //NPU迁移
├── output
│ ├── log //训练日志
│ ├── prof
├── util
│ ├──load_data_util.py
│ ├──train_model_util_PyTorch.py
│ ├──train_model_util_TensorFlow.py
├──LICENSE
├──README.md
训练过程
- 训练日志中包括如下信息。
[92m08-08 12:29:16[0m gpus_per_node:1
[92m08-08 12:29:31[0m Train Epoch: 1 [0 / 41130217 (0%)] Loss:0.753818
[92m08-08 12:32:41[0m Train Epoch: 1 [2048000 / 41130217 (5%)] Loss:0.485503
[92m08-08 12:35:50[0m Train Epoch: 1 [4096000 / 41130217 (10%)] Loss:0.462001
[92m08-08 12:38:58[0m Train Epoch: 1 [6144000 / 41130217 (15%)] Loss:0.480042
[92m08-08 12:42:07[0m Train Epoch: 1 [8192000 / 41130217 (20%)] Loss:0.467268
...
[92m08-08 17:53:26[0m Train Epoch: 5 [34816000 / 41130217 (85%)] Loss:0.450160
[92m08-08 17:56:35[0m Train Epoch: 5 [36864000 / 41130217 (90%)] Loss:0.476156
[92m08-08 17:59:30[0m Train Epoch: 5 [38912000 / 41130217 (95%)] Loss:0.465982
[92m08-08 18:02:38[0m Train Epoch: 5 [40960000 / 41130217 (100%)] Loss:0.475123
[92m08-08 18:02:42[0m FPS: 0.66
[92m08-08 18:08:46[0m Roc AUC: 0.80064
[92m08-08 18:08:46[0m Test set: Average loss: 0.44814
运行结果
- GPU
Epochs | AUC | LogLoss | Train(单步耗时s) |
---|---|---|---|
1st | 0.79872 | 0.45048 | 0.06606 |
2nd | 0.79959 | 0.44973 | 0.06581 |
3rd | 0.80052 | 0.44896 | 0.06576 |
4th | 0.80058 | 0.44855 | 0.06581 |
5th | 0.80064 | 0.44814 | 0.06621 |
- NPU
Epochs | AUC | LogLoss | Train(单步耗时s) |
---|---|---|---|
1st | 0.79868 | 0.45095 | 0.08454 |
2nd | 0.79981 | 0.44992 | 0.08446 |
3rd | 0.80034 | 0.44933 | 0.08444 |
4th | 0.80041 | 0.44931 | 0.08471 |
5th | 0.80045 | 0.44927 | 0.08438 |