TensorFlow 集成和目录结构
本页介绍如何将 Tensorflow 模型导入 Vertica、对 Vertica 数据库中的数据进行预测、导出模型以使其可在其他 Vertica 群集或第三方平台上使用。
有关每个操作的从头到尾的示例,请参阅 TensorFlow 示例。
Vertica 支持借助于 TensorFlow 1.x 和 2.x 创建的模型,但强烈建议使用 2.x 来创建模型。
要将 TensorFlow 与 Vertica 结合使用,请在任何节点上安装 TFIntegration UDX 包。您只需执行一次该操作:
$ /opt/vertica/bin/admintools -t install_package -d database_name -p 'password' --package TFIntegration
TensorFlow 模型的目录和文件结构
在导入模型之前,您应当为每个模型创建一个单独的目录,其中包含以下各项之一。请注意,Vertica 在导入时使用目录名称作为模型名称:
-
model_name.pb
:冻结图格式的训练模型 -
tf_model_desc.json
:模型的描述
您可以使用 Machine-Learning-Examples/TensorFlow
存储库(或 opt/vertica/packages/TFIntegration/examples
)中包含的脚本 freeze_tf2_model.py
来为给定的 TensorFlow 2 模型生成两个文件,但您可能需要根据您的用例以及您希望 Vertica 数据库与模型交互的方式对描述进行修改:
$ python3 Tensorflow/freeze_tf2_model.py your/model/directory
例如,tf_models
目录包含两个模型 tf_mnist_estimator
和 tf_mnist_keras
:
tf_models/
├── tf_mnist_estimator
│ ├── mnist_estimator.pb
│ └── tf_model_desc.json
└── tf_mnist_keras
├── mnist_keras.pb
└── tf_model_desc.json
tf_model_desc.json
tf_model_desc.json
文件构成了 TensorFlow 和 Vertica 之间的桥梁。它描述了模型的结构,以便 Vertica 可以将其输入和输出正确匹配到输入/输出表。
请注意,freeze_tf2_model.py
脚本会自动为您的模型生成此文件,并且此生成的文件通常可以按原样使用。对于较复杂的模型或用例,您可能必须编辑此文件。有关每个字段的详细分类,请参阅tf_model_desc.json 概述。
将 TensorFlow 模型导入 Vertica
要导入 TensorFlow 模型,请使用 IMPORT_MODELS 和类别 'TENSORFLOW'
。
导入单个模型。请记住,Vertica 数据库使用目录名称作为模型名称:
select IMPORT_MODELS ( '/path/tf_models/tf_mnist_keras' USING PARAMETERS category='TENSORFLOW');
import_models
---------------
Success
(1 row)
使用通配符 (*) 导入目录中的所有模型(每个模型都有自己的目录):
select IMPORT_MODELS ('/path/tf_models/*' USING PARAMETERS category='TENSORFLOW');
import_models
---------------
Success
(1 row)
使用导入的 TensorFlow 模型进行预测
导入 TensorFlow 模型后,您可以使用该模型来预测 Vertica 表中的数据。
PREDICT_TENSORFLOW 函数与其他预测函数的不同之处在于它不接受任何影响输入列的参数,例如 "exclude_columns" 或 "id_column";相反,该函数总是对提供的所有输入列进行预测。但是,它确实接受 num_passthru_cols
参数,该参数允许用户“跳过”一些输入列,如下所示。
OVER(PARTITION BEST) 子句告知 Vertica 跨多个节点并行化操作。有关详细信息,请参阅窗口分区子句:
=> select PREDICT_TENSORFLOW (*
USING PARAMETERS model_name='tf_mnist_keras', num_passthru_cols=1)
OVER(PARTITION BEST) FROM tf_mnist_test_images;
--example output, the skipped columns are displayed as the first columns of the output
ID | col0 | col1 | col2 | col3 | col4 | col5 | col6 | col7 | col8 | col9
----+------+------+------+------+------+------+------+------+------+------
1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0
3 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0
6 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0
...
导出 TensorFlow 模型
Vertica 将模型导出为冻结图,然后可以随时重新导入。请记住,保存为冻结图的模型无法进一步训练。
使用 EXPORT_MODELS 导出 TensorFlow 模型。例如,要将 tf_mnist_keras
模型导出到 /path/to/export/to
目录:
=> SELECT EXPORT_MODELS ('/path/to/export/to', 'tf_mnist_keras');
export_models
---------------
Success
(1 row)
导出 TensorFlow 模型时,Vertica 数据库会创建并使用指定的目录来存储描述模型的文件:
$ ls tf_mnist_keras/
crc.json metadata.json mnist_keras.pb model.json tf_model_desc.json
.pb
和 tf_model_desc.json
文件描述了模型,其余文件是由 Vertica 数据库创建的组织文件。