Phi 4 Mini Instruct 8da4w
模型简介
Phi-4-mini 是一个轻量级的自然语言处理模型,适用于代码生成、数学推理、聊天对话等多种任务。
模型特点
高效量化
采用8位嵌入和8位动态激活,以及4位权重线性层(8da4w)的量化方案,显著减少模型大小和内存占用。
移动端部署
支持通过 ExecuTorch 在移动设备上运行,适合资源受限的环境。
高性能推理
在 iPhone 15 Pro 上,模型运行速度为每秒17.3个令牌,内存占用为3206 MB。
模型能力
文本生成
代码生成
数学推理
聊天对话
使用案例
自然语言处理
聊天机器人
用于构建高效的聊天机器人,支持多轮对话。
响应速度快,适合移动端应用。
代码辅助
帮助开发者生成代码片段或解决编程问题。
支持多种编程语言,生成质量较高。
教育
数学辅导
用于解答数学问题或提供解题思路。
在 GSM8K 数据集上表现良好。
🚀 Phi-4-mini-instruct量化模型
Phi-4-mini-instruct量化模型基于microsoft/Phi-4-mini-instruct
模型,由PyTorch团队使用torchao
进行量化处理。该模型采用8位嵌入和8位动态激活以及4位权重线性(8da4w)的量化方案,适用于使用ExecuTorch进行移动端部署。我们提供了可直接在ExecuTorch中使用的量化pte文件。
✨ 主要特性
- 量化处理:使用
torchao
进行8位嵌入和8位动态激活以及4位权重线性(8da4w)的量化,减少模型内存占用。 - 移动端部署:可在移动设备上使用ExecuTorch运行,如iPhone 15 Pro。
- 多语言支持:支持多种语言的文本生成任务。
📦 安装指南
首先,你需要安装所需的包:
pip install git+https://github.com/huggingface/transformers@main
pip install torchao
💻 使用示例
基础用法
以下是如何在移动应用中运行模型的示例:
# 下载pte文件
wget https://huggingface.co/pytorch/Phi-4-mini-instruct-8da4w/blob/main/phi4-mini-8da4w.pte
# 在iOS上运行的说明
https://pytorch.org/executorch/main/llm/llama-demo-ios.html
高级用法
以下是量化模型的详细步骤:
解绑嵌入权重
from transformers import (
AutoModelForCausalLM,
AutoProcessor,
AutoTokenizer,
)
import torch
model_id = "microsoft/Phi-4-mini-instruct"
untied_model = AutoModelForCausalLM.from_pretrained(model_id, torch_dtype="auto", device_map="auto")
tokenizer = AutoTokenizer.from_pretrained(model_id)
print(untied_model)
from transformers.modeling_utils import find_tied_parameters
print("tied weights:", find_tied_parameters(untied_model))
if getattr(untied_model.config.get_text_config(decoder=True), "tie_word_embeddings"):
setattr(untied_model.config.get_text_config(decoder=True), "tie_word_embeddings", False)
untied_model._tied_weights_keys = []
untied_model.lm_head.weight = torch.nn.Parameter(untied_model.lm_head.weight.clone())
print("tied weights:", find_tied_parameters(untied_model))
USER_ID = "YOUR_USER_ID"
MODEL_NAME = model_id.split("/")[-1]
save_to = f"{USER_ID}/{MODEL_NAME}-untied-weights"
untied_model.push_to_hub(save_to)
tokenizer.push_to_hub(save_to)
# or save locally
save_to_local_path = f"{MODEL_NAME}-untied-weights"
untied_model.save_pretrained(save_to_local_path)
tokenizer.save_pretrained(save_to)
量化模型
from transformers import (
AutoModelForCausalLM,
AutoProcessor,
AutoTokenizer,
TorchAoConfig,
)
from torchao.quantization.quant_api import (
IntxWeightOnlyConfig,
Int8DynamicActivationIntxWeightConfig,
AOPerModuleConfig,
quantize_,
)
from torchao.quantization.granularity import PerGroup, PerAxis
import torch
# we start from the model with untied weights
model_id = "microsoft/Phi-4-mini-instruct"
USER_ID = "YOUR_USER_ID"
MODEL_NAME = model_id.split("/")[-1]
untied_model_id = f"{USER_ID}/{MODEL_NAME}-untied-weights"
untied_model_local_path = f"{MODEL_NAME}-untied-weights"
embedding_config = IntxWeightOnlyConfig(
weight_dtype=torch.int8,
granularity=PerAxis(0),
)
linear_config = Int8DynamicActivationIntxWeightConfig(
weight_dtype=torch.int4,
weight_granularity=PerGroup(32),
weight_scale_dtype=torch.bfloat16,
)
quant_config = AOPerModuleConfig({"_default": linear_config, "model.embed_tokens": embedding_config})
quantization_config = TorchAoConfig(quant_type=quant_config, include_embedding=True, untie_embedding_weights=True, modules_to_not_convert=[])
# either use `untied_model_id` or `untied_model_local_path`
quantized_model = AutoModelForCausalLM.from_pretrained(untied_model_id, torch_dtype=torch.float32, device_map="auto", quantization_config=quantization_config)
tokenizer = AutoTokenizer.from_pretrained(model_id)
# Push to hub
MODEL_NAME = model_id.split("/")[-1]
save_to = f"{USER_ID}/{MODEL_NAME}-untied-8da4w"
quantized_model.push_to_hub(save_to, safe_serialization=False)
tokenizer.push_to_hub(save_to)
# Manual testing
prompt = "Hey, are you conscious? Can you talk to me?"
messages = [
{
"role": "system",
"content": "",
},
{"role": "user", "content": prompt},
]
templated_prompt = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True,
)
print("Prompt:", prompt)
print("Templated prompt:", templated_prompt)
inputs = tokenizer(
templated_prompt,
return_tensors="pt",
).to("cuda")
generated_ids = quantized_model.generate(**inputs, max_new_tokens=128)
output_text = tokenizer.batch_decode(
generated_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False
)
print("Response:", output_text[0][len(prompt):])
📚 详细文档
模型质量评估
我们使用lm-evaluation-harness来评估量化模型的质量。
安装lm-eval
git clone https://github.com/EleutherAI/lm-evaluation-harness
cd lm-evaluation-harness
pip install -e .
基准测试
# 基线模型
lm_eval --model hf --model_args pretrained=microsoft/Phi-4-mini-instruct --tasks hellaswag --device cuda:0 --batch_size 8
# 8da4w量化模型
lm_eval --model hf --model_args pretrained=pytorch/Phi-4-mini-instruct-8da4w --tasks hellaswag --device cuda:0 --batch_size 8
评估结果
基准测试 | Phi-4-mini-ins | Phi-4-mini-instruct-8da4w |
---|---|---|
流行综合基准测试 | ||
mmlu (0 shot) | 66.73 | 60.75 |
mmlu_pro (5-shot) | 46.43 | 11.75 |
推理能力 | ||
arc_challenge | 56.91 | 48.46 |
gpqa_main_zeroshot | 30.13 | 30.80 |
hellaswag | 54.57 | 50.35 |
openbookqa | 33.00 | 30.40 |
piqa (0-shot) | 77.64 | 74.43 |
siqa | 49.59 | 44.98 |
truthfulqa_mc2 (0-shot) | 48.39 | 51.35 |
winogrande (0-shot) | 71.11 | 70.32 |
多语言能力 | ||
mgsm_en_cot_en | 60.80 | 57.60 |
数学能力 | ||
gsm8k (5-shot) | 81.88 | 61.71 |
Mathqa (0-shot) | 42.31 | 36.95 |
总体表现 | 55.35 | 48.45 |
导出到ExecuTorch
我们可以使用ExecuTorch在移动设备上运行量化模型。
转换检查点
python -m executorch.examples.models.phi_4_mini.convert_weights pytorch_model.bin pytorch_model_converted.bin
导出到pte格式
PARAMS="executorch/examples/models/phi_4_mini/config.json"
python -m executorch.examples.models.llama.export_llama \
--model "phi_4_mini" \
--checkpoint "pytorch_model_converted.bin" \
--params "$PARAMS" \
-kv \
--use_sdpa_with_kv_cache \
-X \
--metadata '{"get_bos_id":199999, "get_eos_ids":[200020,199999]}' \
--max_seq_length 128 \
--max_context_length 128 \
--output_name="phi4-mini-8da4w.pte"
🔧 技术细节
- 量化方案:采用8位嵌入和8位动态激活以及4位权重线性(8da4w)的量化方案。
- 移动端性能:在iPhone 15 Pro上,模型运行速度为17.3 tokens/sec,内存占用为3206 Mb。
📄 许可证
本项目采用MIT许可证。
⚠️ 重要提示
PyTorch尚未对量化模型进行安全评估或红队测试。性能特征、输出和行为可能与原始模型不同。用户需自行负责选择合适的用例,评估和减轻准确性、安全性和公平性问题,确保安全性,并遵守所有适用的法律法规。
本模型卡片中的任何内容均不应被解释为或视为对模型发布时所遵循的许可证的限制或修改,包括其中提供的任何责任限制或保修免责声明。
Phi 2 GGUF
其他
Phi-2是微软开发的一个小型但强大的语言模型,具有27亿参数,专注于高效推理和高质量文本生成。
大型语言模型 支持多种语言
P
TheBloke
41.5M
205
Roberta Large
MIT
基于掩码语言建模目标预训练的大型英语语言模型,采用改进的BERT训练方法
大型语言模型 英语
R
FacebookAI
19.4M
212
Distilbert Base Uncased
Apache-2.0
DistilBERT是BERT基础模型的蒸馏版本,在保持相近性能的同时更轻量高效,适用于序列分类、标记分类等自然语言处理任务。
大型语言模型 英语
D
distilbert
11.1M
669
Llama 3.1 8B Instruct GGUF
Meta Llama 3.1 8B Instruct 是一个多语言大语言模型,针对多语言对话用例进行了优化,在常见的行业基准测试中表现优异。
大型语言模型 英语
L
modularai
9.7M
4
Xlm Roberta Base
MIT
XLM-RoBERTa是基于100种语言的2.5TB过滤CommonCrawl数据预训练的多语言模型,采用掩码语言建模目标进行训练。
大型语言模型 支持多种语言
X
FacebookAI
9.6M
664
Roberta Base
MIT
基于Transformer架构的英语预训练模型,通过掩码语言建模目标在海量文本上训练,支持文本特征提取和下游任务微调
大型语言模型 英语
R
FacebookAI
9.3M
488
Opt 125m
其他
OPT是由Meta AI发布的开放预训练Transformer语言模型套件,参数量从1.25亿到1750亿,旨在对标GPT-3系列性能,同时促进大规模语言模型的开放研究。
大型语言模型 英语
O
facebook
6.3M
198
1
基于transformers库的预训练模型,适用于多种NLP任务
大型语言模型
Transformers

1
unslothai
6.2M
1
Llama 3.1 8B Instruct
Llama 3.1是Meta推出的多语言大语言模型系列,包含8B、70B和405B参数规模,支持8种语言和代码生成,优化了多语言对话场景。
大型语言模型
Transformers 支持多种语言

L
meta-llama
5.7M
3,898
T5 Base
Apache-2.0
T5基础版是由Google开发的文本到文本转换Transformer模型,参数规模2.2亿,支持多语言NLP任务。
大型语言模型 支持多种语言
T
google-t5
5.4M
702
精选推荐AI模型
Llama 3 Typhoon V1.5x 8b Instruct
专为泰语设计的80亿参数指令模型,性能媲美GPT-3.5-turbo,优化了应用场景、检索增强生成、受限生成和推理任务
大型语言模型
Transformers 支持多种语言

L
scb10x
3,269
16
Cadet Tiny
Openrail
Cadet-Tiny是一个基于SODA数据集训练的超小型对话模型,专为边缘设备推理设计,体积仅为Cosmo-3B模型的2%左右。
对话系统
Transformers 英语

C
ToddGoldfarb
2,691
6
Roberta Base Chinese Extractive Qa
基于RoBERTa架构的中文抽取式问答模型,适用于从给定文本中提取答案的任务。
问答系统 中文
R
uer
2,694
98