movecpp

Results 20 comments of movecpp

undefine on "__shfl_up" or "__shfl_down" ? open CMakeList and delete something : IF (CUDA_VERSION GREATER 7.6) set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -gencode arch=compute_60,code=sm_60") set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -gencode arch=compute_61,code=sm_61") set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -gencode arch=compute_62,code=sm_62") ENDIF() IF...

check up your compile arguments follow that MakeFile,you can ignore this all warning text because compiler will be autocomplete

out of memory 调整参数就行了,还有一个很神奇的错误,是源自于embed size。

索引超出范围,自己检查数据集分成多少块了。

> > 我也遇到过,参数问题。 > > 请问你后来解决了吗? 当时就解决了,调一下模型参数就可以。

> > > > 我也遇到过,参数问题。 > > > > > > > > > 请问你后来解决了吗? > > > > > > 当时就解决了,调一下模型参数就可以。 > > 可以请问下你是具体怎么修改的参数吗 与ctx以及layer层数相关,具体情况很玄学,总之修改这两个。

@kingmo888 ctx:512 embed:800 head:10 layer:10 positions:512 参数表,怎么说呢,您可以自己尝试调整,ctx可长可短,短了epoch就多些,模型内存少一些,batch就能大一些,要根据自己显卡配置跟模型需求来。head跟layer小,训练效率就高,我单卡TITAN V改水冷,超频到极限(游戏不黑屏为标准),跑起来GPU利用率可以达到92以上,最高98,温度能达到80摄氏度,很暴力。词嵌入向量大一些好,不要超过1000,不要低于500,是比较适合的,超过1000虽然下降稍快一些,但提升很小开销太大,没价值。 LR不能大于0.0004,超过这个值后loss会在某个值震荡无法继续下降,我使用的最佳LR是0.0003,能够得到0.2的loss,是否能够再低,没有再做尝试。 想要达到显卡性能最大化,DataLoader是很重要的一个环节,prefetch_generator是必不可少的,我是将训练集直接加载到内存。prefetch_generator 包会自动在后台加载下一个step所需的数据,大家可以加缩进改目录地址直接用。为什么要self.char_len//2呢,比如ctx是1024,每次取1024个字符用作训练,那么对于上一个1024中的某些句子与下一个1024中的某些句子的关联就不能很好的学习到,所以,这样操作,第一个epoch,我的loss就能下降到4以下,梯度累加20个step,1.0的梯度裁剪上限,梯度裁剪上限不要调高,很容易过度学习,后期会在某个区间持续震荡。 另外,print操作对显卡利用率影响太大,本质上print属于IO操作,非常耗时,我是用jupyter训练的,livelossplot了解一下。 可能有些同学会问,我这个模型参数量已经很小了,最终生成效果是不是会有影响? 调参是很玄学的过程,本身就是黑箱操作,我追求的是最大化训练效率(相比于原有的train_single.py,训练速度能提升60%左右,显卡利用率高了。),参数量小,epoch也会加大,相对好训练些,每个人的配置不同,参数调整是无法直接复制黏贴使用的。 而且我已经反复训练超过300次了,不断调整参数,以最终生成质量来看,小模型未必不能生成高质量文章,取决于你的loss(但想要生成万字长文,ctx同样需要万字以上,否则超出模型长度之后的内容内容无法扩散(斗破为例,超出512长度后,不断的花式秀“异火”,句句不重样,句句是“异火”),loss再低都没用,这样应该能够明白吧?)。 目前已经上云训练我的26G超大数据集,4X2080Ti,模型参数有些变化,ctx加长到3072,head跟layer为6,embed是768,等训练好了再看看生成效果如何。 fp16,放弃吧,误差问题,loss就是过山车,O1O2都是这样,O3直接就是在玩耍,根本不是在学习。 以下是我的DataLoader: from prefetch_generator import BackgroundGenerator class MyDataset(Dataset): def __init__(self,num): self.char_len=num self.char=[] self.get_text() self.sector=0...

还有就是,pretrain的话,要禁用掉动态学习率,否则loss不降反升。

@kingmo888 生成的话,你可以修改模型参数,改一个一次性预测N个词的,这样就快了。至于模型的后期部署优化,tensorrt 是一个,torchscript多核并行也行。或者训练完成后,切成fp16预测试试,fp16自然要比32快N倍的。