通过 4-bit 量化加载和运行 Mistral 7B AI

简介: 通过 4-bit 量化加载和运行 Mistral 7B AI

image.png

大语言模型 (LLM) 的世界正在快速发展,像 LLAMA2 和 Falcon 这样的突破性模型不断出现。

去年 9 月 27 日,法国初创公司 Mistral 推出了第一个模型 —— Mistral 7B ,引起了科技界的轰动,并获得了迄今为止同类规模中最强大的语言模型的称号。

本文将展示通过 4-bit 量化加载和运行运行 Mistral 7B AI

什么是Mistral 7B?

Mistral-7B-v0.1 是对 Llama 2 等其他 小型 大型语言模型的进一步改进,以相当低的计算成本提供类似的功能(根据一些标准基准)。可适应许多场景,可以执行各种自然语言处理任务,序列长度为 8k。例如,它非常适合文本摘要、分类、文本补全、代码补全。

下面是 Mistral 7B 的特征:

  • 无与伦比的性能Mistral 7B 在所有基准测试中均优于 Llama 2 13B
    image.png
  • 更高效:得益于分组查询注意力 (GQA) 和滑动窗口注意力 (SWA),Mistral 7B 可以提供更快的推理速度并轻松处理更长的序列。
  • 开源Mistral 7B 在 Apache 2.0 许可证下发布,可以不受限制地使用。

什么是量化 quantization 和 QLoRA?

与同类产品相比,Mistral 7B 可能更小,但让它在消费类硬件中运行和训练仍然是一个巨大的挑战。

为了能在单个 GPU 上运行它,需要以 4-bit 精度运行模型,并使用 QLoRA 来减少内存使用。

QLoRA 解决方案

QLoRA 代表具有低阶适配器的量化 LLM,是一种有效的微调方法。它使用 4-bit 量化来压缩预训练的语言模型,与标准 16-bit 模型微调相比,无需牺牲性能。

QLoRA论文摘要: 我们提出了 QLoRA,这是一种高效的微调方法,可减少内存使用量,足以在单个 48GB GPU 上微调 65B 参数的模型,同时保留完整的 16-bit 微调任务性能。QLoRA 引入了多项创新技术来节省内存而不牺牲性能:a)4-bit 普通浮点型 NF4 一种新的数据类型,理论上对于正态分布权重来说是最佳信息;b)双量化通过量化量化常数来减少平均内存占用,以及分页优化器来管理内存峰值。

使用步骤

第 1 步:安装必要的软件包

QLoRA 使用 bitsandbytes 进行量化,并与 Hugging Face 的 PEFTtransformers 库集成。

这里希望确保使用最新功能,将从源代码安装这些依赖库。


pip install -q -U bitsandbytes
pip install -q -U git+https://github.com/huggingface/transformers.git
pip install -q -U git+https://github.com/huggingface/peft.git
pip install -q -U git+https://github.com/huggingface/accelerate.git

第 2 步:通过 Transformer 的 BitsandBytesConfig 定义量化参数

现在将使用 Transformer 库中的 BitsandBytesConfig 配置 QLoRA 参数。

这里是对可以调整和使用的参数进行说明:

  • load_in_4bit=True:指定要以 4-bit 精度转换和加载模型。
  • bnb_4bit_use_double_quant=True:使用嵌套量化来提高内存效率的推理和训练。
  • bnd_4bit_quant_type="nf4"4-bit 集成带有 2 种不同的量化类型 FP4NF4NF4 dtype 代表 Normal Float 4,在 QLoRA 论文中有介绍。默认情况下,使用 FP4 量化。
  • bnb_4bit_compute_dype=torch.bfloat16:计算数据类型用于更改计算期间将使用的数据类型。默认情况下,计算数据类型设置为 float32,但可以设置为 bf16 以提高速度。


import torch
from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig
bnb_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_use_double_quant=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_compute_dtype=torch.bfloat16
)

第 3 步:为 Mistral 7B 加载量化

现在来指定模型 ID,然后使用之前定义的量化配置加载它。


model_id = "mistralai/Mistral-7B-Instruct-v0.1"
model = AutoModelForCausalLM.from_pretrained(model_id, quantization_config=bnb_config, device_map="auto")
tokenizer = AutoTokenizer.from_pretrained(model_id)

第 4 步:加载后,运行一代并尝试一下!

最后,准备好将 Mistral 7B 投入使用。

  1. 首先测试它的文本生成能力,使用以下模板:


PROMPT= """ ### Instruction: Act as a data science expert.
### Question:
Explain to me what is Large Language Model. Assume that I am a 5-year-old child.
### Answer:
"""
device = "cuda:0"
encodeds = tokenizer(PROMPT, return_tensors="pt", add_special_tokens=True)
model_inputs = encodeds.to(device)
generated_ids = model.generate(**model_inputs, max_new_tokens=1000, do_sample=True, pad_token_id=tokenizer.eos_token_id)
decoded = tokenizer.batch_decode(generated_ids)
print(decoded[0])

该模型遵循了我们的指示,并很好地解释了大语言模型的概念!

image.png

  1. 现在来测试一下 Mistral 7B 的代码能力


messages = [
    {"role": "user", "content": "write a python function to generate a list of random 1000 numbers between 1 and 10000?"}"role": "user", "content": "write a python function to generate a list of random 1000 numbers between 1 and 10000?"}
    ]
encodeds = tokenizer.apply_chat_template(messages, return_tensors="pt")
device = "cuda:0"
model_inputs = encodeds.to(device)
generated_ids = model.generate(model_inputs, max_new_tokens=1000, do_sample=True)
decoded = tokenizer.batch_decode(generated_ids)
print(decoded[0])

看来模型完成的代码效果:

image.png

总结

从目前模型的发展情况来看,Mistral AI 是 LLaMA 和 Falcon 等流行模型的一个非常不错的替代品。

它是免费的、更小但更高效。它允许完全定制,并且可以轻松微调并具有令人惊喜的性能。


相关文章
|
7月前
|
人工智能 JavaScript 架构师
流水线运行出错排查难?AI 来帮你
目前云效流水线 Flow 内 Java 构建、Node.js 构建、Java 单元测试、Node.js 单元测试这 4 个步骤均接入了智能排查的能力。
42331 4
|
13天前
|
机器学习/深度学习 存储 人工智能
【AI系统】感知量化训练 QAT
本文介绍感知量化训练(QAT)流程,旨在减少神经网络从FP32量化至INT8时的精度损失。通过在模型中插入伪量化节点(FakeQuant)模拟量化误差,并在训练中最小化这些误差,使模型适应量化环境。文章还探讨了伪量化节点的作用、正向与反向传播处理、TensorRT中的QAT模型高效推理,以及QAT与PTQ的对比,提供了实践技巧,如从良好校准的PTQ模型开始、采用余弦退火学习率计划等。
51 2
【AI系统】感知量化训练 QAT
|
13天前
|
机器学习/深度学习 存储 人工智能
【AI系统】训练后量化与部署
本文详细介绍了训练后量化技术,涵盖动态和静态量化方法,旨在将模型权重和激活从浮点数转换为整数,以优化模型大小和推理速度。通过KL散度等校准方法和量化粒度控制,文章探讨了如何平衡模型精度与性能,同时提供了端侧量化推理部署的具体实现步骤和技术技巧。
37 1
【AI系统】训练后量化与部署
|
28天前
|
人工智能 安全 JavaScript
Open Interpreter:AI 赋能终端!在终端中对话AI模型进行编程,通过运行代码来完成各种计算机操作任务
Open Interpreter 是一个让语言模型运行代码的强大工具,提供了一个类似 ChatGPT 的界面,支持多种编程语言和丰富的功能。
82 7
Open Interpreter:AI 赋能终端!在终端中对话AI模型进行编程,通过运行代码来完成各种计算机操作任务
|
3月前
|
人工智能 自然语言处理 自动驾驶
【通义】AI视界|马斯克亲自辟谣:xAI不可能在特斯拉的推理计算机上运行
本文精选了24小时内的重要科技新闻,包括马斯克辟谣xAI不会运行在特斯拉计算机上、谷歌发布AlphaProteo AI模型、百度贴吧“弱智吧”成为AI训练佳选、荣耀推出跨应用智能体以及苹果即将在iOS 18.2中加入图像生成功能。更多内容请访问通义官网体验。
|
3月前
|
机器学习/深度学习 人工智能 开发框架
智能ai量化高频策略交易软件、现货合约跟单模式开发技术规则
该项目涵盖智能AI量化高频策略交易软件及现货合约跟单模式开发,融合人工智能、量化交易与软件工程。软件开发包括需求分析、技术选型、系统构建、测试部署及运维;跟单模式则涉及功能定义、策略开发、交易执行、终端设计与市场推广,确保系统高效稳定运行。
|
6月前
|
存储 人工智能 数据挖掘
AI大模型量化
AI大模型量化
140 0
|
7月前
|
数据采集 人工智能 前端开发
【AI Agent系列】【MetaGPT多智能体学习】2. 重温单智能体开发 - 深入源码,理解单智能体运行框架
【AI Agent系列】【MetaGPT多智能体学习】2. 重温单智能体开发 - 深入源码,理解单智能体运行框架
475 1
|
7月前
|
数据采集 存储 人工智能
【AI大模型应用开发】【LangChain系列】实战案例2:通过URL加载网页内容 - LangChain对爬虫功能的封装
【AI大模型应用开发】【LangChain系列】实战案例2:通过URL加载网页内容 - LangChain对爬虫功能的封装
426 0
|
7月前
|
存储 人工智能 API
【AI Agent系列】【MetaGPT多智能体学习】7. 剖析BabyAGI:原生多智能体案例一探究竟(附简化版可运行代码)
【AI Agent系列】【MetaGPT多智能体学习】7. 剖析BabyAGI:原生多智能体案例一探究竟(附简化版可运行代码)
347 0
下一篇
DataWorks