gaohongkui / GlobalPointer_pytorch

全局指针统一处理嵌套与非嵌套NER的Pytorch实现
380 stars 45 forks source link

关于内存方面 #1

Open Power886 opened 3 years ago

Power886 commented 3 years ago

你在generate_inputs时一次性加入所有的labels会不会导致内存爆啊,就如CMeEE数据集而言,13000 9 256 256 8=66GB

gaohongkui commented 3 years ago

这个问题我没有做过测试(我没有大型数据集文件)。另外,我觉得出现问题的地方应该不是在generate_inputs时,而是在从文件读取至datas时,如果这部分不oom,后续的基本也不会有问题。Pytorch的Dataset加载数据是按需加载。 当然如果出现爆内存的情况,我觉得可以修改data_generator函数的逻辑,比如改为直接用Pytorch的Dataset和Dataloader读取转化数据,将转化逻辑卸载Dataset的collate_fn参数中。

xhw205 commented 3 years ago

我测了下 我120G内存,会爆掉

yysirs commented 2 years ago

我测了下 我120G内存,会爆掉

请问你现在解决了这个问题嘛?我加载大的数据集也会爆掉

yysirs commented 2 years ago

这个问题我没有做过测试(我没有大型数据集文件)。另外,我觉得出现问题的地方应该不是在generate_inputs时,而是在从文件读取至datas时,如果这部分不oom,后续的基本也不会有问题。Pytorch的Dataset加载数据是按需加载。 当然如果出现爆内存的情况,我觉得可以修改data_generator函数的逻辑,比如改为直接用Pytorch的Dataset和Dataloader读取转化数据,将转化逻辑卸载Dataset的collate_fn参数中。

训练数据:3万2千数据,加载到datas中没有问题,问题在generate_inputs的时候内存不足。

gaohongkui commented 2 years ago

你可以试试将generate_inputs放在collate_fn中,即在generate_batch函数里调用generate_inputs。这样可以按batchsize处理数据,不用预先全部处理。

yysirs commented 2 years ago

你可以试试将generate_inputs放在collate_fn中,即在generate_batch函数里调用generate_inputs。这样可以按batchsize处理数据,不用预先全部处理。 ok 已经解决了

gaohongkui commented 2 years ago

解决方案可以在这里分享一下吗,给后续有需要的同学,或者可以提交个PR。

yysirs commented 2 years ago

image image image

yysirs commented 2 years ago

修改一下就没有问题了

zhanghanweii commented 1 year ago

您好,请问和CRF对比的话,单核CPU的推理速度快多少呢,我在英文测试集中的推理速度反而比CRF慢

gaohongkui commented 1 year ago

我理解globalpointer的优势应该不在推理速度,而是crf解决序列标注不能处理的实体嵌套问题。如果你想更快的推理速度,可以试试bert+span模型只预测头尾位置。