• MLeap Bundle
    • MLeap Bundle 的功能特征
    • Spark、Scikit-Learn 和 TrnsorFlow 的统一格式
    • Bundle 文件结构
      • bundle.json | bundle.json
      • model.json
      • node.json
    • MLeap Bundle 实例

    MLeap Bundle

    MLeap Bundle 是一个基于图、跨平台的文件格式,它可以用于序列化和反序列化:

    1. 机器学习 Data Pipeline - 所有基于 Transformer 的 Data Pipeline。
    2. 算法(回归,基于树的模型、贝叶斯模型、神经网络、聚类)。

    Bundle 的存在使得你能够轻松分享训练得到的 Pipeline,只需要生成一个 Bundle 文件然后将它通过邮件发给你的同事,或者自己去浏览 Pipeline 和算法的元数据信息。

    Bundle 的部署也非常简单,只需要导出你的 Bundle,把它加载到你的 Spark、Scikit-Learn,又或者是你基于 MLeap 开发的应用程序中。

    MLeap Bundle 的功能特征

    1. 序列化到一个目录或者是一个 Zip 包中。
    2. Bundle 所有文件都是 JSON 或者 Prortobuf 格式。
    3. 可以序列化成纯粹的 JSON / Protobuf 格式,或者是混合两种文件格式。
    4. 高可扩展性,易于集成新的 Transformer。

    Spark、Scikit-Learn 和 TrnsorFlow 的统一格式

    MLeap Bundle 为 Spark、Scikit-Learn 和 TensorFlow 提供了一种统一的序列化格式。例如,Standard Scaler trasnformer (TensorFlow 中的 tf.random_normal_initializer) 在所有三个平台的表现都是一样的,因此理论上它可以在这三个平台中任意地进行转换和互换。

    Common Serialization

    Bundle 文件结构

    Bundle 的根目录下面会有一个 bundle.json 文件,它包含了 Bundle 序列化相关的基础元数据。Bundle 里面会有一个 root/ 目录,包含了 ML Pipeline 的根 Transformer,根 Transformer 可以是 MLeap 支持的任意类型的 Transformer,但一般来说会是一个 Pipeline transformer。

    来看一个 MLeap Bundle 的真实例子。这个 Pipeline 包含了一个字符串索引器,用于将字符串索引成分类特征,紧接着对数据进行 One-Hot 编码,并把结果合并成一个特征向量,最后对向量执行线性回归算法。这个 Bundle 的目录结构是这样的:

    1. ├── bundle.json
    2. └── root
    3. ├── linReg_7a946be681a8.node
    4. ├── model.json
    5. └── node.json
    6. ├── model.json
    7. ├── node.json
    8. ├── oneHot_4b815730d602.node
    9. ├── model.json
    10. └── node.json
    11. ├── strIdx_ac9c3f9c6d3a.node
    12. ├── model.json
    13. └── node.json
    14. └── vecAssembler_9eb71026cd11.node
    15. ├── model.json
    16. └── node.json

    bundle.json | bundle.json

    1. {
    2. "uid": "7b4eaab4-7d84-4f52-9351-5de98f9d5d04",
    3. "name": "pipeline_43ec54dff5b2",
    4. "timestamp": "2017-09-03T17:41:25.206",
    5. "format": "json",
    6. "version": "0.14.0"
    7. }
    1. uid 是一个自动生成的 UUID 字符串,用做 Bundle 的唯一标示。
    2. name 是根 Transformer 的名字。
    3. foramt 是序列化这个 bundle 所使用的序列化格式。
    4. version 是序列化这个 bundle 所使用的 MLeap 的版本。
    5. timestamp 是 bundle 创建的时间。

    model.json

    对于 Pipeline:

    1. {
    2. "op": "pipeline",
    3. "attributes": {
    4. "nodes": {
    5. "type": "list",
    6. "string": ["strIdx_ac9c3f9c6d3a", "oneHot_4b815730d602", "vecAssembler_9eb71026cd11", "linReg_7a946be681a8"]
    7. }
    8. }

    对于线性回归:

    1. {
    2. "op": "linear_regression",
    3. "attributes": {
    4. "coefficients": {
    5. "double": [7274.194347379634, 4326.995162668048, 9341.604695180558, 1691.794448740186, 2162.2199731255423, 2342.150297286721, 0.18287261938061752],
    6. "shape": {
    7. "dimensions": [{
    8. "size": 7,
    9. "name": ""
    10. }]
    11. },
    12. "type": "tensor"
    13. },
    14. "intercept": {
    15. "double": 8085.6026142683095
    16. }
    17. }
    1. op 指明即将被执行的操作,对于每个 MLeap 所支持的 Transformer 都会有一个 op 名字。
    2. attributes 包含操作被执行所需要的参数值。

    node.json

    对于 One-Hot 编码器:

    1. {
    2. "name": "oneHot_4b815730d602",
    3. "shape": {
    4. "inputs": [{
    5. "name": "fico_index",
    6. "port": "input"
    7. }],
    8. "outputs": [{
    9. "name": "fico",
    10. "port": "output"
    11. }]
    12. }
    13. }
    1. name 指明了执行图(Execution Graph)中节点的名字。
    2. shape 指明节点的输入和输出,以及数据如何在内部被 Transformer 使用。

    这个例子中,fico_index 字段被用作 One-Hot 编码器的输入字段,而 fico 会作为结果字段。

    MLeap Bundle 实例

    这里提供了一些序列化 Bundle 文件的例子。它们可能不都是有意义的 Pipeline,但是能用于解释这些 Bundle 文件都是怎么样的。Pipeline 是在运行 Spark 对等校验(Parity Tests)时候生成的,以保证 MLeap 的 Transformer 和 Spark 的 Transformer 能够准确生成相同的结果。

    MLeap/Spark Parity Bundle Examples

    注意:由于 GitBook 不允许用户直接点击链接下载,请右键另存为。