🚀 Refact-1.6B
Refact-1.6B 模型基于博客文章中的方法训练而来,现已正式发布🎉。该模型在生成数据上进行微调后,性能超越了 Replit 3b、Stability Code 3b 等众多模型,甚至几乎超越了规模大其十倍的 StarCoder 模型。它不仅智能快速,适合在 IDE 中进行代码补全,还支持多语言,并且可以作为聊天模型使用。
📦 安装指南
若要使用该模型,你可以下载 Refact 插件 立即开始使用,也可以使用 开源 Docker 容器 自行托管模型。
💻 使用示例
基础用法
Fill-in-the-middle 会使用特殊标记来识别输入和输出的前缀、中间和后缀部分:
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 pass@1 |
HumanEval pass@10 |
DeciCoder-1b |
1b |
19.1% |
|
Refact-1.6-fim |
1.6b |
32.0% |
53.0% |
StableCode |
3b |
20.2% |
33.8% |
ReplitCode v1 |
3b |
21.9% |
|
CodeGen2.5-multi |
7b |
28.4% |
47.5% |
CodeLlama |
7b |
33.5% |
59.6% |
StarCoder |
15b |
33.6% |
|
聊天模式性能对比
使用指令跟随(聊天)格式的 HumanEval 结果,与仅专门用于聊天的模型对比:
模型 |
规模 |
pass@1 |
pass@10 |
Refact-1.6-fim |
1.6b |
38.4% |
55.6% |
StableCode-instruct |
3b |
26.9% |
36.2% |
OctoGeeX |
6b |
44.7% |
|
CodeLlama-instruct |
7b |
34.8% |
64.3% |
CodeGen2.5-instruct |
7b |
36.2% |
60.87 |
CodeLlama-instruct |
13b |
42.7% |
71.6% |
StarChat-β |
15b |
33.5% |
|
OctoCoder |
15b |
46.2% |
|
🔧 技术细节
模型架构
此外,还使用了 LiON、Flash Attention 和 Early Dropout 等技术。
预训练
基础模型使用了仅包含宽松许可代码的自有数据集和开放文本数据集。成功的关键在于过滤:
- 仅使用英文文本
- 仅涉及计算机科学相关主题
- 进行了大量去重处理
文本与代码的比例为 50:50,模型训练了 1.2T 个标记。基础模型未发布,因为其 Fill-in-the-Middle (FIM) 功能容易重复,实际用途有限。若你仍需要,可在 Discord 上给我们留言。
微调
测试发现,仅 15% 经过质量过滤的开放 代码 指令跟随 数据集,就能提升几乎所有指标。为改进 FIM,还观察常见失败模式,并基于 The Stack dedup v1.1 准备了合成数据集。最终模型经过多次尝试,以使其在代码补全方面表现出色,并在广泛的指标上表现良好,最佳尝试使用了 40B 个标记。
模型统计信息
属性 |
详情 |
模型类型 |
LLAMA 类模型,采用多查询注意力机制 |
目标任务 |
Fill-in-the-Middle、聊天 |
标记上下文 |
4096 |
预训练标记 |
1.2T |
微调标记 |
40B |
精度 |
bfloat16 |
GPU |
64 个 NVIDIA A5000 |
训练时间 |
28 天 |
⚠️ 局限性和偏差
Refact-1.6B 模型使用英文文本进行训练,尽管在代码注释中见过更多语言,但在非英语语言上的性能较低。
📄 许可证
该模型遵循 BigScience OpenRAIL-M v1 许可协议。
📖 引用说明
若你使用此模型,请提供此页面的链接。