模型简介
模型特点
模型能力
使用案例
🚀 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及其变体是新技术,存在使用风险,目前测试仅在英语环境进行,无法涵盖所有场景,模型可能产生不准确或令人反感的响应,开发者在部署应用前应进行安全测试和调整。请参阅负责任使用指南。



