本文将探讨于2024年3月21日发布的LLama-Factory,并学习如何使用 DigitalOcean 旗下的 Paperspace平台对 LLama 3 进行微调。为了完成我们的任务,我们将使用 NVIDIA A4000 GPU,它被认为是功能最强大的单插槽 GPU 之一,能够无缝集成到各种工作站中。
RTX A4000 采用了 NVIDIA Ampere 架构,集成了 48 个第二代 RT Core、192 个第三代 Tensor Core 和 6144 个CUDA 核心,以及带有错误校正码(ECC)的 16GB 图形内存。这些配置确保了它能为创新项目提供精确可靠的计算能力。
一直以来,微调大语言模型一直是一项复杂的任务,主要由深谙机器学习和人工智能的工程师完成。然而,随着人工智能领域的不断发展,这一观念正在迅速改变。类似 LLama-Factory 等新工具的出现,使得微调过程更加便捷和高效。此外,现在还可以使用 DPO、ORPO、PPO 和 SFT 等技术进行微调和模型优化。更进一步说,大家现在可以有效地训练和微调如 LLama、Mistral、Falcon 等模型。
什么是模型的微调?
微调模型涉及调整预训练模型或基础模型的参数,这些参数可用于特定任务或数据集,可以提高模型的性能和准确性。这个过程涉及向模型提供新数据并修改其权重、偏差和某些参数。通过这种方式,可以让这个新模型可以在新任务或数据集上获得更好的表现,而无需为了新任务或数据从头开始开发一个模型,从而节省时间和资源。
通常,当创建新的大语言模型(LLM)时,它会在大量文本数据上进行训练,这些数据可能包含潜在的有害的数据。在预训练或初始训练阶段之后,该模型会被进行微调,并采取一些安全措施,以确保其避免生成有害或有毒的响应。然而,这种方法仍有改进的空间。不过,微调解决了需要让模型适应特定需求的问题。
为什么要用 LLama-Factory?
LLama Factory,这个工具能够高效且低成本地支持对 100 多个模型进行微调。LLama Factory 简化了模型微调的过程,并且易于访问,使用体验友好。此外,它还提供了由 Hiyouga 提供的 Hugging Face 空间,可用于对模型进行微调。
图:LLama Board(Huggingface 空间)
这个空间还支持 Lora 和 GaLore 配置,以减少 GPU 的使用。用户可以通过简单的滑块轻松更改参数,如 dropout、epochs、批次大小等。同时,也有多个数据集选项可供选择以微调你的模型。正如本文所述,LLama Factory支持许多模型,包括不同版本的 LLama、mistral 和 Falcon。它还支持像 galore、badm 和 Lora 这样的高级算法,提供诸如flash attention、位置编码和缩放等各种功能。
此外,你还可以集成像 TensorBoard、VanDB 和 MLflow 这样的监控工具。为了更快地进行推理,你还可以使用Gradio 和 CLI。本质上,LLama Factory 提供了一系列多样化的选项,以增强模型性能并简化微调过程。
LLama Board:LLama Factory 的统一****用户界面
LLama Board 可以帮助人们调整和改进语言模型(LLM)的性能,而无需了解如何编写代码。它就像一个仪表板,让你可以轻松地自定义语言模型如何学习和处理信息。
以下是它的一些关键特性:
-
易于定制:你可以通过在网页上调整设置来改变模型的学习方式。默认设置适用于大多数情况。你还可以在开始之前查看模型将如何查看你的数据。
-
进度监控:随着模型的学习,你可以看到更新和图表,显示它的表现如何。这有助于你了解它是否正在改进。
-
灵活的测试:你可以通过将模型与已知答案进行比较,或自己与其交流,来检查模型理解文本的程度。这有助于你观察模型是否在理解语言方面变得越来越好。
-
支持多种语言:LLama Board 支持英语、俄语和中文,对于说不同语言的人来说很有用。它也被设置为在未来添加更多语言。
使用 Paperspac 微调 LLama3
我们此前也介绍过如何在 Paperspace 上跑 LLama3 Demo。我们这次来对 LLama3 进行微调。如果你还对目前DigitalOcean 的 Paperspace GPU 云服务不熟悉,可以参考 DigitalOcean 英文官网的更多文档。另外,DigitalOcean 提供多种 GPU 可供选择,包括 H100、A100 等,按秒计费,能合理控制成本。
让我们登录到 Paperspace 平台,选择你希望使用的 GPU,并开始使用notebook(Paperspace 上的 IDE)。你还可以点击上面的链接来帮助你启动 notebook。
1、首先,我们将克隆仓库并安装必要的库
!git clone https://github.com/hiyouga/LLaMA-Factory.git``%cd LLaMA-Factory``%ls
2、接下来,我们将安装 unsloth,它允许我们有效地对模型进行微调。此外,我们还会安装 xformers 和 bitsandbytes。
# install necessary packages``!pip install "unsloth[colab-new] @ git+https://github.com/unslothai/unsloth.git"``!pip install --no-deps xformers==0.0.25``!pip install .[bitsandbytes]``!pip install 'urllib3<2'
3、一旦所有东西都安装好了,我们将检查 GPU 规格
!nvidia-smi
4、接下来,我们将导入torch并检查我们 的CUDA,因为我们正在使用 GPU,
import torch``try:` `assert torch.cuda.is_available() is True``except AssertionError:` `print("Your GPU is not setup!")
5、我们现在将导入我们克隆的 GitHub仓库附带的数据集。我们也可以创建一个自定义数据集并使用它。
import json`` ``%cd /notebooks/LLaMA-Factory``MODEL_NAME = "Llama-3"`` `` ``with open("/notebooks/LLaMA-Factory/data/identity.json", "r", encoding="utf-8") as f:` `dataset = json.load(f)`` ``for sample in dataset:` `sample["output"] = sample["output"].replace("MODEL_NAME", MODEL_NAME).replace("AUTHOR", "LLaMA Factory")`` ``with open("/notebooks/LLaMA-Factory/data/identity.json", "w", encoding="utf-8") as f:` `json.dump(dataset, f, indent=2, ensure_ascii=False)
6、完成上一步后,我们将执行下面的代码,为 Llama Factory 生成 Gradio 网络应用链接。
#generates the web app link` `%cd /notebooks/LLaMA-Factory``!GRADIO_SHARE=1 llamafactory-cli webui
你可以单击生成的链接并按照说明进行操作,也可以使用你的方法。
型号选择:
- 你可以选择任何模型;在这里,我们选择具有80亿个参数的Llama 3。
适配器配置:
-
你可以选择指定适配器路径。
-
可用的适配器包括LoRa、QLoRa、freeze或full。
-
如果需要,你可以刷新适配器列表。
培训选项:
-
你可以使用监督微调来训练模型。
-
或者,你可以选择 DPU(数据处理单元)或 PPU(并行处理单元)。
数据集选择:
-
所选数据集用于监督微调(SFT)。
-
你也可以选择自己的数据集。
超参数配置:
- 你可以调整超参数,例如迭代次数、最大梯度范数和最大样本大小。
Laura配置:
- LoRa型号提供详细的配置选项。
开始培训:
- 设置完所有配置后,你可以通过单击“开始”按钮启动训练过程。
下面将开始训练。我们还将使用 CLI 命令开始训练和微调。你可以使用以下代码指定参数。
args = dict(` `stage="sft", # Specifies the stage of training. Here, it's set to "sft" for supervised fine-tuning` `do_train=True,` `model_name_or_path="unsloth/llama-3-8b-Instruct-bnb-4bit", # use bnb-4bit-quantized Llama-3-8B-Instruct model` `dataset="identity,alpaca_gpt4_en", # use the alpaca and identity datasets` `template="llama3", # use llama3 for prompt template` `finetuning_type="lora", # use the LoRA adapters which saves up memory` `lora_target="all", # attach LoRA adapters to all linear layers` `output_dir="llama3_lora", # path to save LoRA adapters` `per_device_train_batch_size=2, # specify the batch size` `gradient_accumulation_steps=4, # the gradient accumulation steps` `lr_scheduler_type="cosine", # use the learning rate as cosine learning rate scheduler` `logging_steps=10, # log every 10 steps` `warmup_ratio=0.1, # use warmup scheduler` `save_steps=1000, # save checkpoint every 1000 steps` `learning_rate=5e-5, # the learning rate` `num_train_epochs=3.0, # the epochs of training` `max_samples=500, # use 500 examples in each dataset` `max_grad_norm=1.0, # clip gradient norm to 1.0` `quantization_bit=4, # use 4-bit QLoRA` `loraplus_lr_ratio=16.0, # use LoRA+ with lambda=16.0` `use_unsloth=True, # use UnslothAI's LoRA optimization for 2x faster training` `fp16=True, # use float16 mixed precision training``)`` ``json.dump(args, open("train_llama3.json", "w", encoding="utf-8"), indent=2)``
接下来,打开一个终端并运行以下命令
!llamafactory-cli train train_llama3.json
下面的代码会开启训练
7、一旦模型训练完成,我们就可以使用该模型进行推断。让我们试着这样做并检查模型是如何工作的。
args = dict(` `model_name_or_path="unsloth/llama-3-8b-Instruct-bnb-4bit", # Specifies the name or path of the pre-trained model to be used for inference. In this case, it's set to "unsloth/llama-3-8b-Instruct-bnb-4bit".` `#adapter_name_or_path="llama3_lora", # load the saved LoRA adapters` `finetuning_type="lora", # Specifies the type of fine-tuning. Here, it's set to "lora" for LoRA adapters.` `template="llama3", # Specifies the prompt template to be used for inference. Here, it's set to "llama3"` `quantization_bit=4, # Specifies the number of bits for quantization. In this case, it's set to 4` `use_unsloth=True, # use UnslothAI's LoRA optimization for 2x faster generation``)`` ``json.dump(args, open("infer_llama3.json", "w", encoding="utf-8"), indent=2)``
在这里,我们使用保存的适配器定义我们的模型,选择聊天模板,并指定用户与助手的交互。
接下来,使用你的终端运行以下代码,
!llamafactory-cli chat infer_llama3.json
建议你可以使用 Llama-Factory 与其它模型做做尝试,调整参数。
小结
有效的微调已成为大型语言模型(LLMs)适应特定任务的必要条件之一。然而,这需要一定的努力,有时也相当具有挑战性。随着 Llama-Factory 的引入,这一全面的框架让训练更加高效,用户无需编写代码即可轻松为超过 100 个 LLMs 定制微调。
现在,很多人对大型语言模型(LLMs)更加好奇,有这样想法的开发者可以试试 Llama-Factory 是否可以调整自己的模型。这有助于开源社区的成长和活跃。Llama-Factory 正变得广为人知,甚至已被列入 Awesome Transformers3 中,作为高效微调 LLMs 的工具。
我们希望本文能鼓励更多开发者使用这一框架来创建有价值的 LLMs。不过请记得,在使用Llama-Factory微调LLMs时,遵守模型的许可规则很重要。
至此,本文结束。我们看到了如今在几分钟内微调任何模型是多么容易。我们还可以使用 Hugging Face CLI 将这个模型推送到 Hugging Face Hub 上。
最后,如果你想在 H100 或其他型号的 GPU 上跑自己的大语言模型,可以在 DigitalOcean 的 GPU 云服务上直接开通使用。你也可以扫描下方二维码,或点击『阅读原文』访问 DigitalOcean 中国区独家战略合作伙伴卓普云科技咨询更多云服务相关方案。
如何学习大模型 AGI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
-END-
👉AGI大模型学习路线汇总👈
大模型学习路线图,整体分为7个大的阶段:(全套教程文末领取哈)
第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;
第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;
第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;
第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;
第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;
第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;
第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。
👉AGI大模型实战案例👈
光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
👉AGI大模型视频和PDF合集👈
观看零基础学习书籍和视频,看书籍和视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费
】🆓