【bug解决】Lora微调chatglm6b出现step10后loss持续为0

现象:

lora微调过程中出现loss持续为0

 

解决方案:

步骤1,设置fp16=True,后出现报错ValueError: Attempting to unscale FP16 gradients.

步骤2,将peft版本降为0.3.0后,报错消失,loss正常

### 如何使用LoRAChatGLM3-6B进行微调 #### 使用LoRA方法的背景 低秩适应(Low-Rank Adaptation, LoRA)是一种高效的参数优化技术,通过仅更新模型权重矩阵中的低秩部分来实现快速收敛和较小计算开销[^1]。 #### 准备工作 在开始之前,请确保已安装必要的依赖库并加载数据集。以下是所需的主要工具包: - `transformers`:用于加载预训练模型及其分词器。 - `peft`:支持LoRA和其他高效微调策略。 - `datasets`:处理自定义或公开的数据集。 #### 安装依赖项 运行以下命令以安装所需的Python库: ```bash pip install transformers peft datasets accelerate torch ``` #### 示例代码 下面是一个完整的示例脚本,展示如何基于LoRA微调ChatGLM3-6B: ```python import torch from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig from peft import LoraConfig, get_peft_model, prepare_model_for_kbit_training # 加载模型配置 model_name_or_path = "/root/autodl-tmp/ChatGLM3/basic_demo/cli_demo.py" tokenizer = AutoTokenizer.from_pretrained(model_name_or_path) # 配置量化设置 (可选) bnb_config = BitsAndBytesConfig( load_in_4bit=True, bnb_4bit_use_double_quant=True, bnb_4bit_quant_type="nf4", bnb_4bit_compute_dtype=torch.bfloat16 ) # 初始化基础模型 base_model = AutoModelForCausalLM.from_pretrained( model_name_or_path, quantization_config=bnb_config, device_map={"": 0} # 将模型放置到GPU上 ) # 设置LoRA超参数 lora_config = LoraConfig( r=8, # 秩大小 lora_alpha=32, target_modules=["q_proj", "v_proj"], # 调整目标模块 lora_dropout=0.05, bias="none", task_type="CAUSAL_LM" ) # 应用LoRA适配层 base_model.gradient_checkpointing_enable() base_model = prepare_model_for_kbit_training(base_model) peft_model = get_peft_model(base_model, lora_config) # 打印可训练参数数量 print(f"Trainable parameters: {sum(p.numel() for p in peft_model.parameters())}") # 训练过程省略... ``` 上述代码片段展示了如何利用LoRA调整特定模块,并减少整体内存占用量。 #### 数据集准备 对于对话格式的任务,通常需要将输入转换成适合因果语言建模的形式。例如: ```python def preprocess_function(examples): inputs = ["问:" + item["instruction"] + "\n答:" for item in examples["data"]] targets = [item["output"] for item in examples["data"]] return tokenizer(inputs, text_target=targets, padding="max_length", truncation=True, max_length=512) dataset = dataset.map(preprocess_function, batched=True) train_dataset = dataset['train'] eval_dataset = dataset['validation'] ``` 此函数会将每条样本转化为“问...答”的结构化形式[^2]。 #### 模型保存与导出 完成训练后可以轻松存储LoRA权重文件以便后续部署: ```python peft_model.save_pretrained("./outputs/lora_chatglm3") ``` --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值