README.md 6 KB
Newer Older
suily's avatar
suily committed
1
# TimesFM
suily's avatar
suily committed
2
3
4
5
## 论文
`A decoder-only foundation model for time-series forecasting`
- https://arxiv.org/abs/2310.10688
## 模型结构
suily's avatar
suily committed
6
TimesFM是一种基于区块的decoder-only的模型,应用了自注意力机制和传统的位置编码,主要由三个组件组成:输入层、Transformer层和输出层。
suily's avatar
suily committed
7
8
9
10
11
12

<div align=center>
    <img src="./doc/timesfm.png"/>
</div>

## 算法原理
suily's avatar
suily committed
13
1、输入层:将时间序列数据分割成相等长度的时序数据块(patch),然后通过残差块对每个时序数据块进行线性变化,进而得到Token。
suily's avatar
suily committed
14

suily's avatar
suily committed
15
2、Transformer层:应用了位置编码和自注意力机制。位置编码将时间信息注入Token(令牌)序列;自注意力允许模型学习序列中不同标记之间的依赖关系和关系;位置编码介入自注意力的构造意味着模型可以适应数据中不同的时间粒度和频率。
suily's avatar
suily committed
16

suily's avatar
suily committed
17
3、输出层:使用层归一化和残差连接,将输出Token映射到最终预测。
suily's avatar
suily committed
18

suily's avatar
suily committed
19
20
21
22
23
24
25
TimesFM在真实世界的大型时间序列语料库上进行了预训练,可以为未见过的数据集生成可变长度的预测。

<div align=center>
    <img src="./doc/timesfm.png"/>
</div>

## 环境配置
suily's avatar
suily committed
26
27
注意:本仓库中的tensorflow只应用于长期基准测试读取数据集,运行源码发生了OOM错误,目前认为是tf-gpu与jax-gpu的内存分配冲突导致:-[GPU memory allocation — JAX documentation](https://jax.readthedocs.io/en/latest/gpu_memory_allocation.html)
解决方法:
suily's avatar
suily committed
28
29
30
31
32
```
1、安装tf-gpu,但在timesfm/experiments/long_horizon_benchmarks/data_loader.py中添加:
tf.config.experimental.set_visible_devices([], "GPU")
2、安装tf-cpu
```
suily's avatar
suily committed
33
-v 路径、docker_name和imageID根据实际情况修改
suily's avatar
suily committed
34
### Docker(方法一)
suily's avatar
suily committed
35
```
suily's avatar
suily committed
36
37
docker pull image.sourcefind.cn:5000/dcu/admin/base/jax:0.4.23-ubuntu20.04-dtk24.04-py310
docker run -it --network=host --privileged=true --name=docker_name --device=/dev/kfd --device=/dev/dri --group-add video --shm-size=32G  --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -v /path/your_code_data/:/path/your_code_data/ imageID /bin/bash
suily's avatar
suily committed
38

suily's avatar
suily committed
39
40
cd /your_code_path/timesfm
pip install -r requirements.txt
suily's avatar
suily committed
41
pip install tensorflow-2.13.1+das1.0+git429d21b.abi1.dtk2404-cp310-cp310-manylinux2014_x86_64.whl(或 tensorflow-cpu==2.13.1)
suily's avatar
suily committed
42
```
suily's avatar
suily committed
43
44
45
46
47
### Dockerfile(方法二)
```
cd ./docker
docker build --no-cache -t timesfm:latest .
docker run -it --network=host --privileged=true --name=docker_name --device=/dev/kfd --device=/dev/dri --group-add video --shm-size=32G  --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -v /path/your_code_data/:/path/your_code_data/ imageID /bin/bash
suily's avatar
suily committed
48

suily's avatar
suily committed
49
50
cd /your_code_path/timesfm
pip install -r requirements.txt
suily's avatar
suily committed
51
pip install tensorflow-2.13.1+das1.0+git429d21b.abi1.dtk2404-cp310-cp310-manylinux2014_x86_64.whl (或 tensorflow-cpu==2.13.1)
suily's avatar
suily committed
52
53
54
55
56
57
58
```
### Anaconda(方法三)
1、关于本项目DCU显卡所需的特殊深度学习库可从光合开发者社区下载安装: https://developer.hpccube.com/tool/
```
DTK软件栈:dtk24.04
python:python3.10
jax:0.4.23
suily's avatar
suily committed
59
tensorflow:2.13.1 (或 tensorflow-cpu==2.13.1)
suily's avatar
suily committed
60
61
```
`Tips:以上dtk软件栈、python、jax等DCU相关工具版本需要严格一一对应`
suily's avatar
suily committed
62

suily's avatar
suily committed
63
2、其他非特殊库直接按照下面步骤进行安装
suily's avatar
suily committed
64
```
suily's avatar
suily committed
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
cd /your_code_path/timesfm
pip install -r requirements.txt
```
## 数据集
基准测试数据集运行时会gluonts自动下载,长期基准测试数据集需从Google Drive手动下载(需要魔法):
- https://drive.google.com/file/d/1alE33S1GmP5wACMXaLu50rDIoVzBM4ik/view?usp=share_link
下载完成后,将数据解压到datasets目录下,若有自订目录需求,可修改timesfm/experiments/long_horizon_benchmarks/run_eval.py:
```
DATA_DICT = {
    "ettm2": {
        "boundaries": [34560, 46080, 57600],
        "data_path": "./datasets/ETT-small/ETTm2.csv",  # 修改数据集存放路径
        "freq": "15min",
    },
    ...
}
```
长期基准测试数据集目录结构如下:
```
 ── datasets
    │   ├── electricity
    │             ├── electricity.csv
    │   ├── ETT-small
    │             ├── ETTh1.csv
    │             ├── ETTh2.csv
    │             ├── ETTh1.csv
    │             └── ETTm1.csv
    │   ├── exchange_rate
    │             └── exchange_rate.csv
    │   ├── illness
    │             └── national illness.csv
    │   ├── traffic
    │             └── traffic.csv
    │   └── weather
    │             └── weather.csv
```
## 训练
官方暂未开放
## 推理
检查点可通过以下方式进行下载:
-https://hf-mirror.com/google/timesfm-1.0-200m
```
suily's avatar
suily committed
107
# "model"是存储目录,可自订
suily's avatar
suily committed
108
109
110
111
112
1、通过git
cd timesfm
git clone https://hf-mirror.com/google/timesfm-1.0-200m model
2、通过huggingface-cli
cd timesfm
suily's avatar
suily committed
113
export HF_DATASETS_CACHE="path/timesfm/model"
suily's avatar
suily committed
114
115
116
export HF_ENDPOINT=https://hf-mirror.com  # 设置下载地址
huggingface-cli download --resume-download google/timesfm-1.0-200m --local-dir model
```
suily's avatar
suily committed
117
推理运行代码:
suily's avatar
suily committed
118
```
suily's avatar
suily committed
119
120
121
cd timesfm
sh train.sh 
# 由于基准测试未直接提供调用数据集的接口,须在代码内部手动进行更改:修改timesfm/experiments/extended_benchmarks/run_timesfm.py:dataset_names内填入所需数据集name
suily's avatar
suily committed
122
123
124
```
## result
此处填算法效果测试图(包括输入、输出)
suily's avatar
suily committed
125

suily's avatar
suily committed
126
<!-- <div align=center>
suily's avatar
suily committed
127
    <img src="./doc/xxx.png"/>
suily's avatar
suily committed
128
</div> -->
suily's avatar
suily committed
129

suily's avatar
suily committed
130
131
### 精度
k100和A800精度相差不到0.01%
suily's avatar
suily committed
132

suily's avatar
suily committed
133
134
135
136
137
138
139
140
141
142
143
144
测试数据:
```
1、基准测试:
"ett_small_15min",
"traffic",
"m3_quarterly",
"m3_yearly",
"tourism_yearly"
2、长期基准测试:
"etth1",
"ettm1"
```
suily's avatar
suily committed
145

suily's avatar
suily committed
146
147
148
149
150
151
152
153
154
155
156
157
158
159
根据测试结果情况填写表格:
| xxx | xxx | xxx | xxx | xxx |
| :------: | :------: | :------: | :------: |:------: |
| xxx | xxx | xxx | xxx | xxx  |
| xxx | xx | xxx | xxx | xxx |
## 应用场景
### 算法类别
`时序预测`
### 热点应用行业
`交通,零售,金融,气象`
## 源码仓库及问题反馈
- https://developer.hpccube.com/codes/modelzoo/timesfm_jax
## 参考资料
- https://github.com/google-research/timesfm