CUBE_LOCAL_CN.md 3.4 KB
Newer Older
J
Jiawei Wang 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
# 单机版稀疏参数服务器Cube

## 引言

在python/examples下有两个关于CTR的示例,他们分别是criteo_ctr, criteo_ctr_with_cube。前者是在训练时保存整个模型,包括稀疏参数。后者是将稀疏参数裁剪出来,保存成两个部分,一个是稀疏参数,另一个是稠密参数。由于在工业级的场景中,稀疏参数的规模非常大,达到10^9数量级。因此在一台机器上启动大规模稀疏参数预测是不实际的,因此我们引入百度多年来在稀疏参数服务器上的工业级产品Cube,提供分布式的稀疏参数服务。

单机版Cube是分布式Cube的弱化版本,旨在方便开发者做实验和Demo时使用。如果有分布式稀疏参数服务的需求,请在读完此文档之后,继续阅读  [分布式Cube使用指南](分布式Cube)(正在建设中)。


# 示例
在python/example/criteo_ctr_with_cube下执行
```
sh local_train.py

seq_generaotr ctr_serving_conf/SparseFeatFactors ./cube_model

cube_prepare.sh &
```

# 单机版Cube组件介绍


## cube-builder

cube-builder是把模型生成分片文件和版本管理的工具。由于cube是用于分布式的稀疏参数服务,对于分布式当中的每一个节点,需要加载不同的分片,然而生成的稀疏参数文件往往一个大文件,就需要用哈希函数将其分割为不同的分片。与此同时,工业级的场景需要支持定期模型的配送和流式训练,因此对于模型的版本管理十分重要,这也是在训练保存模型时缺失的部分,因此cube-builder在生成分片的同时,也可以人为指定增加版本信息。

## cube-server

cube-server也就是稀疏参数服务器本身,它通过brpc提供高性能分布式查询服务,通过RestAPI来进行远端调用。

## cube-cli

cube-cli是cube-server的客户端,这部分已经被整合到paddle serving当中,当我们准备好cube.conf配置文件并在paddle serving server的代码中指定kv_infer相关的op时,cube-cli就会在serving端准备就绪。

# 模型配送步骤
## 模型文件生成Sequence File

为了让模型参数从训练端配送到预测端,我们需要把训练好的模型从Paddle 模型保存格式转换成Sequence File格式。

**为什么是 Sequence File?**
Sequence File是Hadoop File System的通用格式。在文章的开头提到了分布式Cube可以为超大规模稀疏参数服务提供支持,而大规模的稀疏参数在实际生产环境中保存在分布式文件系统当中,Hadoop File System是业界开源的最稳定的分布式文件系统之一,因此Sequence File格式成为了Cube加载模型的文件格式。

<![endif]-->

```

seq_generator SparseFeatFactor SparseSeqFile

```

## 生成分片文件

在单机版的环境下,分片数为1。执行

```
cube-builder -shard_num 1 -version 0 -input ./input -output ./output
```

## 配送给Cube-Server

<![endif]-->

单机版本的配送过程非常简单,只需要在cube二进制程序所在目录下的data文件夹存放index.前缀的文件即可。

```
cp ../../../build_server/output/bin/cube* ./cube
bash cube_prepare.sh
```


## Cube-Client 验证配送是否成功
此步非必须,用于测试配送是否成功
```
./cube-cli -dict_name=test_dict -keys  keys -conf ./cube/cube.conf
```

如果查看到每个key都有对应的value输出,就说明配送成功。此文件也可以被Serving使用,用作Serving中 general kv infer op中进行cube查询。