easezyc / Multitask-Recommendation-Library

MTReclib provides a PyTorch implementation of multi-task recommendation models and common datasets.
MIT License
289 stars 46 forks source link

ple 不知道为什么会提示 tensor不在同一个设备 #7

Closed limhao closed 1 year ago

limhao commented 1 year ago

我尝试过修改 但是改不对

easezyc commented 1 year ago

@wolaiye1010 麻烦看一下你上传的这份PLE这个问题

wolaiye1010 commented 1 year ago

@easezyc , 已解决,发了新的pr

wolaiye1010 commented 1 year ago

@limhao ,已解决

wolaiye1010 commented 1 year ago

问题原因是,python的list需要包装进 torch.nn.ModuleList 才能使模型调用to_device 的时候模型内部的子模块也能自动to_device

easezyc commented 1 year ago

@wolaiye1010 感谢,已合并

limhao commented 1 year ago

Traceback (most recent call last): File "D:\my3090\Multitask-Recommendation-Library\main.py", line 220, in main(args.dataset_name, File "D:\my3090\Multitask-Recommendation-Library\main.py", line 168, in main model = get_model(model_name, field_dims, numerical_num, task_num, expert_num, embed_dim) File "D:\my3090\Multitask-Recommendation-Library\main.py", line 44, in get_model return PLEModel(categorical_field_dims, numerical_num, embed_dim=embed_dim, bottom_mlp_dims=(512, 256), tower_mlp_dims=(128, 64), task_num=task_num, shared_expert_num=int(expert_num / 2), specific_expert_num=int(expert_num / 2), dropout=0.2) File "D:\my3090\Multitask-Recommendation-Library\models\ple.py", line 36, in init self.task_gates = torch.nn.ModuleList(self.task_gates) File "D:\ana\envs\rs\lib\site-packages\torch\nn\modules\container.py", line 174, in init self += modules File "D:\ana\envs\rs\lib\site-packages\torch\nn\modules\container.py", line 215, in iadd return self.extend(modules) File "D:\ana\envs\rs\lib\site-packages\torch\nn\modules\container.py", line 254, in extend self.add_module(str(offset + i), module) File "D:\ana\envs\rs\lib\site-packages\torch\nn\modules\module.py", line 377, in add_module raise TypeError("{} is not a Module subclass".format( TypeError: list is not a Module subclass

Process finished with exit code 1

limhao commented 1 year ago

self.task_experts = torch.nn.ModuleList(self.task_experts) self.task_gates = torch.nn.ModuleList(self.task_gates) self.share_experts = torch.nn.ModuleList(self.share_experts) self.share_gates = torch.nn.ModuleList(self.share_gates) 问题 应该出在这一块

wolaiye1010 commented 1 year ago

@limhao @easezyc , 不好意思,昨天有一行代码漏改了,已修改,我自测没有问题了,pr已发再看下吧,

easezyc commented 1 year ago

合并了

limhao commented 1 year ago

Model: PLE 0%| | 0/102 [00:09<?, ?it/s] Traceback (most recent call last): File "D:\my3090\Multitask-Recommendation-Library\main.py", line 220, in main(args.dataset_name, File "D:\my3090\Multitask-Recommendation-Library\main.py", line 178, in main train(model, optimizer, train_data_loader, criterion, device) File "D:\my3090\Multitask-Recommendation-Library\main.py", line 80, in train y = model(categorical_fields, numerical_fields).to(device) File "D:\ana\envs\rs\lib\site-packages\torch\nn\modules\module.py", line 1102, in _call_impl return forward_call(*input, kwargs) File "D:\my3090\Multitask-Recommendation-Library\models\ple.py", line 50, in forward categorical_emb = self.embedding(categorical_x) File "D:\ana\envs\rs\lib\site-packages\torch\nn\modules\module.py", line 1102, in _call_impl return forward_call(*input, *kwargs) File "D:\my3090\Multitask-Recommendation-Library\models\layers.py", line 17, in forward return self.embedding(x) File "D:\ana\envs\rs\lib\site-packages\torch\nn\modules\module.py", line 1102, in _call_impl return forward_call(input, kwargs) File "D:\ana\envs\rs\lib\site-packages\torch\nn\modules\sparse.py", line 158, in forward return F.embedding( File "D:\ana\envs\rs\lib\site-packages\torch\nn\functional.py", line 2044, in embedding return torch.embedding(weight, input, padding_idx, scale_grad_by_freq, sparse) RuntimeError: Expected all tensors to be on the same device, but found at least two devices, cpu and cuda:0! (when checking argument for argument index in method wrapper__index_select)

Process finished with exit code 1

ple line50 显示不在一个设备

limhao commented 1 year ago

文件ple的import layer一直存在一个问题 虽然很简单 只需要加个·就好 希望作者注意

wolaiye1010 commented 1 year ago

Model: PLE 0%| | 0/102 [00:09<?, ?it/s] Traceback (most recent call last): File "D:\my3090\Multitask-Recommendation-Library\main.py", line 220, in main(args.dataset_name, File "D:\my3090\Multitask-Recommendation-Library\main.py", line 178, in main train(model, optimizer, train_data_loader, criterion, device) File "D:\my3090\Multitask-Recommendation-Library\main.py", line 80, in train y = model(categorical_fields, numerical_fields).to(device) File "D:\ana\envs\rs\lib\site-packages\torch\nn\modules\module.py", line 1102, in _call_impl return forward_call(*input, kwargs) File "D:\my3090\Multitask-Recommendation-Library\models\ple.py", line 50, in forward categorical_emb = self.embedding(categorical_x) File "D:\ana\envs\rs\lib\site-packages\torch\nn\modules\module.py", line 1102, in _call_impl return forward_call(*input, *kwargs) File "D:\my3090\Multitask-Recommendation-Library\models\layers.py", line 17, in forward return self.embedding(x) File "D:\ana\envs\rs\lib\site-packages\torch\nn\modules\module.py", line 1102, in _call_impl return forward_call(input, kwargs) File "D:\ana\envs\rs\lib\site-packages\torch\nn\modules\sparse.py", line 158, in forward return F.embedding( File "D:\ana\envs\rs\lib\site-packages\torch\nn\functional.py", line 2044, in embedding return torch.embedding(weight, input, padding_idx, scale_grad_by_freq, sparse) RuntimeError: Expected all tensors to be on the same device, but found at least two devices, cpu and cuda:0! (when checking argument for argument index in method wrapper__index_select)

Process finished with exit code 1

ple line50 显示不在一个设备

这个应该是你的输入没有to device 到cuda,我这个代码现在应该没有问题的,因为我们线上环境都在跑呢

limhao commented 1 year ago

@wolaiye1010 刚刚重新看了看 是我main改的混乱了 替换了一下 能用了