使用 CTransformers 运行 Zephyr-7b、Mistral-7b 模型

简介: 使用 CTransformers 运行 Zephyr-7b、Mistral-7b 模型

image.png

在本文中,将探索一个能够处理所有量化模型的库 CTransformers ,以及使其与任何LLM一起工作的一些技巧,主要运行模型 Mistral-7BZephyr-7B

  • Mistral-7B 是由 Mistral AI 创建的非常流行的大型语言模型 (LLM)。它的性能优于所有其他类似规模的预训练LLM,甚至比 Llama-2-13B 等较大的LLM更好。
  • Zephyr-7B-α是一系列 Zephyr 经过训练的语言模型中的第一个模型,是 Mistral-7B-v0.1 的微调版本,在使用直接偏好优化的混合公开合成数据集上进行训练。

什么是量化以及为什么要量化?

LLM 量化,也称为语言模型量化,是指压缩或减小大型语言模型 (LLM) 的大小以使其在内存使用和计算要求方面更加高效的过程。

大型语言模型,例如 GPT-3Llama2Falcon 等,其模型大小可能很大,通常由数十亿甚至数万亿个参数组成。当在消费类硬件上使用它们时,大模型的使用就带来挑战。

LLM 量化旨在通过减小模型大小,同时最大限度地减少对模型性能的影响来应对这些挑战。这些技术降低了神经网络参数的精度。例如,可以将参数量化为较低精度的定点数,例如 4-bit8-bit16-bit 整数,而不是用浮点数表示,精度的降低可以实现更高效的存储和计算。

如果想在普通消费类硬件上运行 7 Billion(70 亿)个参数的模型,就必须使用量化模型。

量化格式:GGML/GGUF 和 GPTQ

回顾一下,LLM 是具有高精度权重张量的大型神经网络。将整个模型加载到内存中(这就是为什么需要 RAM!),计算机将单词转换为数字,分析神经网络并提供结果。为了克服硬件限制,需要量化(减少)模型权重,牺牲一些准确性,使普通计算机能够运行大型语言模型。量化模型有两种主要格式:GGML(现在称为 GGUF)和 GPTQ

  • GGML/GGUF 是一个用于机器学习 (ML) 的 C 库 —— GG 指的是其创始人 Georgi Gerganov 的首字母缩写。这种格式非常适合没有 GPUGPU 性能较弱的用户,它可以运行在 CPU 上。
  • GPTQ 也是一个使用 GPU 并量化(降低)模型权重精度的库。生成后训练量化文件可以减少原始模型的 4 倍。如果有 GPU,这种格式将是最佳的选择。

如果计算机没有 Nvidia 显卡 (GPU),建议采用 GGML/GGUF 格式,并且仅依赖于 RAM 和 CPU 性能。在拥有 GPU 的情况下,需要特别注意库的安装过程,因为它们根据拥有的具体硬件而有所不同。

为什么需要量化?

CTransformers 库是一个功能强大的界面工具箱,它是使用 C 语言,能够在本机速度使其达到 Python 水平。通过这种方式,可以从 python 访问量化模型,而无需额外的工作。

CTransformers 主要有两种版本:gptq 版本和 cpu 版本。第一个是当想要加载 GPTQ 模型并与之交互时安装;第二个是与 GGUF/GGML 文件一起使用,只能在 CPU 上运行。

因此,第一步始终是安装依赖项:如果没有特殊的 GPU,则安装很简单,但如果有 nVidia,或者在 Mac M1/M2 上运行,则需要指定更多参数。


mkdir CTmodels
cd CTmodels 
python3.10 -m venv venv

激活虚拟环境:


source venv/bin/activate  # for mac
venv\Scripts\activate     # for windows users

激活 venv 后,使用 pip 安装依赖库 CTransformers,不同类型的GPU其安装命令有所不同。


# CPU inference
pip install ctransformers>=0.2.24
# CUDA:使用以下命令安装 CUDA 库:
pip install ctransformers[cuda]
# ROCm:要启用 ROCm 支持,使用以下命令安装 ctransformers 软件包
CT_HIPBLAS=1 pip install ctransformers --no-binary ctransformers
# Mac M1/M2 安装方式
CT_METAL=1 pip install ctransformers --no-binary ctransformers

如果出现有关版本的错误,解决方式是运行 pip install ctransformers (但它必须高于 0.2.23 才能运行 GGUF 文件类型)

基础知识

Hugging Face 上量化模型的主要来源和存储库是 TheBloke:建议熟悉掌握这个存储库,这是一个不错的资源。

对于第一个测试,将运行 Mistral-7b 指令的 GGUF 版本:可以在此处找到 Hugging Face 模型卡

image.png

模型卡页面是使用手册:运行模型的所有主要信息都在那里。

image.png

image.png

image.png

首先是下载模型文件:它是单个文件,通常是 GGUFBIN 扩展名。建议至少进行 Q4 量化,但如果想尝试更大的模型进行测试,那么 Q2 也可以。

image.png

转到 Files and versions 选项卡并获取模型文件的链接,然后使用下面命令:


!wget https://huggingface.co/TheBloke/Mistral-7B-Instruct-v0.1-GGUF/resolve/main/mistral-7b-instruct-v0.1.Q4_K_M.gguf

GGML/GGUF

所有这些都已设置完毕,运行模型的代码非常简单:Python 行可以在 Google Colab 和本地电脑上使用。只有一个区别,那就是模型的路径设置:

  • ./mistral-7b-instruct-v0.1.Q4_K_M.gguf:用于本地运行
  • /content/mistral-7b-instruct-v0.1.Q4_K_M.gguf:Google Colab

以下示例适用于 Google Colab 上运行:


from ctransformers import AutoModelForCausalLM, AutoConfig, Config
conf = AutoConfig(Config(temperature=0.7, repetition_penalty=1.1, batch_size=52,max_new_tokens=1024, context_length=2048))
llm = AutoModelForCausalLM.from_pretrained("/content/mistral-7b-instruct-v0.1.Q4_K_M.gguf",model_type="mistral", config = conf)
prompt = "Tell me about LLM?"
template = f'''<<s>[INST] {prompt} [/INST]'''
print(llm(template))

导入模型和配置的类:然后使用喜欢的超参数来润湿配置对象。值得注意的两个设置是 max_new_tokens=1024context_length=2048:第一个设置了生成的新令牌的限制,第二个定义了所有令牌的上下文长度(指令提示+生成的文本)。

llm object 最后加载 GGUF 文件,应用配置并声明模型类型。

注意:上面所有的配置即使没有 GPU,也可以在每台消费计算机上运行此模型。

image.png


LLM stands for "Large Language Model". It is a type of artificial intelligence (AI) that can generate human-like language based on input data. LLMs are trained on massive amounts of text data, and use this training to generate new text. LLMs have been used in a variety of applications, including natural language processing (NLP), language translation, chatbots, and content generation.
There are several different types of LLMs, including transformer-based models like BERT and GPT-2, recurrent neural network (RNN)-based models like LSTM and GRU, and hybrid models that combine these two approaches. LLMs can be further enhanced with techniques such as fine-tuning, which allows the model to adapt to specific tasks or domains, and transfer learning, which enables the model to use knowledge learned on one task to improve performance on another related task.
Overall, LLMs are a powerful tool that has the potential to revolutionize many industries by enabling more natural and intuitive human-machine interactions.

GPTQ

对于 GPTQ 权重,由于手头上没有 GPU 资源,这里将使用 Google Colab 的免费套餐。在这里将展示如何从 Hugging Face Model card  中,获得运行模型所需的所有信息。

  • 打开一个新的 Colab Notebook
  • 将运行时类型更改为 T4 GPU

image.png

转到更改运行时类型,选择 T4 GPU

image.png

不要下载模型权重(在 GPTQ 量化模型中):当第一次实例化带有 CTransformers 的 llm 对象时,它将自动完成。

image.png

正如所看到的,使用 CTransformers 运行 GPTQ 模型非常容易,只需将 model_type 设置为 gptq


llm = AutoModelForCausalLM.from_pretrained("TheBloke/zephyr-7B-alpha-GPTQ",model_type="gptq", config = conf)

其他一切都一样。下面是从 Zephyr7b 得到的回复:

Could you please provide a continuation to the text material "The World Is Yours" by using style transfer to create a new version with a different tone and mood?

注意:如上所见,回复已被中继,这是因为对该模型使用了错误的提示模板!

Prompt templates

Mistral-7b-instruct 经过专门预训练,使用以特定方式格式化的指令。这意味着该模型期望以同样的方式提供提示。在前面使用 Zepyhr-GPTQ 的示例中,尝试使用 Mistral-7b-instruct 的相同提示模板进行推理,但遇到了一些问题,来看看如何修复它们。

来看看官方 Mistral7b-instruct 模型卡的说明:

为了利用指令微调,在提示符应该被 [INST][\INST] 标记包围。

例如:


text = "<s>[INST] What is your favourite condiment? [/INST]"
"Well, I'm quite partial to a good squeeze of fresh lemon juice. 
It adds just the right amount of zesty flavour to whatever 
I'm cooking up in the kitchen!</s> "
"[INST] Do you have mayonnaise recipes? [/INST]"

基本上,Mistral-7b-instruct 想要这样的提示: <s>[INST] {prompt} [/INST] 。可以轻松设置一个 python f 字符串来处理所有这些:


yourprompt = "What is Process Control in Industrial Automation?"
mistral_prompt = f"<s>[INST] {prompt} [/INST]"

现在可以使用修改后的提示和一些其他微调参数调用 llm 对象,将生成的文本保存在变量answer中,然后打印它:


answer = llm(mistral_prompt)
print(answer)

Zephyr-7b 下遵循同样的原则,可以查看模型卡页面以获得一些建议:


<|system|>
</s>
<|user|>
{prompt}</s>
<|assistant|>

再次尝试使用正确的文本生成:


那么,能从模型卡的截图中看出与模板的区别吗?删除了所有新行并将它们替换为\n:这对于 python 意味着新启一行,并且设法将模板放在一个单行字符串中。不过生成的结果和提的问题有点不符

总结

从运行的结果来看,同样的问题 Tell me about LLM?Mistral-7b 的结果比 Zephyr-7b 更佳。


相关实践学习
基于阿里云DeepGPU实例,用AI画唯美国风少女
本实验基于阿里云DeepGPU实例,使用aiacctorch加速stable-diffusion-webui,用AI画唯美国风少女,可提升性能至高至原性能的2.6倍。
相关文章
|
1月前
|
机器学习/深度学习 人工智能 负载均衡
基于 NVIDIA Megatron-Core 的 MoE LLM 实现和训练优化
本文将分享阿里云人工智能平台 PAI 团队与 NVIDIA Megatron-Core 团队在 MoE (Mixture of Experts) 大型语言模型(LLM)实现与训练优化上的创新工作。
|
4月前
|
机器学习/深度学习 异构计算 Python
Bert-vits2最终版Bert-vits2-2.3云端训练和推理(Colab免费GPU算力平台)
对于深度学习初学者来说,JupyterNoteBook的脚本运行形式显然更加友好,依托Python语言的跨平台特性,JupyterNoteBook既可以在本地线下环境运行,也可以在线上服务器上运行。GoogleColab作为免费GPU算力平台的执牛耳者,更是让JupyterNoteBook的脚本运行形式如虎添翼。 本次我们利用Bert-vits2的最终版Bert-vits2-v2.3和JupyterNoteBook的脚本来复刻生化危机6的人气角色艾达王(ada wong)。
Bert-vits2最终版Bert-vits2-2.3云端训练和推理(Colab免费GPU算力平台)
|
4月前
|
机器学习/深度学习 人工智能 API
如何在 TensorRT-LLM 中支持 Qwen 模型
大型语言模型正以其惊人的新能力推动人工智能的发展,扩大其应用范围。然而,由于这类模型具有庞大的参数规模,部署和推理的难度和成本极高,这一挑战一直困扰着 AI 领域。此外,当前存在大量支持模型部署和推理的框架和工具,如  ModelScope 的 Model Pipelines API,和 HuggingFace 的 Text Generation Inference 等,各自都有其独特的特点和优势。然而,这些工具往往未能充分发挥  GPU 的性能。
71355 0
如何在 TensorRT-LLM 中支持 Qwen 模型
|
2月前
|
人工智能 PyTorch iOS开发
苹果AppleMacOs最新Sonoma系统本地训练和推理GPT-SoVITS模型实践
GPT-SoVITS是少有的可以在MacOs系统下训练和推理的TTS项目,虽然在效率上没有办法和N卡设备相提并论,但终归是开发者在MacOs系统构建基于M系列芯片AI生态的第一步。
苹果AppleMacOs最新Sonoma系统本地训练和推理GPT-SoVITS模型实践
|
2月前
|
机器学习/深度学习 分布式计算 Python
OpenAI Gym 高级教程——分布式训练与并行化
OpenAI Gym 高级教程——分布式训练与并行化
198 1
|
3月前
|
运维 自然语言处理 算法
使用NVIDIA TensorRT-LLM支持CodeFuse-CodeLlama-34B上的int4量化和推理优化实践
CodeFuse是由蚂蚁集团开发的代码语言大模型,旨在支持整个软件开发生命周期,涵盖设计、需求、编码、测试、部署、运维等关键阶段。为了在下游任务上获得更好的精度,CodeFuse 提出了多任务微调框架(MFTCoder),能够解决数据不平衡和不同收敛速度的问题。通过对比多个预训练基座模型的精度表现,我们发现利用 MFTCoder 微调后的模型显著优于原始基座模型。其中,尤为值得关注的是采用了 MFTCoder 框架,并利用多任务数据集进行微调的 CodeFuse-CodeLlama-34B模型,在HumanEval 评估数据集中取得了当时的最好结果。
104 0
使用NVIDIA TensorRT-LLM支持CodeFuse-CodeLlama-34B上的int4量化和推理优化实践
|
4月前
|
人工智能 自然语言处理 测试技术
通过 4-bit 量化加载和运行 Mistral 7B AI
通过 4-bit 量化加载和运行 Mistral 7B AI
558 0
|
4月前
|
数据采集 机器学习/深度学习 自然语言处理
本地训练,开箱可用,Bert-VITS2 V2.0.2版本本地基于现有数据集训练(原神刻晴)
按照固有思维方式,深度学习的训练环节应该在云端,毕竟本地硬件条件有限。但事实上,在语音识别和自然语言处理层面,即使相对较少的数据量也可以训练出高性能的模型,对于预算有限的同学们来说,也没必要花冤枉钱上“云端”了,本次我们来演示如何在本地训练Bert-VITS2 V2.0.2模型。
本地训练,开箱可用,Bert-VITS2 V2.0.2版本本地基于现有数据集训练(原神刻晴)
|
7月前
|
并行计算 物联网 测试技术
Llama-2 推理和微调的硬件要求总结:RTX 3080 就可以微调最小模型
大语言模型微调是指对已经预训练的大型语言模型(例如Llama-2,Falcon等)进行额外的训练,以使其适应特定任务或领域的需求。微调通常需要大量的计算资源,但是通过量化和Lora等方法,我们也可以在消费级的GPU上来微调测试,但是消费级GPU也无法承载比较大的模型,经过我的测试,7B的模型可以在3080(8G)上跑起来,这对于我们进行简单的研究是非常有帮助的,但是如果需要更深入的研究,还是需要专业的硬件。
698 0
|
7月前
|
机器学习/深度学习 自然语言处理 机器人
更轻松、高效、经济的LLaMA训练——开源大模型训练框架Megatron-LLaMA
9月12日,淘天集团联合爱橙科技正式对外开源大模型训练框架——Megatron-LLaMA,旨在让技术开发者们能够更方便地提升大语言模型训练性能,降低训练成本,并保持和LLaMA社区的兼容性。测试显示,在32卡训练上,相比HuggingFace上直接获得的代码版本,Megatron-LLaMA能够取得176%的加速;在大规模的训练上,Megatron-LLaMA相比较32卡拥有几乎线性的扩展性,且对网络不稳定表现出高容忍度。目前Megatron-LLaMA已在开源社区上线。开源地址:https://github.com/alibaba/Megatron-LLaMA