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 及其依赖:
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:
llamafactory-cli webui
WebUI 主要分为四个界面:训练、评估与预测、对话、导出。
"alpaca_zh_demo.json"``{` `"instruction": "计算这些物品的总费用。 ",` `"input": "输入:汽车 - $3000,衣服 - $100,书 - $20。",` `"output": "汽车、衣服和书的总费用为 $3000 + $100 + $20 = $3120。"``},
您可以使用以下命令进行微调:
llamafactory-cli train examples/train_lora/llama3_lora_sft.yaml
examples/train_lora/llama3_lora_sft.yaml提供了微调时的配置示例。该配置指定了模型参数、微调方法参数、数据集参数以及评估参数等。您需要根据自身需求自行配置。
### 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
。
下面提供一个配置文件示例:
### 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
具体如下:
### 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大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。