dailenson / SDT

This repository is the official implementation of Disentangling Writer and Character Styles for Handwriting Generation (CVPR 2023)
MIT License
968 stars 82 forks source link

加载预训练模型的时候非常慢,为什么? #17

Closed xueshanzhizhi closed 5 days ago

xueshanzhizhi commented 1 year ago

不知道为什么非常慢,看了下显卡资源是足够的。我只是想跑起来试一下,并没有训练。 企业微信截图_16881975355169 企业微信截图_16881975667666

dailenson commented 1 year ago

测试集总共是60个书写者,每个书写者3755个字符,总共20多万数据,并且transformer在inference过程中是无法并行解码的,所以生成完整的测试数据是比较慢的。如果只是想跑起来试试,每个书写者生成一部分数据即可,设定--sample_size=500时,大概20多分钟即可生成完毕。

xueshanzhizhi commented 1 year ago

多谢楼主回复。 我现在跑到 已经设置了sample size 设置为500了。还是需要加载8个小时。如果我将其改为50,加载一会就回自动停止的。实在没办法,我就等等。我不知道是不是我配置的问题。我的配置如下:

Linux mlssdi010002 3.10.0-1160.88.1.el7.x86_64 #1 SMP

Tesla M40 24GB CUDA Version: 11.7

Python 3.10.9 torch 2.0.0 easydict 1.9 einops 0.4.1

如果我直接跑训练会不会快点?是不是真的要iter138k次?那也会挺久的。

最后,非常感谢楼主提供这个开源项目!我自己是一个书法爱好者和练习者。等这样的产品很久了。以前的产品确实都比较呆板,没有灵活。依据神经网络的这个模型估计会有惊喜。期待!

dailenson commented 1 year ago

你的pytorch是GPU版本的嘛?我怀疑你用的是CPU在跑模型,所以跑起来很慢

xueshanzhizhi commented 1 year ago

你的pytorch是GPU版本的嘛?我怀疑你用的是CPU在跑模型,所以跑起来很慢

我排查了一下,我pytorch应该是GPU版本的,但是正如你所说,感觉真的用了cpu在跑。

我先将pytorch重新安装了一下,确保是GPU版本:

import torch print(torch.version) 2.0.1+cu117 print(torch.cuda.is_available()) True

然后跑起来,发现GPU,CPU都有消耗,cpu消耗得比较夸张。如图。 企业微信截图_168820620347 企业微信截图_16882062487239

感觉确实是没有用到gpu,奇怪了,楼主看看能知道是什么问题不。

Gdnaiteab commented 1 year ago

我也遇到了同样的情况,我确定我的pytorch是GPU版本,用来跑其他项目也没有问题,是正常使用的。我的GPU为T4,在--sample_size=500的参数下,需要跑8~9个小时,我跑了两次,都是这种情况,是需要在哪里设置参数启用gpu吗? 另外--sample_size=50的情况下,我跑的预计时间也是9个小时,但我没跑完,跑一半就中断了。 以下仅供参考 QQ截图20230711114511 QQ截图20230711114546

dailenson commented 1 year ago

代码中模型和数据都默认执行了.to('cuda')。或许运行的时候指定下GPU能够解决这个问题,使用如下指令: CUDA_VISIBLE_DEVICES=0 python test.py ...

Gdnaiteab commented 1 year ago

代码中模型和数据都默认执行了.to('cuda')。或许运行的时候指定下GPU能够解决这个问题,使用如下指令: CUDA_VISIBLE_DEVICES=0 python test.py ...

感谢您的及时回复,我试了一下还是不行,而且根据图2和图3我发现确实是在使用cpu。图二是运行test时,图3是未运行test时。 QQ截图20230711120331 QQ截图20230711120442 QQ截图20230711120536

xueshanzhizhi commented 1 year ago

代码中模型和数据都默认执行了.to('cuda')。或许运行的时候指定下GPU能够解决这个问题,使用如下指令: CUDA_VISIBLE_DEVICES=0 python test.py ...

感谢您的及时回复,我试了一下还是不行,而且根据图2和图3我发现确实是在使用cpu。图二是运行test时,图3是未运行test时。 QQ截图20230711120331 QQ截图20230711120442 QQ截图20230711120536

是的 我试过用用 CUDA_VISIBLE_DEVICES=0 python test.py ... 还是一样

xueshanzhizhi commented 1 year ago

企业微信截图_16890489814401 不过我换成v100 后跑起来快一点 需要两个半小时的加载时间。可惜是每次都加载一般就自动断掉了。

dailenson commented 1 year ago

那可能是环境的问题。我是在RTX 3090上跑的,软件环境如下:


python 3.8
pytorch 1.8
easydict 1.9
einops 0.4.1
xueshanzhizhi commented 1 year ago

那可能是环境的问题。我是在RTX 3090上跑的,软件环境如下:

python 3.8
pytorch 1.8
easydict 1.9
einops 0.4.1

请问你的 显卡是那个型号的 v100? A100?

dailenson commented 1 year ago

那可能是环境的问题。我是在RTX 3090上跑的,软件环境如下:

python 3.8
pytorch 1.8
easydict 1.9
einops 0.4.1

请问你的 显卡是那个型号的 v100? A100?

RTX 3090

Gdnaiteab commented 1 year ago

我的环境如下: torch Version: 2.0.1 einops Version: 0.6.1 easydict Version: 1.10 Python 3.8.10 另外,我仔细检查了trainer、train、loader、test等文件,并没有发现任何代码上的问题导致任务不能在GPU上运行。 我只能说这是一个很奇怪的情况,我只能把它归咎于我的环境问题,待会我把环境调整一下再试试。

Gdnaiteab commented 1 year ago

我的环境如下: torch Version: 2.0.1 einops Version: 0.6.1 easydict Version: 1.10 Python 3.8.10 另外,我仔细检查了trainer、train、loader、test等文件,并没有发现任何代码上的问题导致任务不能在GPU上运行。 我只能说这是一个很奇怪的情况,我只能把它归咎于我的环境问题,待会我把环境调整一下再试试。

很不幸,我把环境调试完,重新安装各种包之后,还是需要跑9个小时....

dailenson commented 1 year ago

我的环境如下: torch Version: 2.0.1 einops Version: 0.6.1 easydict Version: 1.10 Python 3.8.10 另外,我仔细检查了trainer、train、loader、test等文件,并没有发现任何代码上的问题导致任务不能在GPU上运行。 我只能说这是一个很奇怪的情况,我只能把它归咎于我的环境问题,待会我把环境调整一下再试试。

代码应该是没问题的,我自己复现过很多次。并且,我这边其实有收到其他人的反馈,在他们的机器上也跑得很正常。你有试过pytorch改成1.8 版本嘛?

Gdnaiteab commented 1 year ago

我的环境如下: torch Version: 2.0.1 einops Version: 0.6.1 easydict Version: 1.10 Python 3.8.10 另外,我仔细检查了trainer、train、loader、test等文件,并没有发现任何代码上的问题导致任务不能在GPU上运行。 我只能说这是一个很奇怪的情况,我只能把它归咎于我的环境问题,待会我把环境调整一下再试试。

代码应该是没问题的,我自己复现过很多次。并且,我这边其实有收到其他人的反馈,在他们的机器上也跑得很正常。你有试过pytorch改成1.8 版本嘛?

是的,我最后一次尝试是使用的python 3.8 pytorch 1.8 easydict 1.9 einops 0.4.1这样的配置,但是还是在cpu上运行,预计需要9个小时,但是跑到接近500个it的适合就莫名其妙中断了...我之前也有过跑9个小时跑完的情况,也能正常的evaluate,不知道是怎么了...

tianye2856 commented 1 year ago

我也遇到了类似问题,用A100 GPU,跑测试集,也需要这么长的时间么? 这,感觉缺少落地价值额,感觉只能纯用于科研? 也就是说,已经有了Pre-trained model, 如何想生成一个新用户的笔迹模型,用户撰写了一些笔迹之后,仍然要训练20分钟才能得到相应的模型?

WX20230718-173120@2x

dailenson commented 1 year ago

我也遇到了类似问题,用A100 GPU,跑测试集,也需要这么长的时间么? 这,感觉缺少落地价值额,感觉只能纯用于科研? 也就是说,已经有了Pre-trained model, 如何想生成一个新用户的笔迹模型,用户撰写了一些笔迹之后,仍然要训练20分钟才能得到相应的模型?

WX20230718-173120@2x

首先,这个issue的问题背景是有些用户跑模型的时候出现了一些bug,代码无法运行在GPU上。从你的截图上看,你是能够很好的运行在GPU上的。所以你的问题不是“类似问题”。

然后,要纠正你的是,在成功加载了pre-trained模型后,不需要“训练”,而是直接“推理”。

接着,20多分钟是指生成完整的测试集。测试集包含160个writer,每个writer书写3755个字符,数据集详细信息请看论文。

最后,单个书写者生成时间取决于你想生成多少数量的字符,如果你想生成500个字符,时间大概是20/160 = 0.125 min。

Neyleer commented 1 year ago

这个代码在读取的时候不管怎么变动sample_size,都是从test_loader中读取,所以显示进度条是没有变化的

Neyleer commented 1 year ago

而且因为设置了sample_size*作者数量/batchsize,这不一定能整除,所以借此来比较时会显示接近你设置的值附近停下来

phpnginx commented 11 months ago

我遇到了一样的问题,GPU占满,CPU使用了一核,但时间需要7个小时 CUDA_VISIBLE_DEVICES=0 env/bin/python test.py --pretrained_model model_zoo/checkpoint-iter199999.pth --store_type online --sample_size 500 --dir Generated/Chinese

dailenson commented 11 months ago

我遇到了一样的问题,GPU占满,CPU使用了一核,但时间需要7个小时 CUDA_VISIBLE_DEVICES=0 env/bin/python test.py --pretrained_model model_zoo/checkpoint-iter199999.pth --store_type online --sample_size 500 --dir Generated/Chinese

你load的模型错了

phpnginx commented 11 months ago

我遇到了一样的问题,GPU占满,CPU使用了一核,但时间需要7个小时 CUDA_VISIBLE_DEVICES=0 env/bin/python test.py --pretrained_model model_zoo/checkpoint-iter199999.pth --store_type online --sample_size 500 --dir Generated/Chinese

你load的模型错了

感谢回复,我是在您提供的谷歌网盘里下载的,能指出具体怎么了吗

dailenson commented 11 months ago

我遇到了一样的问题,GPU占满,CPU使用了一核,但时间需要7个小时 CUDA_VISIBLE_DEVICES=0 env/bin/python test.py --pretrained_model model_zoo/checkpoint-iter199999.pth --store_type online --sample_size 500 --dir Generated/Chinese

你load的模型错了

感谢回复,我是在您提供的谷歌网盘里下载的,能指出具体怎么了吗

你load的是预训练用的内容编码器的参数。应该用训练好的SDT模型参数来做生成,你在谷歌网盘里面找一下,有三种语言的,选一个你要生成的语言就好

pledge42 commented 8 months ago

要在Windows上进行运行需要将test.py中的num_workers=0就行 但我的两台电脑打开资源管理器的时候都出现了只调用CPU而GPU不动的情况 image 可能是torch版本号和Windows系统的兼容问题 在cmd中输入nvidia-smi可以查看显卡运行情况(非实时刷新) image 参考3060laptop性能使用pretrained推演大概需要46分钟,实验室单张A100大概需要15分钟,性能大概相差3倍也能证明确实在用显卡运算

b858a6a7df5f10604d8e398595d1af4 图中是用学校服务器里的A100显卡在Linux运行的,至于怎么调用两块A100需要再研究一下