LlamaFactory:解锁LLM微调效率的终极神器!

十念  金牌会员 | 2025-2-13 00:28:50 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 875|帖子 875|积分 2625


LLaMA Factory 是一个简朴易用且高效的大型语言模子(Large Language Model)训练与微调平台。通过 LLaMA Factory,可以在无需编写任何代码的条件下,在当地完成上百种预训练模子的微调,框架特性包括:


  • 模子种类:LLaMA、LLaVA、Mistral、Mixtral-MoE、Qwen、Yi、Gemma、Baichuan、ChatGLM、Phi 等等。
  • 训练算法:(增量)预训练、(多模态)指令监督微调、奖励模子训练、PPO 训练、DPO 训练、KTO 训练、ORPO 训练等等。
  • 运算精度:16 比特全参数微调、冻结微调、LoRA 微调和基于 AQLM/AWQ/GPTQ/LLM.int8/HQQ/EETQ 的 2/3/4/5/6/8 比特 QLoRA 微调。
  • 优化算法:GaLore、BAdam、DoRA、LongLoRA、LLaMA Pro、Mixture-of-Depths、LoRA+、LoftQ 和 PiSSA。
  • 加快算子:FlashAttention-2 和 Unsloth。
  • 推理引擎:Transformers 和 vLLM。
  • 实行面板:LlamaBoard、TensorBoard、Wandb、MLflow 等等。

在安装 LLaMA-Factory 之前,请确保您安装了下列依赖:
运行以下指令以安装 LLaMA-Factory 及其依赖:
  1. git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git``cd LLaMA-Factory``pip install -e ".[torch,metrics]"
复制代码
假如出现环境冲突,请尝试利用 pip install --no-deps -e .办理

LLaMA-Factory 支持通过 WebUI 零代码微调大语言模子。 在完成 安装后,您可以通过以下指令进入 WebUI:
  1. llamafactory-cli webui
复制代码
WebUI 重要分为四个界面:训练、评估与猜测、对话、导出。


  1. "alpaca_zh_demo.json"``{`  `"instruction": "计算这些物品的总费用。 ",`  `"input": "输入:汽车 - $3000,衣服 - $100,书 - $20。",`  `"output": "汽车、衣服和书的总费用为 $3000 + $100 + $20 = $3120。"``},
复制代码
您可以利用以下下令进行微调:
  1. llamafactory-cli train examples/train_lora/llama3_lora_sft.yaml
复制代码
examples/train_lora/llama3_lora_sft.yaml提供了微调时的设置示例。该设置指定了模子参数、微调方法参数、数据集参数以及评估参数等。您需要根据自身需求自行设置。
  1. ### examples/train_lora/llama3_lora_sft.yaml``model_name_or_path: meta-llama/Meta-Llama-3-8B-Instruct``stage: sft``do_train: true``finetuning_type: lora``lora_target: all``dataset: identity,alpaca_en_demo``template: llama3``cutoff_len: 1024``max_samples: 1000``overwrite_cache: true``preprocessing_num_workers: 16``output_dir: saves/llama3-8b/lora/sft``logging_steps: 10``save_steps: 500``plot_loss: true``overwrite_output_dir: true``per_device_train_batch_size: 1``gradient_accumulation_steps: 8``learning_rate: 1.0e-4``num_train_epochs: 3.0``lr_scheduler_type: cosine``warmup_ratio: 0.1``bf16: true``ddp_timeout: 180000000``val_size: 0.1``per_device_eval_batch_size: 1``eval_strategy: steps``eval_steps: 500
复制代码

当我们基于预训练模子训练好 LoRA 适配器后,我们不希望在每次推理的时候分别加载预训练模子和 LoRA 适配器,因此我们需要将预训练模子和 LoRA 适配器合并导出成一个模子,并根据需要选择是否量化。根据是否量化以及量化算法的不同,导出的设置文件也有所区别。
您可以通过 llamafactory-cli export merge_config.yaml 指令来合并模子。其中 merge_config.yaml 需要您根据不同环境进行设置。
在完成模子合并并获得完整模子后,为了优化摆设结果,人们通常会基于显存占用、利用资本和推理速度等因素,选择通过量化技术对模子进行压缩,从而实现更高效的摆设。
量化(Quantization)通过数据精度压缩有效地减少了显存利用并加快推理。LLaMA-Factory 支持多种量化方法,包括:


  • AQLM
  • AWQ
  • GPTQ
  • QLoRA

GPTQ 等后训练量化方法(Post Training Quantization)是一种在训练后对预训练模子进行量化的方法。我们通过量化技术将高精度表示的预训练模子转换为低精度的模子,从而在避免过多损失模子性能的环境下减少显存占用并加快推理,我们希望低精度数据类型在有限的表示范围内尽大概地接近高精度数据类型的表示,因此我们需要指定量化位数 export_quantization_bit 以及校准数据集 export_quantization_dataset。

下面提供一个设置文件示例:
  1. ### examples/merge_lora/llama3_gptq.yaml``### model``model_name_or_path: meta-llama/Meta-Llama-3-8B-Instruct``template: llama3``### export``export_dir: models/llama3_gptq``export_quantization_bit: 4``export_quantization_dataset: data/c4_demo.json``export_size: 2``export_device: cpu``export_legacy_format: false
复制代码
QLoRA 是一种在 4-bit 量化模子基础上利用 LoRA 方法进行训练的技术。它在极大地保持了模子性能的同时大幅减少了显存占用和推理时间。
LLaMA-Factory 支持多种推理方式。
您可以利用 llamafactory-cli chat inference_config.yaml 或 llamafactory-cli webchat inference_config.yaml 进行推理与模子对话。对话时设置文件只需指定原始模子 model_name_or_path 和 template ,并根据是否是微调模子指定 adapter_name_or_path 和 finetuning_type。
假如您希望向模子输入大量数据集并生存推理结果,您可以启动 vllm 推理引擎对大量数据集进行快速的批量推理。您也可以通过 摆设 api 服务的情势通过 api 调用来进行批量推理。
默认环境下,模子推理将利用 Huggingface 引擎。 您也可以指定 infer_backend: vllm 以利用 vllm 推理引擎以获得更快的推理速度。

在完成模子训练后,您可以通过 llamafactory-cli eval examples/train_lora/llama3_lora_eval.yaml 来评估模子结果。
设置示例文件examples/train_lora/llama3_lora_eval.yaml具体如下:
  1. ### examples/train_lora/llama3_lora_eval.yaml``### model``model_name_or_path: meta-llama/Meta-Llama-3-8B-Instruct``adapter_name_or_path: saves/llama3-8b/lora/sft # 可选项``### method``finetuning_type: lora``### dataset``task: mmlu_test # mmlu_test, ceval_validation, cmmlu_test``template: fewshot``lang: en``n_shot: 5``### output``save_dir: saves/llama3-8b/lora/eval``### eval``batch_size: 4
复制代码


LLaMA-Factory 支持单机多卡和多机多卡分布式训练。同时也支持 DDP , DeepSpeed 和 FSDP 三种分布式引擎。
DDP (DistributedDataParallel) 通过实现模子并行和数据并行实现训练加快。 利用 DDP 的程序需要天生多个历程并且为每个历程创建一个 DDP 实例,他们之间通过 torch.distributed 库同步。
DeepSpeed 是微软开发的分布式训练引擎,并提供ZeRO(Zero Redundancy Optimizer)、offload、Sparse Attention、1 bit Adam、流水线并行等优化技术。 您可以根据使命需求与装备选择利用。
FSDP 通过全切片数据并行技术(Fully Sharded Data Parallel)来处理更多更大的模子。在 DDP 中,每张 GPU 都各自保存了一份完整的模子参数和优化器参数。而 FSDP 切分了模子参数、梯度与优化器参数,使得每张 GPU 只保存这些参数的一部分。 除了并行技术之外,FSDP 还支持将模子参数卸载至CPU,从而进一步低落显存需求。

随着语言模子规模的不断增大,其训练的难度和资本已成为共识。 而随着用户数量的增长,模子推理的资本也在不断攀升,甚至大概成为限制模子摆设的主要因素。 因此,我们需要对模子进行压缩以加快推理过程,而模子量化是其中一种有效的方法。
大语言模子的参数通常以高精度浮点数存储,这导致模子推理需要大量盘算资源。 量化技术通过将高精度数据类型存储的参数转换为低精度数据类型存储, 可以在不改变模子参数量和架构的条件下加快推理过程。这种方法使得模子的摆设更加经济高效,也更具可行性。

浮点数一般由3部分构成:符号位、指数位和尾数位。指数位越大,可表示的数字范围越大。尾数位越大、数字的精度越高。
量化可以根据何时量化分为:后训练量化和训练感知量化,也可以根据量化参数的确定方式分为:静态量化和动态量化。
为了办理大语言模子的遗忘题目, LLaMA Pro 通过在原有模子上增长新模块以适应新的使命,使其在多个新使命上的表现均优于原始模子。 LLaMA-Factory 支持 LLaMA Pro 的利用。 您可以利用运行 expand.sh 将 Meta-Llama-3-8B-Instruct 扩展为 llama3-8b-instruct-pro。
对于 LLaMA Pro 模子进行训练时,您需要指定 use_llama_pro 为 true。
怎样学习AI大模子 ?

“最先把握AI的人,将会比力晚把握AI的人有竞争上风”。

这句话,放在盘算机、互联网、移动互联网的开局时期,都是一样的原理。
我在一线互联网企业工作十余年里,引导过不少同行后辈。帮助很多人得到了学习和发展。
我意识到有很多履历和知识值得分享给各人,故此将并将重要的AI大模子资料包括AI大模子入门学习思维导图、精品AI大模子学习册本手册、视频教程、实战学习等录播视频免费分享出来。【保证100%免费】

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

十念

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表