首页 > 其他分享 >LLM实战:LLM微调加速神器-Unsloth + LLama3

LLM实战:LLM微调加速神器-Unsloth + LLama3

时间:2024-05-14 10:11:34浏览次数:32  
标签:unsloth 训练 LLama3 Unsloth LLM 显卡 size

1. 背景

五一结束后,本qiang~又投入了LLM的技术海洋中,本期将给大家带来LLM微调神器:Unsloth。

正如Unsloth官方的对外宣贯:Easily finetune & train LLMs; Get faster with unsloth。微调训练LLM,可以显著提升速度,其次显存占用也会显著减少。

但有一点需要说明:unsloth目前开源部分只支持单机版微调,更高效微调只能交费使用unsloth pro。

2. Unsloth简介

2.1 主要特性

(1) 所有的内核均以OpenAI的Triton语言实现,并且手动实现反向传播引擎。Triton语言是面向LLM训练加速。

(2) 准确率0损失,没有近似方法,方法完全一致。

(3) 硬件层面无需变动。支持18年之后的Nvidia GPU(V100, T4, Titan V, RTX20,30,40x, A100, H100, L40等,GTX1070,1080也支撑,但比较慢),Cuda最低兼容版本是7.0

(4) 通过WSL适用于Linux和Windows

(5) 基于bisandbytes包,支持4bit和16bit的 QLoRA/LoRA微调

(6) 开源代码有5倍的训练效率提升, Unsloth Pro可以提升至30倍

2.2 目前支撑的模型

由于底层算子需要使用triton重写,因此部分开源模型的适配工作周期可能较长。当前unsloth支持的模型包含Qwen 1.5(7B, 14B, 32B, 72B), Llama3-8B, Mistral-7B, Gemma-7B, ORPO, DPO Zephyr, Phi-3(3.8B), TinyLlama

2.3 模型加速效果

 

 

Qwen1.5-7B的集成是由Firefly作者封装并验证,性能提升30%+,显卡减少40%+,详见地址

2.4 安装教程

conda create --name unsloth_env python=3.10

conda activate unsloth_env

conda install pytorch-cuda=<12.1/11.8> pytorch cudatoolkit xformers -c pytorch -c nvidia -c xformers

pip install "unsloth[colab-new] @ git+https://github.com/unslothai/unsloth.git"

pip install --no-deps trl peft accelerate bitsandbytes

  

3. 实战

本着眼过千遍不如手过一遍的宗旨,本qiang~针对Unsloth做了一个对比实现。对比的实验环境分别为:P40, A40, A800,对比的模型使用的是出锅热乎的Llama3(8B)。

3.1 比对维度

维度

说明

显卡

是否支持bf16

最大文本长度

max_seq_length

批次大小

per_device_train_batch_size

梯度累加步长

gradient_accumulation_steps

LoRA的rank

dropout

lora_droput

3.2 源码

针对使用unsloth和非unsloth得显卡及训练加速的对比代码,可以参考地址:https://zhuanlan.zhihu.com/p/697557062 

4 实验结果

4.1 P40

 

 

4.2 A40

 

 

4.3 A800

 

 

4.4 结论

针对于llama3-8B进行unsloth训练,与基于transformers框架训练进行比对,结论如下:

(1) 集成unsloth后,显卡占用确实更少,训练效率确实更快,不管是哪种维度。

(2) P40增加batch_size后,显卡的内存占用提升,但训练的时间也更长,说明P40针对大批次的数据处理,性能会降低; 但A40, A800增加batch_size后,显卡内存占用虽然提升,但训练的时间更短。

(3) A800的batch_size为1时,训练效率不如A40,当batch_size增加到16时,A800的训练效率比A40快接近一倍。因此,A800更适合处理大批次的场景,对于小batch_size,杀鸡不能用牛刀。

5. 总结

一句话足矣~

本文主要是使用unsloth框架针对llama3的高效微调实验,提供了详细的对比代码以及不同维度的对比分析结果。

之后会写一篇关于Qwen1.5的对比实验,敬请期待~

6. 参考

1. unsloth: https://github.com/unslothai/unsloth

2. Qwen1.5+Unsloth: https://github.com/unslothai/unsloth/pull/428

 

 

标签:unsloth,训练,LLama3,Unsloth,LLM,显卡,size
From: https://www.cnblogs.com/mengrennwpu/p/18190672

相关文章

  • 什么? 20分钟,构建你自己的LLaMA3应用程序! | 京东云技术团队
    4月19日,Meta发布了最新的大语言模型LLaMA3,具体包括一个8B模型和一个70B模型,上下文长度支持8K,被誉为史上最强开源大语言模型,开源社区的“重磅炸弹”,效果直指GTP4。在诸多评测任务上,LLaMA3都有非常炸裂的效果。8B模型在多项指标中超越了Gemma7B和Mistral7BInstruct,而70B模......
  • vllm使用总结
    核心问题点60%内存存放参数,30%存放缓存的key,value向量,10%存放其他参数。LLM相对传统深度学习,对cache的管理较差。深度学习要求tensor内存连续,一般深度学习内存参数几乎不动,但LLM参数长度动态变化且周期无法预知导致cache内存碎片化共享内存做的比较差。LLMpredictnext......
  • Bellman_Ford
    基本上用不到的算法,和高精度一样,不常用,用到了又无可代替常用于限制边数的最短路算法。使用范围可以处理任意边权的图,可以处理负环,可以判断负环。时间复杂度\(O(nm)\)。因为太慢了,在求最短路的时候基本用不到,但是它的优化版SPFA则大大优化了时间复杂度,算是最短路里最好用的算......
  • 一个低级问题导致vLLM加载大模型时ray卡死
    这两天一直被一个问题困扰,用vLLM加载千问时不能开并行(tensor_parallel_size>1),一开就会卡在ray阶段,最初是提示StartedalocalRayinstance,后来手工启动ray集群,就提示connectedtoRaycluster。无论怎样调都无法跑下去,根本不会加载模型,换了各种版本的vllm、transformer、ray......
  • Berkeley vLLM:算力减半、吞吐增十倍
    BerkeleyvLLM:算力减半、吞吐增十倍来源 https://zhuanlan.zhihu.com/p/697142422 随着大语言模型(LLM)的不断发展,这些模型在很大程度上改变了人类使用AI的方式。然而,实际上为这些模型提供服务仍然存在挑战,即使在昂贵的硬件上也可能慢得惊人。现在这种限制正在被打破。最近,......
  • 日本联合研究团队发布 Fugaku-LLM——证明大型纯 CPU 超算也可用于大模型训练
    相关:https://mbd.baidu.com/newspage/data/landingsuper?context={"nid"%3A"news_10139665591063236146"}研究团队表示其充分挖掘了富岳超算的性能,将矩阵乘法的计算速度提高了6倍,通信速度也提升了3倍,证明大型纯CPU超算也可用于大模型训练。Fugaku-LLM模型参数规模......
  • LLM生态下爬虫程序的现状与未来
    最近出现一批与LLM有关的新的爬虫框架,一类是为LLM提供内容抓取解析的,比如JinaReader和FireCrawl,可以将抓取的网页解析为markdown这样的对LLM友好的内容,例如markdown,这类本质上还是传统的爬虫解决方案。还有一类是通过LLM+agent工作流方式来构建的下一代爬虫程序,比如Skyvern、......
  • LLaMA-Factory 训练 Llama3-Chinese-8B-Instruct 相关报错问题解决
    模型路径up主为llama中文社区模型地址https://www.modelscope.cn/models/FlagAlpha/Llama3-Chinese-8B-Instruct/summarysysinfov10032gnvcc--versioncuda11.8pythonimporttorchprint(torch.version)13.11pipinstallflash_attntimeout2下载whl报这个错......
  • LLM 大模型学习必知必会系列(二):提示词工程-Prompt Engineering 以及实战闯关
    LLM大模型学习必知必会系列(二):提示词工程-PromptEngineering以及实战闯关prompt(提示词)是我们和LLM互动最常用的方式,我们提供给LLM的Prompt作为模型的输入,并希望LLM反馈我们期待的结果。虽然LLM的功能非常强大,但LLM对提示词(prompt)也非常敏感。这使得提示词工程成......
  • LLM 大模型学习必知必会系列(一):大模型基础知识篇
    LLM大模型学习必知必会系列(一):大模型基础知识篇魔搭ModelScope开源的LLM模型魔搭ModelScope欢迎各个开源的LLM模型在社区上做开源分享。目前社区上已经承载了来自各个机构贡献的不同系列的LLM模型。并且社区的开发者也在这些模型的基础上,贡献了许多创新应用,并在M......