HPS Layers
SparseLookupLayer
- class hierarchical_parameter_server.SparseLookupLayer(*args, **kwargs)[source]
- Bases: - Layer- Abbreviated as - hps.SparseLookupLayer(*args, **kwargs).- This is a wrapper class for HPS sparse lookup layer, which basically performs the same function as - tf.nn.embedding_lookup_sparse. Note that- ps_config_fileand- global_batch_sizeshould be specified in the constructor if you want to use implicit HPS initialization.- Parameters:
- model_name (str) – The name of the model that has embedding tables. 
- table_id (int) – The index of the embedding table for the model specified by model_name. 
- emb_vec_size (int) – The embedding vector size for the embedding table specified by model_name and table_id. 
- emb_vec_dtype – The data type of embedding vectors which must be - tf.float32.
- ps_config_file (str) – The JSON configuration file for HPS initialization. 
- global_batch_size (int) – The global batch size for HPS that is deployed on multiple GPUs. 
 
 - Examples - import hierarchical_parameter_server as hps sparse_lookup_layer = hps.SparseLookupLayer(model_name = args.model_name, table_id = args.table_id, emb_vec_size = args.embed_vec_size, emb_vec_dtype = tf.float32, ps_config_file = args.ps_config_file, global_batch_size = args.global_batch_size) @tf.function def _infer_step(inputs): embedding_vector = sparse_lookup_layer(sp_ids=inputs, sp_weights = None, combiner="mean") ... for i, (inputs, labels) in enumerate(dataset): _infer_step(inputs) - call(sp_ids, sp_weights, name=None, combiner=None, max_norm=None)[source]
- Looks up embeddings for the given ids and weights from a list of tensors. This op assumes that there is at least one ID for each row in the dense tensor represented by - sp_ids(i.e. there are no rows with empty features), and that all the indices of- sp_idsare in canonical row-major order. The- sp_idsand- sp_weights(if not None) are- SparseTensorwith rank of 2. Embeddings are always aggregated along the last dimension. If an ID value cannot be found in the HPS, the default embeddings are retrieved, which can be specified in the HPS configuration JSON file.- Parameters:
- sp_ids – N x M - SparseTensorof- int32or- int64IDs where N is typically batch size and M is arbitrary.
- sp_weights – Either a - SparseTensorof float or double weights, or- Noneto indicate all weights should be taken to be 1. If specified,- sp_weightsmust have exactly the same shape and indices as- sp_ids.
- combiner – - A string that specifies the reduction op: - "sum"
- Computes the weighted sum of the embedding results for each row. 
- "mean"
- Computes the weighted sum divided by the total weight. 
- "sqrtn"
- Computes the weighted sum divided by the square root of the sum of the squares of the weights. 
 - The default value is - "mean".
- max_norm – if not - None, each embedding is clipped if its l2-norm is larger than this value, before combining.
 
- Returns:
- emb_vector – A dense tensor representing the combined embeddings for the sparse IDs. For each row in the dense tensor represented by - sp_ids, the op looks up the embeddings for all IDs in that row, multiplies them by the corresponding weight, and combines these embeddings as specified. In other words, if- shape(sp_ids) = shape(sp_weights) = [d0, d1] - then - shape(output) = [d0, self.emb_vec_dtype] - For instance, if self.emb_vec_dtype is 16, and sp_ids / sp_weights are - [0, 0]: id 1, weight 2.0 [0, 1]: id 3, weight 0.5 [1, 0]: id 0, weight 1.0 [2, 3]: id 1, weight 3.0 - with - combiner = "mean", then the output is a 3x16 matrix where- output[0, :] = (vector_for_id_1 * 2.0 + vector_for_id_3 * 0.5) / (2.0 + 0.5) output[1, :] = (vector_for_id_0 * 1.0) / 1.0 output[2, :] = (vector_for_id_1 * 3.0) / 3.0 
- Return type:
- tf.Tensorof float32
- Raises:
- TypeError – If - sp_idsis not a- SparseTensor, or if- sp_weightsis: neither- Nonenor- SparseTensor.
- ValueError – If - combineris not one of {- "mean",- "sqrtn",- "sum"}.:
 
 
 
LookupLayer
- class hierarchical_parameter_server.LookupLayer(*args, **kwargs)[source]
- Bases: - Layer- Abbreviated as - hps.LookupLayer(*args, **kwargs).- This is a wrapper class for HPS lookup layer, which basically performs the same function as - tf.nn.embedding_lookup. Note that- ps_config_fileand- global_batch_sizeshould be specified in the constructor if you want to use implicit HPS initialization.- Parameters:
- model_name (str) – The name of the model that has embedding tables. 
- table_id (int) – The index of the embedding table for the model specified by model_name. 
- emb_vec_size (int) – The embedding vector size for the embedding table specified by model_name and table_id. 
- emb_vec_dtype – The data type of embedding vectors which must be - tf.float32.
- ps_config_file (str) – The JSON configuration file for HPS initialization. 
- global_batch_size (int) – The global batch size for HPS that is deployed on multiple GPUs. 
 
 - Examples - import hierarchical_parameter_server as hps lookup_layer = hps.LookupLayer(model_name = args.model_name, table_id = args.table_id, emb_vec_size = args.embed_vec_size, emb_vec_dtype = tf.float32, ps_config_file = args.ps_config_file, global_batch_size = args.global_batch_size) @tf.function def _infer_step(inputs): embedding_vector = lookup_layer(inputs) ... for i, (inputs, labels) in enumerate(dataset): _infer_step(inputs) - call(ids, max_norm=None)[source]
- The forward logic of this wrapper class. - Parameters:
- ids – Keys are stored in Tensor. The supported data types are - tf.int32and- tf.int64.
- max_norm – if not - None, each embedding is clipped if its l2-norm is larger than this value.
 
- Returns:
- emb_vector – the embedding vectors for the input keys. Its shape is ids.get_shape() + emb_vec_size. 
- Return type:
- tf.Tensorof float32