LLM - Model Load_in_8bit For LLaMA

这篇具有很好参考价值的文章主要介绍了LLM - Model Load_in_8bit For LLaMA。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

load_in_8bit,LLM,llama,8bit,量化

 

一.引言

LLM 量化是将大语言模型进行压缩和优化以减少其计算和存储需求的过程。

博主在使用 LLaMA-33B 时尝试使用量化加载模型,用传统 API 参数控制量化失败,改用其他依赖尝试成功。这里先铺下结论:

Load_in_8bit ✔️

Load_in_4bit ❌

二.LLaMA 量化尝试

1.Load_in_8bit By API ❌

    model = LlamaForCausalLM.from_pretrained(
        args.base_model,
        config=config,
        torch_dtype=compute_type,
        low_cpu_mem_usage=True,
        load_in_8bit=True,
        device_map='auto',
        **config_kwargs
    )

直接 load_in_8bit=True 报错:

load_in_8bit,LLM,llama,8bit,量化

下载 Accelerate 继续尝试: 

accelerate==0.21.0

load_in_8bit,LLM,llama,8bit,量化

按提示添加 load_in_8bit_fp32_cpu_offload=True 试下还是报错:

load_in_8bit,LLM,llama,8bit,量化

2.Load_in_8Bit By BitsAndBytesConfig ✔️

    # 8-Bit 量化加载
    if args.quantization != "None":
        config_kwargs["load_in_8bit"] = True
        config_kwargs["quantization_config"] = BitsAndBytesConfig(
            load_in_8bit=True,
            llm_int8_threshold=6.0
        )
        logger.info("Quantization model to {} bit.".format(args.quantization))

    # 加载 Base Model || Merge Model
    model = LlamaForCausalLM.from_pretrained(
        args.base_model,
        config=config,
        torch_dtype=compute_type,
        low_cpu_mem_usage=True,
        **config_kwargs
    )
    print('Model Config ', model.config)

将 BitsAndBytesConfig 的配置传到 from_pretrained 内再次加载:

[模型加载前 Memory Usage: 3]
Tokenizer Load Success!
Config Load Success!
08/25/2023 11:31:23 - INFO - __main__ - Quantization model to 8 bit.
Loading checkpoint shards: 100%|██████████| 7/7 [01:53<00:00, 16.28s/it]
Model Config  LlamaConfig {
  "_name_or_path": "/models/Llama-33B",
  "architectures": [
    "LlamaForCausalLM"
  ],
  "bos_token_id": 1,
  "eos_token_id": 2,
  "hidden_act": "silu",
  "hidden_size": 6656,
  "initializer_range": 0.02,
  "intermediate_size": 17920,
  "max_position_embeddings": 2048,
  "model_type": "llama",
  "num_attention_heads": 52,
  "num_hidden_layers": 60,
  "pad_token_id": 0,
  "quantization_config": {
    "llm_int8_enable_fp32_cpu_offload": false,
    "llm_int8_skip_modules": null,
    "llm_int8_threshold": 6.0,
    "load_in_8bit": true
  },
  "rms_norm_eps": 1e-06,
  "tie_word_embeddings": false,
  "torch_dtype": "float16",
  "transformers_version": "4.29.1",
  "use_cache": true,
  "vocab_size": 49954
}

trainable params: 0 || all params: 32767947264 || trainable%: 0.0000
[模型加载后 Memory Usage: 34003]

 LLaMA-33B 原始模型文件大小约 62G,8_bit 量化加载后显存占用约为 33G。

Tips:

这里量化配置中有一个 llm_int8_threshold 的参数,该参数控制模型推断时是否使用量化的阈值。量化是一种将模型的浮点权重和激活值转换为整数或低位宽浮点数的技术,以减少模型的内存占用和计算开销。具体来说,如果一个模型的权重或激活值在绝对值上小于 llm_int8_threshold,那么这些值将被量化为8位整形以减少内存使用。如果值的绝对值大于 llm_int8_threshold 则会继续一浮点数的形式存储,保留更多的精度。

这个参数的设置可能会影响模型的推断速度和精度。较低的阈值可能会导致更多的值被量化为整数,从而降低内存使用和加速推断,但可能会牺牲一些模型的精度。较高的阈值可能会保留更多的精度,但可能会增加内存使用和推断时间。具体的最佳阈值设置取决于模型的具体架构、任务、精度要求以及硬件环境等因素。

3.Load_in_4Bit By BitsAndBytesConfig ⚠️

除了 8_bit 量化外,还可以使用 BitsAndBytesConfig 进行 4_bit 量化,由于 LLaMA 只支持 8_bit 量化,所以这里只给出相关的 Load_in_4bit 配置,其他支持 4_bit 量化的模型大家可以用该配置尝试:

config_kwargs["load_in_4bit"] = True
config_kwargs["quantization_config"] = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_compute_dtype=torch.float16e,
    bnb_4bit_use_double_quant=True,
    bnb_4bit_quant_type="nf4"
)

使用与 load_in_8bit 相同,将 config_kwargs 以 **config_kwargs 的形式传给 from_pretrained API 即可,除此还需满足下述 package 的版本:

require_version("bitsandbytes>=0.39.0", "To fix: pip install bitsandbytes>=0.39.0")
require_version("transformers>=4.30.1", "To fix: pip install transformers>=4.30.1")
require_version("accelerate>=0.20.3", "To fix: pip install accelerate>=0.20.3")
require_version("peft>=0.4.0.dev0", "To fix: pip install git+https://github.com/huggingface/peft.git")

三.总结

LLaMA-33B 使用量化后可以明显缩减内存的使用,其具备以下优缺点:

优点

        减少存储需求 - 量化可以减少语言模型占用的存储空间

        加速推理速度 - 模型大小和复杂度降低,推理速度更快

        降低资源消耗 - 量化后的模型对计算资源的需求和功耗也相对降低

缺点

        推理性能损失 - 原始模型精度降低导致一定的推理性能损耗

        模型灵活程度 - 量化后会限制模型进一步修改和扩展的能力

Tips:

8 Bit 量化后模型无法再 merge 之前 LoRA 得到的 Checkpoint,如果有需要可以先将 LoRA weight 合并至原模型,再进行 8 Bit 量化。文章来源地址https://www.toymoban.com/news/detail-764502.html

到了这里,关于LLM - Model Load_in_8bit For LLaMA的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • FPGA的通用FIFO设计verilog,1024*8bit仿真,源码和视频

    名称:FIFO存储器设计1024*8bit 软件:Quartus 语言:Verilog 本代码为FIFO通用代码,其他深度和位宽可简单修改以下参数得到 代码功能: 设计一个基于FPGA的FIFO存储器,使之能提供以下功能  1.存储空间至少1024 储器  2.存储位宽8bit  3.拓展功能:存储器空、满报警 演示视频:http://

    2024年02月06日
    浏览(39)
  • ESP32在Arduino框架下采用SPI或8bit并口方式使用LVGL(v8.3)

    小相机,按一下能拍照,并将照片保存在sd卡中。 使用的时VSCode+PlatformIO进行开发(强力推荐,用了就回不去了),当然也可以使用ArduinoIDE进行开发。 具体怎么使用上述软件,网上有很多答案,可以自行查找。 ESP-IDF移植教程:点击这里 使用到的库: TFT_eSPI 和 lvgl 注: 8bi

    2024年02月05日
    浏览(58)
  • X2-VLM: All-In-One Pre-trained Model For Vision-Language Tasks论文笔记

    Title:X2-VLM: All-In-One Pre-trained Model For Vision-Language Tasks Code CLIP这一类方法只能进行图片级别的视觉和文本对齐; 也有一些方法利用预训练的目标检测器进行目标级别的视觉和文本对齐,但是只能编码目标内部的特征,无法有效表达多目标上下文关联; 本文致力于进行多粒度(

    2024年02月09日
    浏览(43)
  • LLM(Large Language Model)大语言模型

    语言模型够大,训练的语料够多,涌现出推理能力飙升等   Generative Pre-trained Transformer 3(GPT-3)是最著名的LLM之一,拥有1750亿个参数。该模型在文本生成、翻译和其他任务中表现出显著的性能,在全球范围内引起了热烈的反响,目前OpenAI已经迭代到了GPT-4版本 Generative :能产

    2024年02月15日
    浏览(40)
  • PyTorch翻译官网教程8-SAVE AND LOAD THE MODEL

    Save and Load the Model — PyTorch Tutorials 2.0.1+cu117 documentation 在本节中,我们将了解如何通过保存、加载和运行模型预测来持久化模型状态。 PyTorch模型将学习到的参数存储在一个名为state_dict的内部状态字典中。这些可以通过 torch.save 方法持久化 输出 要加载模型权重,需要首先创

    2024年02月16日
    浏览(35)
  • LLM实践-在Colab上使用免费T4 GPU进行Chinese-Llama-2-7b-4bit推理

    一、配置环境 1、打开colab,创建一个空白notebook,在[修改运行时环境]中选择15GB显存的T4 GPU. 2、pip安装依赖python包 注意此时,安装完accelerate后需要重启notebook,不然报如下错误: ImportError: Using low_cpu_mem_usage=True or a device_map requires Accelerate: pip install accelerate 注:参考文章内容

    2024年02月04日
    浏览(52)
  • LLM - ChatGLM-6B (General Language Model) 的工程配置

    欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/131104546 Paper: GLM: General Language Model Pretraining with Autoregressive Blank Infilling ChatGLM是通用的预训练语言模型(General Language Pretraining Model),基于自回归空格填充(Autoregressive Blank Infilling)

    2024年02月12日
    浏览(52)
  • LLM - Hugging Face 工程 BERT base model (uncased) 配置

    欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/131400428 BERT是一个在大量英文数据上以自监督的方式预训练的变换器模型。这意味着它只是在原始文本上进行预训练,没有人以任何方式对它们进行标注(这就是为什么它可以使用大量

    2024年02月11日
    浏览(43)
  • 【人工智能】大模型LLM技术生态全景图 | The Foundation Large Language Model (LLM) & Tooling Landscape

    目录 “Software is eating the world…”  “软件正在吞噬世界...”~ Marc Andreessen ~ 马克·安德森 Every company is a software company…soon every company will be an AI company.每家公司都是软件公司...很快,每家公司都将成为人工智能公司。 Everybody is using software…soon everybody will directly be using AI.每个

    2024年02月08日
    浏览(46)
  • 吴恩达gradio课程:基于开源LLM(large language model)的聊天应用

    内容简介 Falcon 40B 是当前最好的开源语言模型之一。 使用 text-generation 库调用 Falcon 40B 的问答 API 接口。 首先仅仅在代码中与模型聊天,后续通过Gradio构建聊天界面。 Gradio 聊天界面可以保存对话历史上下文。 在聊天过程中,需要将之前对话记录与新消息一起发送给模型,才能进

    2024年02月09日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包