🚀 Refact-1.6B-fim - GGUF
Refact-1.6B-fim - GGUF是一款代码生成模型,在代码补全和聊天交互方面表现出色。它在多个代码评估指标上超越了同类型模型,且支持多语言,可在IDE中为开发者提供高效的代码补全服务。
🚀 快速开始
你可以通过下载Refact插件立即开始使用该模型,也可以使用开源Docker容器自行托管模型。
代码补全示例
from transformers import AutoModelForCausalLM, AutoTokenizer
checkpoint = "smallcloudai/Refact-1_6B-fim"
device = "cuda"
tokenizer = AutoTokenizer.from_pretrained(checkpoint)
model = AutoModelForCausalLM.from_pretrained(checkpoint, trust_remote_code=True).to(device)
prompt = '<fim_prefix>def print_hello_world():\n """<fim_suffix>\n print("Hello world!")<fim_middle>'
inputs = tokenizer.encode(prompt, return_tensors="pt").to(device)
outputs = model.generate(inputs, max_length=100, temperature=0.2)
print("-"*80)
print(tokenizer.decode(outputs[0]))
聊天交互示例
prompt_template = "<empty_output>SYSTEM {system}\n" \
"<empty_output>USER {query}\n" \
"<empty_output>ASSISTANT"
prompt = prompt_template.format(system="You are a programming assistant",
query="How do I sort a list in Python?")
✨ 主要特性
- 高性能:经过在生成数据上的微调,该模型在
HumanEval
等指标上超越了Replit 3b、Stability Code 3b等模型,几乎超越了比它大十倍的StarCoder模型。
- 多语言支持:支持多种编程语言,可在不同的编程场景中使用。
- 聊天功能:除了代码补全,该模型还能作为聊天机器人,在聊天交互中表现良好。
📦 安装指南
暂未提供相关安装步骤。
💻 使用示例
基础用法
from transformers import AutoModelForCausalLM, AutoTokenizer
checkpoint = "smallcloudai/Refact-1_6B-fim"
device = "cuda"
tokenizer = AutoTokenizer.from_pretrained(checkpoint)
model = AutoModelForCausalLM.from_pretrained(checkpoint, trust_remote_code=True).to(device)
prompt = '<fim_prefix>def print_hello_world():\n """<fim_suffix>\n print("Hello world!")<fim_middle>'
inputs = tokenizer.encode(prompt, return_tensors="pt").to(device)
outputs = model.generate(inputs, max_length=100, temperature=0.2)
print("-"*80)
print(tokenizer.decode(outputs[0]))
高级用法
prompt_template = "<empty_output>SYSTEM {system}\n" \
"<empty_output>USER {query}\n" \
"<empty_output>ASSISTANT"
prompt = prompt_template.format(system="You are a programming assistant",
query="How do I sort a list in Python?")
📚 详细文档
模型信息
属性 |
详情 |
模型类型 |
Refact-1.6B-fim |
训练数据 |
书籍、arxiv论文、C4数据集、falcon-refinedweb、维基百科、GitHub问题、Stack Markdown、宽松许可的GitHub代码自制数据集、bigcode/the-stack-dedup、rombodawg/2XUNCENSORED_MegaCodeTraining188k、bigcode/commitpackft |
评估指标 |
code_eval |
库名称 |
transformers |
模型性能
任务 |
数据集 |
指标 |
值 |
文本生成 |
openai_humaneval (HumanEval) |
pass@1 (T=0.01) |
32.0 |
文本生成 |
openai_humaneval (HumanEval) |
pass@1 (T=0.2) |
31.5 |
文本生成 |
openai_humaneval (HumanEval) |
pass@10 (T=0.8) |
53.0 |
文本生成 |
openai_humaneval (HumanEval) |
pass@100 (T=0.8) |
76.9 |
文本生成 |
bigcode/humanevalpack (HumanEvalSynthesize Python) |
pass@1 (T=0.2) |
35.8 |
文本生成 |
bigcode/humanevalpack (HumanEvalSynthesize JavaScript) |
pass@1 (T=0.2) |
31.6 |
... |
... |
... |
... |
架构
预训练
- 数据集:使用了包含宽松许可代码的自有数据集和开放文本数据集。
- 过滤规则:仅使用英语文本,只包含与计算机科学相关的主题,并进行了大量去重处理。
- 文本与代码比例:50:50
- 训练令牌数:1.2T
微调
- 数据集:使用了开放的代码指令跟随数据集和合成数据集。
- 微调策略:通过添加空补全、单行补全、多行补全等数据,使模型在代码补全时更实用。
- 最终模型:经过多次尝试,最佳尝试使用了40B令牌。
🔧 技术细节
量化变体
- 传统量化:Q4_0、Q4_1、Q5_0、Q5_1和Q8是传统的量化类型,虽然是旧类型,但仍然完全受支持。
- K量化:K量化旨在通过在模型的特定部分使用不同级别的量化来优化性能、文件大小和内存负载。如果可能,建议使用K量化。
模型局限性和偏差
该模型在英语文本上进行训练,对于非英语语言的性能可能较低。
📄 许可证
该模型遵循BigScience OpenRAIL-M v1许可协议。
🤝 支持作者
作者正在筹备赞助/众筹活动,以继续提供有价值的资源和维护模型。你可以通过以下链接支持作者的工作: