许可证:Apache-2.0
标签:
- 大语言模型
- Mistral
- 数学
- 英特尔
基础模型:Intel/neural-chat-7b-v3-1
模型索引:
- 名称:neural-chat-7b-v3-3
结果:
- 任务:
类型:大语言模型
名称:大语言模型
数据集:
名称:meta-math/MetaMathQA
类型:meta-math/MetaMathQA
指标:
- 类型:ARC(25样本)
值:66.89
名称:ARC(25样本)
已验证:是
- 类型:HellaSwag(10样本)
值:85.26
名称:HellaSwag(10样本)
已验证:是
- 类型:MMLU(5样本)
值:63.07
名称:MMLU(5样本)
已验证:是
- 类型:TruthfulQA(0样本)
值:63.01
名称:TruthfulQA(0样本)
已验证:是
- 类型:Winogrande(5样本)
值:79.64
名称:Winogrande(5样本)
已验证:是
- 类型:GSM8K(5样本)
值:61.11
名称:GSM8K(5样本)
已验证:是
模型详情:Neural-Chat-v3-3
该模型是基于Intel/neural-chat-7b-v3-1在meta-math/MetaMathQA数据集上,使用英特尔Gaudi 2处理器微调的7B参数大语言模型。模型通过直接性能优化(DPO)方法与Intel/orca_dpo_pairs对齐。Intel/neural-chat-7b-v3-1最初是从mistralai/Mistral-7B-v-0.1微调而来。更多信息请参考博客《在英特尔Gaudi2上实践监督微调与直接偏好优化》。
图片来自Google DeepMind on Unsplash
模型详情 |
描述 |
模型作者-公司 |
英特尔。NeuralChat团队来自DCAI/AISE/AIPT,核心成员:Kaokao Lv、Liang Lv、Chang Wang、Wenxin Zhang、Xuhui Ren和Haihao Shen。 |
日期 |
2023年12月 |
版本 |
v3-3 |
类型 |
7B大语言模型 |
论文或其他资源 |
Medium博客 |
许可证 |
Apache 2.0 |
问题或意见 |
社区讨论区和英特尔开发者Discord |
预期用途 |
描述 |
主要用途 |
可用于多种语言相关任务,查看LLM排行榜了解模型表现。 |
主要用户 |
任何进行语言相关任务推理的人员。 |
非适用范围 |
该模型在多数情况下需针对特定任务微调,不应被用于故意制造敌对或排斥性环境。 |
使用方法
该模型的上下文长度为8192个标记(与mistralai/Mistral-7B-v0.1相同)。
复现模型
以下是复现模型的示例代码:GitHub示例代码。文档说明如下:
git clone https://github.com/intel/intel-extension-for-transformers.git
cd intel-extension-for-transformers
docker build --no-cache ./ --target hpu --build-arg REPO=https://github.com/intel/intel-extension-for-transformers.git --build-arg ITREX_VER=main -f ./intel_extension_for_transformers/neural_chat/docker/Dockerfile -t chatbot_finetuning:latest
docker run -it --runtime=habana -e HABANA_VISIBLE_DEVICES=all -e OMPI_MCA_btl_vader_single_copy_mechanism=none --cap-add=sys_nice --net=host --ipc=host chatbot_finetuning:latest
cd examples/finetuning/finetune_neuralchat_v3
我们选用最新的预训练模型mistralai/Mistral-7B-v0.1和开源数据集Open-Orca/SlimOrca进行实验。
以下脚本使用deepspeed zero2在8卡Gaudi2上启动训练。在finetune_neuralchat_v3.py
中,默认设置use_habana=True, use_lazy_mode=True, device="hpu"
适用于Gaudi2。若需在NVIDIA GPU上运行,可设为use_habana=False, use_lazy_mode=False, device="auto"
。
deepspeed --include localhost:0,1,2,3,4,5,6,7 \
--master_port 29501 \
finetune_neuralchat_v3.py
合并LoRA权重:
python apply_lora.py \
--base-model-path mistralai/Mistral-7B-v0.1 \
--lora-model-path finetuned_model/ \
--output-path finetuned_model_lora
使用模型
FP32推理(Transformers)
import transformers
model_name = 'Intel/neural-chat-7b-v3-3'
model = transformers.AutoModelForCausalLM.from_pretrained(model_name)
tokenizer = transformers.AutoTokenizer.from_pretrained(model_name)
def generate_response(system_input, user_input):
prompt = f"### System:\n{system_input}\n### User:\n{user_input}\n### Assistant:\n"
inputs = tokenizer.encode(prompt, return_tensors="pt", add_special_tokens=False)
outputs = model.generate(inputs, max_length=1000, num_return_sequences=1)
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
return response.split("### Assistant:\n")[-1]
system_input = "你是一名数学专家助手,任务是帮助用户理解和解决各类数学问题。需提供分步解答、解释推理过程并给出正确答案。"
user_input = "计算100 + 520 + 60"
print(generate_response(system_input, user_input))
"""
计算100、520和60的和步骤如下:
1. 前两数相加:100 + 520
2. 将步骤1结果与第三数相加:(100 + 520) + 60
步骤1:100 + 520 = 620
步骤2:620 + 60 = 680
因此,100 + 520 + 60的和为680。
"""
BF16推理(英特尔Transformers扩展与PyTorch扩展)
from transformers import AutoTokenizer, TextStreamer
import torch
from intel_extension_for_transformers.transformers import AutoModelForCausalLM
import intel_extension_for_pytorch as ipex
model_name = "Intel/neural-chat-7b-v3-3"
prompt = "从前有个小女孩,"
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
inputs = tokenizer(prompt, return_tensors="pt").input_ids
streamer = TextStreamer(tokenizer)
model = AutoModelForCausalLM.from_pretrained(model_name, torch_dtype=torch.bfloat16)
model = ipex.optimize(model.eval(), dtype=torch.bfloat16, inplace=True, level="O1", auto_kernel_selection=True)
outputs = model.generate(inputs, streamer=streamer, max_new_tokens=300)
INT4推理(Transformers与英特尔Transformers扩展)
from transformers import AutoTokenizer, TextStreamer
from intel_extension_for_transformers.transformers import AutoModelForCausalLM, WeightOnlyQuantConfig
model_name = "Intel/neural-chat-7b-v3-3"
config = WeightOnlyQuantConfig(compute_dtype="bf16", weight_dtype="int4")
prompt = "从前有个小女孩,"
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
inputs = tokenizer(prompt, return_tensors="pt").input_ids
streamer = TextStreamer(tokenizer)
model = AutoModelForCausalLM.from_pretrained(model_name, quantization_config=config)
outputs = model.generate(inputs, streamer=streamer, max_new_tokens=300)
影响因素 |
描述 |
数据组 |
数据集详情见meta-math/MetaMathQA、项目页https://meta-math.github.io/和论文https://arxiv.org/abs/2309.12284。 |
工具链 |
模型性能随输入变化,提示词会显著影响输出。 |
环境 |
模型在8卡英特尔Gaudi 2处理器上训练。 |
提示卡 |
不同软硬件部署会影响性能,评估指标来自Hugging Face LLM排行榜:ARC、HellaSwag、MMLU、TruthfulQA、Winogrande和GSM8K(见定量分析)。 |
指标 |
描述 |
模型性能度量 |
根据LLM排行榜标准评估,这些指标已成为LLM性能基准。 |
决策阈值 |
未使用阈值。 |
不确定性与变异性处理 |
- |
定量分析
完整结果见Open LLM排行榜:
指标 |
值 |
平均分 |
69.83 |
ARC(25样本) |
66.89 |
HellaSwag(10样本) |
85.26 |
MMLU(5样本) |
63.07 |
TruthfulQA(0样本) |
63.01 |
Winogrande(5样本) |
79.64 |
GSM8K(5样本) |
61.11 |
伦理考量与限制
Neural-chat-7b-v3-3可能输出事实错误内容,不可依赖其提供准确信息。由于预训练模型和微调数据集的局限性,该模型可能生成低俗、偏见或冒犯性内容。
在部署应用前,开发者应进行安全性测试。
注意事项与建议
用户(包括直接和下游用户)应了解模型的风险、偏见和限制。
了解更多英特尔AI软件: