使用deepspeed,transformers,safetensor中常见的训练精度,共享权重问题

使用deepspeed可能需要注意精度问题

在这里插入图片描述

混合精度,LayerNorm

虽然deepspeed有混合精度训练的功能,但是对于网络上各种奇奇怪怪的代码的DIY转化中,他还是很弱小的。它的精度问题,使用deepspeed如果模型中有部分模型使用的是half精度,那么整个模型都会使用half精度,即使是nn.LayerNorm这样新创立的层。因为我们通常可能在计算权重的时候使用half,在LayerNorm的时候使用float32这样更好的归一化,防止 梯度 因为 精度 的问题消失或者爆炸。所以通常建议使用float32精度进行计算。但是这样的强制数据类型转化,在deepspeed中就会因为将模型的全部精度都降低而难以实现。
这个难题可以解决,但是需要特别设置,尤其是原来代码没有这样设置的时候。

class LayerNorm(nn.LayerNorm):def __init__(self, normalized_shape, eps=1e-5, elementwise_affine=True):super(LayerNorm, self).__init__(normalized_shape, eps=eps, elementwise_affine=elementwise_affine)# 确保权重和偏置初始化为float32,即使之后模型转换为fp16if self.elementwise_affine:self.weight.data = self.weight.data.float()self.bias.data = self.bias.data.float()def forward(self, x: torch.Tensor):# print(f"这是是layernorm")# embed()orig_type = x.dtype# ret = super().forward(x.type(torch.float32))ret = super().forward(x)return ret.type(orig_type)

一个很好的检查模型计算精度的方法是将模型的权重精度打印出来,单纯的显示出来模型并不能显示出来计算精度。

def print_model_parameters(model):for name, param in model.named_parameters():print(name, param.size(), id(param))## 我更喜欢使用 .dypte 来直接查看精度
print_model_parameters(your_model_instance)

共享张量(Shared Tensors)

safetensor可并没有那么好,它保存不了某些特别的自定义的共享张量。共享张量是PyTorch中一种用于减少内存使用并提高计算效率的特性。通过共享相同的数据缓冲区,多个张量可以引用相同的内存空间,而不需要复制数据。在transformers模型中,嵌入层(embeddings)和语言模型头(lm_head)经常共享权重,这样做既节省了参数数量,又使得梯度更有效地传播到模型的不同部分。共享向量是很多多模态领域训练的精髓。

共享张量说白了就是模型的参数传递,这种传递是直接赋值,而不是用另一个模型参数去计算。这种现象很常见就是一个张量数据是传递一致的,但是在模型的运算传递多次使用到。

layer1 = nn.Linear(10, 10)
layer2 = nn.Linear(10, 10)# 明确共享layer1的权重和偏置到layer2
layer2.weight = layer1.weight
layer2.bias = layer1.bias

这里报错误实际上和我实例化两个参数有关,实际上可以避免,但是模型原来的设计者可没有想到这一点。
报错的显示

RuntimeError: Some tensors share memory, this will lead to duplicate memory on disk and potential differences when loading them again: [{'encoder_decoder.cmn.linears.0.weight', 'encoder_decoder.model.cmn.linears.0.weight'},{'encoder_decoder.model.cmn.linears.0.bias', 'encoder_decoder.cmn.linears.0.bias'}, {'encoder_decoder.cmn.linears.1.weight', 'encoder_decoder.model.cmn.linears.1.weight'},{'encoder_decoder.cmn.linears.1.bias', 'encoder_decoder.model.cmn.linears.1.bias'}, {'encoder_decoder.model.cmn.linears.2.weight', 'encoder_decoder.cmn.linears.2.weight'}, {'encoder_decoder.cmn.linears.2.bias', 'encoder_decoder.model.cmn.linears.2.bias'}, {'encoder_decoder.cmn.linears.3.weight', 'encoder_decoder.model.cmn.linears.3.weight'},{'encoder_decoder.model.cmn.linears.3.bias', 'encoder_decoder.cmn.linears.3.bias'}].A potential way to correctly save your model is to use `save_model`.More information at https://huggingface.co/docs/safetensors/torch_shared_tensors0%|          | 1/410000 [00:34<3883:03:26, 34.10s/it]        

使用原始的pytorch存储格式就好使了,而transformers版本大一点的,如4.35,4.36它们在使用transformers.train函数调用自动保存时,保存的结果都是safetensor,但是safetensor应该是为了节约空间,做了一些现在还不完善的处理。导致出现了上面需要显示保存或者修改继承的方式。

安装库错误的问题

需要在集群上经常安装库,在报错的时候,尤其是下面这种,缺乏CUDA编译器的问题,直接使用module ava, load需要的CUDA库往往就能解决问题。

Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Collecting deepspeed==0.9.5Downloading https://pypi.tuna.tsinghua.edu.cn/packages/99/0f/a4ebd3b3f6a8fd9bca77ca5f570724f3902ca90b491f8146e45c9733e64f/deepspeed-0.9.5.tar.gz (809 kB)━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 809.9/809.9 kB 2.9 MB/s eta 0:00:00Preparing metadata (setup.py) ... errorerror: subprocess-exited-with-error× python setup.py egg_info did not run successfully.│ exit code: 1╰─> [8 lines of output]Traceback (most recent call last):File "<string>", line 2, in <module>File "<pip-setuptools-caller>", line 34, in <module>File "/tmp/pip-install-uc05hpfj/deepspeed_b69d07d91ac4496684f65ba796150c78/setup.py", line 82, in <module>cuda_major_ver, cuda_minor_ver = installed_cuda_version()File "/tmp/pip-install-uc05hpfj/deepspeed_b69d07d91ac4496684f65ba796150c78/op_builder/builder.py", line 41, in installed_cuda_versionassert cuda_home is not None, "CUDA_HOME does not exist, unable to compile CUDA op(s)"AssertionError: CUDA_HOME does not exist, unable to compile CUDA op(s)[end of output]note: This error originates from a subprocess, and is likely not a problem with pip.
error: metadata-generation-failed× Encountered error while generating package metadata.
╰─> See above for output.note: This is an issue with the package mentioned above, not pip.
hint: See above for details.
module ava
module load cuda/7/11.8  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/589417.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

XenCenter 2024 导入虚拟机

导入虚拟机 虚拟机位置 导入到那一个服务器 导入虚拟机存放存储位置 虚拟机网卡配置 SR修复功能&#xff0c;看自己需求 虚拟机恢复确认最终配置 恢复好的虚拟机 虚拟机模板转换

第十四届省赛大学B组(C/C++)子串简写

原题链接&#xff1a;子串简写 程序猿圈子里正在流行一种很新的简写方法&#xff1a; 对于一个字符串&#xff0c;只保留首尾字符&#xff0c;将首尾字符之间的所有字符用这部分的长度代替。 例如 internationalization 简写成 i18n&#xff0c;Kubernetes 简写成 K8s&#…

2024阿里云域名优惠口令免费领取,COM、CN和xin域名口令

2024年阿里云域名优惠口令&#xff0c;com域名续费优惠口令“com批量注册更享优惠”&#xff0c;cn域名续费优惠口令“cn注册多个价格更优”&#xff0c;cn域名注册优惠口令“互联网上的中国标识”&#xff0c;阿里云优惠口令是域名专属的优惠码&#xff0c;可用于域名注册、续…

前端-css-2

1.背景样式 属性名作用属性值background-color背景颜色颜色background-image设置背景图像地址url(地址)background-repeat设置背景图像重复方式 repeat&#xff1a;重复。 repeat-x&#xff1a;横向重复。 repeat-y&#xff1a;纵向重复。 no-repeat&#xff1a;不重复。 back…

Tinymce富文本编辑器二次开发电子病历时解决的bug

前言 本文是在Tinymce富文本编辑器添加自定义toolbar&#xff0c;二级菜单&#xff0c;自定义表单&#xff0c;签名的基础之上进行一些bug记录&#xff0c;功能添加&#xff0c;以及模版的应用和打印 项目描述 建立电子病历模版—录入&#xff08;电子病历模版和电子病历打印…

rocketmq的运维

1. admintool创建topic的时候 -o 的用法含义 https://rocketmq.apache.org/zh/docs/4.x/producer/03message2/ 有关orderMessageEnable和returnOrderTopicConfigToBroker的设置可以参考 https://blog.csdn.net/sdaujsj1/article/details/115741572 -c configFile通过-c命令指…

用ENIGMA-toolbox作图

之前一直使用ggseg呈现结果&#xff0c;最近想试一试其他绘图工具。ENIGMA-toolbox有所了解&#xff0c;绘图功能看起来门槛不高&#xff0c;所以就试着用它呈现一些结果。Matlab版本的ENIGMA-toolbox直接使用就是SurfStat的功能绘图&#xff0c;Python版本的绘图功能应该是根据…

蓝桥杯刷题第八天(dp专题)

这道题有点像小学奥数题&#xff0c;解题的关键主要是&#xff1a; 有2种走法固走到第i级阶梯&#xff0c;可以通过计算走到第i-1级和第i-2级的走法和&#xff0c;可以初始化走到第1级楼梯和走到第2级楼梯。分别为f[1]1;f[2]1(11)1(2)2.然后就可以循环遍历到后面的状态。 f[i…

014——超声波模块驱动开发Plus(基于I.MX6uLL、SR04和poll机制)

目录 一、基础知识 二、分析为什么打印会影响中断 三、驱动程序 四、应用程序 五、验证及其它 一、基础知识 013——超声波模块驱动开发&#xff08;基于I.MX6uLL与SR04&#xff09;-CSDN博客 二、分析为什么打印会影响中断 asmlinkage __visible int printk(const ch…

Chatgpt掘金之旅—有爱AI商业实战篇|聊天机器人|(四)

演示站点&#xff1a; https://ai.uaai.cn 对话模块 聊天机器人企业知识库&#xff1a;https://work.jingyuai.com/ 鲸鱼AI知识库 官方论坛&#xff1a; www.jingyuai.com 京娱AI 聊天机器人创建服务&#xff0c;随着企业越来越多地寻求创新的方式与客户互动&#xff0c;聊天机…

Linux部分命令

目录 1.文件介绍 2.ls命令 3.目录命令 4.相对路径以及绝对路径 5.命令创建目录&#xff08;文件夹&#xff09; 6.which命令 7.find命令 8.grep命令 9.wc命令 10.echo、tail、重定向符 1.文件介绍 和window不同&#xff0c;Linux没有盘路径&#xff0c;所有的文件都存…

家用洗地机选购指南,哪款洗地机性价比高且用户评价好?

在当今快节奏的生活中&#xff0c;无论是商业场所还是家庭&#xff0c;清洁环境都是我们追求的目标之一。而一台高性价比的洗地机在频繁清洁地面时尤为重要。市面上的洗地机种类繁多&#xff0c;如何选择适合自己的洗地机成为了一个挑战。那么&#xff0c;到底哪款牌子的洗地机…