我们生活在一个令人惊叹的大型语言模型时代,例如 ChatGPT、GPT-4 和 Claude,它们可以执行多种令人叹为观止的任务。
许多部署工具来为 LLM 提供更快的推理服务,例如 vLLM、c2translate、TensorRT-LLM 和 llama.cpp。量化技术还用于优化 GPU 以加载非常大的语言模型。
pip3 install transformer
pip3 install accelerate
Latency: 2.739394464492798 seconds
Throughput: 32.36171766303386 tokens/second
Generate a python code that accepts a list of numbers and returns the sum. [1, 2, 3, 4, 5]
A: def sum_list(numbers):
total = 0
for num in numbers:
total += num
return total
2, 3, 4, 5]))
逐步代码分解
第 6-10 行:加载Phi-2模型并标记提示“生成接受数字列表并返回总和的 Python 代码。 ”
第12-18行:从模型生成响应,并通过计算生成响应所需的时间获得延迟。
第21-23行:获取生成的响应中令牌的总长度,将其除以延迟并计算吞吐量。
该模型在 A1000(16GB GPU)上运行,实现了2.7 秒的延迟和32 个令牌/秒的吞吐量。
pip3 install vllm==0.3.3
Latency: 1.218436622619629seconds
Throughput: 63.15334836428132tokens/second
2, 3, 4, 5]
A: def sum_list(numbers):
total = 0
for num in numbers:
total += num
return total
numbers = [1, 2, 3, 4, 5]
print(sum_list(numbers))
逐步代码分解
第 1–3 行:从 vLLM 导入运行Phi-2所需的包。
第 5-8 行:使用 vLLM加载Phi-2,定义提示并设置运行模型的重要参数。
第 10–16 行:使用llm.generate生成模型的响应并计算延迟。
第19-21行:获取响应生成的总令牌长度,将令牌长度除以延迟以获得吞吐量。
第23-24行:获取生成的文本。
我在同一提示下使用 vLLM运行Phi-2 , “生成接受数字列表并返回总和的 Python 代码。”在相同的 GPU(A1000(16GB GPU))上,vLLM 产生1.2 秒的延迟和63 个令牌/秒的吞吐量,而 Hugging Face 转换器的延迟为2.85 秒,吞吐量为32 个令牌/秒。使用 vLLM 运行大型语言模型可产生与使用 Hugging Face 相同的准确结果,并且延迟要低得多,吞吐量要高得多。
注意:我获得的 vLLM 指标(延迟和吞吐量)是 vLLM 性能的估计基准。模型生成速度取决于很多因素,例如输入提示的长度和GPU的大小。
根据 vLLM 官方报告,在使用 vLLM 的生产环境中,在强大的 GPU(如 A100)上运行 LLM 模型可实现比 Hugging Face Transformers高 24 倍的吞吐量。
在 Google Colab 上运行 vLLM 部署
pip3 install bitsandbytes
Mistral 7B 模型的量化
Mistral 7B是 MistralAI 的一个拥有 70 亿参数的模型,是最先进的开源大型语言模型之一。我将逐步介绍使用不同的量化技术运行Mistral 7B,这些技术可以在 Google Colab 的 T4 GPU 上运行。
8 位精度量化:这是将机器学习模型的权重转换为 8 位精度。BitsandBytes已与 Hugging Face 转换器集成,以使用相同的 Hugging Face 代码加载语言模型,但对量化进行了少量修改。
第 1 行:导入运行模型所需的包,包括BitsandBytesConfig库。
第 3–4 行:定义量化配置并将参数load_in_8bit设置为 true,以便以8 位精度加载模型的权重。
第7-9行:将量化配置传递到加载模型的函数中,设置参数device_map为bitsandbytes以自动分配适当的GPU内存来加载模型。最后加载标记器权重。
4 位精度量化:这是将机器学习模型的权重转换为4 位精度。
以 4 位精度加载Mistral 7B 的代码与8 位精度的代码类似,但有一些变化:
将load_in_8bit更改为load_in_4bit。
BitsandBytesConfig中引入了新参数bnb_4bit_compute_dtype以在bfloat16中执行模型的计算。bfloat16是计算数据类型,用于加载模型的权重以加快推理速度。它可以使用4 位和8 位精度。如果是8位的,只需将参数从bnb_4bit_compute_dtype更改为bnb_8bit_compute_dtype即可。
第 4-9 行:在 BitsandBytesConfig中设置额外参数:
load_4bit:以 4 位精度加载模型设置为 true。
bnb_4bit_quant_type:量化类型设置为nf4。
bnb_4bit_use_double_quant:双量化设置为 True。
bnb_4_bit_compute_dtype:bfloat16计算数据类型用于更快的推理。
第 11-13 行:加载模型的权重和分词器。
模型量化的完整代码
[INST] What is Natural Language Processing? [/INST] Natural Language Processing (NLP) is a subfield of artificial intelligence (AI) andcomputer science that deals with the interaction between computers and human language. Its main objective is to read, decipher,
understand, and make sense of the human language in a valuable way. It can be used for various tasks such as speech recognition,
text-to-speech synthesis, sentiment analysis, machine translation, part-of-speech tagging, name entity recognition,
summarization, and question-answering systems. NLP technology allows machines to recognize, understand,
and respond to human language in a more natural and intuitive way, making interactions more accessible and efficient.
量化是优化超大型语言模型在较小 GPU 上运行的一种非常好的方法,可以应用于任何模型,例如 Llama 70B、Falcon 40B 和 mpt-30b。
根据LLM.int8 论文的报告,与较小的语言模型相比,在量化时,超大型语言模型的准确性下降较少。
量化最适合应用于非常大的语言模型,并且由于准确性性能的损失而不适用于较小的模型。
作者:Ayoola Olafenwa。AI工程师,所在公司为BrandBrigade,PixelLib作者
编译:万能的大雄
参考:
https://towardsdatascience.com/deploying-large-language-models-vllm-and-quantizationstep-by-step-guide-on-how-to-accelerate-becfe17396a2
本文为 @ 场长 创作并授权 21CTO 发布,未经许可,请勿转载。
内容授权事宜请您联系 webmaster@21cto.com或关注 21CTO 公众号。
该文观点仅代表作者本人,21CTO 平台仅提供信息存储空间服务。