Xtuner 大模型单卡低成本微调之本地实战--医学问答

本文介绍了如何使用Xtuner对大型语言模型进行低成本的单卡微调,聚焦于医学问答领域。首先,阐述了场景需求和数据预览,接着详细讲解了数据准备步骤,包括数据格式转换。然后,提到了配置文件的修改,尤其是引入deepspeed以加速训练。最后,展示了微调前后模型的对比,并提供了与合并后模型对话的实际操作指南,以及数据集来源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

xtuner convert pth_to_hf internlm_chat_7b_qlora_medqa2019_e3.py ./work_dirs/internlm_chat_7b_qlora_medqa2019_e3/epoch_3.pth/mp_rank_00_model_states.pt ./任何使用xtuner可以查看这里

安装和使用

github 文末有

自定义微调

场景需求

基于 InternLM-chat-7B 模型,用 MedQA 数据集进行微调,将其往医学问答领域对齐。

真实数据预览

问题 答案
What are ketorolac eye drops?(什么是酮咯酸滴眼液?) Ophthalmic ketorolac is used to treat itchy eyes caused by allergies. It also is used to treat swelling and redness (inflammation) that can occur after cataract surgery. Ketorolac is in a class of medications called nonsteroidal anti-inflammatory drugs (NSAIDs). It works by stopping the release of substances that cause allergy symptoms and inflammation.
What medicines raise blood sugar? (什么药物会升高血糖?) Some medicines for conditions other than diabetes can raise your blood sugar level. This is a concern when you have diabetes. Make sure every doctor you see knows about all of the medicines, vitamins, or herbal supplements you take. This means anything you take with or without a prescription. Examples include: Barbiturates. Thiazide diuretics. Corticosteroids. Birth control pills (oral contraceptives) and progesterone. Catecholamines. Decongestants that contain beta-adrenergic agents, such as pseudoephedrine. The B vitamin niacin. The risk of high blood sugar from niacin lowers after you have taken it for a few months. The antipsychotic medicine olanzapine (Zyprexa).

数据准备

在这里插入图片描述

Medication QA 数据集为例

问题 药物类型 问题类型 回答 主题 URL
aaa bbb ccc ddd eee fff

将数据转为 XTuner 的数据格式
目标格式:(.jsonL)

[{
   
    "conversation":[
        {
   
            "system": "xxx",
            "input": "xxx",
            "output": "xxx"
        }
    ]
},
资源下载链接为: https://pan.quark.cn/s/f1ead55c4354 以下标题“H5页面模板源码,很不错的例子”暗示了我们讨论的主题是关于HTML5页面模板的源代码。HTML5是现代网页开发的核心技术,它提供了丰富的功能和元素,让开发者能够构建出更具交互性、动态性和响应式的网页。“很不错的例子”表明这些源码不仅具有实用性,还具备一定的教学意义,既可以作为项目开发的直接素材,也能供学习参考。 在描述“H5页面模板源码,非常酷炫的HTML5模板,可以直接使用,也可以参考学习”中,“非常酷炫”意味着这些模板可能融合了诸多高级特性,例如动画效果、媒体元素的运用以及响应式设计等,这些都是HTML5技术的优势所在。可以直接使用表明用户无需从零开始编写代码,能迅速搭建出吸引人的网页。同时,这些模板也适合学习,用户通过查看源代码可以了解特定设计和功能的实现方式,从而提升自身的HTML5开发能力。 标签“H5 手机网页 H5源代码 手机html”进一步明确了主题。“H5”是HTML5的简称,“手机网页”和“手机html”则强调这些模板是针对移动设备优化的。在如今移动优先的时代,适应各种屏幕尺寸和触摸操作的网页设计极为重要。这表明这些源码很可能是响应式的,能够根据设备自动调整布局,以适配手机、平板电脑等多种设备。 从“压缩包文件的文件名称列表”来看,虽然无法直接从文件名得知具体源码内容,但可以推测这些文件可能包含多种HTML5模板示例。“不错的样子.txt”可能是一个介绍或说明文件,对模板进行简要描述或提供使用指南。而“1-30”这样的命名方式可能意味着有30个不同的模板实例,每个模板对应一个独立文件,涵盖多种设计风格和功能,为学习和实践提供了全面的平台。 总的来说,这个资源集合为HTML5开发者或初学者提供了一套实用且酷炫的移动网页模板源代码。这些模板既可以直接应用于项目
<think>嗯,用户想了解如何对Llama-3-8B大模型进行微调。首先,我需要回忆一下微调大型语言模型的一般步骤,并结合Llama-3-8B的具体情况来回答。 首先,微调大模型通常需要准备数据集。用户可能需要收集与目标任务相关的数据,比如对话、问答或者特定领域的文本。数据格式可能需要符合模型输入的格式,比如指令微调的话,数据应该包含指令、输入和期望的输出。比如引用[3]提到的Bunny-Llama-3-8B-V模型,就是基于Llama-3进行多模态微调的,说明数据可能包含图像和文本的结合,但用户的问题是关于微调,可能需要考虑不同的任务类型。 然后是环境配置,需要选择合适的框架,比如Hugging Face的Transformers库,或者使用DeepSpeed、FSDP进行分布式训练。考虑到Llama-3-8B的规模,单卡可能无法训练,需要多卡或者使用参数高效的方法,比如LoRA。引用[3]提到Bunny模型是基于Llama-3-8B的,可能使用了LoRA这类技术来减少显存占用。 接下来是模型加载,可能需要从Hugging Face下载预训练模型,并进行适当的配置,比如加载半精度或者使用QLoRA来量化模型。引用[2]提到Llama-3使用了15万亿tokens训练,所以预训练模型已经很强,微调时不需要太多数据,但要确保数据质量。 然后是训练配置,包括学习率、优化器、批次大小等。由于8B模型参数较多,可能需要较小的学习率,避免过拟合。另外,使用混合精度训练可以节省显存,加快训练速度。引用[3]中的模型在多个benchmark表现好,可能是在训练时进行了多任务学习或者数据增强。 训练过程中需要监控损失和评估指标,使用验证集来调整超参数。可能还需要早停策略,防止过拟合。训练完成后,要保存模型,并可能进行量化或合并适配器,比如LoRA的权重合并到原模型。 最后是部署,将微调后的模型集成到应用中,比如使用FastAPI提供API服务。引用[3]中的Bunny模型作为多模态应用,可能需要特定的部署方式,但用户的问题可能更关注文本生成方面。 在注意事项中,需要强调显存优化,比如梯度检查点、LoRA,以及数据质量的重要性。此外,任务适配可能需要调整模型结构,比如分类任务添加分类头。引用[1]提到未来计划增强模型的中文能力,可能用户的数据如果是中文,需要确保数据足够和相关。 可能用户的实际需求是在特定领域应用Llama-3-8B,比如客服对话或文本生成,所以需要根据具体任务调整微调策略。另外,用户可能关心微调需要多少计算资源,是否需要云服务,或者有没有更高效的方法,比如提示工程代替微调。但根据问题,用户明确想了解微调步骤,所以需要详细说明流程和相关技术。</think>### Llama-3-8B 大模型微调方法分步说明 #### 1. **环境准备与数据收集** - **硬件要求**:建议使用至少1张24GB显存的GPU(如RTX 3090/4090),大规模微调需多卡并行或云服务器(如A100) - **框架选择**:推荐使用Hugging Face Transformers + PEFT库,结合LoRA(Low-Rank Adaptation)进行参数高效微调[^3] - **数据格式**:准备指令-响应对数据(JSON格式),例如: ```json {"instruction": "解释量子力学", "input": "", "output": "量子力学是研究微观粒子..."} ``` #### 2. **模型加载与配置** ```python from transformers import AutoModelForCausalLM, AutoTokenizer model = AutoModelForCausalLM.from_pretrained( "meta-llama/Meta-Llama-3-8B", load_in_4bit=True, # 使用QLoRA量化 device_map="auto" ) tokenizer = AutoTokenizer.from_pretrained("meta-llama/Meta-Llama-3-8B") ``` #### 3. **适配器配置(LoRA)** ```python from peft import LoraConfig, get_peft_model lora_config = LoraConfig( r=8, # 秩 lora_alpha=32, target_modules=["q_proj", "v_proj"], # 目标注意力层 lora_dropout=0.05, bias="none" ) model = get_peft_model(model, lora_config) model.print_trainable_parameters() # 可训练参数约0.1% ``` #### 4. **训练循环配置** ```python from transformers import TrainingArguments training_args = TrainingArguments( output_dir="./results", per_device_train_batch_size=2, gradient_accumulation_steps=4, # 有效批次大小=8 learning_rate=1e-4, warmup_steps=100, num_train_epochs=3, fp16=True, logging_steps=10, optim="adamw_torch" ) ``` #### 5. **启动训练** ```python from transformers import Trainer trainer = Trainer( model=model, args=training_args, train_dataset=train_dataset, data_collator=lambda data: { "input_ids": torch.stack([f["input_ids"] for f in data]), "attention_mask": torch.stack([f["attention_mask"] for f in data]), "labels": torch.stack([f["labels"] for f in data]) } ) trainer.train() ``` #### 6. **模型保存与部署** ```python model.save_pretrained("./llama3-8b-lora-adapter") # 合并适配器(可选) merged_model = model.merge_and_unload() merged_model.save_pretrained("./merged_model") ``` ### 关键技术说明 1. **LoRA技术**:通过低秩矩阵分解,仅微调0.1%-1%的参数即可达到全参数微调效果 2. **梯度检查点**:使用`gradient_checkpointing_enable()`减少40%显存占用 3. **指令模板**:需遵循Llama-3的对话格式: ``` <|begin_of_text|><|start_header_id|>user<|end_header_id|> {instruction}<|eot_id|> <|start_header_id|>assistant<|end_header_id|> {response}<|eot_id|> ``` ### 注意事项 - 中文微调建议添加20%以上中文数据(如Alpaca-zh数据集) - 8B模型全参数微调需要约64GB显存,建议采用参数高效方法 - 使用`trl`库的SFTTrainer可获得更好的指令跟随效果
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值