NVIDIA-Merlin / Merlin

NVIDIA Merlin is an open source library providing end-to-end GPU-accelerated recommender systems, from feature engineering and preprocessing to training deep learning models and running inference in production.
Apache License 2.0
772 stars 118 forks source link

[RMP] Support for simple ML/CF Models (like Implicit) in Merlin Models and Systems #104

Open viswa-nvidia opened 2 years ago

viswa-nvidia commented 2 years ago

Problem:

Latent factor models enable discovery of the underlying structure between interactions and items. These approaches have been popular over the years to leverage implicit feedback data. Customers who are using simple models via Implicit and LightFM want to be able to deploy those models within the Merlin ecosystem.

Goal:

Constraints:

Systems

Blocking issues

Starting Point:

Merlin-models

wrap Implicit and lightFM in High-level model API:

NVTabular

N/A

Merlin-systems

Examples and Docs (To happen in 22.09)

viswa-nvidia commented 2 years ago

@benfred , please add the tickets related to this epic here

viswa-nvidia commented 2 years ago

@EvenOldridge @benfred , is Batch prediction in NVTabular section required for 22.04 ?

oliverholworthy commented 2 years ago

For the serving part. My understanding is that, for both Implicit and LightFM, the way to serve these at scale is similar to the two tower / bi-encoder design of the DLRM example we have.

Where the item embeddings are stored in a approximate-nearest neighbour search index. And we search through this space using a user embedding. (for user->item recommendations).

The difference from the DLRM example, is in how the user embedding is computed at serving time.

Computing the User Embedding:

It seems that one of the main questions is where do we store the user/item/feature embeddings for fast lookup at serving time. Ideally with support for versioning (for migrating to new model version) / updating (for new users and items).

For vector/embedding based item->user, user->user, item->item recommendations. two main components are:

We could start with a similar approach to the nearest neighbour implementation we have now. A first pass at this could be to store the user/feature embeddings as static data inside Triton. Albeit with similar challenges to having the item embeddings index stored as file(s) inside Triton (updating, and scaling to large numbers of items/users). Or they could be managed in a database outside Triton.

viswa-nvidia commented 2 years ago

@benfred / @oliverholworthy , please fill up the problem, goal and constraints section in the description. You may have provided this in the comments. Please summarise it there. Let me know if you are facing any difficulties.

viswa-nvidia commented 2 years ago

@oliverholworthy , I have added 22.07 in the description to specify that the task is in scope for 22.07. If it needs to be moved out to future release, please specify

oliverholworthy commented 2 years ago

I've updated the description to make it clearer which tasks are in scope for 22.07. I think we can achieve a self-contained operator for Implicit for the upcoming release.