使用指南

Oushu LittleBoy集成在Oushu Lava Cloud中,在左侧的一级菜单“LittleBoy”下,有5个二级菜单,如下图所示。下面将会逐一介绍每个菜单的功能和使用方法。

系统概览

1. AI集群

此部分内容包含在Oushu Lava Cloud的集群管理描述中,点击此处跳转

2. AI任务

“AI任务”页面是使用Oushu LittleBoy的主要入口。每个“任务”都保存了训练AI模型所需要的一系列配置。在“AI任务”的主页面上,可以很方便地查看或筛选系统里储存的任务,并且进行修改名称、查看详情、停止、删除等操作。

批量删除AI任务

每一行最左侧的复选框用来批量管理任务。选中所有想要删除的任务,并点击右上角的“批量删除”按钮,可以快速完成批量删除的操作。

接下来将从建立一个全新的AI任务入手,详细说明AI任务的各项配置。

新建AI任务

点击右上角的“新建AI任务”按钮,会弹出一个窗口,在这里可以命名任务名称,默认情况下系统会根据当前时间给出一个名称,建议用户根据自己的数据集重新命名一个更有意义的名字,系统后续会依据这个名称来命名用这个任务所训练出来的AI模型(例如,任务名称为“abc”,则其生产的模型会被命名为“模型_abc”);另外在这个窗口可以选择任务所属类别,目前支持分类、回归、聚类三种类别,这里需要用户根据数据及业务的不同来选择不同的类别。

这里我们首先以“分类任务”为例建立任务(回归任务与分类任务一致),我们会看到,需要配置5个步骤来训练AI模型:

2.1 选择训练数据集

选择训练数据

第一步选择事先已经导入到DB集群中的数据表。系统以树形结构依次列出:集群、数据库、schema、数据表名称。选择好训练数据以后,就可以点击“下一步”。

2.2 选择特征及标签

选择特征及标签
选择特征及标签2

第二步需要配置的是要以哪些数据列作为“特征”及哪个数据列作为“标签”。 页面里上半部分展示的是训练数据的可视化统计:默认展示出的是数据集第一列的数据分布统计,当训练数据大于1000条时,为了页面加载速度不受影响,系统默认统计前1000条的数据分布。如需查看此列全部数据统计,点击“(共1000条数据结果)”后面的小闪电图标。

页面的右上角为饼状图和柱状图的切换按钮,方面以两种视图来观察数据,如上方两图所示。

预览数据

页面左下方列出了训练数据的所有列,在这里我们需要使用复选框选择哪些列作为“特征”,再选择一个列作为“标签”。系统默认会选择除最后一列的所有列作为“特征”,而最后一列作为“标签”,可依据实际情况自行更改。

页面右下方展示出训练数据的前1000条,方便用户观察此列数据的形态。

点击每一行列名,会触发页面上方针对所选列的可视化统计,及页面右下方的数据预览。

计算特征重要性:

特征重要性

特征重要性算法可以计算每个特征列对结果的影响,按照影响大小进行排序,可以有效进行数据分析、特征筛选等工作。也可以对我们下文要讲的组合列特征产生帮助。 要开始特征重要性的计算工作,首先要确认已经选择好了“特征”列和“标签”列。之后在如图的特征重要性算法中选择一项,并点击“开始计算”按钮。计算完成后,特征重要性的排序和具体的权重就会显示在左侧。注意,若选择“递归特征消除”这一类算法则不会计算出具体的权重值,只会显示重要性高低的排序。

组合列特征:

向下查看此页面,在页面下方,还有一个高级功能:开启组合列特征。打开之后会出现一个空列表及右上方的+号按钮。

开启特征组合列

那么什么是组合列特征?

所谓组合列特征,就是将多个列组合到一起,共同来作为一个新的“feature”参与训练。有一些特殊的场景我们会利用到这个功能。

例如:我们的训练数据有两个列,分别是一个地点的“经度”和“纬度”,这两个列的数据都是一些float类型的数字。显然这两个列的数值在地图上即可表示此条数据的一个地理位置。假设训练集的每条数据是一个房子的描述,“标签”列为此房子的房价。我们从业务上认为,房价会受一个个不同的地区区域所影响,而不单单是一个点。这样为了模型有更好的推断效果,我们希望在“特征”里 构建出一个个“地块”, 即人为的将经度及纬度分成一个个小段,然后这些小段构成一个个小方块。如果将一个连续的数值分布切成若干段,我们就需要配置这些“切”点。所以配置一个组合列特征的工作,就是选择需要组合的列,如果某个列是数字类型的,就需要我们配置将数字切成段的“切”点。而“构成一个个小方块”的具体工作是系统自动完成的。

点击+号按钮会弹出配置窗口,我们刚刚说的的“切”点即下图中的“边界值”,鼠标滑过其后方的?图标,会显示出说明。

新建特征组合列

下图的实例中,我们将三个列组合到一起,并给每个列设置好一些边界值,以便这些列进行自动组合。

设置组合特征的边界值

下图所示的是我们配置的两个组合列特征,可以随时点击后边的编辑或删除按钮来更改配置。

删除特征组合

2.3 选择评估数据

选择评估数据

第三步需要选择“评估数据”,“评估数据”必须包含“训练数据”所选的所有“特征”列和“标签”列,否则系统会提示选择错误。建议用户在训练模型前,将训练数据的5~10%单独存到一个表作为评估数据。

系统会利用所提供的评估数据,对一个模型进行指标评估。

  1. 当此模型为“分类”算法时,系统会计算出它的Acurracy,AUC,混淆矩阵(Confusion Matrix)等行业常用指标
  2. 当此模型为“回归”算法时,系统会计算出它的R²指标。
  3. 当此模型为“聚类”算法时,系统会计算出它的Score,即K-means最近簇距离的平方和。

这些指标会在“模型管理”列表中显示出来,可供后续比较同类模型的准确度。

2.4 选择算法

默认AutoML算法

第四步为配置算法。默认情况下系统使用内部的AutoML算法自动调整各种算法参数,此步用户可以直接点下一步。

如果用户有一定的机器学习知识,希望通过手动调参方式来训练模型,可以打开“开启传统调参模式”按钮,可以看到如下页面。

选择算法

在“AI算法选择”下拉列表中,可以选择系统内置的若干种算法:其中Oushu Neural Network及Wide And Deep Neural Network为深度学习的算法。 其他为传统ML算法。 需要注意的是Boosted Tree算法只支持二分类任务。

如果实际工作中需要系统预设的算法之外的算法,可以参照第五节“NoteBook功能”给出的示例,使用自定义的模型进行训练。

高级组合参数模式

参数设置里,可打开“高级组合参数模式”。这样每个超参可以设置多个值,系统会自动将所有组合搭配出来,训练多个模型,然后选出最好的。如果配置的组合过多,但是不想系统将所有组合一一训练,可以设置random_search参数,这个数值指定了系统会随机从所有可能组合中随机抽取多少套组合进行训练,并保存其中效果最好的。

高级组合参数模式

在参数设置的右侧,有两列数据:默认值及最佳值。

  1. 默认值:系统为每个算法提供了一套默认值,方便以此为基础来调参。
  2. 最佳值:当此任务跑过AutoML后,系统会将AutoML选出的最佳超参展现到此处,作为后续手动调参的一个参考;如果用户配置过多套参数,跑完过后,系统也会将其中最佳搭配展示到此处。我们称这个功能为“调参助手”。

点击“恢复默认值”及“使用最佳值”按钮可将相应参数自动填充到左侧参数框中。

2.5 开始训练

开始训练

开始训练之前需要选择一个训练集群, 这个下拉框中会列出LittleBoy菜单“AI集群”列表中配置好的所有集群。

AutoML训练模式有两种:

  1. 快速测试:用来测试一下整个任务配置是否可以成功训练模型,LittleBoy会根据系统大数据经验,只训练一个模型。此模式训练时间相对短,模型效果不一定好,只做测试之用。
  2. 精准训练:表示LittleBoy系统会根据内建算法,自动训练多个备选模型,并在训练完成时智能选取一个最好的。

一般新配置的任务,建议先选取快速测试,来看一下配置以及数据是否完全正确。当成功训练出一个模型后,再使用训练时间更长的精准训练,来自动训练一个准确率高的模型。

正在验证数据

点击开始训练后,系统会做一些必要的验证,如果训练数据集比较大,此处可能需要等候片刻。当验证通过后,页面会自动跳回“AI任务”列表,位于最顶端的一条即我们最新启动的任务,可以看到“当前状态”是“正在运行”,如下图。

正在运行AI任务

点击“状态”按钮,系统会弹出当前任务的训练进度,包括训练百分比,已经运行时长及模型收敛情况可视化。如下图。对于不能给出训练状态的任务,则会有详细的文字说明当前进度。如果需要停止训练,可以点击此页面的停止按钮,或者列表中的“停止”按钮。

查看训练进度

AI任务列表还有一个“复制”按钮,它的功能是复制其所在的任务并形成一个新的任务。当用户需要新建一个与已有的任务类似的任务时,可以利用此功能。

2.6 聚类任务

聚类任务的配置与上述稍有不同,下面将详细说明一下。

选择聚类算法

如上图,在任务类别中选择“训练聚类模型”,即可配置一个聚类任务,聚类任务的配置流程与分类及回归任务稍有不同。

选择聚类训练数据

第一步没有不同,依然是选择需要聚类的数据源,在运行完任务后,系统会做两件事:

  1. 训练一个聚类模型。
  2. 新建一个结果表,将训练数据原封不动复制过来,并新加一个列“oushu_lb_clustering_index”, 此列从0开始递增,不同数字表示不同类别。
选择聚类特征

第二步无需选择标签,只选择特征即可。

选择聚类任务输出表

第三步,需要选择一个位置存储聚类结果表。系统会默认给出一个表名,用户可以随意更改。

配置聚类算法

第四步,系统会展示出聚类算法的参数配置页面,目前LittleBoy的聚类算法支持KMeans和Spark Kmeans。

聚类中使用组合参数

当然也可以打开组合参数模式,一次性配置多种数值。 注意n_cluster不要配置多个值,它的含义是我们希望系统将训练数据分为几类(或者模型可以将其他数据分为几类)。

聚类训练完成

开始训练后,当训练完成时我们会看到“查看结果”按钮, 这个是聚类特有的。

查看聚类结果表

点击“查看结果”,直接跳转到数据资产与服务->数据资产中查看相应的结果表。

3. 模型管理

当任务顺利运行完成时,系统会自动生成AI模型并展示在“模型管理”列表中。命名规则为“模型_”加上任务的名字,如果出现重名,系统会自动在其后边加数字以区分。

在“模型管理”主页面,我们可以查看模型的训练信息、评价指标,使用更多数据对模型的评价指标进行计算,以及使用模型进行大数据的预测。用户也可以从外部导入模型,便于在系统中统一管理。

和“AI任务”的主页面相似,每列左侧的复选框用于批量删除操作。

模型管理列表

3.1 模型详细信息

点击模型名称,可以弹出窗口展示模型的详细信息。

模型详细信息

第一个Tab展示模型的基本信息,指标,超参以及训练过程中的收敛曲线。

阈值调整

上图所示的是第二个Tab,Precision/Recall 阈值调整,注意只有分类模型,并且分类的数目为两类时(二分类)才会出现此Tab。

用法如下:

这里需要用户有一定的机器学习基础知识,懂得“查准率”,“查全率”,“混淆矩阵”的概念。

选择好正样本后,可以看到各种指标。用户可以根据业务需要,手动调整查准率与查全率的平衡。

点击“设置为最大Recall”或“设置为最大Precision”按钮,系统会自动计算二者最大值,并将指针自动指向相关位置。

点击保存设置后,如果再次用此模型来预测,系统会根据这里的阈值来做二分类的预测。

模型重新评估

“重新评估”页面的功能即重新选择一个评估数据集,再次为模型评估指标。当运行完成后,新的指标会显示在模型信息里。

模型高级指标

在模型管理列表中,也有一列“指标”,这里只会显示一些常用的指标。当多分类时,会显示混淆矩阵。(二分类的指标之所以不在这里显示,是因为会在Precision/Recall 阈值调整页面显示)

3.2 使用模型批量预测

使用模型进行批量预测

使用模型进行批量预测,需要点击相应模型的右侧“预测”按钮,弹出的模型预测界面使用方法如下:

  1. 在左侧选择预测数据源,注意此数据表结构一定要含有训练数据所有用到的“特征”列。
  2. 在右侧选择“预测结果”表的存储位置,系统会自动生成一个结果表名,用户可以更改或不更改。
  3. 在“开始批量预测”左侧的下拉框中选择预测所使用的LittleBoy集群。
  4. 点击“开始批量预测”。
  5. 当运行100%完成后,可以点击“预测结果”直接跳转到结果表。

3.3 导入导出模型

模型管理页面中支持导出训练好的模型,只需点击相应模型右侧的“导出”按钮即可。 也可以使用“导入模型”按钮,将外部的模型导入到当前系统中。除了可以方便不同LittleBoy系统之间交换模型之外,也可以导入任意的包含checkpoint信息和graph信息的tensorflow模型,但是需要满足以下条件:

  1. 对于每个传入的特征值,都需要有单独的input tensor与之逐一对应
  2. 分类模型的输出中需要需要包含“probabilities”、“logits”、“class_ids”(分类标签的index)、“classes”(分类结果的实际label,string类型),回归模型的输出中需要包含“average_loss”。

4. AI服务

AI服务主页面

保存在“模型管理”中的模型不仅可以对OushuDB中的大量数据进行批量预测。在“AI服务”页面中,还可以将模型创建成AI服务,开放对外的预测api接口,方便广泛应用在各种程序中。

AI服务的主页面支持筛选、查看状态、快速上下线、批量删除等操作。

新建AI服务

要新建一个AI服务实例,首先要点击页面右上角的“新建AI服务”按钮,在弹出的窗口中填写AI服务的名称,并选择部署服务的LittleBoy集群。

AI服务创建完成后,首先需要在左上角的下拉框中选择使用的模型。模型传入的参数和参数类型会在下方显示出来,确认无误后,点击配置模型。注意,一旦为服务配置好模型,该服务接受的参数就无法改变,虽然可以重新配置新的模型, 但是必须和最开始配置的模型拥有相同的参数。

AI服务详情

模型配置成功后,点击“上线服务”即可开始上线分布式的服务。页面右方则提供了该服务的运行状态和使用情况,如调用次数的统计和折线图,调用用户IP统计等

用户信息页面

页面的左下方显示了调用服务API的标准方法和示例数据。为了完成身份验证的需求,用户需要在页面右上角点击自己的用户名——选择用户信息——复制用户信息页面中的“Token”项,并且在每次发送预测请求的时候将其作为header传入,格式如下:

header: {"token": "LTEwXXXXXXXXXXXXXXXXXXXXXXX"}
AI服务页面测试

也可以点击“测试”按钮,可以页面中直接向服务发送测试样例数据,方便快捷测试服务的效果。图中可以看到,预测请求的返回值一般包含了预测结果“y”(也就是训练数据里“标签”列的名称)和置信度“oushu_lb_confidence”。

5. NoteBook功能

LittleBoy NoteBook提供了一个在LittleBoy使用的python环境下编辑并运行代码的界面。通过加载littleboy库的方法,能很方便地和LittleBoy及OushuDB无缝联通。用户可以在自定义的Note中自由探索数据、自定义模型结构。可以把自定义的Keras模型保存到LittleBoy系统中进行分布式训练,而不只局限于系统给定的算法,扩展了LittleBoy模型训练的广度和深度。

NoteBook主页面

NoteBook的首页用于展示所有Note的详细信息,管理系统中的Note,方便进行筛选、排序、删除等操作。

导入python包

点击右上角的“导入python包”,可以查看并搜索当前python环境中已安装的库,如果需要的库不在其中,可以点击“上传”按钮导入相应的.whl包。

点击左上角的“新建Note”按钮,输入文件名称,就可以进入刚刚创建的Note的编辑界面。我们将结合 “littleboy” python库的使用,讲解notebook的具体使用。 首先导入我们需要的库函数:

import matplotlib as plt
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

import littleboy as lb
from littleboy.api.dataset import LBDataset
from littleboy.api.context import LBContext

设置好运行所需要的环境。由于需要与littleboy server进程通讯,需要设置好server的地址和认证用的token,其中token可以从Oushu Lava页面右上角点击用户名,选择用户信息,并在用户信息页面复制“token”一栏。

lb.set_lb_server("http://127.0.0.1:18080")
lb.set_token("LTEwXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")

首先介绍LBDataset的使用。LBDataset可以自动连接OushuDB中的数据,并转换成方便在python环境中使用的格式。只需要在初始化LBDataset实例时传入集群名、数据库名、schema名和表名四项参数,这个dataset实例就能成为一个在目标表中迭代获取数据的迭代器,每次迭代返回表格中的一行数据,使用方法可参照Tensorflow Dataset。

使用convert_to_pandas_dataframe()函数,还可以返回一个pandas.Dataframe,更适合数据分析使用。例如,使用dataframe.describe()获取数据的描述信息,使用之前导入的matplotlib绘制直方图等。需注意的是,转换成Dataframe需要将全量数据读取到内存中,不推荐在数据量过大的表格上使用。

dataset = LBDataset("oushu-db", "postgres", "public", "iris_train")
for row in dataset:
    print(row)
df = dataset.convert_to_pandas_dataframe()
df.describe()

“littleboy”库的另一项重要功能是LBContext,它允许用户在NoteBook里自定义的Keras Model作为训练模型,初始化并执行AI任务,并且在LittleBoy的分布式集群上进行训练。一个简单的实例流程如下:

首先设置littleboy server的连接地址和使用的token。设置AI任务的名称和任务描述

mytrain = LBContext()
mytrain.set_lb_server("http://127.0.0.1:18080")
mytrain.set_token("LTEwXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")
mytrain.set_name("keras_distributed_train_example").\
    set_desc("This is a demonstration of LBContext api")

和“AI任务”章节中新建任务的流程类似,这里也要训练使用的训练数据和评估数据,并且选定使用表格中的哪些列作为训练和预测数据。

# Set train and evaluate data
mytrain.set_train_data("oushu-db", "postgres", "public", "iris_train") \
    .set_evaluate_data("oushu-db", "postgres", "public", "iris_train")

# Set feature and label
mytrain.set_features(["sepallength", "sepalwidth", "petallength", \
    "petalwidth"]).set_label("y")
mytrain.set_model_kind("classify")

在这里我们自定义了一个单隐藏层的Keras DNN模型,并且将其作为参数传入了LBContext里。

# Set customized Keras model
layers = [Dense(32, activation="relu", input_shape=(4,)),
          Dense(3, activation="softmax")]
k_model = Sequential(layers)
mytrain.set_model(k_model)

训练开始前,还需要指定分布式训练所使用的训练集群

# Set LittleBoy cluster for training
mytrain.set_trainer_cluster_name("faketrainer")

检查一切参数设置正确后,就可以通过launch()来开始训练了。

#confirm that the train configs are correct
mytrain.info()
# Start train
mytrain.launch()

一旦成功开始训练,就可以在“AI任务页面”查看正在执行的训练任务了。这之后的操作流程和之前介绍的基本相同,在此不再赘述。

:LBContext的配置比较复杂,在此列出所有的子函数:

函数名 说明
set_name(name: str) 设置workflow名称
set_desc(desc: str) 设置workflow描述
set_lb_server(addr: str) 设置LittleBoy的server地址, 默认“http://127.0.0.1:18080
set_project_id(id: int) 设置workflow所属的project ID
set_token(token: str) 设置Lava token(可在右上角 用户名-用户信息-token查看)
set_trainer_cluster_name(name: str) 设置训练使用 的训练集群(可在AI集群页面查看)
set_train_data(cluster_name, db, schema, table: str) 设置训练表的信息
set_evaluate_data(cluster_name, db, schema, table: str) 设置评估表的信息
set_predict_data(cluster_name, db, schema, table: str) 设置预测表的信息
set_features(features: list) 从训练表中 选择训练用feature列,用list传入
set_label(label: str) 从训练表中选择训练用label列
set_model_kind(kind: str) 设置模型种类,可选“classify”, “regression”,“clustering”
set_model(model: tf.keras.Model) 设置自定义的Keras模型
set_batch_size(batch_size: int) 设置训练的batch大小
set_num_epochs(num_epochs: int) 设置训练数据的最大遍历次数
set_train_steps(steps: int) 设置最大训练步数
info() 打印模型详情, 筛选是否有遗漏的配置项
launch() 保存并执行训练任务