news 2026/4/18 10:20:35

unsloth数据集修改

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
unsloth数据集修改

一、先明确:自定义数据集的核心要求

Unsloth 微调对数据集的要求很简单:

  1. 格式:优先用CSV/JSON(新手最易操作),也支持 JSONL/TXT;
  2. 内容:至少包含「输入(问题 / 指令)」和「输出(回答 / 结果)」两列 / 字段;
  3. 示例结构(以 CSV 为例):
questionanswer
介绍一下 UnslothUnsloth 是一款低显存的 LLM 微调框架...
如何降低 LLM 微调显存?可以使用 Unsloth 的 4bit 量化 + LoRA 优化...

二、自定义数据集加载(完整可运行代码)

下面以本地 CSV 文件为例(最通用),同时提供 JSON 格式的加载方式,你按需选择:

步骤 1:准备本地数据集文件

先在本地创建一个custom_data.csv文件(用 Excel / 记事本都能做),内容如下(参考格式):

question,answer 介绍一下Unsloth,Unsloth是一款专为LLM微调设计的开源框架,核心优势是低显存、高速度,适配消费级GPU。 Unsloth支持哪些模型,Unsloth支持Llama 2/3、Mistral、Phi-3、Gemma等主流开源LLM。 如何用Unsloth微调7B模型,首先安装Unsloth,加载4bit量化模型,配置LoRA,用自定义数据集训练即可。
步骤 2:加载并预处理自定义数据集(核心代码)
from unsloth import FastLanguageModel import torch from trl import SFTTrainer from transformers import TrainingArguments from datasets import load_dataset # 核心:加载数据集的库 # ====================== # 核心修改:加载自定义CSV数据集 # ====================== # 方式1:加载本地CSV文件(推荐,新手首选) # 替换这里的 "custom_data.csv" 为你的数据集文件路径(比如 "D:/data/my_data.csv") dataset = load_dataset( "csv", # 数据集格式:csv/json/txt data_files="custom_data.csv", # 你的数据集文件路径 split="train" # 数据集划分(只有训练集就写train) ) # 方式2:如果你的数据集是JSON格式(示例) # dataset = load_dataset( # "json", # data_files="custom_data.json", # split="train" # ) # ====================== # 核心修改:格式化Prompt(适配你的字段名) # ====================== # 关键:把 "question" 和 "answer" 替换成你数据集的列名! # 比如你的数据集列名是 "instruction" 和 "output",就改成 sample['instruction'] def format_prompt(sample): # 适配Llama 3的官方Prompt格式(通用,大部分模型都兼容) return f"""<|begin_of_text|><|start_header_id|>user<|end_header_id|> {sample['question']} # 替换为你的输入字段名(比如 instruction/query) <|start_header_id|>assistant<|end_header_id|> {sample['answer']} # 替换为你的输出字段名(比如 output/response) <|end_of_text|>""" # 对数据集应用格式化函数,生成模型能识别的文本 dataset = dataset.map(lambda x: {"text": format_prompt(x)}) # ====================== # 后续是模型加载和训练(无需改,仅作完整示例) # ====================== # 加载模型(保持不变) model, tokenizer = FastLanguageModel.from_pretrained( model_name = "unsloth/llama-3-8b-bnb-4bit", max_seq_length = 2048, dtype = torch.float16, load_in_4bit = True, ) # 配置LoRA(保持不变) model = FastLanguageModel.get_peft_model( model, r = 16, target_modules = ["q_proj", "k_proj", "v_proj", "o_proj"], lora_alpha = 16, lora_dropout = 0, bias = "none", use_gradient_checkpointing = "unsloth", random_state = 42, ) # 训练器配置(仅需调整batch_size适配显存) trainer = SFTTrainer( model = model, train_dataset = dataset, # 用你的自定义数据集 dataset_text_field = "text", # 固定值:对应上面格式化后的 "text" 字段 max_seq_length = 2048, tokenizer = tokenizer, args = TrainingArguments( per_device_train_batch_size = 1, # 8GB显存改1,16GB改2 gradient_accumulation_steps = 4, warmup_steps = 5, max_steps = 60, learning_rate = 2e-4, fp16 = not torch.cuda.is_bf16_supported(), bf16 = torch.cuda.is_bf16_supported(), logging_steps = 1, output_dir = "unsloth-custom-finetuned", optim = "adamw_8bit", ), ) # 开始训练 trainer.train()

三、关键修改说明(你只需要改这 3 处)

  1. 数据集文件路径:把data_files="custom_data.csv"改成你的文件路径(比如 Windows:"D:/AI/data/my_qa_data.csv",Linux/Mac:"/home/user/data/my_qa_data.csv");
  2. 字段名替换:如果你的数据集列名不是question/answer,而是instruction/output(Alpaca 格式)、query/response(对话格式),就把sample['question']sample['answer']换成对应的列名;
  3. Prompt 格式(可选):如果微调的是 Llama 2/Mistral/Phi-3,可保留当前格式;如果是其他模型,可替换成对应的 Prompt 格式(比如 ChatGLM 的格式)。

四、常见问题解决

  1. 数据集编码错误:如果加载 CSV 时提示编码错误,添加encoding="utf-8"
    dataset = load_dataset("csv", data_files="custom_data.csv", split="train", encoding="utf-8")
  2. 字段名错误:如果提示KeyError: 'question',说明你写的字段名和数据集实际列名不一致,核对 Excel/CSV 里的列名;
  3. 数据集太大:先取 10% 数据测试,避免训练时间过长:
    dataset = dataset.select(range(100)) # 只取前100条数据测试

总结

  1. 自定义数据集优先用CSV 格式,只需包含「输入字段」和「输出字段」两列;
  2. 核心修改点:替换数据集文件路径、替换字段名、适配 Prompt 格式;
  3. 测试阶段先取少量数据(比如前 100 条)跑通代码,再用全量数据训练。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 8:52:34

Hugging Face:让大模型触手可及的魔法工厂

想象一下&#xff1a;有一天&#xff0c;你突然想玩大模型、训练模型、微调模型、甚至把模型塞进你的应用里 ——但你不想从零写 CUDA、不想研究注意力机制、也不想处理那些 “下载半天、报错三天” 的玄学问题。 这时候&#xff0c;Hugging Face 出现了。 它就像一个魔法工厂…

作者头像 李华
网站建设 2026/4/18 8:37:51

基于LSTM-Adaboost的电力负荷预测(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

作者头像 李华
网站建设 2026/4/18 8:15:49

吐血推荐!MBA必用9款AI论文工具测评TOP9

吐血推荐&#xff01;MBA必用9款AI论文工具测评TOP9 2026年MBA论文写作工具测评&#xff1a;精准筛选&#xff0c;高效助力 在MBA学习与研究过程中&#xff0c;论文写作是每位学生必须面对的重要环节。随着AI技术的不断进步&#xff0c;越来越多的AI论文工具被引入学术场景&…

作者头像 李华
网站建设 2026/4/18 8:02:36

如何用Python脚本打造纪念币预约神器:从零到实战

如何用Python脚本打造纪念币预约神器&#xff1a;从零到实战 【免费下载链接】auto_commemorative_coin_booking 项目地址: https://gitcode.com/gh_mirrors/au/auto_commemorative_coin_booking 还在为纪念币预约时的手忙脚乱而烦恼吗&#xff1f;这款基于Python的自动…

作者头像 李华
网站建设 2026/4/10 22:06:12

WhatsApp 账号被封怎么办?日常“养号”、防封、解封实践

对于出海企业来说&#xff0c;WABA&#xff08;WhatsApp Business Account&#xff09; 账号被封禁无异于“数字化地震”&#xff1a;不仅正在进行的营销活动被迫中断&#xff0c;长期积累的客户资产也可能瞬间归零。 日常该如何“养号”&#xff1f;为什么官方 API 账号也会被…

作者头像 李华
网站建设 2026/4/18 6:37:26

客户案例 | 利通科技x甄知科技,搭建便捷、高效、智能的IT服务体系

广东利通科技投资有限公司&#xff08;下称“利通科技”&#xff09;于2013年组建成立&#xff0c;是国内领先的智慧交通、数字化及信息化服务提供商。利通科技致力于将5G、人工智能、工业互联网、物联网、大数据、区块链等创新技术与高速公路建设营运产业融合运用&#xff0c;…

作者头像 李华