Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
Serving
提交
2c2786ed
S
Serving
项目概览
PaddlePaddle
/
Serving
接近 2 年 前同步成功
通知
186
Star
833
Fork
253
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
105
列表
看板
标记
里程碑
合并请求
10
Wiki
2
Wiki
分析
仓库
DevOps
项目成员
Pages
S
Serving
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
105
Issue
105
列表
看板
标记
里程碑
合并请求
10
合并请求
10
Pages
分析
分析
仓库分析
DevOps
Wiki
2
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
2c2786ed
编写于
4月 13, 2022
作者:
S
ShiningZhang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
update doc
上级
e37cfeb8
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
109 addition
and
0 deletion
+109
-0
doc/Offical_Docs/8-1_Cube_Architecture_CN.md
doc/Offical_Docs/8-1_Cube_Architecture_CN.md
+38
-0
doc/Offical_Docs/8-2_Cube_Compile_CN.md
doc/Offical_Docs/8-2_Cube_Compile_CN.md
+71
-0
doc/Offical_Docs/images/8-1_Cube_Architecture_CN_1.png
doc/Offical_Docs/images/8-1_Cube_Architecture_CN_1.png
+0
-0
未找到文件。
doc/Offical_Docs/8-1_Cube_Architecture_CN.md
0 → 100644
浏览文件 @
2c2786ed
# 稀疏参数索引服务 Cube
在稀疏参数索引场景,如推荐、广告系统中通常会使用大规模 Embedding 表。由于在工业级的场景中,稀疏参数的规模非常大,达到 10^9 数量级。因此在一台机器上启动大规模稀疏参数预测是不实际的,因此我们引入百度多年来在稀疏参数索引领域的工业级产品 Cube,提供分布式的稀疏参数服务。
<img
src=
"images/8-1_Cube_Architecture_CN_1.png"
>
## Cube 组件介绍
**一. cube-builder**
cube-builder 是把模型生成分片文件和版本管理的工具。由于 cube 是用于分布式的稀疏参数服务,对于分布式当中的每一个节点,需要加载不同的分片,然而生成的稀疏参数文件往往一个大文件,就需要用哈希函数将其分割为不同的分片。与此同时,工业级的场景需要支持定期模型的配送和流式训练,因此对于模型的版本管理十分重要,这也是在训练保存模型时缺失的部分,因此 cube-builder 在生成分片的同时,也可以人为指定增加版本信息。
**二. cube-transfer**
cube-transfer 是调度管理服务。一方面 cube-transfer 会监测上游模型,当模型更新时进行模型下载。另一方面,会调用 cube-builder 将下载好的模型进行分片。而后与 cube-agent 进行对接完成分片文件配送。
**三. cube-agent**
cube-agent 是与cube-transfer 配套使用的调度管理服务。cube-agent 会接收来自 cube-transfer 传输来的分片文件。而后发送信号给 cube-server 对应接口完成配送操作。
**四. cube-server**
cube-server 基于 Cube 的 KV 能力,对外提供稀疏参数服务。它通过 brpc 提供高性能分布式查询服务,并支持 RestAPI 来进行远端调用。
**五. cube-cli**
cube-cli 是 cube-server 的客户端,用于请求 cube-server 进行对应稀疏参数查询功能。这部分组件已经被整合到 paddle serving 当中,当我们准备好 cube.conf 配置文件并在 server 的代码中指定kv_infer 相关的 op 时,cube-cli 就会在 server 端准备就绪。
## 配送过程
一次完整的配送流程如下:
-
将训练好的模型存放到 FileServer 中,并在传输完成后生成完成标志;
-
cube-transfer 监测到完成标志后,从 FileServer 中下载对应模型文件;
-
cube-transfer 使用 cube-builder 工具对稀疏参数模型进行分片;
-
cube-transfer 向 cube-agent 进行文件配送;
-
cube-agent 向 cube-server 发送加载命令,通知 cube-server 热加载新的参数文件;
-
cube-server 响应 Paddle Serving 发送的查询请求。
\ No newline at end of file
doc/Offical_Docs/8-2_Cube_Compile_CN.md
0 → 100644
浏览文件 @
2c2786ed
# Cube 编译
## 概述
**Cube 一共有 4 个组件.**
-
Cube-Server: Cube-Server 是 C++ 程序,是 Cube 套件的核心,负责稀疏参数索引服务的查询。
-
Cube-Agent: Cube-Agent 是一段 Go 程序,负责稀疏参数配送。
-
Cube-Transfer: Cube-Transfer 是一段 Go 程序,负责接受上游原始稀疏参数模型,做分片后分发给各个 Cube-Agent。
-
Cube-Builder: Cube-Builder 是一段 C++ 程序,负责被 Cube-Transfer 调用并按配置生成相关分片。
## 编译依赖
**以下是主要组件及其编译依赖**
-
Cube-Server: Cube-Server 最重要的编译依赖是 Baidu-RPC,其提供高效快速的 RPC 协议。这个依赖库可以复用 Paddle-Serving 的配置。
-
Cube-Agent: Cube-Agent 需要 Go 环境支持,需要按照
[
编译文档
](
)安装相关
Go 依赖库。
-
Cube-Transfer: Cube-Transfer 需要 Go 环境支持,需要按照
[
编译文档
](
)安装相关
Go 依赖库。
-
Cube-Builder: Cube-Builder 依赖关系较为简单,不需要提前准备依赖项。
## 编译方法
推荐使用 Docker 编译,我们已经为您准备好了编译环境并配置好了上述编译依赖,详见
[
镜像环境
](
)。
**一. 设置 PYTHON 环境变量**
请按照如下,确定好需要编译的 Python 版本,设置对应的环境变量,一共需要设置三个环境变量,分别是
`PYTHON_INCLUDE_DIR`
,
`PYTHON_LIBRARIES`
,
`PYTHON_EXECUTABLE`
。以下我们以 python 3.7为例,介绍如何设置这三个环境变量。
```
# 请自行修改至自身路径
export PYTHON_INCLUDE_DIR=/usr/local/include/python3.7m/
export PYTHON_LIBRARIES=/usr/local/lib/x86_64-linux-gnu/libpython3.7m.so
export PYTHON_EXECUTABLE=/usr/local/bin/python3.7
export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin
python3.7 -m pip install -r python/requirements.txt
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct
go install github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway@v1.15.2
go install github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger@v1.15.2
go install github.com/golang/protobuf/protoc-gen-go@v1.4.3
go install google.golang.org/grpc@v1.33.0
go env -w GO111MODULE=auto
```
环境变量的含义如下表所示。
| cmake 环境变量 | 含义 | 注意事项 | Docker 环境是否需要 |
|-----------------------|-------------------------------------|-------------------------------|--------------------|
| PYTHON_INCLUDE_DIR | Python.h 所在的目录,通常为
**
/include/python3.7/Python.h | 如果没有找到。说明 1)没有安装开发版本的 Python,需重新安装 2)权限不足无法查看相关系统目录。 | 是(/usr/local/include/python3.7) |
| PYTHON_LIBRARIES | libpython3.7.so 或 libpython3.7m.so 所在目录,通常为 /usr/local/lib | 如果没有找到。说明 1)没有安装开发版本的 Python,需重新安装 2)权限不足无法查看相关系统目录。 | 是(/usr/local/lib/x86_64-linux-gnu/libpython3.7m.so) |
| PYTHON_EXECUTABLE | python3.7 所在目录,通常为 /usr/local/bin | | 是(/usr/local/bin/python3.7) |
**二. 编译**
```
mkdir build_cube
cd build_cube
cmake -DPYTHON_INCLUDE_DIR=$PYTHON_INCLUDE_DIR \
-DPYTHON_LIBRARIES=$PYTHON_LIBRARIES \
-DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
-DSERVER=ON \
-DWITH_GPU=OFF ..
make -j20
cd ..
```
最终我们会在
`build_cube/core/cube`
目录下看到 Cube 组件已经编译完成。
\ No newline at end of file
doc/Offical_Docs/images/8-1_Cube_Architecture_CN_1.png
0 → 100644
浏览文件 @
2c2786ed
824.3 KB
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录