Dejavu530 2025-03-10 23:37 采纳率: 0%
浏览 14

微调ChatGLM3-6b,CUDA out of memory

如图,我用的算力型号是autodl的NVIDIA L40 ,显示显存有45G,为什么还是显示显存不够?精度改成float16了,batch_size也设置为1,input output的maxlength也减少了,数据集大概有1800条数据。nvidia smi指令也显示没有别的进程占用显存。
求解,我使用的自有数据集,想试下单张显卡lora微调。怎么让模型跑起来?是参数不对还是数据集太大?还是什么原因…

img

  • 写回答

3条回答 默认 最新

  • 道友老李 JWE233286一种基于机器视觉的水表指针读数识别及修正的方法 专利发明者 2025-03-10 23:37
    关注
    让【道友老李】来帮你解答,本回答参考gpt编写,并整理提供,如果还有疑问可以点击头像关注私信或评论。
    如果答案让您满意,请采纳、关注,非常感谢!
    根据您描述的情况,可能存在以下一些原因导致显存不够,以及解决方法:
    1. 模型参数过多:即模型中的参数量过大,导致显存不够。您可以尝试减少模型的层数、通道数,或者使用更小的模型结构。
    2. 数据集过大:数据集中的样本数量过多,导致显存不足。您可以尝试对数据集进行分批次加载,或者使用数据增强技术减少样本数量。
    3. 内存泄漏:存在内存泄漏的情况下也可能导致显存不足。您可以检查代码中是否存在内存泄漏的情况,及时释放不必要的变量。
    4. 使用的深度学习框架在计算时可能会占用一部分显存,您可以尝试优化框架或者使用其他框架。 以下是使用Python中PyTorch库简单示例的代码,用于设置模型和数据集参数:
    import torch
    import torch.nn as nn
    from torch.utils.data import DataLoader, Dataset
    # 定义模型
    class Model(nn.Module):
        def __init__(self):
            super(Model, self).__init__()
            self.fc = nn.Linear(100, 10)  # 例如输入维度为100,输出维度为10
        def forward(self, x):
            x = self.fc(x)
            return x
    # 定义数据集
    class CustomDataset(Dataset):
        def __init__(self, data):
            self.data = data
        def __len__(self):
            return len(self.data)
        def __getitem__(self, idx):
            sample = self.data[idx]
            return sample
    # 参数设置
    model = Model()
    optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
    criterion = nn.CrossEntropyLoss()
    batch_size = 1
    max_length = 100  # 输入输出的最大长度
    data = []  # 自有数据集,由1800条样本组成
    dataset = CustomDataset(data)
    dataloader = DataLoader(dataset, batch_size=batch_size, shuffle=True)
    # 训练模型
    for input_data in dataloader:
        optimizer.zero_grad()
        output = model(input_data)
        loss = criterion(output, labels)
        loss.backward()
        optimizer.step()
    

    您可以根据实际情况修改模型参数、数据集参数以及训练过程中的优化算法等,希望以上信息能够帮助到您解决问题。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月10日