模型概述
模型特點
模型能力
使用案例
🚀 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的慷慨資助。



