需显式配置datasets的path和type为sharegpt,并确保jsonl格式、conversations字段及human/gpt角色正确;启用packing时须关闭gradient_checkpointing;通过dataset-info和debug-data命令验证加载效果。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

如果您在使用Axolotl框架对大语言模型进行微调时,希望直接加载ShareGPT格式的数据集,但训练启动失败或数据未被正确解析,则很可能是由于Axolotl默认不自动识别原始ShareGPT JSON结构,需显式指定数据路径、格式类型及对话模板。以下是完成该配置的完整操作步骤:
一、配置datasets字段指向ShareGPT数据文件路径
Axolotl通过datasets列表声明训练与验证数据源,每项必须包含path(本地JSONL或目录路径)和type(格式标识),二者缺一不可。ShareGPT数据须为每行一个JSON对象的JSONL格式,且每个对象含conversations数组字段。
1、将原始ShareGPT数据转换为JSONL格式:若原始为单个JSON数组,使用Python脚本逐条写入新文件,确保每行仅含一个带conversations键的字典。
2、在Axolotl配置文件(如config.yml)中定位datasets:节点,在其下添加一项字典:
3、设置path:值为绝对路径或相对于配置文件的相对路径,例如./data/sharegpt_zh.jsonl。
4、设置type:值为sharegpt,该类型触发Axolotl内置的sharegpt.py解析器,自动处理human/gpt角色映射与system提示注入。
二、启用sharegpt模板并校验字段兼容性
Axolotl的sharegpt类型依赖预置模板文件完成role-to-instruction转换,该模板要求输入数据严格包含conversations字段,并能识别from: "human"、from: "gpt"及可选的system字段。若字段名被修改或缺失,解析将跳过该样本。
1、确认数据中每个样本的conversations数组非空,且至少包含一条from: "human"和一条from: "gpt"对象。
2、检查是否存在system字段:若有,Axolotl默认将其作为全局系统提示插入每轮对话开头;若无,模板将忽略该逻辑,不报错。
3、禁止在conversations中混用from: "function_call"或from: "observation"而未配套定义tools字段——此类样本会被sharegpt.py静默丢弃。
4、在配置文件中添加dataset_preprocessor: sharegpt(部分Axolotl版本需显式声明,避免fallback至alpaca模板)。
三、设置sequence_len与packing参数以适配多轮对话长度
ShareGPT样本常含多轮交互,总token数易超基座模型上下文限制。Axolotl通过sequence_len控制最大输入长度,并支持packing将多个短样本拼接为单条序列以提升GPU利用率。但packing开启后,必须确保所有样本均来自同一对话上下文或语义连贯片段,否则会破坏对话逻辑结构。
1、根据所用基座模型的最大上下文长度设定sequence_len,例如Llama-3-8B设为4096,Qwen2.5-7B设为32768。
2、若数据中存在大量单轮human→gpt样本,可启用packing: true;若多为3轮以上长对话,则设为false以防截断。
3、添加sample_packing: true(新版本Axolotl推荐参数名)并配合max_seq_length: 4096,系统将动态打包样本直至接近上限。
4、启用packing后必须关闭gradient_checkpointing: false,否则反向传播将因动态长度无法对齐而崩溃。
四、验证数据加载是否成功
配置完成后,不直接启动训练,而是先运行数据校验命令,确保ShareGPT解析器能正确读取、分词并生成labels掩码。该步骤可暴露字段缺失、JSONL格式错误或template不匹配等早期问题。
1、执行命令:axolotl dataset-info --config config.yml,观察输出中Dataset stats是否显示非零的train_samples计数。
2、若显示0 samples loaded,检查日志末尾是否出现Skipping sample: missing 'conversations'类警告。
3、手动抽取JSONL中首条样本,用Python加载并打印sample["conversations"][0]["from"],确认值为字符串"human"而非"Human"等大小写变体。
4、运行axolotl debug-data --config config.yml --num-samples 2,查看实际送入dataloader的tokenized张量形状与labels内容,确认gpt回复部分对应位置的label值非-100。











