模型简介
模型特点
模型能力
使用案例
🚀 Phi 2 - GGUF
本项目提供了 Microsoft的Phi 2 模型的GGUF格式文件,方便用户进行推理和使用。
🚀 快速开始
本仓库包含了 Microsoft的Phi 2 模型的GGUF格式文件。
✨ 主要特性
关于GGUF
GGUF是由llama.cpp团队在2023年8月21日推出的一种新格式,它是GGML的替代品,目前llama.cpp已不再支持GGML格式。
以下是一些已知支持GGUF的客户端和库:
- llama.cpp:GGUF的源项目,提供了命令行界面(CLI)和服务器选项。
- text-generation-webui:最广泛使用的Web UI,具有许多功能和强大的扩展,支持GPU加速。
- KoboldCpp:功能齐全的Web UI,支持所有平台和GPU架构的GPU加速,尤其适合用于故事创作。
- GPT4All:一个免费开源的本地运行GUI,支持Windows、Linux和macOS,并提供全面的GPU加速。
- LM Studio:一款易于使用且功能强大的本地GUI,适用于Windows和macOS(Silicon),支持GPU加速。截至2023年11月27日,Linux版本处于测试阶段。
- LoLLMS Web UI:一个很棒的Web UI,具有许多有趣和独特的功能,包括一个完整的模型库,方便用户选择模型。
- Faraday.dev:一个有吸引力且易于使用的基于角色的聊天GUI,适用于Windows和macOS(Silicon和Intel),支持GPU加速。
- llama-cpp-python:一个支持GPU加速的Python库,支持LangChain,并提供与OpenAI兼容的API服务器。
- candle:一个Rust机器学习框架,专注于性能,包括GPU支持,并且易于使用。
- ctransformers:一个支持GPU加速的Python库,支持LangChain,并提供与OpenAI兼容的AI服务器。需要注意的是,截至2023年11月27日,ctransformers已经很长时间没有更新,并且不支持许多最新的模型。
可用仓库
- 支持GPU推理的GPTQ模型,提供多种量化参数选项
- 支持CPU+GPU推理的2、3、4、5、6和8位GGUF模型
- Microsoft原始的未量化fp16格式的pytorch模型,用于GPU推理和进一步转换
提示模板:Phi
Instruct: {prompt}
Output:
📦 安装指南
如何下载GGUF文件
手动下载者注意:通常情况下,你几乎不需要克隆整个仓库!这里提供了多种不同的量化格式,大多数用户只需要选择并下载单个文件即可。
以下客户端/库会自动为你下载模型,并提供可用模型列表供你选择:
- LM Studio
- LoLLMS Web UI
- Faraday.dev
在text-generation-webui
中下载
在“Download Model”选项下,你可以输入模型仓库地址:TheBloke/phi-2-GGUF,然后在下方输入具体的文件名进行下载,例如:phi-2.Q4_K_M.gguf,最后点击“Download”。
在命令行中下载,可同时下载多个文件
建议使用huggingface-hub
Python库:
pip3 install huggingface-hub
然后,你可以使用以下命令将任何单个模型文件高速下载到当前目录:
huggingface-cli download TheBloke/phi-2-GGUF phi-2.Q4_K_M.gguf --local-dir . --local-dir-use-symlinks False
更高级的huggingface-cli下载用法(点击查看)
你还可以使用通配符同时下载多个文件:
huggingface-cli download TheBloke/phi-2-GGUF --local-dir . --local-dir-use-symlinks False --include='*Q4_K*gguf'
有关使用huggingface-cli
下载的更多文档,请参阅:HF -> Hub Python Library -> Download files -> Download from the CLI。
为了在高速连接(1Gbit/s或更高)下加速下载,请安装hf_transfer
:
pip3 install hf_transfer
并将环境变量HF_HUB_ENABLE_HF_TRANSFER
设置为1
:
HF_HUB_ENABLE_HF_TRANSFER=1 huggingface-cli download TheBloke/phi-2-GGUF phi-2.Q4_K_M.gguf --local-dir . --local-dir-use-symlinks False
Windows命令行用户可以在下载命令前运行set HF_HUB_ENABLE_HF_TRANSFER=1
来设置环境变量。
💻 使用示例
基础用法
llama.cpp
命令示例
确保你使用的是2023年8月27日之后的llama.cpp
版本,提交记录为 d0cee0d 或更高版本。
./main -ngl 35 -m phi-2.Q4_K_M.gguf --color -c 2048 --temp 0.7 --repeat_penalty 1.1 -n -1 -p "Instruct: {prompt}\nOutput:"
将-ngl 32
更改为要卸载到GPU的层数。如果你没有GPU加速,可以移除该参数。
将-c 2048
更改为所需的序列长度。对于扩展序列模型(如8K、16K、32K),必要的RoPE缩放参数会从GGUF文件中读取,并由llama.cpp自动设置。请注意,更长的序列长度需要更多的资源,因此你可能需要减小该值。
如果你想进行聊天式对话,可以将-p <PROMPT>
参数替换为-i -ins
。
有关其他参数及其使用方法,请参考 llama.cpp文档。
在text-generation-webui
中运行
更多说明可以在text-generation-webui文档中找到,链接如下:text-generation-webui/docs/04 ‐ Model Tab.md。
从Python代码中运行
你可以使用 llama-cpp-python 或 ctransformers 库从Python中使用GGUF模型。需要注意的是,截至2023年11月27日,ctransformers已经有一段时间没有更新,并且与一些最新的模型不兼容。因此,建议使用llama-cpp-python。
在Python代码中使用llama-cpp-python加载此模型
完整文档请参阅:llama-cpp-python文档。
首先安装包
根据你的系统,运行以下命令之一:
# 无GPU加速的基础ctransformers
pip install llama-cpp-python
# 使用NVidia CUDA加速
CMAKE_ARGS="-DLLAMA_CUBLAS=on" pip install llama-cpp-python
# 或使用OpenBLAS加速
CMAKE_ARGS="-DLLAMA_BLAS=ON -DLLAMA_BLAS_VENDOR=OpenBLAS" pip install llama-cpp-python
# 或使用CLBLast加速
CMAKE_ARGS="-DLLAMA_CLBLAST=on" pip install llama-cpp-python
# 或使用AMD ROCm GPU加速(仅适用于Linux)
CMAKE_ARGS="-DLLAMA_HIPBLAS=on" pip install llama-cpp-python
# 或使用适用于macOS系统的Metal GPU加速
CMAKE_ARGS="-DLLAMA_METAL=on" pip install llama-cpp-python
# 在Windows中,在PowerShell中设置变量CMAKE_ARGS,例如对于NVidia CUDA:
$env:CMAKE_ARGS = "-DLLAMA_OPENBLAS=on"
pip install llama-cpp-python
简单的llama-cpp-python示例代码
from llama_cpp import Llama
# 将gpu_layers设置为要卸载到GPU的层数。如果你的系统没有GPU加速,请将其设置为0。
llm = Llama(
model_path="./phi-2.Q4_K_M.gguf", # 首先下载模型文件
n_ctx=2048, # 使用的最大序列长度 - 请注意,更长的序列长度需要更多的资源
n_threads=8, # 使用的CPU线程数,请根据你的系统和性能进行调整
n_gpu_layers=35 # 要卸载到GPU的层数,如果你有GPU加速可用
)
# 简单的推理示例
output = llm(
"Instruct: {prompt}\nOutput:", # 提示
max_tokens=512, # 生成最多512个令牌
stop=["</s>"], # 示例停止令牌 - 不一定适用于此特定模型!请在使用前检查。
echo=True # 是否回显提示
)
# 聊天完成API
llm = Llama(model_path="./phi-2.Q4_K_M.gguf", chat_format="llama-2") # 根据你使用的模型设置chat_format
llm.create_chat_completion(
messages = [
{"role": "system", "content": "You are a story writing assistant."},
{
"role": "user",
"content": "Write a story about llamas."
}
]
)
如何与LangChain一起使用
以下是使用llama-cpp-python和ctransformers与LangChain的指南:
📚 详细文档
兼容性
这些量化的GGUFv2文件与2023年8月27日之后的llama.cpp版本兼容,提交记录为 d0cee0d。
它们也与许多第三方UI和库兼容,请参阅本README顶部的列表。
量化方法说明
点击查看详细信息
可用的新方法如下:
- GGML_TYPE_Q2_K:“type-1” 2位量化,超级块包含16个块,每个块有16个权重。块的缩放和最小值使用4位量化。最终每个权重有效使用2.5625位(bpw)。
- GGML_TYPE_Q3_K:“type-0” 3位量化,超级块包含16个块,每个块有16个权重。缩放使用6位量化。最终使用3.4375 bpw。
- GGML_TYPE_Q4_K:“type-1” 4位量化,超级块包含8个块,每个块有32个权重。缩放和最小值使用6位量化。最终使用4.5 bpw。
- GGML_TYPE_Q5_K:“type-1” 5位量化。与GGML_TYPE_Q4_K具有相同的超级块结构,最终使用5.5 bpw。
- GGML_TYPE_Q6_K:“type-0” 6位量化。超级块包含16个块,每个块有16个权重。缩放使用8位量化。最终使用6.5625 bpw。
请参考下面的“提供的文件”表,了解哪些文件使用了哪些方法以及如何使用。
提供的文件
名称 | 量化方法 | 位数 | 大小 | 所需最大RAM | 使用场景 |
---|---|---|---|---|---|
phi-2.Q2_K.gguf | Q2_K | 2 | 1.17 GB | 3.67 GB | 最小,但质量损失显著 - 不建议用于大多数场景 |
phi-2.Q3_K_S.gguf | Q3_K_S | 3 | 1.25 GB | 3.75 GB | 非常小,但质量损失高 |
phi-2.Q3_K_M.gguf | Q3_K_M | 3 | 1.48 GB | 3.98 GB | 非常小,但质量损失高 |
phi-2.Q4_0.gguf | Q4_0 | 4 | 1.60 GB | 4.10 GB | 旧版本;小,但质量损失非常高 - 建议使用Q3_K_M |
phi-2.Q3_K_L.gguf | Q3_K_L | 3 | 1.60 GB | 4.10 GB | 小,但质量损失较大 |
phi-2.Q4_K_S.gguf | Q4_K_S | 4 | 1.62 GB | 4.12 GB | 小,但质量损失更大 |
phi-2.Q4_K_M.gguf | Q4_K_M | 4 | 1.79 GB | 4.29 GB | 中等,质量平衡 - 推荐使用 |
phi-2.Q5_0.gguf | Q5_0 | 5 | 1.93 GB | 4.43 GB | 旧版本;中等,质量平衡 - 建议使用Q4_K_M |
phi-2.Q5_K_S.gguf | Q5_K_S | 5 | 1.93 GB | 4.43 GB | 大,质量损失低 - 推荐使用 |
phi-2.Q5_K_M.gguf | Q5_K_M | 5 | 2.07 GB | 4.57 GB | 大,质量损失非常低 - 推荐使用 |
phi-2.Q6_K.gguf | Q6_K | 6 | 2.29 GB | 4.79 GB | 非常大,质量损失极低 |
phi-2.Q8_0.gguf | Q8_0 | 8 | 2.96 GB | 5.46 GB | 非常大,质量损失极低 - 不建议使用 |
注意:上述RAM数字假设没有进行GPU卸载。如果将层卸载到GPU,这将减少RAM使用并使用VRAM。
原始模型卡片:Microsoft的Phi 2
模型概述
Phi-2是一个具有27亿参数的Transformer模型。它使用与 Phi-1.5 相同的数据源进行训练,并增加了一个新的数据源,该数据源包含各种NLP合成文本和经过筛选的网站数据(以确保安全性和教育价值)。在常识、语言理解和逻辑推理等基准测试中,Phi-2在参数少于130亿的模型中表现接近当前最优水平。
我们的模型没有通过基于人类反馈的强化学习进行微调。创建这个开源模型的目的是为研究社区提供一个无限制的小模型,以探索重要的安全挑战,例如减少毒性、理解社会偏见、提高可控性等。
预期用途
Phi-2仅用于研究目的。鉴于训练数据的性质,Phi-2模型最适合使用问答格式、聊天格式和代码格式的提示。
问答格式
你可以将提示作为一个独立的问题提供,如下所示:
Write a detailed analogy between mathematics and a lighthouse.
模型将在“.”之后生成文本。
为了鼓励模型生成更简洁的答案,你也可以尝试使用以下问答格式:“Instruct: <prompt>\nOutput:”
Instruct: Write a detailed analogy between mathematics and a lighthouse.
Output: Mathematics is like a lighthouse. Just as a lighthouse guides ships safely to shore, mathematics provides a guiding light in the world of numbers and logic. It helps us navigate through complex problems and find solutions. Just as a lighthouse emits a steady beam of light, mathematics provides a consistent framework for reasoning and problem-solving. It illuminates the path to understanding and helps us make sense of the world around us.
模型将在“Output:”之后生成文本。
聊天格式
Alice: I don't know why, I'm struggling to maintain focus while studying. Any suggestions?
Bob: Well, have you tried creating a study schedule and sticking to it?
Alice: Yes, I have, but it doesn't seem to help much.
Bob: Hmm, maybe you should try studying in a quiet environment, like the library.
Alice: ...
模型将在第一个“Bob:”之后生成文本。
代码格式
def print_prime(n):
"""
Print all primes between 1 and n
"""
primes = []
for num in range(2, n+1):
is_prime = True
for i in range(2, int(math.sqrt(num))+1):
if num % i == 0:
is_prime = False
break
if is_prime:
primes.append(num)
print(primes)
模型将在注释之后生成文本。
注意事项:
- Phi-2仅用于研究目的。模型生成的文本/代码应被视为起点,而不是潜在用例的最终解决方案。用户在应用中使用这些模型时应谨慎。
- 直接用于生产任务不在本研究项目的范围内。因此,Phi-2模型尚未经过测试,以确保其在任何生产级应用中的充分性能。请参阅本文档的限制部分以获取更多详细信息。
- 如果你使用的是
transformers>=4.36.0
,请始终使用trust_remote_code=True
加载模型,以防止副作用。
示例代码
有四种执行模式:
- FP16 / Flash-Attention / CUDA:
model = AutoModelForCausalLM.from_pretrained("microsoft/phi-2", torch_dtype="auto", flash_attn=True, flash_rotary=True, fused_dense=True, device_map="cuda", trust_remote_code=True)
- FP16 / CUDA:
model = AutoModelForCausalLM.from_pretrained("microsoft/phi-2", torch_dtype="auto", device_map="cuda", trust_remote_code=True)
- FP32 / CUDA:
model = AutoModelForCausalLM.from_pretrained("microsoft/phi-2", torch_dtype=torch.float32, device_map="cuda", trust_remote_code=True)
- FP32 / CPU:
model = AutoModelForCausalLM.from_pretrained("microsoft/phi-2", torch_dtype=torch.float32, device_map="cpu", trust_remote_code=True)
为了确保最大兼容性,建议使用第二种执行模式(FP16 / CUDA),如下所示:
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
torch.set_default_device("cuda")
model = AutoModelForCausalLM.from_pretrained("microsoft/phi-2", torch_dtype="auto", trust_remote_code=True)
tokenizer = AutoTokenizer.from_pretrained("microsoft/phi-2", trust_remote_code=True)
inputs = tokenizer('''def print_prime(n):
"""
Print all primes between 1 and n
"""''', return_tensors="pt", return_attention_mask=False)
outputs = model.generate(**inputs, max_length=200)
text = tokenizer.batch_decode(outputs)[0]
print(text)
备注:在生成函数中,我们的模型目前不支持束搜索(num_beams > 1
)。此外,在模型的前向传播中,我们目前不支持输出隐藏状态或注意力值,也不支持使用自定义输入嵌入。
Phi-2的局限性
- 生成不准确的代码和事实:模型可能会生成不正确的代码片段和陈述。用户应将这些输出视为建议或起点,而不是最终或准确的解决方案。
- 代码范围有限:Phi-2的大部分训练数据基于Python,并使用常见的包,如“typing, math, random, collections, datetime, itertools”。如果模型生成的Python脚本使用了其他包或其他语言的脚本,强烈建议用户手动验证所有API的使用。
- 对指令的响应不可靠:模型没有经过指令微调。因此,它可能难以或无法遵循用户提供的复杂或细微的指令。
- 语言限制:模型主要设计用于理解标准英语。非正式英语、俚语或任何其他语言可能会给其理解带来挑战,导致潜在的误解或响应错误。
- 潜在的社会偏见:尽管在确保训练数据安全方面做出了努力,但Phi-2并非完全没有社会偏见。它有可能生成反映这些社会偏见的内容,特别是在受到提示或指令的情况下。我们敦促用户意识到这一点,并在解释模型输出时保持谨慎和批判性思维。
- 毒性:尽管使用精心选择的数据进行训练,但如果明确提示或指令,模型仍然可能生成有害内容。我们选择仅将该模型用于研究目的,希望能帮助开源社区开发出在预训练后直接降低模型毒性的最有效方法。
- 冗长性:作为一个基础模型,Phi-2在单轮对话中对用户提示的首次回答后,经常会生成无关或额外的文本和响应。这是因为其训练数据集主要是教科书,导致生成的响应类似于教科书。
训练
模型
- 架构:基于Transformer的模型,目标是进行下一个单词预测。
- 上下文长度:2048个令牌。
- 数据集大小:2500亿个令牌,由AOAI GPT-3.5创建的NLP合成数据和经过筛选的网络数据(来自Falcon RefinedWeb和SlimPajama)组合而成,这些数据由AOAI GPT-4进行评估。
- 训练令牌:1.4万亿个令牌。
- GPU:96个A100-80G。
- 训练时间:14天。
软件
许可证
该模型遵循 microsoft-research-license 许可证。
商标
本项目可能包含项目、产品或服务的商标或标志。对Microsoft商标或标志的授权使用需遵循并必须符合 Microsoft的商标和品牌指南。在本项目的修改版本中使用Microsoft商标或标志不得造成混淆或暗示Microsoft的赞助。任何第三方商标或标志的使用需遵循这些第三方的政策。
🔧 技术细节
模型信息
属性 | 详情 |
---|---|
模型类型 | phi-msft |
训练数据 | 2500亿个令牌,由AOAI GPT-3.5创建的NLP合成数据和经过筛选的网络数据(来自Falcon RefinedWeb和SlimPajama)组合而成,这些数据由AOAI GPT-4进行评估。 |
提示信息
⚠️ 重要提示
如果你使用的是
transformers>=4.36.0
,请始终使用trust_remote_code=True
加载模型,以防止副作用。
💡 使用建议
为了确保最大兼容性,建议使用FP16 / CUDA的执行模式加载模型。
📄 许可证
该模型遵循 microsoft-research-license 许可证。
Discord
如需进一步支持,以及讨论这些模型和人工智能相关话题,请加入我们的: TheBloke AI的Discord服务器
感谢与贡献方式
感谢 chirper.ai 团队!
感谢来自 gpus.llm-utils.org 的Clay!
很多人询问是否可以进行贡献。我喜欢提供模型并帮助他人,也希望能够花更多时间做这些事情,同时拓展到新的项目,如微调/训练。
如果你有能力且愿意贡献,我将非常感激,这将帮助我继续提供更多模型,并开始新的人工智能项目。
捐赠者将在任何人工智能/大语言模型/模型相关问题和请求上获得优先支持,还可访问私人Discord房间以及享受其他福利。
- Patreon: https://patreon.com/TheBlokeAI
- Ko-Fi: https://ko-fi.com/TheBlokeAI
特别感谢:Aemon Algiz。
Patreon特别提及:Michael Levine, 阿明, Trailburnt, Nikolai Manek, John Detwiler, Randy H, Will Dee, Sebastain Graf, NimbleBox.ai, Eugene Pentland, Emad Mostaque, Ai Maven, Jim Angel, Jeff Scroggin, Michael Davis, Manuel Alberto Morcote, Stephen Murray, Robert, Justin Joy, Luke @flexchar, Brandon Frisco, Elijah Stavena, S_X, Dan Guido, Undi ., Komninos Chatzipapas, Shadi, theTransient, Lone Striker, Raven Klaugh, jjj, Cap'n Zoog, Michel-Marie MAUDET (LINAGORA), Matthew Berman, David, Fen Risland, Omer Bin Jawed, Luke Pendergrass, Kalila, OG, Erik Bjäreholt, Rooh Singh, Joseph William Delisle, Dan Lewis, TL, John Villwock, AzureBlack, Brad, Pedro Madruga, Caitlyn Gatomon, K, jinyuan sun, Mano Prime, Alex, Jeffrey Morgan, Alicia Loh, Illia Dulskyi, Chadd, transmissions 11, fincy, Rainer Wilmers, ReadyPlayerEmma, knownsqashed, Mandus, biorpg, Deo Leter, Brandon Phillips, SuperWojo, Sean Connelly, Iucharbius, Jack West, Harry Royden McLaughlin, Nicholas, terasurfer, Vitor Caleffi, Duane Dunston, Johann-Peter Hartmann, David Ziegler, Olakabola, Ken Nordquist, Trenton Dambrowitz, Tom X Nguyen, Vadim, Ajan Kanaga, Leonard Tan, Clay Pascal, Alexandros Triantafyllidis, JM33133, Xule, vamX, ya boyyy, subjectnull, Talal Aujan, Alps Aficionado, wassieverse, Ari Malik, James Bentley, Woland, Spencer Kim, Michael Dempsey, Fred von Graf, Elle, zynix, William Richards, Stanislav Ovsiannikov, Edmond Seymore, Jonathan Leane, Martin Kemka, usrbinkat, Enrico Ros
感谢所有慷慨的赞助者和捐赠者!
再次感谢a16z的慷慨资助。



