timesFM安装记录
1、conda命令安装环境
conda create -n timesFM_test python=3.10
激活虚拟环境timesFM_test
在该虚拟环境下进行以下几步
2、安装pyenv
curl https://pyenv.run | bash
3、修改~/.bashrc
在文件中增加以下几行
export PYENV_ROOT="$HOME/.pyenv"
[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init - bash)"
4、刷新环境变量
source ~/.bashrc
5、检查pyenv是否安装完成
pyenv --version
6、安装poetry
pip install poetry
poetry --version # 检查是否安装成功
7、安装python
①python 3.10.15(PAX(或JAX)版本:timesfm-2.0-500m-jax)
pyenv install 3.10.15
pyenv versions
显示3.10.15
②python 3.11.11(pytorch版本:timesfm-2.0-500m-pytorch)
pyenv install 3.11.11
pyenv versions
8、指定项目使用的 Python 版本(此处为 3.10.15)的命令
必须在指定文件夹的目录下
poetry env use 3.10.15
poetry lock # 重新解析依赖关系并更新poetry.lock
poetry install -E pax
poetry install -E pax
安装项目依赖,并额外安装名为 pax
的可选依赖组
可能会出现:
这个时候可以通过pip安装
pip install scipy --index-url https://mirrors.aliyun.com/pypi/simple/
poetry sync
但是有些是可以安装成功的,就比如numpy、certifi、pygments可以安装成功
scipy总是安装失败,可能是通过 pip install --index-url
直接安装的 scipy
仅存在于 Python 环境,但 Poetry 依赖 pyproject.toml
和 poetry.lock
管理依赖。若 scipy
未在 Poetry 配置中声明,执行 poetry install
时会重新安装以保持一致性。
或者可以尝试:
配置原名称和URL,通过源名称安装
poetry source add aliyun https://mirrors.aliyun.com/pypi/simple/
poetry add nvidia-nvjitlink-cu12 --source aliyun
之后:
9、指定项目使用的 Python 版本(此处为 3.11.11)的命令
pyenv local 3.11.11
poetry env use 3.11.11
poetry lock
poetry install -E torch
10、需要安装timesfm
pip install timesfm[torch] -i 镜像
pip isntall timesfm[pax] -i 镜像
11、运行程序
from datetime import datetime, timedeltaimport numpy as np
import pandas as pd
import pytest
import matplotlib.pyplot as plt
import timesfmdata_1 = {'unique_id': ['ID_1'] * 144,'ds': pd.date_range(start='2018-12-01', periods=144, freq='MS').tolist(),'values': [112, 118, 132, 129, 121, 135, 148, 148, 136, 119, 104, 118, 115,126, 141, 135, 125, 149, 170, 170, 158, 133, 114, 140, 145, 150,178, 163, 172, 178, 199, 199, 184, 162, 146, 166, 171, 180, 193,181, 183, 218, 230, 242, 209, 191, 172, 194, 196, 196, 236, 235,229, 243, 264, 272, 237, 211, 180, 201, 204, 188, 235, 227, 234,264, 302, 293, 259, 229, 203, 229, 242, 233, 267, 269, 270, 315,364, 347, 312, 274, 237, 278, 284, 277, 317, 313, 318, 374, 413,405, 355, 306, 271, 306, 315, 301, 356, 348, 355, 422, 465, 467,404, 347, 305, 336, 340, 318, 362, 348, 363, 435, 491, 505, 404,359, 310, 337, 360, 342, 406, 396, 420, 472, 548, 559, 463, 407,362, 405, 417, 391, 419, 461, 472, 535, 622, 606, 508, 461, 390,432]
}
train_data = pd.DataFrame(data_1)
# tfm = timesfm.TimesFm(
# hparams=timesfm.TimesFmHparams(
# backend="gpu",
# per_core_batch_size=32,
# horizon_len=18,
# # use_positional_embedding=False,
# ),
# checkpoint=timesfm.TimesFmCheckpoint(
# huggingface_repo_id="google/timesfm-2.0-500m-jax"),
# )
tfm = timesfm.TimesFm(hparams=timesfm.TimesFmHparams(backend="gpu",per_core_batch_size=32,horizon_len=18,use_positional_embedding=False,num_layers=50,),checkpoint=timesfm.TimesFmCheckpoint(version = 'torch',path ="/home/sjw/TimesFM_main/timesfm_main/timesfm-2.0-500m-pytorch/torch_model.ckpt",local_dir= "/home/sjw/TimesFM_main/timesfm_main/timesfm-2.0-500m-pytorch"),# checkpoint=timesfm.TimesFmCheckpoint(# huggingface_repo_id="google/timesfm-2.0-500m-jax"),)forecast = tfm.forecast_on_df(inputs=train_data,freq='MS',num_jobs=-1,
)plt.figure(figsize=(14, 8))
plt.plot(train_data['ds'], train_data['values'], label='Actuals', marker='o', linestyle='-', color='blue')
plt.plot(forecast['ds'], forecast['timesfm'], label='Forecast', marker='o', linestyle='--', color='orange')
plt.fill_between(forecast['ds'], forecast['timesfm-q-0.1'], forecast['timesfm-q-0.9'], color='orange', alpha=0.2,label='90% Confidence Interval')
plt.title('Actuals and Forecasts with Prediction Intervals', fontsize=16)
plt.xlabel('Date', fontsize=14)
plt.ylabel('Values', fontsize=14)
plt.legend(fontsize=12)
plt.grid(True)
plt.tight_layout()
plt.savefig('forecast_plot.png', dpi=300, bbox_inches='tight')
plt.show()
运行结果: