モデル概要
モデル特徴
モデル能力
使用事例
🚀 Meta-Llama-3.1-405B-Instruct-FP8-dynamic
このモデルは、多言語の商用および研究用途を目的としたテキスト生成モデルです。Meta-Llama-3.1-405B-Instruct を FP8 で量子化したバージョンで、vLLM を用いて効率的な推論が可能です。
🚀 クイックスタート
このモデルは、多言語の商用および研究用途に適しています。以下に、vLLM を使用したデプロイの例を示します。
from vllm import LLM, SamplingParams
from transformers import AutoTokenizer
model_id = "neuralmagic/Meta-Llama-3.1-405B-Instruct-FP8-dynamic"
number_gpus = 8
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=4096)
outputs = llm.generate(prompts, sampling_params)
generated_text = outputs[0].outputs[0].text
print(generated_text)
✨ 主な機能
- 多言語対応:英語、ドイツ語、フランス語、イタリア語、ポルトガル語、ヒンディー語、スペイン語、タイ語などの多言語に対応しています。
- 量子化最適化:重みと活性化関数の量子化に FP8 を使用し、ディスク容量と GPU メモリの要件を約 50% 削減しています。
- vLLM 対応:vLLM を使用した高速な推論が可能です。
📦 インストール
このモデルは、Hugging Face のモデルハブからダウンロードできます。また、vLLM を使用するためには、vLLM をインストールする必要があります。
💻 使用例
基本的な使用法
from vllm import LLM, SamplingParams
from transformers import AutoTokenizer
model_id = "neuralmagic/Meta-Llama-3.1-405B-Instruct-FP8-dynamic"
number_gpus = 8
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=4096)
outputs = llm.generate(prompts, sampling_params)
generated_text = outputs[0].outputs[0].text
print(generated_text)
高度な使用法
モデルの生成をカスタマイズするために、SamplingParams
を調整することができます。
# 高度なサンプリングパラメータの設定例
sampling_params = SamplingParams(temperature=0.2, top_p=0.8, max_tokens=512)
# 以下は基本的な使用法と同じ
from vllm import LLM
from transformers import AutoTokenizer
model_id = "neuralmagic/Meta-Llama-3.1-405B-Instruct-FP8-dynamic"
number_gpus = 8
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=4096)
outputs = llm.generate(prompts, sampling_params)
generated_text = outputs[0].outputs[0].text
print(generated_text)
📚 詳細ドキュメント
モデル概要
- モデルアーキテクチャ:Meta-Llama-3.1
- 入力:テキスト
- 出力:テキスト
- モデル最適化:
- 重み量子化:FP8
- 活性化関数量子化:FP8
- 想定使用ケース:多言語の商用および研究用途。Meta-Llama-3.1-405B-Instruct と同様に、アシスタントのようなチャットに適しています。
- 適用外:適用される法律や規制(貿易コンプライアンス法律を含む)に違反する方法での使用。英語以外の言語での使用。
- リリース日:2024年8月22日
- バージョン:1.1
- ライセンス:llama3.1
- モデル開発者:Neural Magic
このモデルは、Meta-Llama-3.1-405B-Instruct の量子化バージョンです。複数のタスクで評価され、非量子化モデルとの品質比較が行われています。
モデル最適化
このモデルは、Meta-Llama-3.1-405B-Instruct の重みと活性化関数を FP8 データ型に量子化して得られたもので、ソースからビルドされた vLLM での推論に対応しています。この最適化により、パラメータごとのビット数が 16 から 8 に減少し、ディスク容量と GPU メモリの要件が約 50% 削減されます。
デプロイ
このモデルは、vLLM バックエンドを使用して効率的にデプロイできます。vLLM は、OpenAI 互換のサービングもサポートしています。詳細は ドキュメント を参照してください。
作成方法
このモデルは、LLM Compressor with calibration samples from UltraChat を適用して作成されました。
import torch
from transformers import AutoTokenizer
from llmcompressor.transformers import SparseAutoModelForCausalLM, oneshot
from llmcompressor.transformers.compression.helpers import ( # noqa
calculate_offload_device_map,
custom_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 = "meta-llama/Meta-Llama-3.1-405B-Instruct"
model_name = model_stub.split("/")[-1]
device_map = calculate_offload_device_map(
model_stub, reserve_for_hessians=False, num_gpus=8, torch_dtype="auto"
)
model = SparseAutoModelForCausalLM.from_pretrained(
model_stub, torch_dtype="auto", device_map=device_map
)
output_dir = f"./{model_name}-FP8-dynamic"
oneshot(
model=model,
recipe=recipe,
output_dir=output_dir,
save_compressed=True,
tokenizer=AutoTokenizer.from_pretrained(model_stub),
)
評価
このモデルは、Arena-Hard、OpenLLM v1、OpenLLM v2、HumanEval、HumanEval+ のベンチマークで評価されました。すべてのケースで、モデルの出力は vLLM エンジンを使用して生成されました。
精度
ベンチマーク | Meta-Llama-3.1-405B-Instruct | Meta-Llama-3.1-405B-Instruct-FP8-dynamic (このモデル) | 回復率 |
---|---|---|---|
Arena Hard | 67.4 (67.3 / 67.5) | 66.7 (66.7 / 66.6) | 99.0% |
OpenLLM v1 | |||
MMLU (5-shot) | 87.4 | 87.5 | 100.0% |
MMLU-cot (0-shot) | 88.1 | 88.1 | 100.0% |
ARC Challenge (0-shot) | 95.0 | 95.0 | 100.0% |
GSM-8K-cot (8-shot, strict-match) | 96.0 | 95.8 | 99.8% |
Hellaswag (10-shot) | 88.5 | 88.5 | 99.9% |
Winogrande (5-shot) | 87.2 | 88.0 | 100.9% |
TruthfulQA (0-shot, mc2) | 65.3 | 65.3 | 99.9% |
平均 | 86.8 | 86.9 | 100.0% |
OpenLLM v2 | |||
MMLU-Pro (5-shot) | 59.7 | 59.4 | 99.4% |
IFEval (0-shot) | 87.7 | 86.8 | 99.0% |
BBH (3-shot) | 67.0 | 67.1 | 100.1% |
Math- | v | -5 (4-shot) | 39.0 |
GPQA (0-shot) | 19.5 | 19.0 | 97.4% |
MuSR (0-shot) | 19.5 | 20.8 | 106.9% |
平均 | 48.7 | 48.7 | 99.9% |
コーディング | |||
HumanEval pass@1 | 86.8 | 87.0 | 100.2% |
HumanEval+ pass@1 | 80.1 | 81.0 | 101.1% |
再現方法
結果は、以下のコマンドを使用して得られました。
MMLU
lm_eval \
--model vllm \
--model_args pretrained="neuralmagic/Meta-Llama-3.1-405B-Instruct-FP8-dynamic",dtype=auto,add_bos_token=True,max_model_len=4096,max_gen_toks=10,tensor_parallel_size=8 \
--tasks mmlu_llama_3.1_instruct \
--apply_chat_template \
--fewshot_as_multiturn \
--num_fewshot 5 \
--batch_size auto
MMLU-cot
lm_eval \
--model vllm \
--model_args pretrained="neuralmagic/Meta-Llama-3.1-405B-Instruct-FP8-dynamic",dtype=auto,add_bos_token=True,max_model_len=4096,max_gen_toks=1024,tensor_parallel_size=8 \
--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-405B-Instruct-FP8-dynamic",dtype=auto,add_bos_token=True,max_model_len=4096,tensor_parallel_size=8 \
--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-405B-Instruct-FP8-dynamic",dtype=auto,add_bos_token=True,max_model_len=4096,tensor_parallel_size=8 \
--tasks gsm8k_cot_llama_3.1_instruct \
--apply_chat_template \
--fewshot_as_multiturn \
--num_fewshot 8 \
--batch_size auto
Hellaswag
lm_eval \
--model vllm \
--model_args pretrained="neuralmagic/Meta-Llama-3.1-405B-Instruct-FP8-dynamic",dtype=auto,add_bos_token=True,max_model_len=4096,tensor_parallel_size=8 \
--tasks hellaswag \
--num_fewshot 10 \
--batch_size auto
Winogrande
lm_eval \
--model vllm \
--model_args pretrained="neuralmagic/Meta-Llama-3.1-405B-Instruct-FP8-dynamic",dtype=auto,add_bos_token=True,max_model_len=4096,tensor_parallel_size=8 \
--tasks winogrande \
--num_fewshot 5 \
--batch_size auto
TruthfulQA
lm_eval \
--model vllm \
--model_args pretrained="neuralmagic/Meta-Llama-3.1-405B-Instruct-FP8-dynamic",dtype=auto,add_bos_token=True,max_model_len=4096,tensor_parallel_size=8 \
--tasks truthfulqa \
--num_fewshot 0 \
--batch_size auto
OpenLLM v2
lm_eval \
--model vllm \
--model_args pretrained="neuralmagic/Meta-Llama-3.1-405B-Instruct-FP8-dynamic",dtype=auto,max_model_len=4096,tensor_parallel_size=8,enable_chunked_prefill=True \
--apply_chat_template \
--fewshot_as_multiturn \
--tasks leaderboard \
--batch_size auto
HumanEval and HumanEval+
生成
python3 codegen/generate.py \
--model neuralmagic/Meta-Llama-3.1-405B-Instruct-FP8-dynamic \
--bs 16 \
--temperature 0.2 \
--n_samples 50 \
--root "." \
--dataset humaneval \
--tp 8
サニタイズ
python3 evalplus/sanitize.py \
humaneval/neuralmagic--Meta-Llama-3.1-405B-Instruct-FP8-dynamic_vllm_temp_0.2
評価
evalplus.evaluate \
--dataset humaneval \
--samples humaneval/neuralmagic--Meta-Llama-3.1-405B-Instruct-FP8-dynamic_vllm_temp_0.2-sanitized
🔧 技術詳細
このモデルは、Transformer ブロック内の線形演算子の重みと活性化関数のみを量子化しています。対称的なチャネルごとの量子化が適用され、出力次元ごとの線形スケーリングにより、量子化された重みと活性化関数の FP8 表現がマッピングされます。活性化関数は、トークンごとに動的に量子化されます。量子化には LLM Compressor が使用されています。
📄 ライセンス
このモデルは、llama3.1 ライセンスの下で提供されています。



