openbmb/MiniCPM3-4B-GPTQ-Int4
练习
OpenBMB 的 MiniCPM3-4B-GPTQ-Int4 是一个基于 MiniCPM3 模型的量化版本,专注于减少模型大小并提高推理效率。它采用了 GPTQ (General Quantization) 技术,结合了 Int4(4位整数) 量化方式,能够在保持合理的精度下大幅降低模型的计算和存储需求。
关键特点:
-
MiniCPM3 架构:MiniCPM 是一个多语言预训练语言模型,特别适用于中文等多种语言任务。MiniCPM3 是该系列的最新版本,拥有更大的参数量和更强的能力。
-
4B 参数:该模型有 40 亿个参数,是一种相对较小的参数规模,专为高效推理设计,同时在性能和效率之间取得平衡。
-
GPTQ(通用量化):GPTQ 是一种后量化方法,旨在减少模型大小和推理时间。相比传统量化技术,GPTQ 能更好地保持模型的性能,特别适合大语言模型的量化。
-
Int4 量化:该模型采用 4 位整数量化,这意味着每个权重值被压缩成 4 位表示,大幅减少模型的存储需求,从而降低内存消耗和计算负担。
优势:
- 推理效率高:由于采用了 Int4 量化,推理时的计算量大幅减少,可以在较低的硬件配置上运行大型模型。
- 模型压缩:与未量化版本相比,GPTQ-Int4 版本的模型大小显著缩小,便于部署。
- 性能保留:GPTQ 的量化方式在尽可能压缩模型的同时,尽量减少了性能的损失,适合在推理任务中应用。
适用场景:
- 文本生成:用于生成高质量的自然语言文本。
- 机器翻译:支持多语言翻译任务。
- 语义理解:可用于各种自然语言处理(NLP)任务,如文本分类、信息检索、问答等。
通过这种量化方式,MiniCPM3-4B-GPTQ-Int4 实现了高效的性能表现,同时保持了模型在实际任务中的可用性。
以下是几个类似于 OpenBMB MiniCPM3-4B-GPTQ-Int4 的量化模型,它们采用了类似的架构与技术,旨在优化模型推理效率和资源消耗:
1. LLaMA (Low-Rank Adaptation of LLaMA) Quantized Models
- 模型架构: 基于 LLaMA (Large Language Model Meta AI) 的量化版本。
- 参数规模: 提供 7B、13B 等不同规模的量化版本。
- 量化技术: 支持 Int8、Int4 量化,以减少模型尺寸并提高推理速度。
- 用途: 多语言任务、文本生成、自然语言理解等。
2. GPT-3 Quantized (Int8/Int4)
- 模型架构: GPT-3 系列的量化版本。
- 参数规模: 175B 参数量的 GPT-3,支持 Int8 和 Int4 量化。
- 量化技术: 基于 GPTQ 或其他后量化技术,减少了内存和推理计算的需求。
- 用途: 文本生成、翻译、问答等多种 NLP 任务。
3. Bloom-7B1 Quantized (GPTQ-Int8/Int4)
- 模型架构: 大规模开源语言模型 Bloom 的量化版本。
- 参数规模: 7.1B 参数版本支持量化处理。
- 量化技术: GPTQ 结合 Int8 或 Int4 量化。
- 用途: 多语言处理,特别适合多种语言生成和理解任务。
4. OPT (Open Pretrained Transformer) Quantized Models
- 模型架构: Meta 发布的 OPT 系列模型的量化版本。
- 参数规模: 提供了 2.7B、6.7B、13B 等多种参数规模。
- 量化技术: 基于后量化方法,如 GPTQ 支持 Int8、Int4 量化。
- 用途: 文本生成、问答、语言建模等。
5. T5 (Text-to-Text Transfer Transformer) Quantized
- 模型架构: Google T5 系列的量化版本。
- 参数规模: T5-Base、T5-Large 等不同大小的版本可以量化为 Int8、Int4。
- 量化技术: 使用类似 GPTQ 的量化方法。
- 用途: 文本摘要、机器翻译、问答、文本分类等任务。
6. Galactica-6.7B Quantized
- 模型架构: Meta 发布的科学文献理解与生成模型 Galactica 的量化版本。
- 参数规模: 6.7B 参数版本,支持量化。
- 量化技术: Int8、Int4 等量化版本。
- 用途: 科学领域的文本生成、知识检索、文献摘要等。
7. BERT Quantized (Int8/Int4)
- 模型架构: BERT 系列模型的量化版本。
- 参数规模: 支持 BERT-Base、BERT-Large 等不同版本的量化。
- 量化技术: Int8、Int4 量化,以减少推理资源消耗。
- 用途: 适用于文本分类、问答、命名实体识别等 NLP 任务。
这些量化模型与 MiniCPM3-4B-GPTQ-Int4 类似,都采用了 Int8 或 Int4 等量化技术,适合在资源受限的设备上进行高效的自然语言处理任务。
import gradio as gr
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
path = "openbmb/MiniCPM3-4B-GPTQ-Int4"
device = "cuda"
tokenizer = AutoTokenizer.from_pretrained(path, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(path, torch_dtype=torch.bfloat16, device_map=device, trust_remote_code=True)
def generate_response(history):
messages = []
for input_text, replay in history:
messages.append({"role": "user", "content": input_text})
if len(replay) == 0:
continue
messages.append({"role": "assistant", "content": replay})
model_inputs = tokenizer.apply_chat_template(messages, return_tensors="pt", add_generation_prompt=True).to(device)
model_outputs = model.generate(
model_inputs,
max_new_tokens=1024,
top_p=0.7,
temperature=0.7
)
output_token_ids = [
model_outputs[i][len(model_inputs[i]):] for i in range(len(model_inputs))
]
responses = tokenizer.batch_decode(output_token_ids, skip_special_tokens=True)[0]
return responses
# 定义一个简单的聊天函数
def chatbot(message, history=[]):
history = history or []
noreplay = ''
history.append([message, noreplay])
# 模拟一个回复,简单地回显用户的输入
# reply = f"Echo: {message}"
reply = generate_response(history)
# 将用户消息和回复追加到历史中
history[-1][-1] = reply
# 返回聊天历史
return history, history, gr.update(value="")
# 创建 Gradio 界面
with gr.Blocks() as demo:
gr.Markdown("## 简单的聊天机器人")
# 聊天窗口,用于显示历史消息
chat_box = gr.Chatbot()
# 文本输入框
msg = gr.Textbox(placeholder="输入你的消息...")
# 点击按钮发送消息
submit = gr.Button("发送")
# 定义消息发送的动作
submit.click(chatbot, inputs=[msg, chat_box], outputs=[chat_box, chat_box, msg])
# 启动 Gradio 应用
demo.launch()