对于pbtxt格式的tensorflow SavedModel,操作/节点的设备放置在哪里定义?

时间:2018-11-18 07:26:59

标签: tensorflow tensorflow-serving

我有一个SavedModelsaved_model.pbtxtvariables\,这个仓库由以下仓库https://github.com/sthalles/deeplab_v3进行了预训练。我正在尝试通过Tensorflow-Serving服务此SavedModel,并且它只能在多GPU机器中利用GPU:0。我从https://github.com/tensorflow/serving/issues/311了解到,使用tensorflow-serving将图加载到tensorflow,并且在单个GPU上训练了该模型。我尝试使用clear_devices=True标志保存模型,但没有帮助,仍然在GPU:0上运行。

然后我尝试从https://www.tensorflow.org/guide/extend/model_files#device读取GraphDef中的saved_model.pbtxt,我知道分配给一个节点/操作的设备是在NodeDef中定义的。

我的问题是,在此saved_model.pbtxt中,仅为NodeDef中的某些操作/节点分配了CPU device: "/device:CPU:0",而没有专门分配GPU。在GPU上执行的所有这些操作的device中都没有NodeDef标签。

我想知道将GPU操作的设备放置信息保存在SavedModel中,并且可以在图形中更改设备信息吗?感谢您的帮助。

例如,在此saved_model.pbtxt中,CPU操作被定义为:

node {
     name: "save/RestoreV2/tensor_names"
     op: "Const"
     device: "/device:CPU:0"
     ...
     }

计算操作为:

node {
  name: "resnet_v2_50/block1/unit_1/bottleneck_v2/conv2/kernel/Regularizer/l2_regularizer"
  op: "Mul"
  input: "resnet_v2_50/block1/unit_1/bottleneck_v2/conv2/kernel/Regularizer/l2_regularizer/scale"
  input: "resnet_v2_50/block1/unit_1/bottleneck_v2/conv2/kernel/Regularizer/l2_regularizer/L2Loss"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@resnet_v2_50/block1/unit_1/bottleneck_v2/conv2/weights"
      }
    }
  }
  attr {
    key: "_output_shapes"
    value {
      list {
        shape {
        }
      }
    }
  }
}

0 个答案:

没有答案