🚀 DeepSeek-Coder-V2-Lite-Instruct-FP8
本项目是 DeepSeek-Coder-V2-Lite-Instruct 的量化版本,将权重和激活量化为 FP8 数据类型,可使用 vLLM >= 0.5.2 进行推理。该模型适用于英文的商业和研究用途,可用于类似助手的聊天场景。
🚀 快速开始
模型概述
属性 |
详情 |
模型类型 |
DeepSeek-Coder-V2-Lite-Instruct |
输入 |
文本 |
输出 |
文本 |
模型优化 |
权重量化:FP8;激活量化:FP8 |
预期用例 |
适用于英文的商业和研究用途,用于类似助手的聊天场景 |
不适用范围 |
任何违反适用法律法规(包括贸易合规法律)的使用方式;非英文语言的使用 |
发布日期 |
2024 年 7 月 18 日 |
版本 |
1.0 |
许可证 |
deepseek-license |
模型开发者 |
Neural Magic |
该量化版本在 HumanEval+ 基准测试中达到了 79.60 的平均分数,而未量化的模型为 79.33。
模型优化
此模型是通过将 DeepSeek-Coder-V2-Lite-Instruct 的权重和激活量化为 FP8 数据类型得到的,可使用 vLLM >= 0.5.2 进行推理。这种优化将每个参数的位数从 16 位减少到 8 位,使磁盘大小和 GPU 内存需求大约减少了 50%。
仅对 Transformer 块内线性算子的权重和激活进行量化,采用对称的逐张量量化,即使用单个线性缩放来映射量化权重和激活的 FP8 表示。使用 AutoFP8 对 512 个 UltraChat 序列进行量化。
📦 安装指南
文档未提及安装步骤,此处跳过。
💻 使用示例
基础用法
可以使用 vLLM 后端高效部署该模型,示例代码如下:
from vllm import LLM, SamplingParams
from transformers import AutoTokenizer
model_id = "neuralmagic/DeepSeek-Coder-V2-Lite-Instruct-FP8"
sampling_params = SamplingParams(temperature=0.6, top_p=0.9, max_tokens=256)
tokenizer = AutoTokenizer.from_pretrained(model_id)
messages = [
{"role": "system", "content": "You are a pirate chatbot who always responds in pirate speak!"},
{"role": "user", "content": "Who are you?"},
]
prompts = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
llm = LLM(model=model_id, trust_remote_code=True, max_model_len=4096)
outputs = llm.generate(prompts, sampling_params)
generated_text = outputs[0].outputs[0].text
print(generated_text)
vLLM 还支持 OpenAI 兼容的服务,更多详情请参阅 文档。
🔧 技术细节
模型创建
该模型是通过应用 带有来自 ultrachat 的校准样本的 AutoFP8 创建的,专家门控保持原始精度,代码示例如下:
from datasets import load_dataset
from transformers import AutoTokenizer
from auto_fp8 import AutoFP8ForCausalLM, BaseQuantizeConfig
pretrained_model_dir = "deepseek-ai/DeepSeek-Coder-V2-Lite-Instruct"
quantized_model_dir = "DeepSeek-Coder-V2-Lite-Instruct-FP8"
tokenizer = AutoTokenizer.from_pretrained(pretrained_model_dir, use_fast=True, model_max_length=4096)
tokenizer.pad_token = tokenizer.eos_token
ds = load_dataset("mgoin/ultrachat_2k", split="train_sft").select(range(512))
examples = [tokenizer.apply_chat_template(batch["messages"], tokenize=False) for batch in ds]
examples = tokenizer(examples, padding=True, truncation=True, return_tensors="pt").to("cuda")
quantize_config = BaseQuantizeConfig(
quant_method="fp8",
activation_scheme="static"
ignore_patterns=["re:.*lm_head"],
)
model = AutoFP8ForCausalLM.from_pretrained(
pretrained_model_dir, quantize_config=quantize_config
)
model.quantize(examples)
model.save_quantized(quantized_model_dir)
尽管此特定模型使用了 AutoFP8,但 Neural Magic 正在过渡到使用 llm-compressor,它支持多种量化方案和 AutoFP8 不支持的模型。
模型评估
该模型在 HumanEval+ 基准测试中进行了评估,使用 Neural Magic 分支 的 EvalPlus 实现的 HumanEval+ 和 vLLM 引擎,使用以下命令:
python codegen/generate.py --model neuralmagic/DeepSeek-Coder-V2-Lite-Instruct-FP8 --temperature 0.2 --n_samples 50 --resume --root ~ --dataset humaneval
python evalplus/sanitize.py ~/humaneval/neuralmagic--DeepSeek-Coder-V2-Lite-Instruct-FP8_vllm_temp_0.2
evalplus.evaluate --dataset humaneval --samples ~/humaneval/neuralmagic--DeepSeek-Coder-V2-Lite-Instruct-FP8_vllm_temp_0.2-sanitized
准确率
HumanEval+ 评估分数
基准测试 |
DeepSeek-Coder-V2-Lite-Instruct |
DeepSeek-Coder-V2-Lite-Instruct-FP8(本模型) |
恢复率 |
base pass@1 |
80.8 |
79.3 |
98.14% |
base pass@10 |
83.4 |
84.6 |
101.4% |
base+extra pass@1 |
75.8 |
74.9 |
98.81% |
base+extra pass@10 |
77.3 |
79.6 |
102.9% |
平均 |
79.33 |
79.60 |
100.3% |
📄 许可证
本项目使用 deepseek-license 许可证。