예제 #1
0
    def report_embedding_info(self):
        # TODO(qijun): only support float32
        infos = []
        if self._embedding_layers:
            for layer in self._embedding_layers:
                infos.append(
                    EmbeddingTableInfo(
                        layer.embedding_weight_name,
                        layer.output_dim,
                        layer.embeddings_initializer,
                        dtype_numpy_to_tensor(np.dtype("float32")),
                    ))

        if self._embedding_columns:
            for column in self._embedding_columns:
                # TODO(brightcoder01): The initializer in embedding column is
                # a variable initializer function. For embedding layer, it's a
                # tf.keras.initializers. Keep aligned between these two.
                infos.append(
                    EmbeddingTableInfo(
                        column.embedding_weight_name,
                        column.dimension,
                        Initializer.UNIFORM,
                        dtype_numpy_to_tensor(np.dtype("float32")),
                    ))

        self._ps_client.push_embedding_table_infos(infos)
예제 #2
0
    def report_embedding_info(self):
        model = elasticdl_pb2.Model()
        if self._embedding_layers:
            embedding_infos = model.embedding_table_infos
            for layer in self._embedding_layers:
                embedding_info = embedding_infos.add()
                embedding_info.name = layer.embedding_weight_name
                embedding_info.dim = layer.output_dim
                embedding_info.initializer = layer.embeddings_initializer
                # set to float32
                embedding_info.dtype = dtype_numpy_to_tensor(
                    np.dtype("float32")
                )

        if self._embedding_columns:
            embedding_infos = model.embedding_table_infos
            for column in self._embedding_columns:
                embedding_info = embedding_infos.add()
                embedding_info.name = column.embedding_weight_name
                embedding_info.dim = column.dimension
                # TODO(brightcoder01): The initializer in embedding column is
                # a variable initializer function. For embedding layer, it's a
                # tf.keras.initializers. Keep aligned between these two.
                embedding_info.initializer = "uniform"
                # set to float32
                embedding_info.dtype = dtype_numpy_to_tensor(
                    np.dtype("float32")
                )

        for ps_id in range(self._ps_num):
            self._ps_stubs[ps_id].push_embedding_table_infos(model)
예제 #3
0
 def _create_tensor_pb(self, values, indices=None):
     pb = elasticdl_pb2.Tensor()
     pb.dim.extend(values.shape)
     pb.dtype = dtype_numpy_to_tensor(values.dtype)
     pb.content = values.tobytes()
     if indices is not None:
         pb.indices.extend(tuple(indices))
     return pb
예제 #4
0
 def to_embedding_table_info_pb(self):
     """Convert the embedding table information to a protobuf"""
     embedding_pb = EmbeddingTableInfo()
     embedding_pb.name = self.name
     embedding_pb.dim = self.dim
     embedding_pb.initializer = str(self.initializer_value)
     embedding_pb.dtype = dtype_numpy_to_tensor(self.dtype)
     return embedding_pb
예제 #5
0
def serialize_ndarray(array, pb):
    dtype = dtype_numpy_to_tensor(array.dtype)
    if not dtype:
        raise ValueError("Dtype of ndarray %s is not supported", array.dtype)
    pb.dtype = dtype
    pb.tensor_content = array.tobytes()
    for d in array.shape:
        pb_d = pb.tensor_shape.dim.add()
        pb_d.size = d
예제 #6
0
def serialize_tensor(tensor, tensor_pb):
    """Serialize ElasticDL Tensor to tensor protocol buffer."""
    dtype = dtype_numpy_to_tensor(tensor.values.dtype)
    if not dtype:
        raise ValueError("Dtype of ndarray %s is not supported",
                         tensor.values.dtype)
    tensor_pb.dtype = dtype
    tensor_pb.dim.extend(tensor.values.shape)
    tensor_pb.content = tensor.values.tobytes()
    if tensor.is_indexed_slices():
        tensor_pb.indices.extend(tuple(tensor.indices))
    if tensor.name:
        tensor_pb.name = tensor.name
예제 #7
0
def ndarray_to_tensor(arr, indices=None):
    """Convert ndarray to Tensor PB"""

    if not is_numpy_dtype_allowed(arr.dtype):
        raise ValueError("Dtype of ndarray %s is not supported", arr.dtype)
    tensor = elasticdl_pb2.Tensor()
    tensor.dim.extend(arr.shape)
    tensor.content = arr.tobytes()
    if indices:
        tensor.indices.extend(indices)
    tensor.dtype = dtype_numpy_to_tensor(arr.dtype)

    return tensor