README.md 4.77 KB
Newer Older
chenzk's avatar
v1.0  
chenzk committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# iTransformer
iTransformer可以跨多个时间步查看一个特征,能高效利用长程时序特征,本步骤适于时序预测库neuralforecast中的iTransformer算法,其它算法的使用依此类推。
## 论文
`iTransformer: Inverted Transformers Are Effective for Time Series Forecasting`
- https://arxiv.org/pdf/2310.06625

## 模型结构
采用标准的transformer decoder结构,对于backbone,无需修改transformer标准结构的代码即可实现本算法。
<div align=center>
    <img src="./doc/transformer.png"/>
</div>

## 算法原理
iTransformer通过简单地转置输入的形状来实现跨多个时间步查看一个特征,模型不是对输入的子序列进行令牌化,而是对整个输入序列进行令牌化,通过这种方式,注意力层可以专注于学习多元相关性,而前馈网络则负责对整个输入序列进行编码。
<div align=center>
    <img src="./doc/iTransformer.png"/>
</div>

## 环境配置
```
mv neuralforecast-itransformer_pytorch neuralforecast # 去框架名后缀
```

### Docker(方法一)
```
dcuai's avatar
dcuai committed
26
27
docker pull image.sourcefind.cn:5000/dcu/admin/base/pytorch:2.1.0-ubuntu20.04-dtk24.04.1-py3.10
# <your IMAGE ID>为以上拉取的docker的镜像ID替换
chenzk's avatar
v1.0  
chenzk committed
28
29
30
31
32
33
34
35
36
37
38
39
40
docker run -it --shm-size=32G -v $PWD/neuralforecast:/home/neuralforecast -v /opt/hyhal:/opt/hyhal:ro --privileged=true --device=/dev/kfd --device=/dev/dri/ --group-add video --name neuralforecast <your IMAGE ID> bash
cd /home/neuralforecast
pip install -r requirements.txt # requirements.txt
```
### Dockerfile(方法二)
```
cd neuralforecast/docker
docker build --no-cache -t neuralforecast:latest .
docker run --shm-size=32G --name neuralforecast -v /opt/hyhal:/opt/hyhal:ro --privileged=true --device=/dev/kfd --device=/dev/dri/ --group-add video -v $PWD/../../neuralforecast:/home/neuralforecast -it neuralforecast bash
# 若遇到Dockerfile启动的方式安装环境需要长时间等待,可注释掉里面的pip安装,启动容器后再安装python库:pip install -r requirements.txt。
```
### Anaconda(方法三)
1、关于本项目DCU显卡所需的特殊深度学习库可从光合开发者社区下载安装:
chenzk's avatar
chenzk committed
41
- https://developer.sourcefind.cn/tool/
chenzk's avatar
v1.0  
chenzk committed
42
```
dcuai's avatar
dcuai committed
43
44
DTK驱动:dtk24.04.1
python:python3.10
chenzk's avatar
v1.0  
chenzk committed
45
46
47
48
49
50
51
52
53
54
55
56
torch:2.1.0
torchvision:0.16.0
```

`Tips:以上dtk驱动、python、torch等DCU相关工具版本需要严格一一对应。`

2、其它非特殊库参照requirements.txt安装
```
pip install -r requirements.txt # requirements.txt
```

## 数据集
dcuai's avatar
dcuai committed
57
本步骤说明采用LongHorizon中的`ETTm2` (推荐使用SCNet高速通道下载)
chenzk's avatar
v1.0  
chenzk committed
58
59
- https://nhits-experiments.s3.amazonaws.com/datasets.zip

chenzk's avatar
v1.0.1  
chenzk committed
60
mini数据集为ETT-small.zip,解压即可使用,数据目录结构如下:
chenzk's avatar
v1.0  
chenzk committed
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
```
ETT-small/longhorizon/datasets/ETTm2
    ├── df_x.csv
    ├── df_y.csv
    ├── M
    ├── ├── df_x.csv
    ├── └── df_y.csv
    └── S
    ├── ├── df_x.csv
    ├── └── df_y.csv
```

## 训练
### 单机单卡
```
export HIP_VISIBLE_DEVICES=0
cd neuralforecast
python trainval.py # 该库中的iTransformer目前仅支持单指标预测的训练与推理,多指标预测敬请等待作者开源。
```
更多资料可参考源项目的[`README_origin`](./README_origin.md)

## 推理
```
export HIP_VISIBLE_DEVICES=0
python infer.py
# 默认按天预测, 故pred_len为96。
```

## result
chenzk's avatar
v1.0.1  
chenzk committed
90
`输入:`
chenzk's avatar
v1.0  
chenzk committed
91
92
93
94
95
96
97
98
99
100
101
102
```
ds,unique_id,y
2016-07-01 00:00:00,OT,1.0180321560148238
2016-07-01 00:15:00,OT,0.9801244795019736
2016-07-01 00:30:00,OT,0.9042228236873991
2016-07-01 00:45:00,OT,0.8852256693365586
                   ...
2018-02-20 23:00:00,OT,-1.5813253301696957
2018-02-20 23:15:00,OT,-1.5813253301696957
2018-02-20 23:30:00,OT,-1.5623282581688442
2018-02-20 23:45:00,OT,-1.5623282581688442
```
chenzk's avatar
v1.0.1  
chenzk committed
103
`输出:`
chenzk's avatar
v1.0  
chenzk committed
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
```
      unique_id     ds               iTransformer
0         OT 2018-02-21 00:00:00     -1.567348
1         OT 2018-02-21 00:15:00     -1.577499
2         OT 2018-02-21 00:30:00     -1.579781
3         OT 2018-02-21 00:45:00     -1.587281
4         OT 2018-02-21 01:00:00     -1.578477
                  ...
92        OT 2018-02-21 23:00:00     -1.569653
93        OT 2018-02-21 23:15:00     -1.546048
94        OT 2018-02-21 23:30:00     -1.561576
95        OT 2018-02-21 23:45:00     -1.542416
```

### 精度
测试数据:[`ETTm2`](./ETT-small/longhorizon/datasets/ETTm2/df_y.csv)中划出一部分作验证集,max_steps=1000,推理框架:pytorch。

|  device   | valid_loss |
|:---------:|:----------:|
| DCU Z100L |   0.226   |
| GPU V100S |   0.224   |

## 应用场景
### 算法类别
`时序预测`
### 热点应用行业
`金融,运维,电商,制造,能源,医疗`
## 源码仓库及问题反馈
chenzk's avatar
chenzk committed
132
- http://developer.sourcefind.cn/codes/modelzoo/neuralforecast-itransformer_pytorch.git
chenzk's avatar
v1.0  
chenzk committed
133
134
## 参考资料
- https://github.com/thuml/iTransformer.git