OFA-Sys / Chinese-CLIP

Chinese version of CLIP which achieves Chinese cross-modal retrieval and representation generation.
MIT License
4.38k stars 453 forks source link

LOSS:nan 微调时LOSS异常 #298

Open wangbenchi opened 5 months ago

wangbenchi commented 5 months ago

屏幕截图 2024-04-17 220928 请教一下在进行微调时不管我的lr设置多小,这里的loss总会在第一个batch后变成nan是怎么回事

使用的是sh文件中提供的默认参数 context_length=52 warmup=100 batch_size=128 valid_batch_size=128 accum_freq=1 lr=5e-5 wd=0.001

Scau-Guang commented 5 months ago

可能有脏数据

csh-23001 commented 5 months ago

我也遇到了这个问题,而且用官方提供的处理好的数据集也会这样,请问问题解决了吗

Scau-Guang commented 5 months ago

你好,我已经收到来信,会尽快查看~

a694654760 commented 5 months ago

我也遇到了类似的问题,有解决方法麻烦踢我一下~

csh-23001 commented 5 months ago

我把accum_freq这个参数设置为1之后就莫名其妙好了,也可能和batch size有关,我把单卡batch size设置成了200

a694654760 commented 5 months ago

我把accum_freq这个参数设置为1之后就莫名其妙好了,也可能和batch size有关,我把单卡batch size设置成了200

请问你有用自己的数据集吗,我这边遇到的问题是使用自己的数据集,loss一直不收敛,和题主的还不太一样,不知道是不是我标签什么的做错了

csh-23001 commented 5 months ago

我把accum_freq这个参数设置为1之后就莫名其妙好了,也可能和batch size有关,我把单卡batch size设置成了200

请问你有用自己的数据集吗,我这边遇到的问题是使用自己的数据集,loss一直不收敛,和题主的还不太一样,不知道是不是我标签什么的做错了

我用的是自己的数据,当时的情况是开始几个batch的loss正常,精度有七十多,后面loss就变为了non,精度变成三十多。 我之前怀疑是梯度爆炸,然后去代码里面加上了梯度裁剪,但是还是没什么用。 后面把学习率设置为0,发现还是会出现这样的情况 所以我怀疑这和硬件有关,我把单卡batch size设置成210 的时候,loss有时候正常有时候为non,它们交替出现,我单卡显存是32g

a694654760 commented 5 months ago

我把accum_freq这个参数设置为1之后就莫名其妙好了,也可能和batch size有关,我把单卡batch size设置成了200

请问你有用自己的数据集吗,我这边遇到的问题是使用自己的数据集,loss一直不收敛,和题主的还不太一样,不知道是不是我标签什么的做错了

我用的是自己的数据,当时的情况是开始几个batch的loss正常,精度有七十多,后面loss就变为了non,精度变成三十多。 我之前怀疑是梯度爆炸,然后去代码里面加上了梯度裁剪,但是还是没什么用。 后面把学习率设置为0,发现还是会出现这样的情况 所以我怀疑这和硬件有关,我把单卡batch size设置成210 的时候,loss有时候正常有时候为non,它们交替出现,我单卡显存是32g

我是用2*v100,单卡显存32g, 单卡batch size设置了128,我自己的数据集,其实只有三种文本标签,只不过我对应了不同的文本id,大概类似于这样: {text_id:0, text:"标签A", image_id[0]} {text_id:1, text:"标签B", image_id[1]} {text_id:2, text:"标签A", image_id[2]} {text_id:3, text:"标签A", image_id[3]} {text_id:4, text:"标签C", image_id[4]} 向请教你一下,这样做数据对不对,我的loss就一直5.5x不变,acc就0.x,不知道是哪里出了问题,用MUGE训练正常的,但是MUGE的验证集acc也是一直30.x

csh-23001 commented 5 months ago

我把accum_freq这个参数设置为1之后就莫名其妙好了,也可能和batch size有关,我把单卡batch size设置成了200

请问你有用自己的数据集吗,我这边遇到的问题是使用自己的数据集,loss一直不收敛,和题主的还不太一样,不知道是不是我标签什么的做错了

我用的是自己的数据,当时的情况是开始几个batch的loss正常,精度有七十多,后面loss就变为了non,精度变成三十多。 我之前怀疑是梯度爆炸,然后去代码里面加上了梯度裁剪,但是还是没什么用。 后面把学习率设置为0,发现还是会出现这样的情况 所以我怀疑这和硬件有关,我把单卡batch size设置成210 的时候,loss有时候正常有时候为non,它们交替出现,我单卡显存是32g

我是用2*v100,单卡显存32g, 单卡batch size设置了128,我自己的数据集,其实只有三种文本标签,只不过我对应了不同的文本id,大概类似于这样: {text_id:0, text:"标签A", image_id[0]} {text_id:1, text:"标签B", image_id[1]} {text_id:2, text:"标签A", image_id[2]} {text_id:3, text:"标签A", image_id[3]} {text_id:4, text:"标签C", image_id[4]} 向请教你一下,这样做数据对不对,我的loss就一直5.5x不变,acc就0.x,不知道是哪里出了问题,用MUGE训练正常的,但是MUGE的验证集acc也是一直30.x

应该没问题吧,可能是因为他这个模型已经训练的很好了,我后面的训练在验证集上的loss下降不多,不过一直训练下去在训练集上的loss倒是能下降到很低。 也可以试试给标签加个模版,我看到有些预训练模型在做分类任务的微调的时候会加个模版,因为标签字数太少,也不便于提取文本特征,比如猫狗分类任务的模版可以是:“图片中的动物是<标签>”。要根据你的具体分类任务设计一个模版,让它更好的提取文本特征,在猫狗分类任务中提示模版里面的“动物”这个词是有用,但我这个不太熟,可能说错。

a694654760 commented 5 months ago

我把accum_freq这个参数设置为1之后就莫名其妙好了,也可能和batch size有关,我把单卡batch size设置成了200

请问你有用自己的数据集吗,我这边遇到的问题是使用自己的数据集,loss一直不收敛,和题主的还不太一样,不知道是不是我标签什么的做错了

我用的是自己的数据,当时的情况是开始几个batch的loss正常,精度有七十多,后面loss就变为了non,精度变成三十多。 我之前怀疑是梯度爆炸,然后去代码里面加上了梯度裁剪,但是还是没什么用。 后面把学习率设置为0,发现还是会出现这样的情况 所以我怀疑这和硬件有关,我把单卡batch size设置成210 的时候,loss有时候正常有时候为non,它们交替出现,我单卡显存是32g

我是用2*v100,单卡显存32g, 单卡batch size设置了128,我自己的数据集,其实只有三种文本标签,只不过我对应了不同的文本id,大概类似于这样: {text_id:0, text:"标签A", image_id[0]} {text_id:1, text:"标签B", image_id[1]} {text_id:2, text:"标签A", image_id[2]} {text_id:3, text:"标签A", image_id[3]} {text_id:4, text:"标签C", image_id[4]} 向请教你一下,这样做数据对不对,我的loss就一直5.5x不变,acc就0.x,不知道是哪里出了问题,用MUGE训练正常的,但是MUGE的验证集acc也是一直30.x

应该没问题吧,可能是因为他这个模型已经训练的很好了,我后面的训练在验证集上的loss下降不多,不过一直训练下去在训练集上的loss倒是能下降到很低。 也可以试试给标签加个模版,我看到有些预训练模型在做分类任务的微调的时候会加个模版,因为标签字数太少,也不便于提取文本特征,比如猫狗分类任务的模版可以是:“图片中的动物是<标签>”。要根据你的具体分类任务设计一个模版,让它更好的提取文本特征,在猫狗分类任务中提示模版里面的“动物”这个词是有用,但我这个不太熟,可能说错。

模板也已经加了,但是不管我怎么调整数据,结果都是一样,请问你的id是从0开始的吗,这个有没有影响啊?id是不是得从他们训练的id接着来

csh-23001 commented 5 months ago

我把accum_freq这个参数设置为1之后就莫名其妙好了,也可能和batch size有关,我把单卡batch size设置成了200

请问你有用自己的数据集吗,我这边遇到的问题是使用自己的数据集,loss一直不收敛,和题主的还不太一样,不知道是不是我标签什么的做错了

我用的是自己的数据,当时的情况是开始几个batch的loss正常,精度有七十多,后面loss就变为了non,精度变成三十多。 我之前怀疑是梯度爆炸,然后去代码里面加上了梯度裁剪,但是还是没什么用。 后面把学习率设置为0,发现还是会出现这样的情况 所以我怀疑这和硬件有关,我把单卡batch size设置成210 的时候,loss有时候正常有时候为non,它们交替出现,我单卡显存是32g

我是用2*v100,单卡显存32g, 单卡batch size设置了128,我自己的数据集,其实只有三种文本标签,只不过我对应了不同的文本id,大概类似于这样: {text_id:0, text:"标签A", image_id[0]} {text_id:1, text:"标签B", image_id[1]} {text_id:2, text:"标签A", image_id[2]} {text_id:3, text:"标签A", image_id[3]} {text_id:4, text:"标签C", image_id[4]} 向请教你一下,这样做数据对不对,我的loss就一直5.5x不变,acc就0.x,不知道是哪里出了问题,用MUGE训练正常的,但是MUGE的验证集acc也是一直30.x

应该没问题吧,可能是因为他这个模型已经训练的很好了,我后面的训练在验证集上的loss下降不多,不过一直训练下去在训练集上的loss倒是能下降到很低。 也可以试试给标签加个模版,我看到有些预训练模型在做分类任务的微调的时候会加个模版,因为标签字数太少,也不便于提取文本特征,比如猫狗分类任务的模版可以是:“图片中的动物是<标签>”。要根据你的具体分类任务设计一个模版,让它更好的提取文本特征,在猫狗分类任务中提示模版里面的“动物”这个词是有用,但我这个不太熟,可能说错。

模板也已经加了,但是不管我怎么调整数据,结果都是一样,请问你的id是从0开始的吗,这个有没有影响啊?id是不是得从他们训练的id接着来

ID应该没影响吧

a694654760 commented 5 months ago

我把accum_freq这个参数设置为1之后就莫名其妙好了,也可能和batch size有关,我把单卡batch size设置成了200

请问你有用自己的数据集吗,我这边遇到的问题是使用自己的数据集,loss一直不收敛,和题主的还不太一样,不知道是不是我标签什么的做错了

我用的是自己的数据,当时的情况是开始几个batch的loss正常,精度有七十多,后面loss就变为了non,精度变成三十多。 我之前怀疑是梯度爆炸,然后去代码里面加上了梯度裁剪,但是还是没什么用。 后面把学习率设置为0,发现还是会出现这样的情况 所以我怀疑这和硬件有关,我把单卡batch size设置成210 的时候,loss有时候正常有时候为non,它们交替出现,我单卡显存是32g

我是用2*v100,单卡显存32g, 单卡batch size设置了128,我自己的数据集,其实只有三种文本标签,只不过我对应了不同的文本id,大概类似于这样: {text_id:0, text:"标签A", image_id[0]} {text_id:1, text:"标签B", image_id[1]} {text_id:2, text:"标签A", image_id[2]} {text_id:3, text:"标签A", image_id[3]} {text_id:4, text:"标签C", image_id[4]} 向请教你一下,这样做数据对不对,我的loss就一直5.5x不变,acc就0.x,不知道是哪里出了问题,用MUGE训练正常的,但是MUGE的验证集acc也是一直30.x

应该没问题吧,可能是因为他这个模型已经训练的很好了,我后面的训练在验证集上的loss下降不多,不过一直训练下去在训练集上的loss倒是能下降到很低。 也可以试试给标签加个模版,我看到有些预训练模型在做分类任务的微调的时候会加个模版,因为标签字数太少,也不便于提取文本特征,比如猫狗分类任务的模版可以是:“图片中的动物是<标签>”。要根据你的具体分类任务设计一个模版,让它更好的提取文本特征,在猫狗分类任务中提示模版里面的“动物”这个词是有用,但我这个不太熟,可能说错。

模板也已经加了,但是不管我怎么调整数据,结果都是一样,请问你的id是从0开始的吗,这个有没有影响啊?id是不是得从他们训练的id接着来

ID应该没影响吧

好吧,我已经想不到从哪里找问题了哈哈哈,还是谢谢你啦

L1n111ya commented 2 months ago

我把accum_freq这个参数设置为1之后就莫名其妙好了,也可能和batch size有关,我把单卡batch size设置成了200

请问你有用自己的数据集吗,我这边遇到的问题是使用自己的数据集,loss一直不收敛,和题主的还不太一样,不知道是不是我标签什么的做错了

我用的是自己的数据,当时的情况是开始几个batch的loss正常,精度有七十多,后面loss就变为了non,精度变成三十多。 我之前怀疑是梯度爆炸,然后去代码里面加上了梯度裁剪,但是还是没什么用。 后面把学习率设置为0,发现还是会出现这样的情况 所以我怀疑这和硬件有关,我把单卡batch size设置成210 的时候,loss有时候正常有时候为non,它们交替出现,我单卡显存是32g

我的问题和你一样,有时候正常,有时候nan,正常的时候从整体来看,只看正常的话是在收敛的

Scau-Guang commented 2 months ago

你好,我已经收到来信,会尽快查看~