模型概述
模型特點
模型能力
使用案例
🚀 Codellama 70B Instruct - GGUF
本項目提供了Codellama 70B Instruct模型的GGUF格式文件,可用於代碼生成和理解任務,支持多種量化方法和運行環境。
🚀 快速開始
下載模型
你可以通過以下幾種方式下載GGUF文件:
- 自動下載:LM Studio、LoLLMS Web UI、Faraday.dev等客戶端/庫會自動下載模型,並提供可用模型列表供你選擇。
- text-generation-webui:在“Download Model”中輸入模型倉庫地址
TheBloke/CodeLlama-70B-Instruct-GGUF
,並指定要下載的文件名,如codellama-70b-instruct.Q4_K_M.gguf
,然後點擊“Download”。 - 命令行:推薦使用
huggingface-hub
Python庫進行下載。
pip3 install huggingface-hub
huggingface-cli download TheBloke/CodeLlama-70B-Instruct-GGUF codellama-70b-instruct.Q4_K_M.gguf --local-dir . --local-dir-use-symlinks False
運行模型
llama.cpp命令示例
./main -ngl 35 -m codellama-70b-instruct.Q4_K_M.gguf --color -c 4096 --temp 0.7 --repeat_penalty 1.1 -n -1 -p "Source: system\n\n {system_message}<step> Source: user\n\n {prompt} <step> Source: assistant"
-ngl
:指定要卸載到GPU的層數,若沒有GPU加速可移除該參數。-c
:指定所需的序列長度,較長的序列長度需要更多資源,可根據情況調整。- 若要進行聊天式對話,將
-p <PROMPT>
參數替換為-i -ins
。
在text-generation-webui中運行
更多說明可參考text-generation-webui文檔:text-generation-webui/docs/04 ‐ Model Tab.md。
從Python代碼運行
可以使用llama-cpp-python或ctransformers庫從Python使用GGUF模型。推薦使用llama-cpp-python。
from llama_cpp import Llama
# 下載模型文件
llm = Llama(
model_path="./codellama-70b-instruct.Q4_K_M.gguf",
n_ctx=4096,
n_threads=8,
n_gpu_layers=35
)
# 簡單推理示例
output = llm(
"Source: system\n\n {system_message}<step> Source: user\n\n {prompt} <step> Source: assistant",
max_tokens=512,
stop=["</s>"],
echo=True
)
# 聊天完成API
llm = Llama(model_path="./codellama-70b-instruct.Q4_K_M.gguf", chat_format="llama-2")
llm.create_chat_completion(
messages = [
{"role": "system", "content": "You are a story writing assistant."},
{
"role": "user",
"content": "Write a story about llamas."
}
]
)
✨ 主要特性
- 多種量化方法:提供了Q2_K、Q3_K、Q4_K等多種量化方法,可根據需求選擇不同的量化文件。
- 廣泛的兼容性:與llama.cpp、text-generation-webui、KoboldCpp等多種客戶端和庫兼容。
- 支持GPU加速:可以將部分層卸載到GPU以提高運行速度。
📦 安裝指南
安裝依賴庫
pip3 install huggingface-hub
若要加速下載,可安裝hf_transfer
:
pip3 install hf_transfer
並設置環境變量:
HF_HUB_ENABLE_HF_TRANSFER=1
安裝llama-cpp-python
# 無GPU加速
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
# 有Metal GPU加速(僅macOS)
CMAKE_ARGS="-DLLAMA_METAL=on" pip install llama-cpp-python
💻 使用示例
基礎用法
from llama_cpp import Llama
llm = Llama(
model_path="./codellama-70b-instruct.Q4_K_M.gguf",
n_ctx=4096,
n_threads=8,
n_gpu_layers=35
)
output = llm(
"Source: system\n\n {system_message}<step> Source: user\n\n {prompt} <step> Source: assistant",
max_tokens=512,
stop=["</s>"],
echo=True
)
print(output)
高級用法
from llama_cpp import Llama
llm = Llama(model_path="./codellama-70b-instruct.Q4_K_M.gguf", chat_format="llama-2")
chat_messages = [
{"role": "system", "content": "You are a helpful and honest code assistant expert in JavaScript. Please, provide all answers to programming questions in JavaScript"},
{"role": "user", "content": "Write a function that computes the set of sums of all contiguous sublists of a given list."}
]
response = llm.create_chat_completion(messages=chat_messages)
print(response)
📚 詳細文檔
關於GGUF
GGUF是llama.cpp團隊在2023年8月21日引入的新格式,用於替代不再受支持的GGML格式。以下是一些已知支持GGUF的客戶端和庫:
- llama.cpp
- text-generation-webui
- KoboldCpp
- GPT4All
- LM Studio
- LoLLMS Web UI
- Faraday.dev
- llama-cpp-python
- candle
- ctransformers
可用倉庫
- AWQ模型(用於GPU推理)
- GPTQ模型(用於GPU推理,有多種量化參數選項)
- 2、3、4、5、6和8位GGUF模型(用於CPU+GPU推理)
- Code Llama的原始未量化fp16模型(pytorch格式,用於GPU推理和進一步轉換)
提示模板
Source: system
{system_message}<step> Source: user
{prompt} <step> Source: assistant
兼容性
這些量化的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 | 使用場景 |
---|---|---|---|---|---|
codellama-70b-instruct.Q2_K.gguf | Q2_K | 2 | 25.46 GB | 27.96 GB | 質量損失顯著,不建議用於大多數場景 |
codellama-70b-instruct.Q3_K_S.gguf | Q3_K_S | 3 | 29.92 GB | 32.42 GB | 非常小,質量損失高 |
codellama-70b-instruct.Q3_K_M.gguf | Q3_K_M | 3 | 33.27 GB | 35.77 GB | 非常小,質量損失高 |
codellama-70b-instruct.Q3_K_L.gguf | Q3_K_L | 3 | 36.15 GB | 38.65 GB | 小,質量損失較大 |
codellama-70b-instruct.Q4_0.gguf | Q4_0 | 4 | 38.87 GB | 41.37 GB | 舊版本;小,質量損失非常高,建議使用Q3_K_M |
codellama-70b-instruct.Q4_K_S.gguf | Q4_K_S | 4 | 39.25 GB | 41.75 GB | 小,質量損失較大 |
codellama-70b-instruct.Q4_K_M.gguf | Q4_K_M | 4 | 41.42 GB | 43.92 GB | 中等,質量平衡,推薦使用 |
codellama-70b-instruct.Q5_0.gguf | Q5_0 | 5 | 47.46 GB | 49.96 GB | 舊版本;中等,質量平衡,建議使用Q4_K_M |
codellama-70b-instruct.Q5_K_S.gguf | Q5_K_S | 5 | 47.46 GB | 49.96 GB | 大,質量損失低,推薦使用 |
codellama-70b-instruct.Q5_K_M.gguf | Q5_K_M | 5 | 48.75 GB | 51.25 GB | 大,質量損失非常低,推薦使用 |
codellama-70b-instruct.Q6_K.gguf | Q6_K | 6 | 56.59 GB | 59.09 GB | 非常大,質量損失極低 |
codellama-70b-instruct.Q8_0.gguf | Q8_0 | 8 | 73.29 GB | 75.79 GB | 非常大,質量損失極低,不建議使用 |
注意:上述RAM數字假設沒有GPU卸載。如果將層卸載到GPU,將減少RAM使用並使用VRAM。
Q6_K和Q8_0文件是拆分的,需要合併
注意:HF不支持上傳大於50GB的文件,因此Q6_K和Q8_0文件已作為拆分文件上傳。
點擊查看Q6_K和Q8_0文件的說明
q6_K
請下載:
codellama-70b-instruct.Q6_K.gguf-split-a
codellama-70b-instruct.Q6_K.gguf-split-b
q8_0
請下載:
codellama-70b-instruct.Q8_0.gguf-split-a
codellama-70b-instruct.Q8_0.gguf-split-b
合併文件的方法如下:
Linux和macOS:
cat codellama-70b-instruct.Q6_K.gguf-split-* > codellama-70b-instruct.Q6_K.gguf && rm codellama-70b-instruct.Q6_K.gguf-split-*
cat codellama-70b-instruct.Q8_0.gguf-split-* > codellama-70b-instruct.Q8_0.gguf && rm codellama-70b-instruct.Q8_0.gguf-split-*
Windows命令行:
COPY /B codellama-70b-instruct.Q6_K.gguf-split-a + codellama-70b-instruct.Q6_K.gguf-split-b codellama-70b-instruct.Q6_K.gguf
del codellama-70b-instruct.Q6_K.gguf-split-a codellama-70b-instruct.Q6_K.gguf-split-b
COPY /B codellama-70b-instruct.Q8_0.gguf-split-a + codellama-70b-instruct.Q8_0.gguf-split-b codellama-70b-instruct.Q8_0.gguf
del codellama-70b-instruct.Q8_0.gguf-split-a codellama-70b-instruct.Q8_0.gguf-split-b
如何使用LangChain
以下是使用llama-cpp-python和ctransformers與LangChain的指南:
🔧 技術細節
模型架構
Code Llama是一個自迴歸語言模型,使用了優化的Transformer架構,經過最多16k令牌的微調,此變體不支持長達100k令牌的長上下文。
訓練信息
- 訓練時間:Code Llama及其變體在2023年1月至2024年1月期間進行訓練。
- 硬件和軟件:使用自定義訓練庫,在Meta的研究超級集群上進行訓練和微調。
- 碳足跡:訓練所有12個Code Llama模型總共需要1400K GPU小時的A100 - 80GB硬件計算(TDP為350 - 400W),估計總排放量為228.55 tCO2eq,其中100%由Meta的可持續發展計劃抵消。
📄 許可證
本模型使用自定義商業許可證,詳情請見:https://ai.meta.com/resources/models-and-libraries/llama-downloads/。
原模型卡信息
模型概述
Code Llama是一系列預訓練和微調的生成文本模型,參數規模從70億到700億不等。本倉庫包含70B指令微調版本的Hugging Face Transformers格式模型,用於一般代碼合成和理解。
模型能力
- [x] 代碼補全
- [ ] 填充
- [x] 指令/聊天
- [ ] Python專家
模型使用
安裝transformers
:
pip install transformers accelerate
聊天使用:70B指令模型使用與較小版本不同的提示模板,建議使用內置聊天模板:
from transformers import AutoTokenizer, AutoModelForCausalLM
import transformers
import torch
model_id = "codellama/CodeLlama-70b-Instruct-hf"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
model_id,
torch_dtype=torch.float16,
device_map="auto",
)
chat = [
{"role": "system", "content": "You are a helpful and honest code assistant expert in JavaScript. Please, provide all answers to programming questions in JavaScript"},
{"role": "user", "content": "Write a function that computes the set of sums of all contiguous sublists of a given list."},
]
inputs = tokenizer.apply_chat_template(chat, return_tensors="pt").to("cuda")
output = model.generate(input_ids=inputs, max_new_tokens=200)
output = output[0].to("cpu")
print(tokenizer.decode(output))
也可用於文本或代碼補全:
from transformers import AutoTokenizer
import transformers
import torch
model_id = "codellama/CodeLlama-70b-hf"
tokenizer = AutoTokenizer.from_pretrained(model_id)
pipeline = transformers.pipeline(
"text-generation",
model=model_id,
torch_dtype=torch.float16,
device_map="auto",
)
sequences = pipeline(
'def fibonacci(',
do_sample=True,
temperature=0.2,
top_p=0.9,
num_return_sequences=1,
eos_token_id=tokenizer.eos_token_id,
max_length=100,
)
for seq in sequences:
print(f"Result: {seq['generated_text']}")
聊天提示
Code Llama 70B Instruct使用與之前的Llama 2或Code Llama模型不同的聊天提示格式,建議使用分詞器的聊天模板。若需手動構建字符串或令牌,可參考以下示例:
chat = [
{"role": "system", "content": "System prompt "},
{"role": "user", "content": "First user query"},
{"role": "assistant", "content": "Model response to first query"},
{"role": "user", "content": "Second user query"},
]
output = "<s>"
for m in chat:
output += f"Source: {m['role']}\n\n {m['content'].strip()}"
output += " <step> "
output += "Source: assistant\nDestination: user\n\n "
print(output)
模型詳情
- 模型開發者:Meta
- 變體:Code Llama有四種模型大小和三種變體:基礎模型、Python模型、指令模型,所有變體均有7B、13B、34B和70B參數版本。
- 輸入輸出:模型僅接受文本輸入並生成文本輸出。
- 模型日期:2023年1月至2024年1月訓練。
- 狀態:靜態模型,基於離線數據集訓練,未來版本將根據社區反饋改進模型安全性。
- 研究論文:Code Llama: Open Foundation Models for Code 或 arXiv頁面
預期用途
- 預期用例:用於英語和相關編程語言的商業和研究,基礎模型可用於代碼合成和理解,Python模型專注於Python編程,指令模型用於代碼助手和生成應用。
- 超出範圍的用途:違反適用法律法規、使用非英語語言、違反可接受使用政策和許可協議的使用。
評估結果
研究論文第3節提供主要模型評估和詳細消融分析,第4節提供安全評估。
倫理考慮和侷限性
Code Llama及其變體是新技術,存在使用風險,目前測試僅在英語環境進行,無法涵蓋所有場景,模型可能產生不準確或令人反感的響應,開發者在部署應用前應進行安全測試和調整。請參閱負責任使用指南。



