使用Loud ML & Docker将机器学习模型应用于InfluxDB进行时序预测
作者:Anais Dotis-Georgiou / 产品,用例,开发者
2018年8月10日
导航至
我喜欢学习数据科学。我喜欢尝试各种机器学习模型,以了解何时使用它们,它们是如何工作的,以及如何评估它们。然而,一头扎进机器学习可能会感到害怕。我想创建这个教程,向数据科学爱好者展示您如何快速使用Loud ML和InfluxDB将高性能机器学习模型应用于您的时序数据。
本教程将涵盖以下主题
- 如何在桥接网络上创建和配置InfluxDB、Loud ML和Chronograf Docker容器
- 如何使用Loud ML在InfluxDB数据库上训练机器学习模型以预测值
- 如何使用Chronograf查看这些预测
- 一瞥一键机器学习
该项目仓库可以在这里找到。对于这个项目,我选择对默认的telegraf数据库中的average_usage_system
字段进行离线预测。请记住,我没有运行InfluxDB,因此数据非常稀疏。这并不是一个好的机器学习(ML)预测选择。然而,我选择使用这些数据,因为它们容易访问,并且更容易让您开始。虽然这个教程只覆盖离线ML,但请知道Loud ML还提供了在线ML功能。如果您是Docker新手,可能需要查看新Docker用户提示。在那篇文章中,我回顾了自己作为新Docker用户所犯的错误,以及如何避免这些错误的建议。
1. 如何在桥接网络上创建和配置InfluxDB、Loud ML和Chronograf Docker容器
一图胜千言。这是我们希望我们的Docker网络看起来像什么。我们将根据IPv4协议将172.18.0.0细分为三个子网(172.18.0.77、172.18.0.88、172.18.0.86),每个子网24位。每个子网分配给一个端口,以便定义特定系统上特定服务的地址。
- 创建一个名为"loudml2"的网络,并直接使用
--subnet
选项指定子网值。
docker network create --subnet=172.18.0.0/24 loudml2
- 找到InfluxDB存储数据的位置。对于本教程,我使用的是默认的telegraf数据库。
$INFLUXDB="/usr/local/var/influxdb"
- 设置本地存储以与容器共享,并创建配置和模型文件(
$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"
选择合适的桶聚合间隔非常重要。数据将在这个桶间隔内进行平均。如果桶间隔值过低,训练将花费很长时间,并且存在过拟合的风险。选择过长的桶间隔可能导致模型对异常不敏感,并平滑掉有趣的异常。通常桶跨度介于10分钟到1小时之间,或者与异常之间的平均持续时间相似。跨度(10*5m=50m)决定了用于预测下一个值的桶间隔数量。
"interval": "1m"
指定了运行实时异常检测的间隔。
"forecast": 5
最佳实践是将 forecast 设置为 span 的一半。
"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 查看这些预测
- 访问 https://127.0.0.1:8888/
- 按照这种方式连接
influxdb2
容器
- 查看您的预测。
4. 1-Click Machine Learning 的预览
我喜欢 InfluxData 的一个原因是我们的开源产品。由于 TICK Stack 的 OSS 版本功能强大且用途广泛,我们的社区已经取得了巨大的增长。Telegraf 有超过 160 个插件,其中153个是由社区成员编写的。CERN 的研究人员使用 OSS 版本来帮助他们“确定宇宙的基本结构”。Loud ML 是另一个典型的社区成功故事。Loud ML 从 InfluxData 的仓库中分叉出来,并将 1-Click Machine Learning 添加到 Chronograf 中,以支持机器学习模型的配置和部署。Loud ML 使将 ML 模型应用于时间序列数据变得非常简单。相比之下,如果我要单独使用 TensorFlow,我必须选择一个模型,评估它,并调整它。这是一项大量工作,需要对时间序列数据有深入的理解。幸运的是,我无需了解任何关于 ML 的知识,就可以使用 Loud ML 创建高性能模型并对其进行评估。通过 1-Click Machine Learning,您只需单击按钮即可创建和训练模型。您只需查询数据,应用特征和聚合间隔,然后点击预测。
<figcaption> 标准的 Chronograf 实例被替换为来自 LoudML 的分叉版本,该版本包括 1-Click ML</figcaption>
训练完成后,您可以选择一个预测时间间隔来输出预测。
<figcaption> 来自 LoudML 的 Chronograf 的分叉版本,包括 1-Click ML</figcaption>
看看这个预览,体验Loud ML的1-Click机器学习,将于8月底上线。
希望这篇教程能帮助您开始时间序列机器学习的旅程。如果您有任何问题,请到社区网站提问或通过@InfluxDB发推文。特别感谢和祝贺Sébastien Léger以及整个Loud ML团队。