机器学习作业

机器学习作业主要包括百度自主研发的丰富、高效、成熟的机器学习算法和开源RAPIDS-cuML GPU版本机器学习算法。其中百度机器学习高效的分布式计算能力让用户即使在海量数据的情况下,也能轻松达成工作目标。算法主要应用于大数据的统计与分析、数据挖掘、模型训练、商业智能等领域。RAPIDS-cuML使研发人员能够在GPU上运行传统的ML任务,而无需深入了解CUDA编程的细节。

使用百度机器学习算法,用户数据首先要运行“数据标准化”算法,数据标准化主要作用是将数据样本ID化,减少训练过程中的内存占用。经过数据标准化后的训练数据,可以接入不同的算法,如逻辑回归二分类,xgboost等。即一次数据标准化后的数据可以作为各种算法的输入训练数据。
使用RAPIDS-cuML算法,可以调用cuml和cudf库,采用直接编辑代码或者选择代码文件的方式来提交训练作业。作业运行在GPU机器上,目前只支持单机单卡运行。

新建作业

左侧导航栏选择“作业管理-->机器学习作业”,进入机器学习作业列表页。点击『新建作业』按钮,进入新建作业流程。

image.png

新建作业限制:

  • 每位用户在公共集群(免费试用)资源上最多同时支持3个作业(包括4种类型作业)在排队或运行。
  • 如果已有3个作业在排队或运行,希望发起新的作业时,需要等其中一个现有作业运行结束,或者终止当前的一个作业,否则会发起作业失败。

数据标准化

百度机器学习数据标准化主要作用是将数据样本ID化,减少训练过程中的内存占用。用户输入符合格式的训练数据后,平台统计样本个数,特征个数,并把string类型的特征转化为int类型的编号,最后输出给用户ID化后的数据。用户可以用这份ID化后的数据,做为各种机器学习算法的输入,如LR,xgboost等。之所以将数据标准化单独列出来,是希望标准化后的数据可以作为各种算法或者多次调参的输入,减少每次训练都标准化数据的繁琐过程。

配置说明:

配置名称 是否必须 描述
作业名称 只能由数字、字母、-或_组成且首位只能是字母,长度小于40个字符
算法或框架 数据标准化
输入数据格式 可选项包括:稀疏不带权重值,稀疏带权重值,稠密数据。详见下面输入数据格式说明
输入数据类型 可选项包括:分类,回归。分类数据label为离散值,回归数据label为连续值
输入数据路径 存放符合格式的训练数据,支持填写单个文件或者目录 ,如果输入的是目录平台会对该路径下符合格式要求的输入数据做标准化处理,包括统计样本个数,特征个数,并把string类型的特征转化为int类型的编号
输出数据路径 存放标准化后的输出数据,用户可以用这份标准化后的数据,做为各种机器学习算法的输入
计算资源 目前只支持公共集群(免费试用)
最大运行时间 最大运行时间固定为8小时,若作业运行达到最大运行时间,平台会自动强制停止作业,可能造成作业失败。按照经验来看,8小时最大支持10GB数据进行标准化

输入数据格式说明:

格式类型 格式ID 格式样例 格式说明
稀疏不带权重值 SPARSE_ID No,label,feature1,feature2,.....featureN sample里出现feature对应的权重为1,未出现的特征的权重为0。
每行sample的feature个数可以不统一
稀疏带权重值 SPARSE_ID_WEIGHT No,label,feature1 weight1,feature2 weight2,.....featureN weightN sample里出现的feature对应的权重为对应的weight值。
每行sample的feature个数可以不统一,feature和weight之间空格分离
稠密数据 DENSE No,label,weight1,weight2,weight3.....weightN sample的feature编号规定为0,1,...,N-1,对应的权重为weight0,weight1,...weightN-1。
每行sample的feature个数统一为N,必须相等

输入数据格式的通用限制如下:

  • No为每行sample的编号,没有通用的限制,可以为空。(注:当No为空的时候,样本需要以逗号开头,例:,label,feature_1,feature_2)
  • label为每行sample的标注值,支持离散的数值和字符串,对于非监督的算法可以为空。
  • featureN为每行sample的具体特征标签,支持离散的数值和字符串。
  • weightN为每行sample的具体特征标签对应的权重,支持离散和连续的数值

注意:

  • 用户数据中每个字段不能有 逗号 和 空格 这两个用于分隔字段的字符,若用户原始数据中有这两个字符,请提前进行转义。
  • 所有不符合格式的行都会被忽略,这会极大影响模型效果。
  • SparseID格式数据中,逗号之间的内容会被视为字符串,不会检查空格,请知晓并提前进行处理。

示例配置:

训练数据是从网上下载的SUSY数据,已经在数据的每行行首加上逗号,sed -i s/^/,/g yourfile,切分好存放到公共BOS上。您可以下载数据后,切分成训练数据、评估数据、预测数据这三部分存放到自己的BOS上,分别进行数据标准化。也可以直接使用我们的公共BOS数据进行训练。
输入数据格式:稠密数据
输入数据类型:分类
输入数据路径:bos:/infinite-public/automl-demo/data/susy-train/
输出数据路径配置您自己的BOS路径。
image2019-04-26_11-08-10.png

点击“确定”按钮后,提交作业。

输出数据格式说明:

  • dataset.info为数据集信息文件,记录了数据集的一些统计属性,包括样本数、特征数、label数。
  • preprocess_out目录下为ID化后的数据
  • preprocess_dictionary目录下为ID化的字典信息和文件信息。特征字典featureIDMap文件中,第一行是特征个数feature_num,其余feature_num行是“特征ID 原始数据特征字符串”,中间以一个空格分离。
  • preprocess_summary目录下是特征和label的统计信息。其中feature_summary是特征统计文件,格式为:feature原文 feaute_flag(被过滤标志,0为被过滤) feature_id feature_count feature_weight_avg feature_weight_max feature_weight_min。label_summary是label统计文件,格式为:label原文 label_flag label_id label_count。

逻辑回归二分类

百度机器学习逻辑回归二分类主要作用是对经过数据标准化后的训练数据,实现二分类模型的一种方法。提供数据标准化后训练数据,算法会输出二分类模型;提供数据标准化后评估数据,算法会用此评估数据评估模型,并计算出评估指标;提供数据标准化后的预测数据,算法会用此预测数据进行预测,保存预测结果到BOS上。

配置说明:

配置名称 是否必须 描述
作业名称 只能由数字、字母、-或_组成且首位只能是字母,长度小于40个字符
算法或框架 逻辑回归二分类
L1正则化系数 0 <= L1 <= 1,浮点数,支持科学计数法
L2正则化系数 0 <= L2 <= 1,浮点数,支持科学计数法
收敛条件 0 < termination <= 0.1,浮点数,支持科学计数法
最大迭代次数 模型训练到达最大迭代次数或者到达收敛条件将停止训练,20 <= maxIter <= 200,正整数
训练数据路径 存放经过数据标准化后的训练数据路径(即数据标准化作业详情中的输出数据路径),算法会用此训练数据训练模型
评估数据路径 存放经过数据标准化后的评估数据路径(即数据标准化作业详情中的输出数据路径) ,算法会用此评估数据评估模型,评估结果存放在模型输出路径/{job_id}/evaluate下。不填写的话,直接输出模型,没有评估结果
预测数据路径 存放经过数据标准化后的预测数据路径(即数据标准化作业详情中的输出数据路径) ,算法会用模型对预测数据进行预测,预测结果存放在模型输出路径/{job_id}/predict下。不填写的话,不会进行预测
输出路径 存放模型和日志的路径,作业成功后将模型存放在该路径/{job_id}/model下,日志存放在该路径下/{job_id}/log下
计算资源 目前只支持公共集群(免费试用)
最大运行时间 最大运行时间固定为8小时,若作业运行达到最大运行时间,infinite会自动强制停止作业,可能造成作业失败

训练数据格式说明:

逻辑回归二分类算法的输入数据都需要经过数据标准化,以数据标准化后的数据data作为逻辑回归二分类算法的输入数据

示例配置:

训练数据是从网上下载的SUSY数据,已经在数据的每行行首加上逗号,sed -i s/^/,/g yourfile,切分好存放到公共BOS上。您可以下载数据后,切分成训练数据、评估数据、预测数据这三部分存放到自己的BOS上,也可以直接使用我们的公共BOS数据进行训练。需要注意的是:需要经过数据标准化后的数据data才能作为逻辑回归二分类算法的输入数据。
训练数据路径:bos:/infinite-public/automl-demo/data/susy-train/
评估数据路径:bos:/infinite-public/automl-demo/data/susy-test/
预测数据路径:bos:/infinite-public/automl-demo/data/susy-all/
首先将上面3个路径的数据进行数据标准化,提交3个数据标准化的作业。作业都成功后,在作业详情页面复制数据输出路径,用于填写逻辑回归二分类的输入数据路径。如复制红框中的路径。

image.png

逻辑回归二分类新建作业配置如下:

image2019-04-26_16-54-10.png

点击“确定”按钮后,提交作业。

输出数据格式说明:

  • 输出模型主要为各特征维度在lr模型中对应的权重参数
  • 输出为纯文本格式,每行表示一个特征维度,共有三个字段以空格分割,分别为该特征的权重参数、该特征在调参算法中的内部ID、该特征的原始名称

RAPIDS-cuML

cuML是一套库,在RAPIDS数据科学生态系统中实现机器学习算法。cuML使研发人员能够在GPU上运行传统的ML任务,而无需深入了解CUDA编程的细节。使用cuML库,用户可以自己编程调用cuML中的kmeans,xgboost等各种算法来实现机器学习。

配置说明:

配置名称 是否必须 描述
作业名称 只能由数字、字母、-或_组成且首位只能是字母,长度小于40个字符
算法或框架 RAPIDS-cuML
作业结束是否发短信 作业结束后是否发短信通知用户
录入代码 直接编辑代码,用户可选择代码模板,并在黑框中直接修改和编写代码,适用于一个训练文件的场景;选取代码文件,用户可填写BOS上的文件路径和启动命令,适用于多个训练文件的场景
python版本 cuML只支持python3
输出路径 存放模型输出和日志的路径,请将训练出的模型和数据放到容器中output目录下, 平台会自动把容器中output目录下的内容上传到该路径/{job_id}/output下,日志上传到该路径/{job_id}/log下
训练数据路径 平台会自动下载该路径下数据到容器环境下的train_data目录,如果作业有多个容器,则每个容器只会被分配下载其中一部分数据
测试数据路径 平台会自动下载该路径下数据到容器环境下的test_data目录。如果作业有多个容器,则每个容器只会被分配下载其中一部分数据
计算资源 目前只支持Infinite集群
资源套餐 深度学习开发卡等GPU单卡套餐
实例个数 1
最大运行时间 最大运行时间固定为8小时,若作业运行达到最大运行时间,infinite会自动强制停止作业,可能造成作业失败

训练数据格式说明:

训练数据格式不做限制,您可以编写reader函数处理输入的训练数据。

示例配置:

cuML-xgboost算法的训练数据是从网上下载的Mortgage Data,下载了2年的数据放到公共存储BOS上。您可以下载数据,存放到自己的BOS上,也可以直接使用我们的公共BOS数据进行训练。
训练数据路径:bos:/infinite-public/ml-demo/data/cuml-xgboost/
输出路径配置您自己的BOS路径。

RAPIDS-cuML新建作业示例配置如下:

image2019-05-28_16-27-00.png

点击“确定”按钮后,提交作业。

输出数据格式说明:

  • 输出模型格式与sklearn相同。使用pickle.dump(model, open(filename, 'wb'))来保存模型到文件,使用pickle.load(open(filename, 'rb'))来导入cuML模型。或者使用joblib.dump(model, filename) 来保存模型到文件,使用joblib.load(filename) 来导入cuML模型。

作业列表相关操作

  • 终止:将当前正在运行或排队的作业终止,不再排队,不再运行。终止运行后,作业结果及作业日志不会上传到指定的BOS路径。
  • 克隆:克隆一份作业的配置项,进入新建作业页面。
  • 删除:删除该条作业,如果删除时作业还在排队或运行中,会先终止排队或运行,再删除作业,删除后该作业从作业列表中消失。
  • 查看作业详情:点击作业名称可以进入作业详情,查看作业的作业信息、参数信息、集群信息。
  • 查看运行详情:点击作业名称选择运行详情标签可以进入运行详情,查看作业运行状态、起止时间、日志详情、运行曲线等。

查看作业结果

作业运行成功后,会根据作业配置时指定的输出路径,将模型/数据/日志分别存储到对应的 BOS 地址下,用户需要前往 BOS 查看或下载作业模型、数据标准化后的数据或者日志。

如果作业模型/数据/日志无法保存,可能是下列情况:

  • 手动终止作业
  • 作业运行超时被自动终止
  • 作业运行失败

用户作业失败,可能是下列情况导致:

  • 输入数据与数据格式不匹配
  • 输入数据的BOS地址不存在或不可访问
  • 输出日志/模型/数据的bucket不存在或不可访问
  • 训练超时