KerwinFu 2024-08-22 23:39 采纳率: 0%
浏览 48
已结题

关于Finetune模型,CUDA error: device-side assert triggered 报错

大家好,我尝试finetune BERT 模型,但是始终遇到相同的报错
RuntimeError: CUDA error: device-side assert triggered
CUDA kernel errors might be asynchronously reported at some other API call, so the stacktrace below might be incorrect.
For debugging consider passing CUDA_LAUNCH_BLOCKING=1.
Compile with TORCH_USE_CUDA_DSA to enable device-side assertions.
这里是我的代码

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

# Load the data
df = pd.read_csv('/root/manu_data.csv')
df = df[df['label'] != 'Noise']
# Rename the column if necessary (assuming the column is named 'label' in your CSV)
df['label'] = df['label'].astype(int) - 1

train_texts, val_texts, train_labels, val_labels = train_test_split(
    df['sequence'].tolist(), 
    df['label'].astype(int).tolist(), 
    test_size=0.2
)

tokenizer = AutoTokenizer.from_pretrained('/root/Model/DNABERT_s')
model = BertForSequenceClassification.from_pretrained('/root/Model/DNABERT_s', num_labels=30)

train_encodings = tokenizer(train_texts, truncation=True, padding=True, max_length=512)
val_encodings = tokenizer(val_texts, truncation=True, padding=True, max_length=512)
train_dataset = Dataset.from_dict({'input_ids': train_encodings['input_ids'], 'attention_mask': train_encodings['attention_mask'], 'labels': train_labels})
val_dataset = Dataset.from_dict({'input_ids': val_encodings['input_ids'], 'attention_mask': val_encodings['attention_mask'], 'labels': val_labels})

# Define the training arguments
training_args = TrainingArguments(
    output_dir='/root/Model/finetuned_DNABERT',  
    num_train_epochs=3,
    per_device_train_batch_size=4,
    per_device_eval_batch_size=4,
    warmup_steps=500,
    weight_decay=0.01,
    logging_dir='/root/Model/finetuned_DNABERT/logs', 
    logging_steps=10,
    evaluation_strategy="epoch",
    save_strategy="epoch",
    load_best_model_at_end=True,
    metric_for_best_model="accuracy",
    greater_is_better=True,
    save_total_limit=2,
    fp16=True,  
)

# Define a Trainer object
trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=train_dataset,
    eval_dataset=val_dataset,
    tokenizer=tokenizer,
)

我检查了print(f"Unique labels in the dataset: {df['label'].unique()}"),print的结果是0-29一共30个label。麻烦大家帮我看一下那里有问题,虚心提问,谢谢。

  • 写回答

14条回答 默认 最新

  • 吃不了席 2024-08-22 23:40
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    根据您提供的代码和错误信息,这个问题可能是由于CUDA内存分配问题导致的。您可以尝试以下方法来解决这个问题:

    1. 减小per_device_train_batch_sizeper_device_eval_batch_size的值。这将减少每次训练迭代中使用的GPU内存量。例如,将它们设置为2或1:
    training_args = TrainingArguments(
        output_dir='/root/Model/finetuned_DNABERT',  
        num_train_epochs=3,
        per_device_train_batch_size=2,  # 修改为2
        per_device_eval_batch_size=2,   # 修改为2
        warmup_steps=500,
        weight_decay=0.01,
        logging_dir='/root/Model/finetuned_DNABERT/logs', 
        logging_steps=10,
        evaluation_strategy="epoch",
        save_strategy="epoch",
        load_best_model_at_end=True,
        metric_for_best_model="accuracy",
        greater_is_better=True,
        save_total_limit=2,
        fp16=True,  
    )
    
    1. 如果您的GPU内存仍然不足,您可以尝试使用CPU进行训练。将device变量更改为:
    device = torch.device("cpu")
    

    请注意,使用CPU进行训练可能会比使用GPU慢得多。

    1. 如果问题仍然存在,您可以尝试更新您的PyTorch和Transformers库到最新版本,以确保您使用的是最新的修复程序和优化。您可以使用以下命令更新:
    pip install --upgrade torch transformers
    

    希望这些建议能帮助您解决问题。如果问题仍然存在,请随时提问,我们会尽力提供帮助。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月23日
  • 赞助了问题酬金15元 8月22日
  • 创建了问题 8月22日

悬赏问题

  • ¥15 35114 SVAC视频验签的问题
  • ¥15 impedancepy
  • ¥15 在虚拟机环境下完成以下,要求截图!
  • ¥15 求往届大挑得奖作品(ppt…)
  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见