本文主要是介绍V100显卡无法支持dolly系列模型BP16运算及BP16与FP16模型转换解决方式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
项目场景:
在模型训练过程中,可能会出现由BP16类型的模型需要转换到FP16类型的模型的需求,我研究了半天才试验出来,分享一个在实际过程中方便更改并能跑通的处理过程如下。
问题描述
V100无法支持BP16运算。 BP16类型的模型转换到FP16l类型的模型解决办法
原因分析:
在使用V100显卡进行模型训练:模型数据在加载及实际运算过程中会由自身配置的参数设定进行加载和运算,使用huggingface的transfomer库中的AutoModel.from_pretrained(“model_name_or_path”)虽然能正常加载,但在运算时会进行报错,需要我们使用FP类型的数据在V100显卡上进行运算。
解决方案:
修改模型加载方式及训练过程中数据类型为FP类型
例如:以dolly-v**系列模型举例,模型的本身数据类型为bfloat16,运算过程中也是这种格式,导致此模型无法再V100这种不支持BF类型的显卡上运行。
我们需要先将模型默认的数据类型修改为FP类型,直接在模型的config.json文件中修改,处理方式如下:
然后在训练的参数配置中设置bp=False
,不转换为BP类型,设置fp16=True
,这样会将我们原先加载的float32数据类型的模型转换为fp16数据类型进行模型的运算(会有一定的精度损失)。
小提示:congfig.json文件中定义的 "torch_dtype": "bfloat16"
,我们改为"torch_dtype": “float32”,如果直接改为“float16”会出现比较大的精度损失(BP16和FP32的数值表示范围一致,而FP16的表示范围要小得多)
这篇关于V100显卡无法支持dolly系列模型BP16运算及BP16与FP16模型转换解决方式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!