message: Don't force place _Arg and _Retval on CPU
  The "GPU" kernels for _Arg and _Retval have HostMemory outputs and inputs
  respectively so there is no need to place these ops on the CPU explicitly.
  Placing these ops on the CPU explicitly has the effect of partitioning the
  PartitionedCall graph unnecessarily.
diff: @@ -151,8 +151,6 @@ Status PartitionedCallOp::FillOutputDevices(
  // outputs empty, and rely on a Placer and colocation constraints to
  // infer correct placement for the function output.
  opts->output_devices.push_back("");
  - } else if (MTypeFromDType(dtype) == HOST_MEMORY) {
  - opts->output_devices.push_back(cpu_device.name());
  } else {
  opts->output_devices.push_back(opts->target);
  }
  @@ -213,8 +211,6 @@ Status PartitionedCallOp::Instantiate(FunctionLibraryRuntime* lib,
  if (dtype == DT_RESOURCE) {
  const ResourceHandle& handle = tensor.flat<ResourceHandle>()(0);
  opts.input_devices.push_back(handle.device());
  - } else if (MTypeFromDType(dtype) == HOST_MEMORY) {
  - opts.input_devices.push_back(cpu_device->name());
  } else {
  opts.input_devices.push_back(opts.target);
  }
  