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,
    ...
  },
  ...
}