🚀 Meta-Llama-3-70B-Instruct-quantized.w8a16
Meta-Llama-3-70B-Instructの量子化バージョンで、英語に特化した商用および研究用途向けのテキスト生成モデルです。
🚀 クイックスタート
このモデルは、英語の商用および研究用途を目的としています。Meta-Llama-3-70B-Instructと同様に、アシスタントのようなチャットに使用できます。
✨ 主な機能
- モデルアーキテクチャ:Meta-Llama-3
- モデル最適化:
- 想定使用ケース:英語での商用および研究用途。アシスタントのようなチャットに適しています。
- 非対象範囲:適用される法律や規制(貿易コンプライアンス法を含む)に違反する方法での使用。英語以外の言語での使用。
- リリース日:2024年7月2日
- バージョン:1.0
- ライセンス:Llama3
- モデル開発者:Neural Magic
このモデルは、Meta-Llama-3-70B-Instructの量子化バージョンです。OpenLLMベンチマーク(バージョン1)で平均77.90点を達成していますが、量子化されていないモデルは79.18点を達成しています。
モデル最適化
このモデルは、Meta-Llama-3-70B-Instructの重みをINT8データ型に量子化することで得られました。この最適化により、パラメータごとのビット数が16から8に減少し、ディスクサイズとGPUメモリ要件が約50%削減されます。
トランスフォーマーブロック内の線形演算子の重みのみが量子化されます。出力次元ごとの線形スケーリングにより、量子化された重みのINT8表現と浮動小数点表現をマッピングする対称的なチャネルごとの量子化が適用されます。
AutoGPTQを使用して、10%の減衰係数とNeural MagicのLLM圧縮キャリブレーションデータセットから取得した128シーケンスで量子化が行われます。
💻 使用例
基本的な使用法
vLLMを使用した展開
このモデルは、vLLMバックエンドを使用して効率的に展開できます。以下は、2つのGPUを使用した例です。
from vllm import LLM, SamplingParams
from transformers import AutoTokenizer
model_id = "neuralmagic/Meta-Llama-3-70B-Instruct-quantized.w8a16"
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互換のサービングもサポートしています。詳細については、ドキュメントを参照してください。
Transformersを使用した展開
このモデルは、AutoGPTQデータ形式との統合を利用したTransformersによってサポートされています。以下の例は、generate()
関数を使用してモデルを使用する方法を示しています。
from transformers import AutoTokenizer, AutoModelForCausalLM
model_id = "neuralmagic/Meta-Llama-3-70B-Instruct-quantized.w8a16"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
model_id,
torch_dtype="auto",
device_map="auto",
)
messages = [
{"role": "system", "content": "You are a pirate chatbot who always responds in pirate speak!"},
{"role": "user", "content": "Who are you?"},
]
input_ids = tokenizer.apply_chat_template(
messages,
add_generation_prompt=True,
return_tensors="pt"
).to(model.device)
terminators = [
tokenizer.eos_token_id,
tokenizer.convert_tokens_to_ids("<|eot_id|>")
]
outputs = model.generate(
input_ids,
max_new_tokens=256,
eos_token_id=terminators,
do_sample=True,
temperature=0.6,
top_p=0.9,
)
response = outputs[0][input_ids.shape[-1]:]
print(tokenizer.decode(response, skip_special_tokens=True))
高度な使用法
モデルの作成
このモデルは、以下のコードスニペットに示すように、AutoGPTQライブラリを適用することで作成されました。特定のモデルにはAutoGPTQが使用されていますが、Neural Magicは、AutoGPTQでサポートされていないいくつかの量子化スキームやモデルをサポートするllm-compressorの使用に移行しています。
from transformers import AutoTokenizer
from auto_gptq import AutoGPTQForCausalLM, BaseQuantizeConfig
from datasets import load_dataset
model_id = "meta-llama/Meta-Llama-3-70B-Instruct"
num_samples = 128
max_seq_len = 8192
tokenizer = AutoTokenizer.from_pretrained(model_id)
def preprocess_fn(example):
return {"text": tokenizer.apply_chat_template(example["messages"], add_generation_prompt=False, tokenize=False)}
ds = load_dataset("neuralmagic/LLM_compression_calibration", split="train")
ds = ds.shuffle().select(range(num_samples))
ds = ds.map(preprocess_fn)
examples = [tokenizer(example["text"], padding=False, max_length=max_seq_len, truncation=True) for example in ds]
quantize_config = BaseQuantizeConfig(
bits=8,
group_size=-1,
desc_act=False,
model_file_base_name="model",
damp_percent=0.1,
)
model = AutoGPTQForCausalLM.from_pretrained(
model_id,
quantize_config,
device_map="auto",
)
model.quantize(examples)
model.save_pretrained("Meta-Llama-3-70B-Instruct-quantized.w8a16")
📚 ドキュメント
評価
このモデルは、OpenLLMリーダーボードタスク(バージョン1)で、lm-evaluation-harness(コミット383bbd54bc621086e05aa1b030d8d4d5635b25e6)とvLLMエンジンを使用して評価されました。以下のコマンドを使用して(8つのGPUを使用):
lm_eval \
--model vllm \
--model_args pretrained="neuralmagic/Meta-Llama-3-70B-Instruct-quantized.w8a16",tensor_parallel_size=8,dtype=auto,gpu_memory_utilization=0.4,add_bos_token=True,max_model_len=4096 \
--tasks openllm \
--batch_size auto
精度
Open LLM Leaderboard評価スコア
ベンチマーク |
Meta-Llama-3-70B-Instruct |
Meta-Llama-3-70B-Instruct-quantized.w8a16 (このモデル) |
回復率 |
MMLU (5-shot) |
80.18 |
78.69 |
98.1% |
ARC Challenge (25-shot) |
72.44 |
71.59 |
98.8% |
GSM-8K (5-shot, strict-match) |
90.83 |
86.43 |
95.2% |
Hellaswag (10-shot) |
85.54 |
85.65 |
100.1% |
Winogrande (5-shot) |
83.19 |
83.11 |
98.8% |
TruthfulQA (0-shot) |
62.92 |
61.94 |
98.4% |
平均 |
79.18 |
77.90 |
98.4% |
📄 ライセンス
このモデルは、Llama3ライセンスの下で提供されています。