ChatGPT 人工智能 GPT4 伦理 生成式 医疗 监管 安全 机器学习 深度学习 神经网络 计算机视觉 强化学习 模型 算法 应用 开发 研究 工具 平台 框架 数据集 训练 部署 安全 合规 培训 投资 LLM,llm AI,ai,Ai 大模型 大语言模型 制图 生图 绘图 文生图 文生视频 生成式AI AGI 世界模型 sora chatGPT,chatgpt,ChatGpt claude openai Llama deepseek midjourney 红熊猫模型 Red panda,panda Stable Diffusion,StableDiffusion,stable DALL- E 3 DALL E DALL Flux,flux 扩散模型 混元大模型 文心一言 通义千问 可灵 Pika PixelDance 豆包 月之暗面 零一万物 阶跃星辰 搜索增强 MiniMax Talkie Agent prompt fastai LangChain TTS 微调 提示词 知识库 智能体
# 热门搜索 #
搜索
仅用250美元,Hugging Face技术主管手把手教你微调Llama 3
9066点击    2024-05-06 17:49


我们知道,Meta 推出的 Llama 3、Mistral AI 推出的 Mistral 和 Mixtral 模型以及 AI21 实验室推出的 Jamba 等开源大语言模型已经成为 OpenAI 的竞争对手。


不过,大多数情况下,使用者需要根据自己的数据对这些开源模型进行微调,才能充分释放模型的潜力。


虽然在单个 GPU 上使用 Q-Lora 对较小的大语言模型(如 Mistral)进行微调不是难事,但对像 Llama 3 70b 或 Mixtral 这样的大模型的高效微调直到现在仍是一个难题。


因此,Hugging Face 技术主管 Philipp Schmid 介绍了如何使用 PyTorch FSDP 和 Q-Lora,并在 Hugging Face 的 TRL、Transformers、peft 和 datasets 等库的帮助下,对 Llama 3 进行微调。除了 FSDP,作者还对 PyTorch 2.2 更新后的 Flash Attention v2 也进行了适配。


微调主要步骤如下:


  • 设置开发环境
  • 创建并加载数据集
  • 使用 PyTorch FSDP、Q-Lora 和 SDPA 微调大语言模型
  • 测试模型并进行推理


注:本文进行的实验是在英伟达(NVIDIA)H100 和英伟达(NVIDIA)A10G GPU 上创建和验证的。配置文件和代码针对 4xA10G GPU 进行了优化,每个 GPU 均配备 24GB 内存。如果使用者有更多的算力,第 3 步提到的配置文件(yaml 文件)需要做相应的修改。


FSDP+Q-Lora 背景知识


基于一项由 Answer.AI、Q-Lora 创建者 Tim Dettmers 和 Hugging Face 共同参与的合作项目,作者对 Q-Lora 和 PyTorch FSDP(完全共享数据并行)所能提供的技术支持进行了总结。


FSDP 和 Q-Lora 的结合使用能让使用者在 2 个消费级 GPU(24GB)上就能对 Llama 2 70b 或 Mixtral 8x7B 进行微调,细节可以参考下面文章。其中 Hugging Face 的 PEFT 库对此有至关重要的作用。


文章地址:https://www.answer.ai/posts/2024-03-06-fsdp-qlora.html


PyTorch FSDP 是一种数据 / 模型并行技术,它可以跨 GPU 分割模型,减少内存需求,并能够更有效地训练更大的模型。Q-LoRA 是一种微调方法,它利用量化和低秩适配器来有效地减少计算需求和内存占用。


设置开发环境


第一步是安装 Hugging Face Libraries 以及 Pyroch,包括 trl、transformers 和 datasets 等库。trl 是建立在 transformers 和 datasets 基础上的一个新库,能让对开源大语言模型进行微调、RLHF 和对齐变得更容易。


接下来,登录 Hugging Face 获取 Llama 3 70b 模型。


创建和加载数据集


环境设置完成后,我们就可以开始创建和准备数据集了。微调用的数据集应该包含使用者想要解决的任务的示例样本。阅读《如何在 2024 年使用 Hugging Face 微调 LLM》可以进一步了解如何创建数据集。


文章地址:https://www.philschmid.de/fine-tune-llms-in-2024-with-trl#3-create-and-prepare-the-dataset


作者使用了 HuggingFaceH4/no_robots 数据集,这是一个包含 10,000 条指令和样本的高质量数据集,并且经过了高质量的数据标注。这些数据可用于有监督微调(SFT),使语言模型更好地遵循人类指令。no_robots 数据集以 OpenAI 发表的 InstructGPT 论文中描述的人类指令数据集为原型,并且主要由单句指令组成。


使用 PyTorch FSDP、Q-Lora 和 SDPA 来微调 LLM


接下来使用 PyTorch FSDP、Q-Lora 和 SDPA 对大语言模型进行微调。作者是在分布式设备中运行模型,因此需要使用 torchrun 和 python 脚本启动训练。


作者编写了 run_fsdp_qlora.py 脚本,其作用是从磁盘加载数据集、初始化模型和分词器并开始模型训练。脚本使用 trl 库中的 SFTTrainer 来对模型进行微调。


SFTTrainer 能够让对开源大语言模型的有监督微调更加容易上手,具体来说有以下几点:


  • 格式化的数据集,包括格式化的多轮会话和指令(已使用)
  • 只对完整的内容进行训练,忽略只有 prompts 的情况(未使用)
  • 打包数据集,提高训练效率(已使用)
  • 支持参数高效微调技术,包括 Q-LoRA(已使用)
  • 为会话级任务微调初始化模型和分词器(未使用,见下文)


注意:作者使用的是类似于 Anthropic/Vicuna 的聊天模板,设置了「用户」和「助手」角色。这样做是因为基础 Llama 3 中的特殊分词器(<|begin_of_text|> 及 <|reserved_special_token_XX|>)没有经过训练。


这意味着如果要在模板中使用这些分词器,还需要对它们进行训练,并更新嵌入层和 lm_head,对内存会产生额外的需求。如果使用者有更多的算力,可以修改 run_fsdp_qlora.py 脚本中的 LLAMA_3_CHAT_TEMPLATE 环境变量。


在配置参数方面,作者使用了新的 TrlParser 变量,它允许我们在 yaml 文件中提供超参数,或者通过明确地将参数传递给 CLI 来覆盖配置文件中的参数,例如 —num_epochs 10。以下是在 4x A10G GPU 或 4x24GB GPU 上微调 Llama 3 70B 的配置文件。


注意:训练结束时,GPU 内存使用量会略有增加(约 10%),这是因为模型保存所带来的开销。所以使用时,请确保 GPU 上有足够的内存来保存模型。


在启动模型训练阶段,作者使用 torchrun 来更加灵活地运用样本,并且易于被调整,就像 Amazon SageMaker 及 Google Cloud Vertex AI 一样。


对于 torchrun 和 FSDP,作者需要对环境变量 ACCELERATE_USE_FSDP 和 FSDP_CPU_RAM_EFFICIENT_LOADING 进行设置,来告诉 transformers/accelerate 使用 FSDP 并以节省内存的方式加载模型。


注意:如果想不使用 CPU offloading 功能,需要更改 fsdp 的设置。这种操作只适用于内存大于 40GB 的 GPU。


本文使用以下命令启动训练:


预期内存使用情况:


  • 使用 FSDP 进行全微调需要约 16 块 80GB 内存的 GPU
  • FSDP+LoRA 需要约 8 块 80GB 内存的 GPU
  • FSDP+Q-Lora 需要约 2 块 40GB 内存的 GPU
  • FSDP+Q-Lora+CPU offloading 技术需要 4 块 24GB 内存的 GPU,以及一块具备 22 GB 内存的 GPU 和 127 GB 的 CPU RAM,序列长度为 3072、batch 大小为 1。


在 g5.12xlarge 服务器上,基于包含 1 万个样本的数据集,作者使用 Flash Attention 对 Llama 3 70B 进行 3 个 epoch 的训练,总共需要 45 小时。每小时成本为 5.67 美元,总成本为 255.15 美元。这听起来很贵,但可以让你在较小的 GPU 资源上对 Llama 3 70B 进行微调。


如果我们将训练扩展到 4x H100 GPU,训练时间将缩短至大约 125 小时。如果假设 1 台 H100 的成本为 5-10 美元 / 小时,那么总成本将在 25-50 美元之间。


我们需要在易用性和性能之间做出权衡。如果能获得更多更好的计算资源,就能减少训练时间和成本,但即使只有少量资源,也能对 Llama 3 70B 进行微调。对于 4x A10G GPU 而言,需要将模型加载到 CPU 上,这就降低了总体 flops,因此成本和性能会有所不同。


注意:在作者进行的评估和测试过程中,他注意到大约 40 个最大步长(将 80 个样本堆叠为长度为三千的序列)就足以获得初步结果。40 个步长的训练时间约为 1 小时,成本约合 5 美元。


可选步骤:将 LoRA 的适配器融入原始模型


使用 QLoRA 时,作者只训练适配器而不对整个模型做出修改。这意味着在训练过程中保存模型时,只保存适配器权重,而不保存完整模型。


如果使用者想保存完整的模型,使其更容易与文本生成推理器一起使用,则可以使用 merge_and_unload 方法将适配器权重合并到模型权重中,然后使用 save_pretrained 方法保存模型。这将保存一个默认模型,可用于推理。


注意:CPU 内存需要大于 192GB。


模型测试和推理


训练完成后,我们要对模型进行评估和测试。作者从原始数据集中加载不同的样本,并手动评估模型。评估生成式人工智能模型并非易事,因为一个输入可能有多个正确的输出。阅读《评估 LLMs 和 RAG,一个使用 Langchain 和 Hugging Face 的实用案例》可以了解到关于评估生成模型的相关内容。


文章地址:https://www.philschmid.de/evaluate-llm


至此,主要流程就介绍完了,心动不如行动,赶紧从第一步开始操作吧。


本文来自微信公众号“机器之心”


AITNT资源拓展
根据文章内容,系统为您匹配了更有价值的资源信息。内容由AI生成,仅供参考
1
RAG

【开源免费】graphrag是微软推出的RAG项目,与传统的通过 RAG 方法使用向量相似性作为搜索技术不同,GraphRAG是使用知识图谱在推理复杂信息时大幅提高问答性能。

项目地址:https://github.com/microsoft/graphrag

【开源免费】Dify是最早一批实现RAG,Agent,模型管理等一站式AI开发的工具平台,并且项目方一直持续维护。其中在任务编排方面相对领先对手,可以帮助研发实现像字节扣子那样的功能。

项目地址:https://github.com/langgenius/dify


【开源免费】RAGFlow是和Dify类似的开源项目,该项目在大文件解析方面做的更出色,拓展编排方面相对弱一些。

项目地址:https://github.com/infiniflow/ragflow/tree/main


【开源免费】phidata是一个可以实现将数据转化成向量存储,并通过AI实现RAG功能的项目

项目地址:https://github.com/phidatahq/phidata


【开源免费】TaskingAI 是一个提供RAG,Agent,大模型管理等AI项目开发的工具平台,比LangChain更强大的中间件AI平台工具。

项目地址:https://github.com/TaskingAI/TaskingAI

2
微调

【开源免费】XTuner 是一个高效、灵活、全能的轻量化大模型微调工具库。它帮助开发者提供一个简单易用的平台,可以对大语言模型(LLM)和多模态图文模型(VLM)进行预训练和轻量级微调。XTuner 支持多种微调算法,如 QLoRA、LoRA 和全量参数微调。

项目地址:https://github.com/InternLM/xtuner

3
prompt

【开源免费】LangGPT 是一个通过结构化和模板化的方法,编写高质量的AI提示词的开源项目。它可以让任何非专业的用户轻松创建高水平的提示词,进而高质量的帮助用户通过AI解决问题。

项目地址:https://github.com/langgptai/LangGPT/blob/main/README_zh.md

在线使用:https://kimi.moonshot.cn/kimiplus/conpg00t7lagbbsfqkq0