ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Alpaca-LoRA 实战指南:在消费级硬件上微调 LLaMA 的完整方案(训练、推理与导出)

Alpaca-LoRA 实战指南:在消费级硬件上微调 LLaMA 的完整方案(训练、推理与导出) 微调LoRA大模型【免费下载链接】alpaca-loraInstruct-tune LLaMA on consumer hardware项目地址https://gitcode.com/gh_mirrors/al/alpaca-lora点击查看免费下载导读本文以 alpaca-lora 仓库为核心完整讲解如何基于 LoRA低秩适配技术在单张 RTX 4090 级别的消费级显卡上复现 Stanford Alpaca 的指令微调效果涵盖依赖安装、微调训练参数详解、Gradio 推理服务、LoRA 权重合并导出以及 Docker 部署全流程并通过源码级分析揭示提示词模板、tokenization、8-bit 量化等底层实现原理。项目背景用 LoRA 打破大模型微调的算力门槛Alpaca-LoRA 项目的核心目标是用 低秩适配LoRA 技术在消费级硬件上复现 Stanford Alpaca 的实验结果。斯坦福团队用 52K 条指令数据微调 7B 参数的 LLaMA得到了质量接近text-davinci-003的指令跟随模型而本项目将这一过程压缩到了单张 RTX 4090 上数小时内即可完成。原理上LoRA 冻结预训练权重只训练注入到注意力层的小规模低秩分解矩阵因此可训练参数量从数十亿级骤降到数百万级finetune.py训练时会通过model.print_trainable_parameters()打印可训练参数占比。再加上 Tim Dettmers 的 bitsandbytes 提供的 8-bit 量化加载模型显存占用被进一步压缩微调后的模型甚至可以出于研究目的运行在树莓派上。仓库不仅发布了训练代码还提供了推理脚本generate.py可直接加载基础模型 LoRA 权重启动 Gradio 界面合并导出脚本export_hf_checkpoint.py/export_state_dict_checkpoint.py将 LoRA 权重合并回基础模型输出 Hugging Face 格式或 PyTorchstate_dict格式便于接入 llama.cpp、alpaca.cpp 等下游项目Docker / Docker Compose 一键部署方案。代码可以轻松扩展到13b、30b、65b等更大模型。本地环境搭建安装依赖克隆仓库后在项目根目录执行pip install -r requirements.txtrequirements.txt 中的核心依赖如下依赖作用transformers4.28.0Hugging Face 模型加载与训练框架peft提供LoraConfig、get_peft_model等 LoRA 核心接口bitsandbytes8-bit 量化加载压缩显存占用datasets加载 Alpaca 微调数据集fire将 Python 函数自动转为命令行工具驱动finetune.py、generate.py的参数解析accelerate分布式训练支持gradio推理 Web 界面sentencepieceLLaMA tokenizer 依赖loralib、appdirs辅助依赖bitsandbytes 常见问题如果 bitsandbytes 安装后无法正常工作需要从源码编译安装。Windows 用户可参考项目 issue #17 中的安装说明。微调训练finetune.py 全参数详解finetune.py 是 PEFT 应用到 LLaMA 模型的直接实现同时包含提示词构造与 tokenization 相关代码。它对train()函数使用fire.Fire因此所有 Python 函数参数均可直接作为命令行参数传入。最小训练命令python finetune.py \ --base_model decapoda-research/llama-7b-hf \ --data_path yahma/alpaca-cleaned \ --output_dir ./lora-alpaca其中base_model是唯一必填参数——源码中通过断言强制校验未指定时直接报错Please specify a --base_model见 finetune.py。数据集既支持 Hugging Face Hub 上的名称如yahma/alpaca-cleaned也支持本地 JSON/JSONL 文件路径源码会在data_path以.json或.jsonl结尾时改用load_dataset(json, data_filesdata_path)加载见 finetune.py。完整超参数示例python finetune.py \ --base_model decapoda-research/llama-7b-hf \ --data_path yahma/alpaca-cleaned \ --output_dir ./lora-alpaca \ --batch_size 128 \ --micro_batch_size 4 \ --num_epochs 3 \ --learning_rate 1e-4 \ --cutoff_len 512 \ --val_set_size 2000 \ --lora_r 8 \ --lora_alpha 16 \ --lora_dropout 0.05 \ --lora_target_modules [q_proj,v_proj] \ --train_on_inputs \ --group_by_length训练参数源码级解析对照 finetune.py 的函数签名各参数的默认值与作用如下模型与数据参数参数默认值说明base_model基础模型名称或路径唯一必填项data_pathyahma/alpaca-cleaned训练数据集HF Hub 名称或本地 JSON/JSONLoutput_dir./lora-alpaca训练后 LoRA 权重的保存目录训练超参数参数默认值说明batch_size128总批大小源码中据此推导gradient_accumulation_steps batch_size // micro_batch_size见 finetune.pymicro_batch_size4单设备微批大小即实际传给 Trainer 的per_device_train_batch_sizenum_epochs3训练轮数learning_rate3e-4学习率README 示例中调为1e-4cutoff_len256序列截断长度超过则截断README 示例常用512val_set_size2000从训练集切出的验证集大小为0时不做验证集切分与评估group_by_lengthFalse按长度分桶加速训练但会产生形状异常的 loss 曲线LoRA 超参数参数默认值说明lora_r8LoRA 低秩矩阵的秩越大可训练参数越多、表达能力越强lora_alpha16LoRA 缩放系数实际缩放比为alpha / rlora_dropout0.05LoRA 层的 dropout 概率lora_target_modules[q_proj, v_proj]注入 LoRA 的目标模块官方权重训练时扩展为[q_proj,k_proj,v_proj,o_proj]四个注意力投影层LLM 与工具参数参数默认值说明train_on_inputsTrue为True时对输入部分也计算 loss为False时把输入部分 mask 掉置为-100只对输出计算 lossadd_eos_tokenFalse是否在序列末尾追加 EOS tokenresume_from_checkpointNone从训练 checkpointpytorch_model.bin或纯 LoRA adapteradapter_model.bin恢复训练prompt_template_namealpaca使用的提示词模板名对应 templates/ 目录下的 JSON 文件wandb_project/wandb_run_name/wandb_watch/wandb_log_model空字符串Weights Biases 实验跟踪配置传入任一参数即自动启用 wandb训练流程的底层调用链训练主流程在 finetune.py 中按以下顺序执行加载模型LlamaForCausalLM.from_pretrained(base_model, load_in_8bitTrue, torch_dtypetorch.float16, device_mapdevice_map)以 8-bit 量化 FP16 方式加载基础模型。device_mapauto自动分配设备当设置了WORLD_SIZE环境变量DDP 多卡场景时改为按LOCAL_RANK指定单卡同时gradient_accumulation_steps会除以world_size见 finetune.py。配置 tokenizer将pad_token_id设为0与 EOS 区分padding_side设为left以支持批处理推理见 finetune.py。准备 8-bit 训练prepare_model_for_int8_training(model)对量化模型做训练适配。构建 LoRA 配置LoraConfig(rlora_r, lora_alphalora_alpha, target_moduleslora_target_modules, lora_dropoutlora_dropout, biasnone, task_typeCAUSAL_LM)再通过get_peft_model包装为 PEFT 模型见 finetune.py。tokenize 数据generate_and_tokenize_prompt先用 Prompter 构造完整提示词再截断至cutoff_len若train_on_inputsFalse则用-100屏蔽输入部分的 labels使 loss 只关注模型输出见 finetune.py。数据切分val_set_size 0时用train_test_split(test_sizeval_set_size, shuffleTrue, seed42)切出验证集。构造 TrainerTrainingArguments启用fp16True、warmup_steps100、optimadamw_torch、save_steps200、save_total_limit3、evaluation_strategysteps验证集存在时等并配合DataCollatorForSeq2Seq做pad_to_multiple_of8的序列填充见 finetune.py。优化 state_dict 输出重写model.state_dict通过get_peft_model_state_dict过滤保证只保存 LoRA adapter 权重见 finetune.py。可选加速PyTorch 2.0 且非 Windows 平台时调用torch.compile(model)加速见 finetune.py。训练与保存trainer.train()后model.save_pretrained(output_dir)保存 LoRA 权重。推理服务generate.py 与 Gradio 界面generate.py 从 Hugging Face Hub 加载基础模型和tloen/alpaca-lora-7b的 LoRA 权重启动一个 Gradio Web 界面进行交互式推理。README 明确指出应将其视为示例代码按需修改。启动命令python generate.py \ --load_8bit \ --base_model decapoda-research/llama-7b-hf \ --lora_weights tloen/alpaca-lora-7b推理脚本源码要点设备自动选择脚本依次探测 CUDA、MPSApple Silicon、CPU并据此选择不同的加载方式——CUDA 下支持load_in_8bit量化加载见 generate.py。LoRA 合并加载通过PeftModel.from_pretrained(model, lora_weights)将 LoRA adapter 挂载到基础模型上。修复旧权重配置显式修正pad_token_id0、bos_token_id1、eos_token_id2规避 decapoda-research 旧版权重配置问题非 8-bit 加载时调用model.half()见 generate.py。采样参数evaluate函数暴露了temperature0.1、top_p0.75、top_k40、num_beams4、max_new_tokens128等生成参数并以 Slider 组件呈现在 Gradio 界面上交互时可实时调整见 generate.py。流式输出勾选Stream output后通过自定义Streamstopping criteria 与Iteratorize实现逐 token 流式返回见 utils/callbacks.py 及 generate.py。启动参数server_name默认为0.0.0.0允许外部访问share_gradioTrue可生成临时公网分享链接见 generate.py。提示词模板机制推理与训练共用 utils/prompter.py 中的Prompter类完成提示词构造模板存放在 templates/ 目录默认为 alpaca.json有输入时使用prompt_input模板无输入时使用prompt_no_input模板模板中的response_split### Response:用于在推理输出中截取模型回答部分get_response方法训练时generate_prompt(instruction, input, label)会在模板末尾追加label即标准答案。alpaca 模板全文如下Below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request. ### Instruction: {instruction} ### Input: {input} ### Response:仓库还提供了 alpaca_legacy.json、alpaca_short.json、vigogne.json 等变体模板可通过--prompt_template_name/--prompt_template切换。官方权重与复现命令官方tloen/alpaca-lora-7bLoRA adapter训练于 3 月 26 日的完整复现命令如下python finetune.py \ --base_modeldecapoda-research/llama-7b-hf \ --num_epochs10 \ --cutoff_len512 \ --group_by_length \ --output_dir./lora-alpaca \ --lora_target_modules[q_proj,k_proj,v_proj,o_proj] \ --lora_r16 \ --micro_batch_size8注意与默认参数的三处关键差异lora_target_modules扩展到[q_proj,k_proj,v_proj,o_proj]默认仅[q_proj,v_proj]对全部四个注意力投影层注入 LoRAlora_r提升到16增强低秩适配的表达能力num_epochs设为10默认3训练更充分。权重导出合并 LoRA 并转换格式训练得到的是低秩 adapter 权重若要脱离 PEFT 框架在llama.cpp、alpaca.cpp等原生推理项目中运行需要把 LoRA 权重合并回基础模型并转换格式。仓库提供两个导出脚本导出 Hugging Face 格式export_hf_checkpoint.pyexport_hf_checkpoint.py 通过以下步骤输出标准 HF checkpoint 到./hf_ckpt通过环境变量BASE_MODEL指定基础模型须先export BASE_MODELhuggyllama/llama-7b在 CPU 上以 FP16 加载基础模型与tloen/alpaca-lora-7b调用 PEFT 的merge_and_unload()合并权重脚本中用两次torch.allclose断言验证合并前后q_proj权重确实发生变化剥离base_model.model.前缀、过滤 LoRA 相关键以max_shard_size400MB分片保存。导出 PyTorch state_dict 格式export_state_dict_checkpoint.pyexport_state_dict_checkpoint.py 面向 llama.cpp 等需要原始 LLaMA 权重布局的项目输出./ckpt/consolidated.00.pth与./ckpt/params.json将 HF 命名空间翻译为原始 LLaMA 命名如self_attn.q_proj.weight→attention.wq.weightmlp.down_proj.weight→feed_forward.w2.weight完整映射见 export_state_dict_checkpoint.py对wq/wk权重做unpermute旋转位置编码重排还原原始 LLaMA 的权重布局手动声明 7B 模型结构参数dim4096、n_heads32、n_layers32等写入params.json。Docker 部署镜像构建与推理单容器方案构建镜像docker build -t alpaca-lora .Dockerfile 基于nvidia/cuda:11.8.0-devel-ubuntu22.04安装 Python 3.10 与全部依赖后以python3.10作为入口命令因此镜像默认会把命令行参数追加到python3.10之后执行。运行容器也可传入finetune.py及其全部参数用于训练docker run --gpusall --shm-size 64g -p 7860:7860 -v ${HOME}/.cache:/root/.cache --rm alpaca-lora generate.py \ --load_8bit \ --base_model decapoda-research/llama-7b-hf \ --lora_weights tloen/alpaca-lora-7b这里把宿主机~/.cache挂载为容器/root/.cache可复用已下载的模型权重避免重复下载--shm-size 64g用于满足大模型推理的共享内存需求。浏览器打开http://localhost:7860即可使用。Docker Compose 方案docker-compose.yml 预置了完整服务编排默认命令为generate.py --load_8bit --base_model $BASE_MODEL --lora_weights tloen/alpaca-lora-7b。1.可选在docker-compose.yml的environment中修改BASE_MODEL等模型与权重配置 2. 构建并启动docker-compose up -d --build浏览器打开http://localhost:7860查看日志docker-compose logs -f彻底清理含镜像与卷docker-compose down --volumes --rmi allCompose 文件还配置了 NVIDIA GPU 资源预留deploy.resources.reservations.devices、shm_size: 64gb以及权重缓存卷alpaca-lora:/root/.cache适合服务器端长期运行。效果对比与数据集说明示例输出对比README 中提供了 Alpaca-LoRA、Stanford Alpaca、text-davinci-003三者对同一批指令的输出对比。以 Tell me about alpacas 为例Alpaca-LoRA从羊驼科动物、安第斯山脉原产地、绒毛用途、食性与群居习性等方面作答信息完整Stanford Alpaca补充了约 5000 年前的驯化史与家族群居结构text-davinci-003额外给出饲养规模2~5 只与易照料等特点。整体来看未经超参数调优的 LoRA 模型输出已可与 Stanford Alpaca 相媲美README 原文表述为 produces outputs comparable to the Stanford Alpaca model进一步调优有望获得更好表现。更多对比样例墨西哥总统、法国国王、加拿大省份、斐波那契、FizzBuzz、押韵词、翻译等见 README.md。数据集与授权说明仓库附带 alpaca_data.jsonStanford Alpaca 原始数据集以 ODC Attribution License 授权alpaca_data_cleaned_archive.json 与 alpaca_data_gpt4.json 为清洗版与 GPT-4 生成数据集的归档副本。数据许可详见 DATA_LICENSE。注意事项与社区生态使用建议数据集是性能上限的关键README 指出若使用更高质量的数据集模型性能还有显著提升空间并建议关注 LAION Open Assistant 等高质量监督微调数据项目保持权重与代码同步更新仓库持续修复 bug 并更新 HF Hub 上的权重遇到回答长度异常等问题的用户应确保权重与代码均为最新版本多 GPU 用户可参考项目 issue #8 中的分布式训练讨论官方权重以外的社区 adapterREADME 列出了大量社区训练的 LoRA 权重覆盖 7B/13B/30B/65B 与中文、日文、法文、西班牙文、波兰文、泰文、韩文等多语言版本可自行下载试用下载风险自担。周边资源alpaca.cppCPU 原生运行 Alpaca 模型的客户端Alpaca-LoRA-ServeChatGPT 风格的 Alpaca 交互界面AlpacaDataCleanedAlpaca 数据集质量改进项目GPT-4 Alpaca Data将合成数据迁移到 GPT-4 的项目alpaca-native使用原始 Alpaca 代码的复现版本llama.onnx以 ONNX 格式推理 alpaca 的项目。总结Alpaca-LoRA 用最轻量的工程组合——PEFT bitsandbytes Transformers——证明了消费级硬件也能训出高质量指令跟随模型。从本文梳理的源码调用链可以看出其价值不仅在于开箱即用的训练/推理脚本更在于它把 LoRA 微调的完整工程路径提示词模板、tokenization 策略、8-bit 训练适配、权重合并导出、容器化部署以极简形式沉淀了下来。对于想在个人显卡上复现 Alpaca 效果、或以此为基线探索更大模型与更好数据集的开发者这是一个不可多得的参考实现。赞分享微调LoRA大模型【免费下载链接】alpaca-loraInstruct-tune LLaMA on consumer hardware项目地址https://gitcode.com/gh_mirrors/al/alpaca-lora点击查看免费下载相关推荐Alpaca-LoRA在消费级硬件上微调LLaMA的革命性方法Alpaca LoRA在消费级硬件上微调LLaMA的革命性方法 Alpaca LoRA项目代表了大型语言模型微调技术从资源密集型向消费级硬件普及的重要演进。该微调LoRA大模型催化剂机器学习革命从数据瓶颈到AI驱动的颠覆性突破催化剂机器学习革命从数据瓶颈到AI驱动的颠覆性突破 面对传统催化材料研发中计算成本高昂、实验周期漫长的双重困境FAIR Chemistry的OCP项目通人工智能机器学习深度学习预训练科学计算科研基础模型Alpaca-LoRA终极指南在单块GPU上微调LLaMA的完整教程Alpaca LoRA终极指南在单块GPU上微调LLaMA的完整教程 Alpaca LoRA是一个革命性的开源项目它让普通用户也能在消费级硬件上对LLaMA微调LoRA大模型上一篇如何读懂Weave Router的OpenAI Responses管线重试、原生finish_reason与pool flush三大机制下一篇DeepAudit与其他安全工具集成方案打造全方位的智能安全审计生态创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表