【ChatGLM3微调_Debug】

问题描述

ChatGLM3 finetune_demo 运行的时候报错:
使用命令行开始微调,我们使用 lora 进行微调

!CUDA_VISIBLE_DEVICES=0 NCCL_P2P_DISABLE=“1” NCCL_IB_DISABLE=“1” python finetune_hf.py data/AdvertiseGen_fix /root/autodl-tmp/ChatGLM3/chatglm3-6b configs/lora.yaml

/root/miniconda3/lib/python3.10/site-packages/transformers/tokenization_util │
│ s_base.py:800 in <dictcomp> │
│ │
│ 797 │ │ # Otherwise it passes the casts down and casts the LongTensor │
│ 798 │ │ # into a HalfTensor │
│ 799 │ │ if isinstance(device, str) or is_torch_device(device) or isin │
│ ❱ 800 │ │ │ self.data = {k: v.to(device=device) for k, v in self.data │
│ 801 │ │ else: │
│ 802 │ │ │ logger.warning(f"Attempting to cast a BatchEncoding to ty │
│ 803 │ │ return self │
╰──────────────────────────────────────────────────────────────────────────────╯
AttributeError: 'NoneType' object has no attribute 'to'

解决方案:

AttributeError: ‘NoneType’ object has no attribute ‘to’ 这个错误。我看到在 transformers/tokenization_utils_base.py 文件的第800行,有一个字典推导式 {k: v.to(device=device) for k, v in self.data.items()},这里 v 变量是 None 导致的错误。

修复这个问题的一种方式是在字典推导式中添加一个条件来检查 v 是否为 None。这是修改后的代码:

self.data = {k: v.to(device=device) for k, v in self.data.items() if v is not None}

这行代码将跳过 self.data 中值为 None 的项,只对非 None 的项调用 .to(device=device) 方法。这应该可以解决您遇到的问题。

### ChatGLM3 微调指南与实例 对于大型语言模型 (LLMs),微调是一种有效的方法来优化特定任务的表现。针对 ChatGLM3微调过程涉及准备数据集、加载预训练模型以及调整超参数等环节[^1]。 #### 数据集准备 为了使 ChatGLM3 能够更好地适应具体应用场景,需先准备好用于微调的数据集。这通常意味着收集并整理一系列对话记录或其他形式的文本交互样本。例如: ```python from datasets import load_dataset finetuning_dataset_name = "lamini/lamini_docs" finetuning_dataset = load_dataset(finetuning_dataset_name) print(finetuning_dataset) ``` 这段代码展示了如何利用 Hugging Face 提供的 `datasets` 库加载指定名称的数据集,并打印其结构以便确认内容是否符合预期[^3]。 #### 加载预训练模型 接下来要做的就是获取已经过广泛训练的基础版本 ChatGLM3 模型。通过这种方式可以继承之前积累的知识基础,在此基础上进一步改进性能。 ```python from transformers import AutoModelForCausalLM, AutoTokenizer model_checkpoint = &#39;path_to_chatglm3_model&#39; tokenizer = AutoTokenizer.from_pretrained(model_checkpoint) model = AutoModelForCausalLM.from_pretrained(model_checkpoint) ``` 这里假设有一个指向 ChatGLM3 预训练权重文件路径 (`path_to_chatglm3_model`) 可用;实际操作时应替换为此处的具体位置或 ID[^2]。 #### 定义训练配置 完成上述准备工作之后,则需要定义具体的训练设置,比如学习率、批处理大小以及其他可能影响最终效果的关键因素。 ```python training_args = { &#39;learning_rate&#39;: 5e-5, &#39;num_train_epochs&#39;: 3, &#39;per_device_train_batch_size&#39;: 8, } ``` 这些参数的选择取决于目标领域特性及可用计算资源等因素的影响。 #### 开始微调流程 最后一步便是启动整个微调过程。可以通过 PyTorch Lightning 或者简单的 Trainer API 来简化这一复杂的过程。 ```python from transformers import Trainer, TrainingArguments trainer = Trainer( model=model, args=TrainingArguments(**training_args), train_dataset=finetuned_dataset[&#39;train&#39;], ) trainer.train() ``` 此部分实现了基于前面所提到的各项组件构建起完整的训练框架,并执行了实际的微调工作流。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NikolaHwe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值