ChatGLM多卡微调踩坑记录

本文记录了在使用LoRA微调ChatGLM时遇到的三个主要问题:1) 异常错误'Expected all tensors to be on the same device'; 2) 'ValueError'与模型半精度计算;3) 在模型评估时输入维度不匹配的问题。针对这些问题,作者提供了相应的解决方案,包括检查模型版本、处理数据类型和适配不同版本的peft库。同时,分享了相关的GitHub链接以供参考。
摘要由CSDN通过智能技术生成

题主近期尝试使用LoRA在自有数据上微调ChatGLM,尽管GitHub上已有很多LoRA相关代码,但实现过程中题主还是遇到了很多问题,现将遇到的问题整理出来供大家参考,实现的相关代码也会整理到GitHub.

1. Error: Expected all tensors to be on the same device, but found at least two devices, cuda:1 and cuda:0!

使用deepspeed多卡训练时会遇到这个问题,原因是由于ChatGLM进行了一次更新,使用离线下载的老版模型参数和AutoModel加载的新版配置会发生冲突。

可以通过模型中的config.json文件鉴别下载到本地的ChatGLM是老版还是新版。

老版的ChatGLM的vocab_size为150528:

{
  "_name_or_path": "THUDM/chatglm-6b",
  "architectures": [
    "ChatGLMModel"
  ],
  "auto_map": {
    "AutoConfig": "configuration_chatglm.ChatGLMConfig",
    "AutoModel": "modeling_chatglm.ChatGLMForConditionalGeneration",
    "AutoModelForSeq2SeqLM":
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Huggingface是一个开源的自然语言处理(NLP)库,提供了许多用于处理文本数据的工具和模型。多卡加载是指在使用Huggingface库加载和训练模型时,同时利用多个GPU进行计算加速。 在Huggingface中,可以使用`torch.nn.DataParallel`或`torch.nn.DistributedDataParallel`来实现多卡加载。这两个类都是PyTorch中用于并行计算的工具。 使用`torch.nn.DataParallel`时,可以通过以下步骤实现多卡加载: 1. 导入所需的库和模型。 2. 创建模型实例。 3. 使用`torch.nn.DataParallel`将模型包装起来,指定需要使用的GPU。 4. 将数据传递给模型进行训练或推理。 以下是一个示例代码: ```python import torch from torch import nn from transformers import BertModel # 导入所需的库和模型 device = torch.device("cuda" if torch.cuda.is_available() else "cpu") model = BertModel.from_pretrained('bert-base-uncased') # 创建模型实例 model = model.to(device) # 使用torch.nn.DataParallel将模型包装起来,指定需要使用的GPU model = nn.DataParallel(model) # 将数据传递给模型进行训练或推理 inputs = torch.tensor([[1, 2, 3], [4, 5, 6]]).to(device) outputs = model(inputs) ``` 使用`torch.nn.DistributedDataParallel`时,可以通过以下步骤实现多卡加载: 1. 导入所需的库和模型。 2. 创建模型实例。 3. 使用`torch.nn.DistributedDataParallel`将模型包装起来,指定需要使用的GPU。 4. 设置分布式训练环境。 5. 将数据传递给模型进行训练或推理。 以下是一个示例代码: ```python import torch from torch import nn from torch.nn.parallel import DistributedDataParallel from transformers import BertModel # 导入所需的库和模型 device = torch.device("cuda" if torch.cuda.is_available() else "cpu") model = BertModel.from_pretrained('bert-base-uncased') # 创建模型实例 model = model.to(device) # 使用torch.nn.DistributedDataParallel将模型包装起来,指定需要使用的GPU model = DistributedDataParallel(model) # 设置分布式训练环境 torch.distributed.init_process_group(backend='nccl') # 将数据传递给模型进行训练或推理 inputs = torch.tensor([[1, 2, 3], [4, 5, 6]]).to(device) outputs = model(inputs) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值