Device Placement Optimization
背景
在稀疏模型在线GPU推理任务中,模型中Embedding层中只有部分算子被place到GPU上,这导致在推理任务在Embedding层执行时出现大量的CPU-GPU之间的数据拷贝,GPU计算带来的性能提升难以抵消内存拷贝带来的overhead,拖慢推理任务。虽然可以通过实现相关算子的GPU版本进行解决,但是仍然有部分算子由于并行度不高,部分计算必须在CPU上进行等问题导致算子执行效率不高,或者无法实现GPU版本。为此,可以选择将Embedding层place到CPU上执行,从而减少内存拷贝,达到提升性能的目的。
为此我们提出了Device Placement优化功能, 当前该功能支持的一种场景是将Embedding Layer自动place到CPU上,从而解决Embedding层CPU-GPU之间大量数据拷贝操作造成的性能下降问题。
功能说明
Device Placement优化功能能够自动识别Embedding层,并将其place到CPU上。同时只改变实际计算图,而不影响GraphDef。
用户接口(C++)
SessionOptions中提供了如下选项:
tensorflow::SessionOptions session_options;
session_options.config.mutable_graph_options()->mutable_optimizer_options()->set_device_placement_optimization(true);
如果用户使用DeepRec提供的tensorflow-serving,可以通过--enable_device_placement_optimization=true
来开启device placement功能。
如果用户使用DeepRec processor,可以通过在json配追文件中增加enable_device_placement_optimization来开启device placement功能,如下所示:
{
"model_entry": "",
"processor_path": "...",
"processor_entry": "libserving_processor.so",
"processor_type": "cpp",
"model_config": {
...
"enable_device_placement_optimization": true,
...
},
...
}