将机器学习模型应用于 InfluxDB,结合 Loud ML 和 Docker 进行时间序列预测
作者:Anais Dotis-Georgiou / 产品, 用例, 开发者
2018年8月10日
导航至
我喜欢学习数据科学。我喜欢尝试各种机器学习模型,以了解何时使用它们、它们如何工作以及如何评估它们。然而,直接深入研究机器学习是令人生畏的。我想创建本教程,向数据科学爱好者展示如何使用 Loud ML 和 InfluxDB 将高性能机器学习模型快速应用于您的时间序列数据。
本教程将涵盖以下主题
- 如何在桥接网络上创建和配置 InfluxDB、Loud ML 和 Chronograf Docker 容器
- 如何使用 Loud ML 在 InfluxDB 数据库上训练机器学习模型以预测值
- 如何使用 Chronograf 查看这些预测
- 1 键机器学习预览
此项目的代码仓库可以在这里找到。对于本项目,我选择对来自默认 telegraf 数据库的 average_usage_system
字段进行离线预测。请记住,我没有保持 InfluxDB 运行,因此数据非常稀疏。对于良好的机器学习 (ML) 预测来说,这是一个糟糕的选择。但是,我选择使用这些数据是因为它易于访问,并且可以让您更轻松地入门。虽然本教程仅涵盖离线 ML,但请注意,Loud ML 也提供在线 ML 功能。如果您是 Docker 的新手,您可能需要查看 Docker 新手提示。在那篇文章中,我回顾了作为 Docker 新手所犯的错误,以及如何避免这些错误的一些技巧。
1. 如何在桥接网络上创建和配置 InfluxDB、Loud ML 和 Chronograf Docker 容器
一图胜千言。这是我们希望 Docker 网络的样子。我们将 172.18.0.0 细分为三个子网(172.18.0.77、172.18.0.88、172.18.0.86),每个子网根据 IPv4 协议有 24 位。这些子网中的每一个都分配给一个端口,以便定义特定系统上特定服务的地址。
- 创建一个名为 "loudml2" 的网络,并使用
--subnet
选项直接指定子网值。
docker network create --subnet=172.18.0.0/24 loudml2
- 找到 InfluxDB 存储数据的位置。在本教程中,我使用的是默认的 telegraf 数据库。
$INFLUXDB="/usr/local/var/influxdb"
- 设置本地存储以与容器共享,并创建 config 和模型文件 (
$LOUDMLTEL="/Users/anaisdotis-georgiou/ContainerData/LoudML2"
)。
mkdir $LOUDMLTEL/chronograf
cd $LOUDMLTEL
touch config.yml
touch influxdb.conf
touch model.json
- 修改
config.yml
datasources:
- name: telegraf
type: influxdb
addr: 172.18.0.86:8086
database: telegraf
storage:
path: /var/lib/loudml
server:
listen: 0.0.0.0:8077
- 修改
influxdb.conf
。确保您的数据位置与您的$INFLUXDB
匹配
[meta]
# Where the metadata/raft database is stored
dir = "/usr/local/var/influxdb/meta"
[data]
# The directory where the TSM storage engine stores TSM files.
dir = "/usr/local/var/influxdb/data"
# The directory where the TSM storage engine stores WAL files.
wal-dir = "/usr/local/var/influxdb/wal"
- 修改
model.json
{
"offset": "30s",
"features": {
"io": [
{
"metric": "avg",
"field": "usage_system",
"name": "mean_usage_system",
"default": 0,
"measurement": "cpu",
"anomaly_type": "low_high"
}
]
},
"bucket_interval": "5m",
"min_threshold": 75,
"max_threshold": 95,
"name": "telegraf",
"default_datasource": "telegraf",
"interval": "1m",
"max_evals": 5,
"type": "timeseries",
"span": 10,
"forecast": 5,
"seasonality": {
"daytime": true,
"weekday": true
}
}
"anomaly_type":"low-high"
指定过“低”或过“高”的值都将包含在异常检测中。
"min_threshold": 75
& "max_threshold": 95
指定异常检测的阈值。这些值是随机选择的,因为我的数据集非常稀疏,我不期望能够执行准确的异常检测。
"bucket_interval": "30m"
找到合适的 bucket 聚合间隔非常重要。数据在 bucket 间隔内取平均值。如果 bucket 间隔值太低,训练将花费很长时间,并且您有过度拟合的风险。选择过长的 bucket 间隔可能会导致模型不太敏感并平滑掉有趣的异常。通常,bucket 跨度倾向于在 10 分钟到 1 小时之间,或类似于异常之间的平均持续时间。跨度 (10*5m=50m) 确定将用于预测下一个值的 bucket 间隔的数量。
"interval": "1m"
指定运行实时异常检测的间隔。
"forecast": 5
最佳实践是将 forecast 设置为 ½span。
"seasonality": {"daytime": true, "weekday": true}
指定 `"seasonality": {"daytime": true, "weekday": true}` 是因为我倾向于在工作日的白天使用我的机器。
- 创建 InfluxDB 容器并绑定相应的目录和修改后的 influxdb.conf。
docker run -p 8086:8086 --net loudml2 --ip 172.18.0.86 --name influxdb2 -v $INFLUXDB:/var/lib/influxdb -v $LOUDMLTEL/influxdb.conf:/etc/influxdb/influxdb.conf:ro influxdb -config /etc/influxdb/influxdb.conf
- 创建 Chronograf 容器并绑定相应的目录和配置文件。
docker run -p 8888:8888 --net loudml2 --ip 172.18.0.77 --name chrono2 -v $LOUDMLTEL/chronograf:/var/lib/chronograf chronograf
- 创建 Loud ML 容器并绑定相应的目录和配置文件。
docker run -ti -p 8077:8077 --net loudml2 --ip 172.18.0.88 --name loudml2 -v $LOUDMLTEL:/var/lib/loudml:rw -v $LOUDMLTEL/config.yml:/etc/loudml/config.yml:ro -v $LOUDMLTEL/model.json:/etc/loudml/model.json:ro loudml/community
2. 如何使用 Loud ML 在 InfluxDB 数据库上训练机器学习模型并预测值
- 在
loudml2
容器内启动 bash shell
docker exec -ti loudml2 bash
以
- 导航到我们的
model.json
绑定的目录。
cd /etc/loudml
- 创建模型
loudml create-model model.json
- 训练模型
loudml train telegraf -f 2018-07-10 -t 2018-07-20 -m 5
- 预测值。使用
-s
将输出保存在 InfluxDB 中,以便您可以使用您喜欢的可视化工具。
loudml predict telegraf -f 2018-07-20 -t now -s
3. 如何使用 Chronograf 查看这些预测
- 访问 http://localhost:8888/
- 像这样连接
influxdb2
容器
- 查看您的预测。
4. 1 键机器学习预览
我喜欢 InfluxData 的一点是我们的开源产品。我们的社区发展迅速,因为 TICK Stack 的 OSS 版本功能强大且用途广泛。Telegraf 有超过 160 个插件,其中 153 个是由社区成员编写的。CERN 的研究人员使用 OSS 版本来帮助他们 “确定宇宙的基本结构”。Loud ML 是另一个典型的社区成功案例。Loud ML fork 了 InfluxData 的代码仓库,并在 Chronograf 中添加了 1 键机器学习,以支持其机器学习模型的配置和部署。Loud ML 使将 ML 模型应用于您的时间序列数据变得异常容易。相比之下,如果我决定单独使用 TensorFlow,我将不得不选择一个模型、评估它并调整它。这是一项繁重的工作,需要对时间序列数据的 ML 有深入的了解。幸运的是,我无需了解任何关于 ML 的知识即可使用 Loud ML 创建高性能模型并对其进行评估。使用 1 键机器学习,您只需单击一个按钮即可创建和训练模型。您只需查询您的数据,应用一个特征和聚合间隔,然后单击即可进行预测。
<figcaption> 标准 Chronograf 实例被替换为来自 LoudML 的 fork 版本,其中包含 1 键机器学习</figcaption>
训练完成后,您可以选择一个预测时间间隔来输出预测。
<figcaption> 来自 LoudML 的 Chronograf fork 版本,其中包含 1 键机器学习</figcaption>
观看此预览,了解 Loud ML 的 1 键机器学习,该功能将于 8 月底推出。
我希望本教程能帮助您开始您的时间序列 ML 之旅。如果您有任何问题,请在社区站点上发布或在 Twitter 上 @InfluxDB 告诉我们。特别感谢并祝贺 Sébastien Léger 和整个 Loud ML 团队。