Llama-3.1-Nemotron-70B-Instruct-HF-FP8-dynamic项目介绍
项目概述
Llama-3.1-Nemotron-70B-Instruct-HF-FP8-dynamic是Llama-3.1-Nemotron-70B-Instruct模型的量化版本。该模型由Neural Magic开发,主要用于多语言的商业和研究用途,比如类似助理的聊天应用。其输入和输出均为文本。
模型架构特点
- 输入:文本
- 输出:文本
模型优化
- 权重量化:FP8
- 激活量化:FP8
适用场景
设计用于商业和科研用途,特别适合多语言环境中的对话式聊天应用。
模型优化技术
该量化模型通过将Llama-3.1-Nemotron-70B-Instruct模型的权重和激活数据类型降到FP8,以此来优化模型。这种技术大大减少了参数的位数,从16位减少为8位,降低了约50%的磁盘空间和GPU内存需求。量化主要应用于transformer块中的线性运算符,其使用对称的每通道量化机制,以线性缩放每个输出维度,从而映射量化后的FP8表示。
部署方法
使用vLLM进行部署
Llama-3.1-Nemotron-70B-Instruct-HF-FP8-dynamic可以方便地通过vLLM后台进行部署。以下是一个使用示例:
from vllm import LLM, SamplingParams
from transformers import AutoTokenizer
model_id = "neuralmagic/Llama-3.1-Nemotron-70B-Instruct-HF-FP8-dynamic"
number_gpus = 2
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, add_generation_prompt=True, tokenize=False)
llm = LLM(model=model_id, tensor_parallel_size=number_gpus)
outputs = llm.generate(prompts, sampling_params)
generated_text = outputs[0].outputs[0].text
print(generated_text)
vLLM还支持OpenAI兼容的服务,详细信息可参阅文档。
模型创建
该模型是通过应用LLM-Compressor创建的。以下是创建代码的片段:
import torch
from transformers import AutoTokenizer
from llmcompressor.transformers import SparseAutoModelForCausalLM, oneshot
from llmcompressor.transformers.compression.helpers import (
calculate_offload_device_map,
)
recipe = """
quant_stage:
quant_modifiers:
QuantizationModifier:
ignore: ["lm_head"]
config_groups:
group_0:
weights:
num_bits: 8
type: float
strategy: channel
dynamic: false
symmetric: true
input_activations:
num_bits: 8
type: float
strategy: token
dynamic: true
symmetric: true
targets: ["Linear"]
"""
model_stub = "nvidia/Llama-3.1-Nemotron-70B-Instruct-HF"
device_map = calculate_offload_device_map(
model_stub, reserve_for_hessians=False, num_gpus=1, torch_dtype="auto"
)
model = SparseAutoModelForCausalLM.from_pretrained(
model_stub, torch_dtype="auto", device_map=device_map
)
oneshot(
model=model,
recipe=recipe,
save_compressed=True,
tokenizer=AutoTokenizer.from_pretrained(model_stub),
)
模型评估
Llama-3.1-Nemotron-70B-Instruct-HF-FP8-dynamic经过了著名的Arena-Hard、OpenLLM v1和OpenLLM v2等任务的评估。在所有测试中,均使用vLLM引擎生成模型输出。
准确性
该模型在多个基准测试中的表现如下表所示。与未量化的模型相比,损失极少,且在某些情况下还表现得更好。这显示出该模型在计算资源缩减的情况下仍然保持了较高的性能和稳定性。
基准测试 | 原模型精确度 | 量化模型精确度 | 恢复率 |
---|---|---|---|
Arena Hard | 85.0 | 84.5 | 99.41% |
OpenLLM v1 | 80.1 | 80.3 | 100.2% |
OpenLLM v2 | 40.2 | 39.8 | 99% |
综上所述,Llama-3.1-Nemotron-70B-Instruct-HF-FP8-dynamic不仅减少了计算资源需求,而且在性能上保持了显著的优越性,是凹印行业领域内值得推荐的模型之一。