blob: 5c3990aa51b6c69490eca7f16f46b3da1ef24164 [file] [view]
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->
# AINode 部署
## 1. AINode 介绍
### 1.1 能力介绍
AINode 是 IoTDB 在 ConfigNode、DataNode 后提供的第三种内生节点,该节点通过与 IoTDB 集群的 DataNode、ConfigNode 交互,扩展了对时间序列进行机器学习分析的能力。AINode 将模型的管理、训练及推理融合在数据库引擎中,支持使用注册的模型在指定时序数据上通过简单 SQL 语句完成时序分析任务,还支持注册并使用自定义机器学习模型。AINode 目前已集成常见时序分析场景(例如预测)的机器学习算法和自研模型。
### 1.2 部署模式
AINode 是 IoTDB 集群外的额外套件,采用独立安装包部署。
<div >
<img src="/img/ainode-deployment-upgrade-apache-1.png" alt="" style="width: 45%;"/>
<img src="/img/ainode-deployment-upgrade-apache-2.png" alt="" style="width: 45%;"/>
</div>
## 2. 安装准备
### 2.1 安装包获取
AINode 安装包(`apache-iotdb-<version>-ainode-bin.zip`)解压后关键目录结构如下:
| **目录** | **类型** | **说明** |
| ---------------- | ---------------- | ------------------------------------------ |
| lib | 文件夹 | AINode 的可执行程序及依赖 |
| sbin | 文件夹 | AINode 的运行脚本,用于启动或停止 AINode |
| conf | 文件夹 | AINode 的配置文件和版本声明文件 |
说明:AINode 支持通过源码编译的方式构建安装包,具体操作步骤可参考[AINode 构建](../Deployment-and-Maintenance/AINode_Deployment_apache.md#_4-ainode-构建)小节。
### 2.2 前置检查
为确保您获取的 AINode 安装包完整且正确,在执行安装部署前建议您进行 SHA512 校验。
**准备工作:**
* 获取官方发布的 SHA512 校验码:请联系天谋工作人员获取
**校验步骤(以 linux 为例):**
1. 打开终端,进入安装包所在目录(如`/data/ainode`):
```Bash
cd /data/ainode
```
2. 执行以下命令计算哈希值:
```Bash
sha512sum apache-iotdb-<version>-ainode-bin.zip
```
3. 终端输出结果(左侧为SHA512 校验码,右侧为文件名):
```SQL
(base) root@hadoop@1:/data/ainode (0.664s)
sha512sum apache-iotdb-2.0.5-ainode-bin.zip
b39039a1235a86bc3ce3df0a102efa215e281b5839683ccaf47883b390af4e686f99e6980a24a9d41348325f3518bd55ebb1c61a123495cbdc575dad8c695f28 apache-iotdb-2.0.5-ainode-bin.zip
```
4. 对比输出结果与官方 SHA512 校验码,确认一致后,即可按照下方流程执行 AINode 的安装部署操作。
**注意事项:**
* 若校验结果不一致,请联系天谋工作人员重新获取安装包
* 校验过程中若出现"文件不存在"提示,需检查文件路径是否正确或安装包是否完整下载
### 2.3 环境要求
* 建议操作环境: Linux, MacOS;
* IoTDB 版本:>= V 2.0.8-beta;
## 3. 安装部署及使用
### 3.1 安装 AINode
下载导入 AINode 到专用文件夹,切换到专用文件夹并解压安装包;
```Shell
unzip apache-iotdb-<version>-ainode-bin.zip
```
### 3.2 配置项修改
AINode 支持修改一些必要的参数。可以在 `/IOTDB_AINODE_HOME/conf/iotdb-ainode.properties` 文件中找到下列参数并进行持久化的修改:
| **名称** | **描述** | **类型** | **默认值** |
|-----------------------------------|----------------------------------------------| ---------------- | -------------------- |
| cluster\_name | AINode 要加入的集群标识 | string| defaultCluster |
| ain\_seed\_config\_node | AINode 启动时注册的 ConfigNode 地址 | String | 127.0.0.1:10710 |
| ain\_cluster\_ingress\_address | AINode 拉取数据的 DataNode 的 rpc 地址 | String | 127.0.0.1 |
| ain\_cluster\_ingress\_port | AINode 拉取数据的 DataNode 的 rpc 端口 | Integer | 6667 |
| ain\_cluster\_ingress\_username | AINode 拉取数据的 DataNode 的客户端用户名 | String | root |
| ain\_cluster\_ingress\_password | AINode 拉取数据的 DataNode 的客户端密码 | String | root |
| ain\_rpc\_address | AINode 提供服务与通信的地址 ,内部服务通讯接口 | String | 127.0.0.1 |
| ain\_rpc\_port | AINode 提供服务与通信的端口 | String | 10810 |
| ain\_system\_dir | AINode 元数据存储路径,相对路径的起始目录与操作系统相关,建议使用绝对路径 | String| data/AINode/system |
| ain\_models\_dir | AINode 存储模型文件的路径,相对路径的起始目录与操作系统相关,建议使用绝对路径 | String| data/AINode/models |
| ain\_thrift\_compression\_enabled | AINode 是否启用 thrift 的压缩机制,0-不启动、1-启动 | Boolean | 0 |
### 3.3 导入内置权重文件
若部署环境可联网且能连通 HuggingFace 环境,系统会自动拉取内置模型权重文件,可忽略本步骤。
若为离线环境,联系天谋工作人员获取模型权重文件夹,并放置到`/IOTDB_AINODE_HOME/data/ainode/models/builtin` 目录下。
**​NOTE:​**注意目录层级,最终所有内置模型权重的父目录都是 `builtin `。
### 3.4 启动 AINode
在完成 ConfigNode 的部署后,可以通过添加 AINode 来支持时序模型的管理和推理功能。在配置项中指定 IoTDB 集群的信息后,可以执行相应的指令来启动 AINode,加入 IoTDB 集群。
```Shell
# 启动命令
# Linux 和 MacOS 系统
bash sbin/start-ainode.sh
# Windows 系统
sbin\start-ainode.bat
# 后台启动命令(长期运行推荐)
# Linux 和 MacOS 系统
bash sbin/start-ainode.sh -d
# Windows 系统
bash sbin\start-ainode.bat -d
```
### 3.5 检测 AINode 节点状态
AINode 启动过程中会自动将新的 AINode 加入 IoTDB 集群。启动 AINode 后可以在命令行中输入 SQL 来查询,集群中看到 AINode 节点,其运行状态为 Running(如下展示)表示加入成功。
```Shell
IoTDB> show cluster
+------+----------+-------+---------------+------------+-------+-----------+
|NodeID| NodeType| Status|InternalAddress|InternalPort|Version| BuildInfo|
+------+----------+-------+---------------+------------+-------+-----------+
| 0|ConfigNode|Running| 127.0.0.1| 10710|UNKNOWN|190e303-dev|
| 1| DataNode|Running| 127.0.0.1| 10730|UNKNOWN|190e303-dev|
| 2| AINode|Running| 127.0.0.1| 10810|UNKNOWN|190e303-dev|
+------+----------+-------+---------------+------------+-------+-----------+
```
除此之外,还可以通过 show models 命令来查看模型状态。如果模型状态不对,请检查权重文件路径是否正确。
```Bash
IoTDB> show models
+---------------------+---------+--------+--------+
| ModelId|ModelType|Category| State|
+---------------------+---------+--------+--------+
| arima| sktime| builtin| active|
| holtwinters| sktime| builtin| active|
|exponential_smoothing| sktime| builtin| active|
| naive_forecaster| sktime| builtin| active|
| stl_forecaster| sktime| builtin| active|
| gaussian_hmm| sktime| builtin| active|
| gmm_hmm| sktime| builtin| active|
| stray| sktime| builtin| active|
| timer_xl| timer| builtin| active|
| sundial| sundial| builtin| active|
| chronos2| t5| builtin| active|
+---------------------+---------+--------+--------+
```
### 3.6 停止 AINode
如果需要停止正在运行的 AINode 节点,则执行相应的关停脚本,且支持通过参数 -p 指定端口,该端口为配置项中的 `ain_rpc_port`。
```Shell
# Linux / MacOS
bash sbin/stop-ainode.sh
bash sbin/stop-ainode.sh -p <port_id> # 指定端口
#Windows
sbin\stop-ainode.bat
sbin\stop-ainode.bat -p <port_id> # 指定端口
```
停止 AINode 后,还可以在集群中看到 AINode 节点,其运行状态为 UNKNOWN(如下展示),此时无法使用 AINode 功能。
```Shell
IoTDB> show cluster
+------+----------+-------+---------------+------------+-------+-----------+
|NodeID| NodeType| Status|InternalAddress|InternalPort|Version| BuildInfo|
+------+----------+-------+---------------+------------+-------+-----------+
| 0|ConfigNode|Running| 127.0.0.1| 10710|UNKNOWN|190e303-dev|
| 1| DataNode|Running| 127.0.0.1| 10730|UNKNOWN|190e303-dev|
| 2| AINode|UNKNOWN| 127.0.0.1| 10790|UNKNOWN|190e303-dev|
+------+----------+-------+---------------+------------+-------+-----------+
```
如果需要重新启动该节点,需重新执行启动脚本。
### 3.7升级 AINode
如果需要对当前 AINode 进行版本升级,可参考如下步骤:
1. 停止当前 AINode 服务
* 执行停止命令,确保服务完全退出后再进行后续操作
```Shell
# Linux / MacOS
bash sbin/stop-ainode.sh
bash sbin/stop-ainode.sh -p <port_id> # 指定端口
#Windows
sbin\stop-ainode.bat
sbin\stop-ainode.bat -p <port_id> # 指定端口
```
2. 替换核心文件
* 删除当前版本的`lib` 和 `sbin`目录,并将新版本的 `lib` 和 `sbin` 复制到对应位置
* 备份 conf 目录下已修改的配置文件,然后替换 conf 文件夹,并将修改的配置同步到对应位置
3. 更新内置模型权重(可选)
* 若新版本涉及内置模型更新,相关信息将在[发布历史](../IoTDB-Introduction/Release-history\_apache.md)中同步。可联系天谋工作人员获取最新权重包,并将权重包替换至 `data/ainode/models/builtin` 目录
4. 升级完毕后,可启动 AINode 服务,并查看节点状态,具体命令可参考【3.4】和【3.5】小节。
## 4. AINode 构建
AINode 支持通过如下方式构建安装包。
### 4.1 环境要求
* python: >=3.11.0,<3.12.0
* Maven :>= 3.6;
* Java:>= 1.8(已验证支持 1.8、11 至 17 版本,请确保环境变量路径已正确配置)。
### 4.2 操作步骤
1. 支持通过如下两种 maven 命令构建 AINode。
```Bash
# 同时构建 IoTDB 和 AINode 的指令
mvn clean package -pl distribution -P with-ainode -am -DskipTests
# 只构建 AINode 的指令
mvn clean package -pl iotdb-core/ainode -P with-ainode -am -DskipTests
```
注意:
* 首次编译前请注意 pip 和 poetry 源可访问。
* 在当前操作系统、架构下构建的 AINode,构建后可部署在对应系统及更新的版本上。例如,在 Ubuntu20 x86 构建的 AINode 可直接部署于 Ubuntu20、Ubuntu24 等。
2. 构建成功后,AINode 安装包的目录结构大致如下。
```Bash
.
├── conf
│ ├── git.properties
│ ├── iotdb-ainode.properties # AINode 配置文件
│ └── pom.properties
├── lib # 采用文件夹形式打包 AINode,有助于提升启动效率
│ ├── _internal # 内含 Python 解释器及全量 python 依赖,解决离线启动问题
│ └── ainode # AINode 可执行程序
├── LICENSE
├── licenses
│ ├── 'CDDL License 1.1'
│ ├── 'Eclipse Public License 1.0 (EPL-1.0)'
│ ├── 'Eclipse Public License version 2.0 (EPL-2.0)'
│ ├── 'The 2-Clause BSD License'
│ ├── 'The 3-Clause BSD License'
│ ├── 'The MIT License (progressbar)'
│ └── 'The MIT License (QOS.ch)'
├── NOTICE
├── README.md
├── README_ZH.md
├── RELEASE_NOTES.md
└── sbin # 部署脚本
├── start-ainode.sh
├── stop-ainode.sh
└── windows
```