Llama3-8B-Instruct + LLaMA-Factory 微调

Llama3-8B-Instruct模型下载地址:

魔搭社区(境内):https://modelscope.cn/models/LLM-Research/Meta-Llama-3-8B-Instruct/files

huggingface(境外):https://huggingface.co/meta-llama/Meta-Llama-3-8B-Instruct/tree/main

LLaMA-Factory项目地址:https://github.com/hiyouga/LLaMA-Factory

1. 下载Llama3-8B-Instruct模型

中国境内可以直接通过魔搭社区下载模型,境外可以在huggingface上下载模型(需要科学上网)!

1.1 从魔塔社区下载

点击“下载模型”

复制git链接

git clone https://www.modelscope.cn/LLM-Research/Meta-Llama-3-8B-Instruct.git

在模型存放的文件空白处点击鼠标右键,选择“Git Bash Here”,会打开一个git命令窗口

将刚刚复制的模型地址粘贴到git命令窗口,回车,即可进入到下载过程!

模型比较大,需要耐心等待模型下载完成!(也可以单独下载那几个比较大的文件)

1.2 从Huggingface下载

如果在境外,也可以从huggingface进行下载,不过需要科学上网工具!方法与魔搭社区下载方法类似!

如果是第一次从huggingface通过命令下载模型,可以先运行下面的命令安装 git-lfs

git lfs install

然后再复制模型的git链接

git clone https://huggingface.co/meta-llama/Meta-Llama-3-8B-Instruct

 

在文件夹中的下载步骤与魔搭社区的步骤一样,都是通过git命令窗口来进行下载!

2. 安装LLaMA-Factory

2.1 克隆项目到本地

首先访问LLaMA-Factory项目的GitHub主页,点击绿色的“Code”下拉按钮,点击“复制”按钮复制项目链接!

git clone https://github.com/hiyouga/LLaMA-Factory.git

 

在文件夹空白处点击鼠标右键,选择“Git Bash Here”,打开一个git窗口

 

 输入刚刚复制的git链接,回车,将项目克隆到本地文件夹

 

2.2 新建虚拟环境

进入到刚刚下载的项目文件夹中,在路径栏输入“cmd”,打开一个新的cmd命令窗口

 在cmd命令窗口输入下面的命令,新建一个虚拟环境

conda create -n llama_factory python=3.10 -y

 

 输入如下命令,激活该虚拟环境!

activate llama_factory

 

 当命令输入行前面是一个括号包括的虚拟环境名称的时候,就表示已经进入到了该新建的虚拟环境中了!

2.3 安装项目依赖

继续在虚拟环境中运行下面的命令,安装各种项目依赖!(这里建议打开科学上网工具,有些依赖的安装境外速度快)

 接下来需要根据自己的CUDA版本安装对应的PyTorch,这里附上参考链接PyTorch

我是的CDUA版本是12.0,一般都是向下兼容,所以我选的是CUDA 11.8对应的PyTorch

还是在刚刚的命令行,输入如下命令,安装PyTorch

pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

 

pip install https://github.com/jllllll/bitsandbytes-windows-webui/releases/download/wheels/bitsandbytes-0.41.2.post2-py3-none-win_amd64.whl

 

安装tensorboard

pip install tensorboard

 设置环境变量

Set USE MODELSCOPE HUB=1

到这一步,LLaMA-Factory项目的安装就基本上完成了! 

2.4 运行LLaMA-Factory

输入下面的命令,会自动打开一个web页面

python src/webui.py

 

下面就是web页面初始的样子

3. 微调Llama-3-8B-Instruct模型

3.1 微调模型

在“Model name”中选择“LLaMA3-8B”,将“Model path”中的路径修改为你本地存放Meta-Llama-3-8B-Instruct文件夹的路径!

切换到“Chat”选项卡,点击“Load model”,稍等片刻,系统就会提示“Model loaded,now you can chat with your model!”!

此时,当我们用中文询问大模型问题的时候,出现英文回复的几率会比较高!(但不是绝对,毕竟Meta-Llama-3-8B-Instruct模型训练的时候也有部分中文语料)

下面,我们将开始进行模型的微调,将选项卡从“Chat”,切换回“Train”

在“Dataset”中,选择若干个“_zh”结尾的数据集,为了节约显存“Cutoff length”可以修改为“512”,其他参数可以参照如下的截图!

点击“Start”将进入到模型微调的进程中!

 

训练的时间会比较长,像本人的NVIDIA 16G显卡,下面显示的时间是28个多小时!

如果中途像终止退出的话,点击“Abort”

 

3.2 导出模型

1.微调训练结束之后,点击“Export”选项卡,切换到导出功能区!

2.点击“Refresh adapters”按钮,刷新lora模型,在左侧的下拉列表中选择刚刚训练好的模型!

3.在“Max shard size(GB)”中设置好每个拆分模型的最大size,案例中我设置为5;

4.在“Export dir”中设置模型保存的路径;

5.点击“Export”按钮,开始导出模型(需要点时间等待);

模型导出完成之后,你就可以在前面指定的路径中看到微调后的新模型了!使用方法与其他模型一样!

 

<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、付费专栏及课程。

余额充值