- Moved some functionality from NVTabular to
merlin-core
, but left alias implace for import backwards compatibility. Some examples areLambdaOp
,AddMetadataOp
,StatOperator
,WorkflowNode
, and others. #1823, #1825 - Updated
Categorify
to correctly handle nulls #1836.
- Added support for retrieving subworkflows using get_subworkflow API. Returns a subgraph wrapped in a new workflow object. #1842
- Removed the
nvtabular.inference
module. This functionality now exists inmerlin-systems
#1822
- Add support of transformer-based retrieval models #1128
- Improvements in Quick-start for ranking example #1014
- In
preprocessing.py
, added support to target encoding features, configurable through these new CLI arguments:--target_encoding_features
,--target_encoding_targets
,--target_encoding_kfold
,--target_encoding_smoothing
. - In
ranking.py
: added support to select some columns to keep (--keep_columns
) or remove (--ignore_columns
) from at dataloading / training / evaluation.
- In
- Fixed in Quick-start for ranking example #1017:
- Fixed
preprocessing.py
, which was not standardizing and tagging continuous columns properly - Fixed Wide&Deep and DeepFM models to use the updated API
- Fixed
- Improved docstring coverage #706
- Add support for providing a scalar cut-off in metrics, and Fix recall@1 that results higher than the upper cut-offs sometimes. #720
- Fix the CLM performance mismatch between model evaluation and manual inference #723
- Fixed OOM issues when evaluating/predicting #721
- API breaking notice: This fix changes the default output of
trainer.predict()
API, that returns aPredictionOutput
object with a predictions property. Before this change, when thepredict_top_k
option was not set (default) the predictions property was as 2D tensor (batch size, item cardinality) with the scores for all the items. As now we setT4RecTrainingArguments.predict_top_k
by default, the predictions property returns a tuple with(top-100 predicted item ids, top-100 prediction scores)
.
- API breaking notice: This fix changes the default output of
- Merged NVTabular Operator base class with Base Operator in core.
- Migrated some operators from NVTabular to core, allowing use in
merlin-systems
. (i.e.LambdaOp
- changed to user defined function (UDF) and add metadata operator). - Created subgraph operator to allow for recall and use of parts of a graph
- Added Test cases to debut functional support for core operators in systems ensembles
- Added API to retrieve sub ensembles.
- Support for using the
int8
dtype with NVT'sCategorify
operator at inference time (#1818)
- This is the last NVTabular release that will contain the
nvtabular.inference
package, which has been deprecated and slated for removal for quite some time. Starting in the 23.06 release, we recommend using Merlin Systems to serve models and NVT workflows.
- Added support in the Models library to use pre-trained embeddings provided by the
EmbeddingOperator
transform from Merlin dataloader. Those embeddings are non-trainable, and can be easily normalized, projected to another dim and combined with the other categorical and continuous features. (#1083) - Added a
LogLossMetric
, a Keras callback to track throughput (ExamplesPerSecondCallback
) and a class to manage metrics logging to Weights&Biases (WandbLogger
) (#1085) - Extended
ContrastiveOutput
to support sequential encoders (#1086) - adds support for negative sampling to theContrastiveOutput
class for session-based models where the query encoder returns a 3-D ragged tensor.
- Change tf.keras.optimizers.Adagrad() to tf.keras.optimizers.legacy.Adagrad() (#1098)
- Added topk arg to return topk items and scores at inference step - added functionality for returning topk most relevant (with the highest scores) item ids for NextItemPrediction task (#678)
- Added Transformers Torch Extras to install requirements (#699)
- Fixed the projection layer when using weight tying and dim from Transformer output and item embedding differs (#689)
- The legacy inference api was removed from the example and was replaced by Merlin Systems api (#680).
- More comprehensive error messages and tracebacks in the Triton responses when errors occur inside DAG operators (#343)
- The integration for the Feast feature store has been updated to be compatible with Feast 0.31, the latest release (#344)
Rename
operator, which was migrated from NVTabular and can now be used in all Merlin DAGs, like Systems ensembles and Dataloader transformations (#312)- An
as_tensor_type
method onTensorColumn
for converting column data across frameworks like NumPy, CuPy, Tensorflow, and Torch (#285) - A
schema
parameter that allows converting a dataframe to aTensorTable
in a way that produces fixed-length list columns with only values and not offsets (#286)
- The default DAG executors now automatically adjust the format of data passed between operators to ensure that it's in a format the receiving operator can process. This functionality was already present in parts of Merlin, but has been generalized to work in all Merlin DAGs. (#280)
- The list of mutually exclusive column tags has been expanded to include
Tags.EMBEDDING
, so that columns can't be mistakenly labeled as any combination ofID
,CONTINUOUS
, andEMBEDDING
at the same time (#316)
- Numpy aliases for built-in Python types were deprecated in NumPy 1.20, and have been removed from Merlin Core (#308)
- Quick-start for Ranking - Added documentation, scripts and example notebook to export an inference pipeline for ranking models to Triton and send recommendation requests. The inference pipeline is a Triton ensemble which includes the NVTabular preprocessing workflow and the saved trained model (#966)
- Quick-start for Ranking - Fixed error when saving model trained with single task.
Changes since the 23.02 release.
The major focus of this release was broader support for training and serving session-based models across all Merlin libraries.
- Ability to use Workflows to locally transform single Pandas/cuDF dataframes without using Dask (#1777)
- The
Categorify
operator now supports int16 dtypes when serving Workflows (#1798) - NVTabular can now be used in our containers without a GPU present.
- N/A
- The code for exporting Workflows and models to be served with Triton that’s currently in
nvtabular.inference
has reached end-of-life and will be removed in the next release. We recommend migrating to use Merlin Systems, which provides similar functionality.
- An operator for padding ragged list features after they’re loaded from disk and before they’re provided to a model (#125)
- An operator for loading pre-trained embeddings from disk and merging them into training batches on the fly (#138)
- We’ve changed the way the dataloaders use DLpack for moving data from dataframes to deep learning frameworks, and now transfer each batch individually instead of transferring large chunks of data. This allows us to unify the dataloader implementations, providing consistent performance and common operators across all frameworks. (#111, #121)
- The output format for ragged list features has been changed from a (values, offsets) tuple to two separate keys
col_name__values
andcol_name__offsets
(#101)
- Sparse tensors are no longer supported as an output format for ragged list features (#103)
- Quick-start for Ranking - A new guide on how to preprocess data and, build, train, evaluate and hypertune Ranking models with Merlin, including best practices to improve models accuracy (#915)
- We have added support for Tensorflow 2.11 and 2.12 (#1016, #1040)
- We have introduced
SOKEmbedding
class that leverages HugeCTR Sparse Operations Kit for model parallelism (#863).
- Publishing to Anaconda beginning with 23.04 https://anaconda.org/nvidia/merlin-models.
- We have introduced a new design of the transformer API that simplifies the high-level transformer API and also fixes issues related to Causal LM (#1022).
- Fixes
model.batch_predict()
which was not working for ranking models with the latest output layer API (ModelOuput) (#1052) - Refactor/fix of sampled softmax to add logQ correction, which is important for better accuracy, as logQ correction avoids over penalizing popular items for being sampled as negatives more often (#1051).
- We have removed the PyTorch backend in preparation for new and improved PyTorch support (#1020).
- Added sampled softmax for faster training, as it computes loss on sampled items instead of all items. It is also possible to get a better accuracy using sampled softmax, check the PR to see some benchmark results (#671).
- Now has a hard dependency on Merlin Models verison 23.04 or greater.
- Began migration of Tags from
merlin_std_lib
module to themerlin.schema
module provided bymerlin-core
. This is the first step in an effort to completely remove themerlin_std_lib
module, which will happen over several releases.
- Serving session-based models from Merlin Models and Transformers4Rec as part of Ensembles (#299 and many others)
- Using the dataloader padding and pre-trained embedding ops in Ensembles (#329, #330)
- Exporting Ensembles to Triton with kind AUTO, so that they work on both CPU and GPU environments without needing to re-export (#321)
- Systems now makes use of shape information captured in schemas by other Merlin libraries in order to create and validate Triton configuration files. (#293)
- Ragged list features are now represented in requests/responses with two separate values and offsets arrays (#296)
- A validation and error concerning extra columns produced by Ensemble operators that were never used downstream. We’ve made internal changes in Systems to allow this, but it’s still not recommended. (#306)
- A tag for labeling pre-trained embedding features in order to distinguish them from continuous and categorical features (#239)
- An option to select by any or all tags when using “Schema.select_by_tag()” (#94)
- A
row_group_size
argument onDataset.to_parquet()
that allows controlling the maximum number of rows in a single Parquet row-group (#218)
- Merlin Core and many other Merlin libraries now use a
TensorTable
abstraction to package together sets of NumPy/CuPy/Tensorflow/Torch arrays or tensors into very minimal but dataframe-like objects that can be used with many Merlin operators, like those from the dataloaders and systems libraries. (#230 and many subsequent PRs throughout Merlin) - Strict dtype checking when running Merlin DAGs (like NVT Workflows) is no longer the default. This should reduce the number of dtype discrepancy errors encountered by users in cases where they don’t ultimately matter, but may allow some cases that don’t work with downstream operators or libraries. (#268)
- N/A
- Removed
distributed-embeddings
from the 23.04 release. This will be added back in future releases. It is still possible to build the container by setting theINSTALL_DISTRIBUTED_EMBEDDINGS
argument totrue
. (Merlin/#908)