モデル概要
モデル特徴
モデル能力
使用事例
tags:
- int8
- vllm language:
- en
- de
- fr
- it
- pt
- hi
- es
- th pipeline_tag: text-generation license: llama3.1 base_model: meta-llama/Meta-Llama-3.1-8B-Instruct
Meta-Llama-3.1-8B-Instruct-quantized.w8a8
モデル概要
- モデルアーキテクチャ: Meta-Llama-3
- 入力: テキスト
- 出力: テキスト
- モデル最適化:
- 活性化量子化: INT8
- 重み量子化: INT8
- 想定用途: 商用および研究用途の多言語対応。Meta-Llama-3.1-8B-Instructと同様に、アシスタント型チャットを想定。
- 対象外用途: 適用可能な法律や規制(貿易コンプライアンス法を含む)に違反するあらゆる使用。
- リリース日: 2024年7月11日
- バージョン: 1.0
- ライセンス: Llama3.1
- モデル開発者: Neural Magic
このモデルはMeta-Llama-3.1-8B-Instructの量子化版です。 非量子化モデルとの品質比較のために、多肢選択、数学的推論、自由形式テキスト生成など複数のタスクで評価されました。 Meta-Llama-3.1-8B-Instruct-quantized.w8a8は、Arena-Hard評価で105.4%、OpenLLM v1(可能な場合はMetaのプロンプトを使用)で100.3%、OpenLLM v2で101.5%、HumanEval pass@1で99.7%、HumanEval+ pass@1で98.8%の回復率を達成しました。
モデル最適化
このモデルはMeta-Llama-3.1-8B-Instructの重みをINT8データ型に量子化して得られました。 この最適化により、重みと活性化の表現に使用されるビット数を16から8に削減し、GPUメモリ要件を約50%削減、行列乗算の計算スループットを約2倍向上させました。 重み量子化によりディスクサイズ要件も約50%削減されます。
トランスフォーマーブロック内の線形演算子の重みと活性化のみが量子化されます。 重みは対称的な静的パーチャネル方式で量子化され、各出力チャネル次元に対してINT8と浮動小数点表現の間に固定線形スケーリング係数が適用されます。 活性化は対称的な動的パートークン方式で量子化され、実行時に各トークンに対してINT8と浮動小数点表現の間に線形スケーリング係数が計算されます。 llm-compressorライブラリで実装されたGPTQアルゴリズムが量子化に適用されました。 GPTQは1%の減衰係数と8,192ランダムトークンの256シーケンスを使用しました。
デプロイメント
このモデルは以下の例のようにvLLMバックエンドを使用して効率的にデプロイできます。
from vllm import LLM, SamplingParams
from transformers import AutoTokenizer
model_id = "neuralmagic/Meta-Llama-3.1-8B-Instruct-quantized.w8a8"
number_gpus = 1
max_model_len = 8192
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, max_model_len=max_model_len)
outputs = llm.generate(prompts, sampling_params)
generated_text = outputs[0].outputs[0].text
print(generated_text)
vLLMはOpenAI互換のサービスもサポートしています。詳細はドキュメントを参照してください。
作成
このモデルは以下のコードスニペットのようにllm-compressorライブラリを使用して作成されました。
from transformers import AutoTokenizer
from datasets import Dataset
from llmcompressor.transformers import SparseAutoModelForCausalLM, oneshot
from llmcompressor.modifiers.quantization import GPTQModifier
import random
model_id = "meta-llama/Meta-Llama-3.1-8B-Instruct"
num_samples = 256
max_seq_len = 8192
tokenizer = AutoTokenizer.from_pretrained(model_id)
max_token_id = len(tokenizer.get_vocab()) - 1
input_ids = [[random.randint(0, max_token_id) for _ in range(max_seq_len)] for _ in range(num_samples)]
attention_mask = num_samples * [max_seq_len * [1]]
ds = Dataset.from_dict({"input_ids": input_ids, "attention_mask": attention_mask})
recipe = GPTQModifier(
targets="Linear",
scheme="W8A8",
ignore=["lm_head"],
dampening_frac=0.01,
)
model = SparseAutoModelForCausalLM.from_pretrained(
model_id,
device_map="auto",
)
oneshot(
model=model,
dataset=ds,
recipe=recipe,
max_seq_length=max_seq_len,
num_calibration_samples=num_samples,
)
model.save_pretrained("Meta-Llama-3.1-8B-Instruct-quantized.w8a8")
評価
このモデルは、よく知られたArena-Hard、OpenLLM v1、OpenLLM v2、HumanEval、HumanEval+ベンチマークで評価されました。 すべての場合において、モデル出力はvLLMエンジンで生成されました。
Arena-Hard評価はArena-Hard-Autoリポジトリを使用して実施されました。 モデルはArena-Hardの各プロンプトに対して1つの回答を生成し、各回答はGPT-4によって2回判定されました。 以下に各判定で得られたスコアと平均値を報告します。
OpenLLM v1およびv2評価は、Neural Magicのフォークしたlm-evaluation-harness(ブランチllama_3.1_instruct)を使用して実施されました。 このバージョンのlm-evaluation-harnessには、Meta-Llama-3.1-Instruct-evalsのプロンプトスタイルに一致するMMLU、ARC-Challenge、GSM-8Kのバージョンと、OpenLLM v2タスクのいくつかの修正が含まれています。
HumanEvalおよびHumanEval+評価は、Neural MagicのフォークしたEvalPlusリポジトリを使用して実施されました。
詳細なモデル出力は、Arena-Hard、OpenLLM v2、HumanEvalのHuggingFaceデータセットとして利用可能です。
注: 結果はMetaがチャットテンプレートを変更した後に更新されました。
精度
カテゴリ | ベンチマーク | Meta-Llama-3.1-8B-Instruct | Meta-Llama-3.1-8B-Instruct-quantized.w8a8 (このモデル) | 回復率 |
LLM as a judge | Arena Hard | 25.8 (25.1 / 26.5) | 27.2 (27.6 / 26.7) | 105.4% |
OpenLLM v1 | MMLU (5-shot) | 68.3 | 67.8 | 99.3% |
MMLU (CoT, 0-shot) | 72.8 | 72.2 | 99.1% | |
ARC Challenge (0-shot) | 81.4 | 81.7 | 100.3% | |
GSM-8K (CoT, 8-shot, strict-match) | 82.8 | 84.8 | 102.5% | |
Hellaswag (10-shot) | 80.5 | 80.3 | 99.8% | |
Winogrande (5-shot) | 78.1 | 78.5 | 100.5% | |
TruthfulQA (0-shot, mc2) | 54.5 | 54.7 | 100.3% | |
平均 | 74.1 | 74.3 | 100.3% | |
OpenLLM v2 | MMLU-Pro (5-shot) | 30.8 | 30.9 | 100.3% |
IFEval (0-shot) | 77.9 | 78.0 | 100.1% | |
BBH (3-shot) | 30.1 | 31.0 | 102.9% | |
Math-lvl-5 (4-shot) | 15.7 | 15.5 | 98.9% | |
GPQA (0-shot) | 3.7 | 5.4 | 146.2% | |
MuSR (0-shot) | 7.6 | 7.6 | 100.0% | |
平均 | 27.6 | 28.0 | 101.5% | |
コーディング | HumanEval pass@1 | 67.3 | 67.1 | 99.7% |
HumanEval+ pass@1 | 60.7 | 60.0 | 98.8% | |
多言語 | ポルトガル語 MMLU (5-shot) | 59.96 | 59.36 | 99.0% |
スペイン語 MMLU (5-shot) | 60.25 | 59.77 | 99.2% | |
イタリア語 MMLU (5-shot) | 59.23 | 58.61 | 99.0% | |
ドイツ語 MMLU (5-shot) | 58.63 | 58.23 | 99.3% | |
フランス語 MMLU (5-shot) | 59.65 | 58.70 | 98.4% | |
ヒンディー語 MMLU (5-shot) | 50.10 | 49.33 | 98.5% | |
タイ語 MMLU (5-shot) | 49.12 | 48.09 | 97.9% |
再現
結果は以下のコマンドを使用して得られました:
MMLU
lm_eval \
--model vllm \
--model_args pretrained="neuralmagic/Meta-Llama-3.1-8B-Instruct-quantized.w8a8",dtype=auto,max_model_len=3850,max_gen_toks=10,tensor_parallel_size=1 \
--tasks mmlu_llama_3.1_instruct \
--fewshot_as_multiturn \
--apply_chat_template \
--num_fewshot 5 \
--batch_size auto
MMLU-CoT
lm_eval \
--model vllm \
--model_args pretrained="neuralmagic/Meta-Llama-3.1-8B-Instruct-quantized.w8a8",dtype=auto,max_model_len=4064,max_gen_toks=1024,tensor_parallel_size=1 \
--tasks mmlu_cot_0shot_llama_3.1_instruct \
--apply_chat_template \
--num_fewshot 0 \
--batch_size auto
ARC-Challenge
lm_eval \
--model vllm \
--model_args pretrained="neuralmagic/Meta-Llama-3.1-8B-Instruct-quantized.w8a8",dtype=auto,max_model_len=3940,max_gen_toks=100,tensor_parallel_size=1 \
--tasks arc_challenge_llama_3.1_instruct \
--apply_chat_template \
--num_fewshot 0 \
--batch_size auto
GSM-8K
lm_eval \
--model vllm \
--model_args pretrained="neuralmagic/Meta-Llama-3.1-8B-Instruct-quantized.w8a8",dtype=auto,max_model_len=4096,max_gen_toks=1024,tensor_parallel_size=1 \
--tasks gsm8k_cot_llama_3.1_instruct \
--fewshot_as_multiturn \
--apply_chat_template \
--num_fewshot 8 \
--batch_size auto
Hellaswag
lm_eval \
--model vllm \
--model_args pretrained="neuralmagic/Meta-Llama-3.1-8B-Instruct-quantized.w8a8",dtype=auto,add_bos_token=True,max_model_len=4096,tensor_parallel_size=1 \
--tasks hellaswag \
--num_fewshot 10 \
--batch_size auto
Winogrande
lm_eval \
--model vllm \
--model_args pretrained="neuralmagic/Meta-Llama-3.1-8B-Instruct-quantized.w8a8",dtype=auto,add_bos_token=True,max_model_len=4096,tensor_parallel_size=1 \
--tasks winogrande \
--num_fewshot 5 \
--batch_size auto
TruthfulQA
lm_eval \
--model vllm \
--model_args pretrained="neuralmagic/Meta-Llama-3.1-8B-Instruct-quantized.w8a8",dtype=auto,add_bos_token=True,max_model_len=4096,tensor_parallel_size=1 \
--tasks truthfulqa \
--num_fewshot 0 \
--batch_size auto
OpenLLM v2
lm_eval \
--model vllm \
--model_args pretrained="neuralmagic/Meta-Llama-3.1-8B-Instruct-quantized.w8a8",dtype=auto,max_model_len=4096,tensor_parallel_size=1,enable_chunked_prefill=True \
--apply_chat_template \
--fewshot_as_multiturn \
--tasks leaderboard \
--batch_size auto
ポルトガル語 MMLU
lm_eval \
--model vllm \
--model_args pretrained="neuralmagic/Meta-Llama-3.1-8B-Instruct-quantized.w8a8",dtype=auto,max_model_len=3850,max_gen_toks=10,tensor_parallel_size=1 \
--tasks mmlu_pt_llama_3.1_instruct \
--fewshot_as_multiturn \
--apply_chat_template \
--num_fewshot 5 \
--batch_size auto
スペイン語 MMLU
lm_eval \
--model vllm \
--model_args pretrained="neuralmagic/Meta-Llama-3.1-8B-Instruct-quantized.w8a8",dtype=auto,max_model_len=3850,max_gen_toks=10,tensor_parallel_size=1 \
--tasks mmlu_es_llama_3.1_instruct \
--fewshot_as_multiturn \
--apply_chat_template \
--num_fewshot 5 \
--batch_size auto
イタリア語 MMLU
lm_eval \
--model vllm \
--model_args pretrained="neuralmagic/Meta-Llama-3.1-8B-Instruct-quantized.w8a8",dtype=auto,max_model_len=3850,max_gen_toks=10,tensor_parallel_size=1 \
--tasks mmlu_it_llama_3.1_instruct \
--fewshot_as_multiturn \
--apply_chat_template \
--num_fewshot 5 \
--batch_size auto
ドイツ語 MMLU
lm_eval \
--model vllm \
--model_args pretrained="neuralmagic/Meta-Llama-3.1-8B-Instruct-quantized.w8a8",dtype=auto,max_model_len=3850,max_gen_toks=10,tensor_parallel_size=1 \
--tasks mmlu_de_llama_3.1_instruct \
--fewshot_as_multiturn \
--apply_chat_template \
--num_fewshot 5 \
--batch_size auto
フランス語 MMLU
lm_eval \
--model vllm \
--model_args pretrained="neuralmagic/Meta-Llama-3.1-8B-Instruct-quantized.w8a8",dtype=auto,max_model_len=3850,max_gen_toks=10,tensor_parallel_size=1 \
--tasks mmlu_fr_llama_3.1_instruct \
--fewshot_as_multiturn \
--apply_chat_template \
--num_fewshot 5 \
--batch_size auto
ヒンディー語 MMLU
lm_eval \
--model vllm \
--model_args pretrained="neuralmagic/Meta-Llama-3.1-8B-Instruct-quantized.w8a8",dtype=auto,max_model_len=3850,max_gen_toks=10,tensor_parallel_size=1 \
--tasks mmlu_hi_llama_3.1_instruct \
--fewshot_as_multiturn \
--apply_chat_template \
--num_fewshot 5 \
--batch_size auto
タイ語 MMLU
lm_eval \
--model vllm \
--model_args pretrained="neuralmagic/Meta-Llama-3.1-8B-Instruct-quantized.w8a8",dtype=auto,max_model_len=3850,max_gen_toks=10,tensor_parallel_size=1 \
--tasks mmlu_th_llama_3.1_instruct \
--fewshot_as_multiturn \
--apply_chat_template \
--num_fewshot 5 \
--batch_size auto
HumanEvalおよびHumanEval+
生成
python3 codegen/generate.py \
--model neuralmagic/Meta-Llama-3.1-8B-Instruct-quantized.w8a8 \
--bs 16 \
--temperature 0.2 \
--n_samples 50 \
--root "." \
--dataset humaneval
サニタイズ
python3 evalplus/sanitize.py \
humaneval/neuralmagic--Meta-Llama-3.1-8B-Instruct-quantized.w8a8_vllm_temp_0.2
評価
evalplus.evaluate \
--dataset humaneval \
--samples humaneval/neuralmagic--Meta-Llama-3.1-8B-Instruct-quantized.w8a8_vllm_temp_0.2-sanitized



