Skip to content

Commit 3d1b640

Browse files
authored
[Docs] Update SessionGroup document. (#311)
1 parent fc005bd commit 3d1b640

File tree

1 file changed

+32
-7
lines changed

1 file changed

+32
-7
lines changed

docs/SessionGroup.md

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,22 @@
33
## 简介
44
当前Inference场景中,无论用户直接使用TFServing还是使用TF提供的C++接口调用Session::Run,都无法实现多个Session并发处理Request,导致单个Session无法很好的实现CPU or GPU的有效利用。用户如果通过多Instance方式(多进程),无法共享底层的Variable,导致大量使用内存,并且每个Instance各自加载一遍模型,严重影响资源的使用率和模型加载效率。
55

6-
SessionGroup功能提供了可以配置一组Session,并且将Request通过Round Robin方式分发到某一个Session。SessionGroup中的每个Session有私有的线程池,并且支持每个线程池绑定底层的CPU Core,这样可以最大程度的避免共享资源导致的锁冲突开销。SessionGroup中唯一共享的资源是Variable,所有Session共享底层的Variable,并且模型加载只需要加载一次。
6+
SessionGroup功能提供了可以配置一组Session,并且将Request通过Round Robin(支持用户自定义策略)方式分发到某一个Session。SessionGroup中的每个Session有私有的线程池,并且支持每个线程池绑定底层的CPU Core,这样可以最大程度的避免共享资源导致的锁冲突开销。SessionGroup中唯一共享的资源是Variable,所有Session共享底层的Variable,并且模型加载只需要加载一次。
77

8-
通过使用SessionGroup,可以解决内存占用大,但模型CPU使用率低的问题,大大提高CPU利用率。此外SessionGroup也可以在GPU场景下通过多Session并发执行,大大提高GPU的利用效率。
8+
通过使用SessionGroup,可以解决内存占用大,但模型CPU使用率低的问题,大大提高资源利用率,在保证latency的前提下极大提高QPS。此外SessionGroup也可以在GPU场景下通过多Session并发执行,大大提高GPU的利用效率。
99

1010
## 接口介绍
1111

12-
### 直接使用Session::Run场景调用SessionGroup
13-
如果用户直接使用Session::Run方式实现的Serving,可以参考以下使用方式来使用SessionGroup。
12+
如果用户使用Tensorflow Serving进行服务,可以使用我们提供的代码: [AlibabaPAI/serving](https://github.com/AlibabaPAI/serving/commits/deeprec),这里已经提供了接入SessionGroup的功能。也可以使用我们提供的[Processor](https://github.com/alibaba/DeepRec/tree/main/serving)代码,Processor没有提供RPC服务框架,需要用户完善,接入自有RPC框架中。
13+
14+
如果用户使用的是自有seving框架,那么需要做的修改如下。
15+
16+
### 1.直接Session::Run进行serving场景
17+
在Inference场景下,如果用户直接使用Session::Run方式实现的Serving,可以参考以下使用方式来使用SessionGroup。
1418

1519
#### 创建SessionGroup
1620

21+
如果是手动创建Session::Run方式实现的Serving,那么将serving框架中NewSession改为NewSessionGroup。
1722
session_num指定SessionGroup中创建多少个Session,用户可以通过评估当前单个Session的CPU利用率,判断需要创建多少个Session。比如如果当前单个Session CPU的最高利用率为20%,建议用户配置4个Session。
1823

1924
```c++
@@ -23,8 +28,9 @@ TF_RETURN_IF_ERROR(NewSessionGroup(*session_options_,
2328
TF_RETURN_IF_ERROR((*session_group)->Create(meta_graph_def_.graph_def()));
2429

2530
```
31+
参考代码: [Processor](https://github.com/alibaba/DeepRec/blob/main/serving/processor/serving/model_session.cc#L143)
2632
27-
#### Session Run
33+
#### SessionGroup Run
2834
2935
用户原有代码使用Session::Run可以直接替换为SessionGroup::Run
3036
@@ -33,7 +39,26 @@ status = session_group_->Run(run_options, req.inputs,
3339
req.output_tensor_names, {}, &resp.outputs, &run_metadata);
3440
3541
```
42+
参考代码: [Processor](https://github.com/alibaba/DeepRec/blob/main/serving/processor/serving/model_session.cc#L308)
43+
44+
### 2.通过SavedModelBundle进行serving场景
45+
TFServing使用的是SavedModelBundle进行serving的,相关的代码修改参考:[SessionGroup](https://github.com/AlibabaPAI/serving/commit/8b92300da84652f00f13fd20f5df0656cfa26217),推荐直接使用我们提供的TFServing代码。
46+
47+
#### TFServing中使用SessionGroup
48+
49+
支持SessionGroup的TFServing代码见:[AlibabaPAI/serving](https://github.com/AlibabaPAI/serving/commits/deeprec)
50+
51+
编译文档见:[TFServing编译](https://deeprec.readthedocs.io/zh/latest/TFServing-Compile-And-Install.html)
52+
53+
使用方式如下:
54+
```c++
55+
bazel-bin/tensorflow_serving/model_servers/tensorflow_model_server --tensorflow_intra_op_parallelism=16 --tensorflow_inter_op_parallelism=16 --use_per_session_threads=true --session_num_per_group=4 --model_base_path=/xxx/pb
56+
```
3657

37-
### TFServing中使用SessionGroup
38-
当前SessionGroup正在支持TFServing(正在开发中)
58+
主要参数:
59+
```c++
60+
session_num_per_group:表示session group中创建几个sessions。
61+
62+
use_per_session_threads:为true表示每个session使用独立的线程池,减少session之间的干扰,建议配置为true。每个session的线程池都是通过tensorflow_intra_op_parallelis和tensorflow_inter_op_parallelism控制大小。
63+
```
3964

0 commit comments

Comments
 (0)