From 0bbb52fb29488e6ef411483893dbf1142dda9fb8 Mon Sep 17 00:00:00 2001 From: divyashreepathihalli Date: Tue, 16 May 2023 22:39:14 +0000 Subject: [PATCH 1/5] added DynamicEmbedding RFC --- rfcs/20230515-DynamicEmbedding.md | 255 ++++++++++++++++++ .../AsyncTraining.png | Bin 0 -> 31435 bytes .../DynamicEmbedding.png | Bin 0 -> 26931 bytes .../DynamicLookup.png | Bin 0 -> 61414 bytes 4 files changed, 255 insertions(+) create mode 100644 rfcs/20230515-DynamicEmbedding.md create mode 100644 rfcs/20230515-DynamicEmbedding/AsyncTraining.png create mode 100644 rfcs/20230515-DynamicEmbedding/DynamicEmbedding.png create mode 100644 rfcs/20230515-DynamicEmbedding/DynamicLookup.png diff --git a/rfcs/20230515-DynamicEmbedding.md b/rfcs/20230515-DynamicEmbedding.md new file mode 100644 index 000000000..17e4c98c1 --- /dev/null +++ b/rfcs/20230515-DynamicEmbedding.md @@ -0,0 +1,255 @@ +# DynamicEmbedding layer for Keras + +Status | Accepted +:------------ | :----------------------------------------------------------- +**RFC #** | +**Author(s)** | Divyashree Sreepathihalli(divyasreepat@google.com) +**Sponsor** | Rick Chao (rchao@google.com) +**Updated** | 2023-05-16 + +## Objective +The objective of this proposal is to introduce the DynamicEmbedding layer to +the Keras ecosystem, providing a native solution for handling +colossal-scale problems in recommendation systems. The proposed solution +facilitates automatic vocabulary building and updates, and dynamic embedding +updates corresponding to evolving input patterns and vocabulary changes. +### Goal + * Works across accelerators (GPU / TPU) + * Works with Parameter server strategy (asynchroous distributed training) + * The solution requires minimum user code changes + * Works with batched training and streamed training + * Has performance parity with existing training jobs w/o dynamic embedding +### Extended goals + * Works with synchronous distributed training + + + +## Motivation +Recommendation systems and search ranking are crucial in powering the largest +revenue streams, such as PCTR/PCVR and video recommendation. However, as +recommendation models have become more complicated, there are three distinct +challenges that need to be addressed. These include + +the difficulty in separating popular and less-popular items or adapting to +the seasonal cycle of popularity, the lack of a cross-platform solution for +handling larger and larger embedding tables the dynamic nature of large +embedding tables due to modeling large unique id-based features and the +crossing features among them. + +Currently, there are two ways to handle such limitations in TensorFlow: +direct hashing without a vocabulary +a pre-computed fixed vocab with out-of-vocabulary hashing. +Neither approximation gives the user a fine grained control over +vocab-embedding mapping. Hence, the proposal aims to provide a native +solution for handling these challenges by introducing the concept of +DynamicEmbedding. + +### Why Keras? +We believe that internal and external users share many common pain points. +To support these features, external users today often need to rebuild an +entire suite of APIs, including optimizers, distributed training logic, +and customized TF kernels, to work around TensorFlow restrictions (that +variables are special-cased). As the middle layer of the TF tech stack, +we believe that we are in the best position to work with upstream 1P and +3P users, consolidate feedback, collaborate to drive a hardware-agnostic +solution. + +## User Benefit +This initiative offers several benefits, including: +Providing a unified TensorFlow solution that allows for productive +exploration and potential large model quality gain across different use +cases. +Reducing computation cost and training latency by eliminating the need +for a pre-computed vocab. +Strengthening TensorFlow's advantage for third-party adoption.(Nvidia, +spotify, Tencent/Alibaba +(RFC: https://github.com/tensorflow/recommenders-addons/blob/master/rfcs/20200424-sparse-domain-isolation.md) +- vip.com case study +(https://drive.google.com/file/d/1UEWtixlA_zucLLkXlmgbF-4DAZHHKNmo/view?resourcekey=0-QXC4KOuQ6_RXuaYiyyRfYQ) + +Additionally, many external users that rely on TensorFlow have already +adopted this idea, and open-source libraries have been pushing on this +front - TorchRec with a native embedding distribution and a dynamic +embedding solution & HugeCTR (Merlin) with a highly-performant +embedding caching strategy. This makes it essential for TensorFlow to +introduce a native solution to stay competitive in the market. + +## Design Proposal +In this design approach, the DynamicEmbedding layer is composed of two +layers: the DynamicLookup layer and the Embedding layer. The +DynamicLookup layer is responsible for the following tasks: + * Maintaining a vocabulary table using an eviction policy that is + updated based on input pattern. + * Performing vocabulary lookup for the given input and returning + integer indexes. + * The index is then passed to the Embedding layer, which looks + up the embedding vector. The Embedding layer is responsible for + the following tasks: + + Looking up the embedding vector for the given integer index. + + Returning the embedding vector. +The embedding vector is then used by the subsequent layer in the +neural network. The Dynamic Embedding layer is used in conjunction +with UpdateEmbeddingCallback. The callback is triggered at a +predetermined time interval. It aggregates the Dynamic vocabulary +table across all workers and updates the vocabulary that is used +for input lookup across all workers. This ensures that the vocabulary +is always up-to-date and that all workers are using the same vocabulary. + + +![DynamicEmbedding](/usr/local/google/home/divyasreepat/community/rfcs/20230515-DynamicEmbedding/DynamicEmbedding.png) + +Here is a deeper look at what is done in DynamicLookup layer and how the +UpdateEmbeddingCallback updates the embeddings and vocabulary +The DynamicEmbedding layer identifies and adds unique keys to the dynamic +vocabulary table for every input passed to it. This table is constantly +updated based on the eviction policy provided, such as TTL, LFU, or LRU. +The table is maintained on each worker when used with distributed +training, and the tables on different workers may be different. +The UpdateEmbeddingCallback is a timed callback that uses a timed +thread to create a callback event when the timer expires. The callback +aggregates the dynamic vocabulary table values across all workers in a +distributed training setup and updates the vocabulary on all workers. +Update the vocab->index mapping(mutable hash table/ tf.Variable) on +all workers Update/remap the embedding matrix to reflect new +vocabulary-> index mapping + * Old vocab keys will have the same embedding vector + * New vocab keys will have newly initialized embedding vector +This updated vocabulary is used for lookup in the DynamicLookup layer +until the callback event is triggered again after the time interval. + +![DynamicLookup](/usr/local/google/home/divyasreepat/community/rfcs/20230515-DynamicEmbedding/DynamicLookup.png) + +The image below illustrates the workflow when the parameter server +strategy is used. PSS supports asynchronous training. Each worker +will have a copy of the vocabulary, which will be consistent across +all the workers. Each worker learns the dynamic vocabulary table +independently. At regular intervals, in the update embedding callback, +the vocabulary table is aggregated from values across all the workers. +The top k vocabulary is extracted and the vocabulary lookup is updated +with these values. + +![DynamicEmbedding asynchronous training](/usr/local/google/home/divyasreepat/community/rfcs/20230515-DynamicEmbedding/AsyncTraining.png) + +## Performance implications +There are two options to have a mutable data structure to maintain the +dynamic vocabulary table: + * Mutable hash tables + * Variables with dynamic shapes +Here are some additional details about each option: +Mutable hash tables are a type of data structure that allows for quick +lookups of data. +Variables with dynamic shapes are a type of data structure that allows +for variables to have different shapes at different times. This can be +useful for storing data that is constantly changing, such as the +vocabulary of a language. Right now, with parameter server strategy +variables cannot be placed on parameter servers. Mutable hash tables +are always placed on the chief, which could have performance +implications for lookups, inserts, and updates to the vocabulary. +However, if we can add support for the TensorFlow distribute side +to allow per-worker variable creation, this performance implication +can be overcome. + +## Dependencies +The proposed feature does not introduce any new dependencies. It is +a stand-alone feature that can be used with any existing TensorFlow +workflow. There is no need to modify any existing code or workflows +to use this feature. + +## Engineering Impact +This feature can add a small time overhead to update the dynamic +vocabulary table, but this comes with improved performance of models +and less user intervention to update vocabulary and restart training. +Training can be continuous and with real-time data, and the model +would continuously keep updating its vocabulary. This is beneficial +because it allows the model to learn new input patterns, which can +improve its accuracy and performance. Additionally, it reduces the +amount of time and effort required to maintain the model, as the +user does not need to manually update the vocabulary table or +restart training every time new data is available. These benefits +are particularly valuable in an online learning setting + +## Platforms and Environments + * GPU, TPU, CPU + * Asynchronous distributed training +Synchronous distributed training + +## Best Practices +The following are the best practices used so far: + * The users need to stop training the model and update the + vocabulary before restarting training. + * The vocabulary that needs to be provided to the model needs + to be generated by the user separately. +The DynamicEmbedding layer is a new layer that enables users to +train a model on a dataset with a dynamic vocabulary. This means +that the vocabulary can change over time without the user having +to stop training the model and update the vocabulary. The layer +is simply used as any other Keras layer. The initial vocabulary +can be provided or the layer will learn the whole vocabulary on +its own. + +## Tutorials and Examples +``` +from keras.layers import DynamicEmbedding +train_data = np.array([ + ['a', 'j', 'c', 'd', 'e'], + ['a', 'h', 'i', 'j', 'b'], + ['i', 'h', 'c', 'j', 'e'], + + ]) + train_labels = np.array([0, 1, 2]) + vocab = tf.constant(['a', 'b', 'c', 'd', 'e']) + eviction_policy = 'LFU' + # Define the model + model = keras.models.Sequential([ + DynamicEmbedding( + input_dim=5, + output_dim=2, + input_length=5, + eviction_policy=eviction_policy, + initial_vocabulary=vocab, + ), + keras.layers.Flatten(), + keras.layers.Dense(3, activation='softmax'), + ]) + + # Compile the model + model.compile( + optimizer='adam', + loss='sparse_categorical_crossentropy', + metrics=['accuracy'], + ) + update_embedding_callback = dynamic_embedding.UpdateEmbeddingCallback( + model.layers[0], + interval=2, + ) + with update_embedding_callback: + result = model.fit( + train_data, + train_labels, + epochs=100, + batch_size=1, + callbacks=[update_embedding_callback], + ) +``` + +## Compatibility +This design is forward and backward compatible. The layer should work with +both synchronous and asynchronous distribution strategies. The model with +DynamicEmbedding can be saved and loaded just like any other keras layer. +The vocabulary will be accessible to users to save and load as well. + +## User Impact +Users will be able to access DynamicEmbedding as a new layer in Keras. +An illustration of how to use this layer is shown above. + +## Acknowledgement + +The [TensorFlow Recommenders Addon project](https://github.com/tensorflow/recommenders-addons/blob/master/docs/api_docs/tfra/dynamic_embedding.md) +maintained by TensorFlow SIG Recommenders is a community-led project that +aims to solve similar issues currently. This RFC is inspired by both +Google internal use cases as well as the TFRA project. We are thankful +for the contributions from TFRA maintainers (in particular, Haidong +Rong from Nvidia) and welcome future collaborations on this RFC. + + +## Questions and Discussion Topic diff --git a/rfcs/20230515-DynamicEmbedding/AsyncTraining.png b/rfcs/20230515-DynamicEmbedding/AsyncTraining.png new file mode 100644 index 0000000000000000000000000000000000000000..b8f27abc91a5790ebdb2b2ca5faa07f611ba5fe7 GIT binary patch literal 31435 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 ZE7TP;dDiQ|SCFvepD4?GdHmYve*nJ+1eyQ< literal 0 HcmV?d00001 diff --git a/rfcs/20230515-DynamicEmbedding/DynamicLookup.png b/rfcs/20230515-DynamicEmbedding/DynamicLookup.png new file mode 100644 index 0000000000000000000000000000000000000000..40e6307c5e95d8851258f5a996145cac467a90a4 GIT binary patch literal 61414 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 A;Q#;t literal 0 HcmV?d00001 From 5a105ff98e28a83030b5a15a067b60a107d911f1 Mon Sep 17 00:00:00 2001 From: divyashreepathihalli Date: Tue, 16 May 2023 22:40:56 +0000 Subject: [PATCH 2/5] added RFC number --- rfcs/20230515-DynamicEmbedding.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rfcs/20230515-DynamicEmbedding.md b/rfcs/20230515-DynamicEmbedding.md index 17e4c98c1..9a377bd93 100644 --- a/rfcs/20230515-DynamicEmbedding.md +++ b/rfcs/20230515-DynamicEmbedding.md @@ -2,7 +2,7 @@ Status | Accepted :------------ | :----------------------------------------------------------- -**RFC #** | +**RFC #** | 446 **Author(s)** | Divyashree Sreepathihalli(divyasreepat@google.com) **Sponsor** | Rick Chao (rchao@google.com) **Updated** | 2023-05-16 From 6459bf1b8a2bb8e3e517f071b956a6a94206025e Mon Sep 17 00:00:00 2001 From: divyashreepathihalli Date: Tue, 16 May 2023 22:45:01 +0000 Subject: [PATCH 3/5] reformat --- rfcs/20230515-DynamicEmbedding.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/rfcs/20230515-DynamicEmbedding.md b/rfcs/20230515-DynamicEmbedding.md index 9a377bd93..be195d5fa 100644 --- a/rfcs/20230515-DynamicEmbedding.md +++ b/rfcs/20230515-DynamicEmbedding.md @@ -22,8 +22,6 @@ updates corresponding to evolving input patterns and vocabulary changes. ### Extended goals * Works with synchronous distributed training - - ## Motivation Recommendation systems and search ranking are crucial in powering the largest revenue streams, such as PCTR/PCVR and video recommendation. However, as @@ -243,7 +241,6 @@ Users will be able to access DynamicEmbedding as a new layer in Keras. An illustration of how to use this layer is shown above. ## Acknowledgement - The [TensorFlow Recommenders Addon project](https://github.com/tensorflow/recommenders-addons/blob/master/docs/api_docs/tfra/dynamic_embedding.md) maintained by TensorFlow SIG Recommenders is a community-led project that aims to solve similar issues currently. This RFC is inspired by both @@ -251,5 +248,4 @@ Google internal use cases as well as the TFRA project. We are thankful for the contributions from TFRA maintainers (in particular, Haidong Rong from Nvidia) and welcome future collaborations on this RFC. - ## Questions and Discussion Topic From bf817232ff89258e8a170ae2c6384988cfce12be Mon Sep 17 00:00:00 2001 From: divyashreepathihalli Date: Tue, 16 May 2023 22:47:42 +0000 Subject: [PATCH 4/5] up[date file name --- rfcs/20230515-DynamicEmbedding.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/rfcs/20230515-DynamicEmbedding.md b/rfcs/20230515-DynamicEmbedding.md index be195d5fa..94e29e1ae 100644 --- a/rfcs/20230515-DynamicEmbedding.md +++ b/rfcs/20230515-DynamicEmbedding.md @@ -94,7 +94,7 @@ for input lookup across all workers. This ensures that the vocabulary is always up-to-date and that all workers are using the same vocabulary. -![DynamicEmbedding](/usr/local/google/home/divyasreepat/community/rfcs/20230515-DynamicEmbedding/DynamicEmbedding.png) +![DynamicEmbedding](/20230515-DynamicEmbedding/DynamicEmbedding.png) Here is a deeper look at what is done in DynamicLookup layer and how the UpdateEmbeddingCallback updates the embeddings and vocabulary @@ -115,7 +115,7 @@ vocabulary-> index mapping This updated vocabulary is used for lookup in the DynamicLookup layer until the callback event is triggered again after the time interval. -![DynamicLookup](/usr/local/google/home/divyasreepat/community/rfcs/20230515-DynamicEmbedding/DynamicLookup.png) +![DynamicLookup](0230515-DynamicEmbedding/DynamicLookup.png) The image below illustrates the workflow when the parameter server strategy is used. PSS supports asynchronous training. Each worker @@ -126,7 +126,7 @@ the vocabulary table is aggregated from values across all the workers. The top k vocabulary is extracted and the vocabulary lookup is updated with these values. -![DynamicEmbedding asynchronous training](/usr/local/google/home/divyasreepat/community/rfcs/20230515-DynamicEmbedding/AsyncTraining.png) +![DynamicEmbedding asynchronous training](0230515-DynamicEmbedding/AsyncTraining.png) ## Performance implications There are two options to have a mutable data structure to maintain the From 0366389acfd23bb154ef8a5c84d2355efe434d07 Mon Sep 17 00:00:00 2001 From: divyashreepathihalli Date: Fri, 19 May 2023 16:37:45 +0000 Subject: [PATCH 5/5] updated line break --- rfcs/20230515-DynamicEmbedding.md | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/rfcs/20230515-DynamicEmbedding.md b/rfcs/20230515-DynamicEmbedding.md index 94e29e1ae..10110a69c 100644 --- a/rfcs/20230515-DynamicEmbedding.md +++ b/rfcs/20230515-DynamicEmbedding.md @@ -26,13 +26,12 @@ updates corresponding to evolving input patterns and vocabulary changes. Recommendation systems and search ranking are crucial in powering the largest revenue streams, such as PCTR/PCVR and video recommendation. However, as recommendation models have become more complicated, there are three distinct -challenges that need to be addressed. These include - -the difficulty in separating popular and less-popular items or adapting to -the seasonal cycle of popularity, the lack of a cross-platform solution for -handling larger and larger embedding tables the dynamic nature of large -embedding tables due to modeling large unique id-based features and the -crossing features among them. +challenges that need to be addressed. These include the difficulty in +separating popular and less-popular items or adapting to the seasonal cycle +of popularity, the lack of a cross-platform solution for handling larger +and larger embedding tables the dynamic nature of large embedding tables +due to modeling large unique id-based features and the crossing features +among them. Currently, there are two ways to handle such limitations in TensorFlow: direct hashing without a vocabulary