mgoin's picture
Update README.md
3f04528 verified
|
raw
history blame
4.34 kB
metadata
tags:
  - fp8
  - vllm

Phi-3-mini-128k-instruct-FP8

Model Overview

  • Model Architecture:

    Based on and identical to the Phi-3-mini-128k-instruct architecture
  • Model Optimizations:

    Weights and activations quantized to FP8
  • Release Date:

    June 29, 2024
  • Model Developers:

    Neural Magic

Phi-3-mini-128k-instruct quantized to FP8 weights and activations using per-tensor quantization through the AutoFP8 repository, ready for inference with vLLM >= 0.5.0. Calibrated with 512 UltraChat samples to achieve 100% performance recovery on the Open LLM Benchmark evaluations. Reduces space on disk by ~50%. Part of the FP8 LLMs for vLLM collection.

Usage and Creation

Produced using AutoFP8 with calibration samples from ultrachat.

from datasets import load_dataset
from transformers import AutoTokenizer

from auto_fp8 import AutoFP8ForCausalLM, BaseQuantizeConfig

pretrained_model_dir = "microsoft/Phi-3-mini-128k-instruct"
quantized_model_dir = "Phi-3-mini-128k-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")

model = AutoFP8ForCausalLM.from_pretrained(
    pretrained_model_dir, quantize_config=quantize_config
)
model.quantize(examples)
model.save_quantized(quantized_model_dir)

Evaluated through vLLM>=0.5.1 with the following script:

#!/bin/bash

# Example usage:
# CUDA_VISIBLE_DEVICES=0 ./eval_openllm.sh "neuralmagic/Phi-3-mini-128k-instruct-FP8" "tensor_parallel_size=1,max_model_len=4096,add_bos_token=True,gpu_memory_utilization=0.7"

export MODEL_DIR=${1}
export MODEL_ARGS=${2}

declare -A tasks_fewshot=(
    ["arc_challenge"]=25
    ["winogrande"]=5
    ["truthfulqa_mc2"]=0
    ["hellaswag"]=10
    ["mmlu"]=5
    ["gsm8k"]=5
)

declare -A batch_sizes=(
    ["arc_challenge"]="auto"
    ["winogrande"]="auto"
    ["truthfulqa_mc2"]="auto"
    ["hellaswag"]="auto"
    ["mmlu"]=1
    ["gsm8k"]="auto"
)

for TASK in "${!tasks_fewshot[@]}"; do
    NUM_FEWSHOT=${tasks_fewshot[$TASK]}
    BATCH_SIZE=${batch_sizes[$TASK]}
    lm_eval --model vllm \
        --model_args pretrained=$MODEL_DIR,$MODEL_ARGS \
        --tasks ${TASK} \
        --num_fewshot ${NUM_FEWSHOT} \
        --write_out \
        --show_config \
        --device cuda \
        --batch_size ${BATCH_SIZE} \
        --output_path="results/${TASK}"
done

Evaluation

Evaluated on the Open LLM Leaderboard evaluations through vLLM.

Open LLM Leaderboard evaluation scores

Phi-3-mini-128k-instruct-FP8 neuralmagic/Phi-3-mini-128k-instruct-FP8
(this model)
arc-c
25-shot
63.65 64.24
hellaswag
10-shot
79.76 79.79
mmlu
5-shot
68.10 67.93
truthfulqa
0-shot
53.97 53.50
winogrande
5-shot
73.72 74.11
gsm8k
5-shot
75.59 74.37
Average
Accuracy
69.13 68.99
Recovery 100% 99.80%