nextrec 0.4.14__tar.gz → 0.4.15__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {nextrec-0.4.14 → nextrec-0.4.15}/PKG-INFO +8 -5
- {nextrec-0.4.14 → nextrec-0.4.15}/README.md +7 -4
- {nextrec-0.4.14 → nextrec-0.4.15}/README_en.md +6 -4
- {nextrec-0.4.14 → nextrec-0.4.15}/docs/rtd/conf.py +1 -1
- nextrec-0.4.15/nextrec/__version__.py +1 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/basic/model.py +13 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/cli.py +12 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/data/dataloader.py +16 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/pyproject.toml +1 -1
- nextrec-0.4.14/nextrec/__version__.py +0 -1
- {nextrec-0.4.14 → nextrec-0.4.15}/.github/workflows/publish.yml +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/.github/workflows/tests.yml +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/.gitignore +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/.readthedocs.yaml +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/CODE_OF_CONDUCT.md +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/CONTRIBUTING.md +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/LICENSE +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/MANIFEST.in +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/assets/Feature Configuration.png +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/assets/Model Parameters.png +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/assets/Training Configuration.png +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/assets/Training logs.png +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/assets/logo.png +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/assets/mmoe_tutorial.png +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/assets/nextrec_diagram.png +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/assets/test data.png +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/dataset/ctcvr_task.csv +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/dataset/ecommerce_task.csv +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/dataset/match_task.csv +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/dataset/movielens_100k.csv +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/dataset/multitask_task.csv +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/dataset/ranking_task.csv +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/docs/en/Getting started guide.md +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/docs/rtd/Makefile +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/docs/rtd/index.md +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/docs/rtd/make.bat +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/docs/rtd/modules.rst +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/docs/rtd/nextrec.basic.rst +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/docs/rtd/nextrec.data.rst +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/docs/rtd/nextrec.loss.rst +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/docs/rtd/nextrec.rst +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/docs/rtd/nextrec.utils.rst +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/docs/rtd/requirements.txt +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/docs/zh//345/277/253/351/200/237/344/270/212/346/211/213.md" +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/__init__.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/basic/__init__.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/basic/activation.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/basic/callback.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/basic/features.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/basic/layers.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/basic/loggers.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/basic/metrics.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/basic/session.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/data/__init__.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/data/batch_utils.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/data/data_processing.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/data/data_utils.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/data/preprocessor.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/loss/__init__.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/loss/grad_norm.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/loss/listwise.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/loss/loss_utils.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/loss/pairwise.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/loss/pointwise.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/models/generative/__init__.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/models/generative/tiger.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/models/multi_task/__init__.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/models/multi_task/esmm.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/models/multi_task/mmoe.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/models/multi_task/ple.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/models/multi_task/poso.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/models/multi_task/share_bottom.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/models/ranking/__init__.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/models/ranking/afm.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/models/ranking/autoint.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/models/ranking/dcn.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/models/ranking/dcn_v2.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/models/ranking/deepfm.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/models/ranking/dien.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/models/ranking/din.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/models/ranking/eulernet.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/models/ranking/ffm.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/models/ranking/fibinet.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/models/ranking/fm.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/models/ranking/lr.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/models/ranking/masknet.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/models/ranking/pnn.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/models/ranking/widedeep.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/models/ranking/xdeepfm.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/models/representation/__init__.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/models/representation/autorec.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/models/representation/bpr.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/models/representation/cl4srec.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/models/representation/lightgcn.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/models/representation/mf.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/models/representation/rqvae.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/models/representation/s3rec.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/models/retrieval/__init__.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/models/retrieval/dssm.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/models/retrieval/dssm_v2.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/models/retrieval/mind.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/models/retrieval/sdm.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/models/retrieval/youtube_dnn.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/models/sequential/hstu.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/models/sequential/sasrec.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/utils/__init__.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/utils/config.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/utils/console.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/utils/data.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/utils/embedding.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/utils/feature.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/utils/model.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec/utils/torch_utils.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec_cli_preset/NextRec-CLI.md +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec_cli_preset/NextRec-CLI_zh.md +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec_cli_preset/feature_config.yaml +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec_cli_preset/model_configs/afm.yaml +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec_cli_preset/model_configs/autoint.yaml +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec_cli_preset/model_configs/dcn.yaml +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec_cli_preset/model_configs/deepfm.yaml +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec_cli_preset/model_configs/din.yaml +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec_cli_preset/model_configs/esmm.yaml +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec_cli_preset/model_configs/fibinet.yaml +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec_cli_preset/model_configs/fm.yaml +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec_cli_preset/model_configs/masknet.yaml +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec_cli_preset/model_configs/mmoe.yaml +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec_cli_preset/model_configs/ple.yaml +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec_cli_preset/model_configs/pnn.yaml +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec_cli_preset/model_configs/poso.yaml +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec_cli_preset/model_configs/share_bottom.yaml +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec_cli_preset/model_configs/widedeep.yaml +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec_cli_preset/model_configs/xdeepfm.yaml +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec_cli_preset/predict_config.yaml +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec_cli_preset/predict_config_template.yaml +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec_cli_preset/train_config.yaml +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/nextrec_cli_preset/train_config_template.yaml +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/pytest.ini +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/requirements.txt +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/scripts/format_code.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/test/__init__.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/test/conftest.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/test/helpers.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/test/run_tests.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/test/test_base_model_regularization.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/test/test_generative_models.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/test/test_layers.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/test/test_losses.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/test/test_match_models.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/test/test_multitask_models.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/test/test_preprocessor.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/test/test_ranking_models.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/test/test_utils_console.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/test/test_utils_data.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/test/test_utils_embedding.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/test_requirements.txt +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/tutorials/distributed/example_distributed_training.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/tutorials/distributed/example_distributed_training_large_dataset.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/tutorials/example_multitask.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/tutorials/example_ranking_din.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/tutorials/movielen_match_dssm.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/tutorials/movielen_ranking_deepfm.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/tutorials/notebooks/en/Build semantic ID with RQ-VAE.ipynb +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/tutorials/notebooks/en/Hands on dataprocessor.ipynb +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/tutorials/notebooks/en/Hands on nextrec.ipynb +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/tutorials/notebooks/zh//344/275/277/347/224/250RQ-VAE/346/236/204/345/273/272/350/257/255/344/271/211ID.ipynb" +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/tutorials/notebooks/zh//345/246/202/344/275/225/344/275/277/347/224/250DataProcessor/350/277/233/350/241/214/351/242/204/345/244/204/347/220/206.ipynb" +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/tutorials/notebooks/zh//345/277/253/351/200/237/345/205/245/351/227/250nextrec.ipynb" +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/tutorials/run_all_match_models.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/tutorials/run_all_multitask_models.py +0 -0
- {nextrec-0.4.14 → nextrec-0.4.15}/tutorials/run_all_ranking_models.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: nextrec
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.15
|
|
4
4
|
Summary: A comprehensive recommendation library with match, ranking, and multi-task learning models
|
|
5
5
|
Project-URL: Homepage, https://github.com/zerolovesea/NextRec
|
|
6
6
|
Project-URL: Repository, https://github.com/zerolovesea/NextRec
|
|
@@ -63,10 +63,13 @@ Description-Content-Type: text/markdown
|
|
|
63
63
|
|
|
64
64
|
<div align="center">
|
|
65
65
|
|
|
66
|
+
[](https://pepy.tech/projects/nextrec)
|
|
66
67
|

|
|
67
68
|

|
|
69
|
+
|
|
68
70
|

|
|
69
|
-

|
|
72
|
+
|
|
70
73
|
|
|
71
74
|
中文文档 | [English Version](README_en.md)
|
|
72
75
|
|
|
@@ -99,7 +102,7 @@ NextRec是一个基于PyTorch的现代推荐系统框架,旨在为研究工程
|
|
|
99
102
|
|
|
100
103
|
## NextRec近期进展
|
|
101
104
|
|
|
102
|
-
- **21/12/2025** 在v0.4.
|
|
105
|
+
- **21/12/2025** 在v0.4.15中加入了对[GradNorm](/nextrec/loss/grad_norm.py)的支持,通过compile的`loss_weight='grad_norm'`进行配置
|
|
103
106
|
- **12/12/2025** 在v0.4.9中加入了[RQ-VAE](/nextrec/models/representation/rqvae.py)模块。配套的[数据集](/dataset/ecommerce_task.csv)和[代码](tutorials/notebooks/zh/使用RQ-VAE构建语义ID.ipynb)已经同步在仓库中
|
|
104
107
|
- **07/12/2025** 发布了NextRec CLI命令行工具,它允许用户根据配置文件进行一键训练和推理,我们提供了相关的[教程](/nextrec_cli_preset/NextRec-CLI_zh.md)和[教学代码](/nextrec_cli_preset)
|
|
105
108
|
- **03/12/2025** NextRec获得了100颗🌟!感谢大家的支持
|
|
@@ -241,11 +244,11 @@ nextrec --mode=train --train_config=path/to/train_config.yaml
|
|
|
241
244
|
nextrec --mode=predict --predict_config=path/to/predict_config.yaml
|
|
242
245
|
```
|
|
243
246
|
|
|
244
|
-
> 截止当前版本0.4.
|
|
247
|
+
> 截止当前版本0.4.15,NextRec CLI支持单机训练,分布式训练相关功能尚在开发中。
|
|
245
248
|
|
|
246
249
|
## 兼容平台
|
|
247
250
|
|
|
248
|
-
当前最新版本为0.4.
|
|
251
|
+
当前最新版本为0.4.15,所有模型和测试代码均已在以下平台通过验证,如果开发者在使用中遇到兼容问题,请在issue区提出错误报告及系统版本:
|
|
249
252
|
|
|
250
253
|
| 平台 | 配置 |
|
|
251
254
|
|------|------|
|
|
@@ -4,10 +4,13 @@
|
|
|
4
4
|
|
|
5
5
|
<div align="center">
|
|
6
6
|
|
|
7
|
+
[](https://pepy.tech/projects/nextrec)
|
|
7
8
|

|
|
8
9
|

|
|
10
|
+
|
|
9
11
|

|
|
10
|
-

|
|
13
|
+
|
|
11
14
|
|
|
12
15
|
中文文档 | [English Version](README_en.md)
|
|
13
16
|
|
|
@@ -40,7 +43,7 @@ NextRec是一个基于PyTorch的现代推荐系统框架,旨在为研究工程
|
|
|
40
43
|
|
|
41
44
|
## NextRec近期进展
|
|
42
45
|
|
|
43
|
-
- **21/12/2025** 在v0.4.
|
|
46
|
+
- **21/12/2025** 在v0.4.15中加入了对[GradNorm](/nextrec/loss/grad_norm.py)的支持,通过compile的`loss_weight='grad_norm'`进行配置
|
|
44
47
|
- **12/12/2025** 在v0.4.9中加入了[RQ-VAE](/nextrec/models/representation/rqvae.py)模块。配套的[数据集](/dataset/ecommerce_task.csv)和[代码](tutorials/notebooks/zh/使用RQ-VAE构建语义ID.ipynb)已经同步在仓库中
|
|
45
48
|
- **07/12/2025** 发布了NextRec CLI命令行工具,它允许用户根据配置文件进行一键训练和推理,我们提供了相关的[教程](/nextrec_cli_preset/NextRec-CLI_zh.md)和[教学代码](/nextrec_cli_preset)
|
|
46
49
|
- **03/12/2025** NextRec获得了100颗🌟!感谢大家的支持
|
|
@@ -182,11 +185,11 @@ nextrec --mode=train --train_config=path/to/train_config.yaml
|
|
|
182
185
|
nextrec --mode=predict --predict_config=path/to/predict_config.yaml
|
|
183
186
|
```
|
|
184
187
|
|
|
185
|
-
> 截止当前版本0.4.
|
|
188
|
+
> 截止当前版本0.4.15,NextRec CLI支持单机训练,分布式训练相关功能尚在开发中。
|
|
186
189
|
|
|
187
190
|
## 兼容平台
|
|
188
191
|
|
|
189
|
-
当前最新版本为0.4.
|
|
192
|
+
当前最新版本为0.4.15,所有模型和测试代码均已在以下平台通过验证,如果开发者在使用中遇到兼容问题,请在issue区提出错误报告及系统版本:
|
|
190
193
|
|
|
191
194
|
| 平台 | 配置 |
|
|
192
195
|
|------|------|
|
|
@@ -4,10 +4,12 @@
|
|
|
4
4
|
|
|
5
5
|
<div align="center">
|
|
6
6
|
|
|
7
|
+
[](https://pepy.tech/projects/nextrec)
|
|
7
8
|

|
|
8
9
|

|
|
10
|
+
|
|
9
11
|

|
|
10
|
-

|
|
11
13
|
|
|
12
14
|
English | [中文文档](README.md)
|
|
13
15
|
|
|
@@ -42,7 +44,7 @@ NextRec is a modern recommendation framework built on PyTorch, delivering a unif
|
|
|
42
44
|
|
|
43
45
|
## NextRec Progress
|
|
44
46
|
|
|
45
|
-
- **21/12/2025** Added support for [GradNorm](/nextrec/loss/grad_norm.py) in v0.4.
|
|
47
|
+
- **21/12/2025** Added support for [GradNorm](/nextrec/loss/grad_norm.py) in v0.4.15, configurable via `loss_weight='grad_norm'` in the compile method
|
|
46
48
|
- **12/12/2025** Added [RQ-VAE](/nextrec/models/representation/rqvae.py), a common module for generative retrieval in v0.4.9. Paired [dataset](/dataset/ecommerce_task.csv) and [notebook code](tutorials/notebooks/en/Build%20semantic%20ID%20with%20RQ-VAE.ipynb) are available.
|
|
47
49
|
- **07/12/2025** Released the NextRec CLI tool to run training/inference from configs. See the [guide](/nextrec_cli_preset/NextRec-CLI.md) and [reference code](/nextrec_cli_preset).
|
|
48
50
|
- **03/12/2025** NextRec reached 100 ⭐—thanks for the support!
|
|
@@ -186,11 +188,11 @@ nextrec --mode=train --train_config=path/to/train_config.yaml
|
|
|
186
188
|
nextrec --mode=predict --predict_config=path/to/predict_config.yaml
|
|
187
189
|
```
|
|
188
190
|
|
|
189
|
-
> As of version 0.4.
|
|
191
|
+
> As of version 0.4.15, NextRec CLI supports single-machine training; distributed training features are currently under development.
|
|
190
192
|
|
|
191
193
|
## Platform Compatibility
|
|
192
194
|
|
|
193
|
-
The current version is 0.4.
|
|
195
|
+
The current version is 0.4.15. All models and test code have been validated on the following platforms. If you encounter compatibility issues, please report them in the issue tracker with your system version:
|
|
194
196
|
|
|
195
197
|
| Platform | Configuration |
|
|
196
198
|
|----------|---------------|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.4.15"
|
|
@@ -1420,6 +1420,11 @@ class BaseModel(FeatureSet, nn.Module):
|
|
|
1420
1420
|
# Create DataLoader based on data type
|
|
1421
1421
|
if isinstance(data, DataLoader):
|
|
1422
1422
|
data_loader = data
|
|
1423
|
+
if num_workers != 0:
|
|
1424
|
+
logging.warning(
|
|
1425
|
+
"[Predict Warning] num_workers parameter is ignored when data is already a DataLoader. "
|
|
1426
|
+
"The DataLoader's existing num_workers configuration will be used."
|
|
1427
|
+
)
|
|
1423
1428
|
elif isinstance(data, (str, os.PathLike)):
|
|
1424
1429
|
rec_loader = RecDataLoader(
|
|
1425
1430
|
dense_features=self.dense_features,
|
|
@@ -1578,6 +1583,14 @@ class BaseModel(FeatureSet, nn.Module):
|
|
|
1578
1583
|
else:
|
|
1579
1584
|
data_loader = data
|
|
1580
1585
|
|
|
1586
|
+
if hasattr(data_loader, 'num_workers') and data_loader.num_workers > 0:
|
|
1587
|
+
if hasattr(data_loader.dataset, '__class__') and 'Streaming' in data_loader.dataset.__class__.__name__:
|
|
1588
|
+
logging.warning(
|
|
1589
|
+
f"[Predict Streaming Warning] Detected DataLoader with num_workers={data_loader.num_workers} "
|
|
1590
|
+
"and streaming dataset. This may cause data duplication! "
|
|
1591
|
+
"When using streaming mode, set num_workers=0 to avoid reading data multiple times."
|
|
1592
|
+
)
|
|
1593
|
+
|
|
1581
1594
|
suffix = ".csv" if save_format == "csv" else ".parquet"
|
|
1582
1595
|
target_path = resolve_save_path(
|
|
1583
1596
|
path=save_path,
|
|
@@ -21,6 +21,7 @@ Author: Yang Zhou, zyaztec@gmail.com
|
|
|
21
21
|
import argparse
|
|
22
22
|
import logging
|
|
23
23
|
import pickle
|
|
24
|
+
import resource
|
|
24
25
|
import sys
|
|
25
26
|
import time
|
|
26
27
|
from pathlib import Path
|
|
@@ -625,6 +626,17 @@ def predict_model(predict_config_path: str) -> None:
|
|
|
625
626
|
def main() -> None:
|
|
626
627
|
"""Parse CLI arguments and dispatch to train or predict mode."""
|
|
627
628
|
|
|
629
|
+
# Increase file descriptor limit to avoid "Too many open files" error
|
|
630
|
+
# when using DataLoader with multiple workers
|
|
631
|
+
try:
|
|
632
|
+
soft, hard = resource.getrlimit(resource.RLIMIT_NOFILE)
|
|
633
|
+
target_limit = 65535
|
|
634
|
+
if soft < target_limit:
|
|
635
|
+
resource.setrlimit(resource.RLIMIT_NOFILE, (min(target_limit, hard), hard))
|
|
636
|
+
except (ValueError, OSError):
|
|
637
|
+
# If we can't set the limit, continue anyway
|
|
638
|
+
pass
|
|
639
|
+
|
|
628
640
|
root = logging.getLogger()
|
|
629
641
|
if not root.handlers:
|
|
630
642
|
handler = logging.StreamHandler(sys.stdout)
|
|
@@ -210,6 +210,15 @@ class RecDataLoader(FeatureSet):
|
|
|
210
210
|
DataLoader instance.
|
|
211
211
|
"""
|
|
212
212
|
|
|
213
|
+
# Enforce num_workers=0 for streaming mode to prevent data duplication
|
|
214
|
+
if streaming and num_workers > 0:
|
|
215
|
+
logging.warning(
|
|
216
|
+
f"[RecDataLoader Warning] num_workers={num_workers} is not compatible with streaming=True. "
|
|
217
|
+
"Each worker would create its own data stream, causing data duplication. "
|
|
218
|
+
"Forcing num_workers=0."
|
|
219
|
+
)
|
|
220
|
+
num_workers = 0
|
|
221
|
+
|
|
213
222
|
if isinstance(data, DataLoader):
|
|
214
223
|
return data
|
|
215
224
|
elif isinstance(data, (str, os.PathLike)):
|
|
@@ -363,6 +372,13 @@ class RecDataLoader(FeatureSet):
|
|
|
363
372
|
logging.info(
|
|
364
373
|
"[RecDataLoader Info] Streaming mode enforces batch_size=1; tune chunk_size to control memory/throughput."
|
|
365
374
|
)
|
|
375
|
+
if num_workers > 0:
|
|
376
|
+
logging.warning(
|
|
377
|
+
f"[RecDataLoader Warning] num_workers={num_workers} is not compatible with streaming mode. "
|
|
378
|
+
"Each worker would create its own data stream, causing data duplication. "
|
|
379
|
+
"Forcing num_workers=0."
|
|
380
|
+
)
|
|
381
|
+
num_workers = 0
|
|
366
382
|
dataset = FileDataset(
|
|
367
383
|
file_paths=file_paths,
|
|
368
384
|
dense_features=self.dense_features,
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "0.4.14"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{nextrec-0.4.14 → nextrec-0.4.15}/docs/zh//345/277/253/351/200/237/344/270/212/346/211/213.md"
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{nextrec-0.4.14 → nextrec-0.4.15}/tutorials/notebooks/en/Build semantic ID with RQ-VAE.ipynb
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|