🚀 Refact-1.6B
Refact-1.6B 是一款专为代码生成和补全设计的模型。通过在生成数据上进行微调,它在多项指标上超越了同类型的其他模型,甚至接近比其大十倍的 StarCoder 模型。不仅如此,该模型还支持多语言,并且可以作为聊天机器人使用,为编程工作提供了极大的便利。

✨ 主要特性
- 高性能代码补全:在代码补全任务中表现出色,超越了 Replit 3b、Stability Code 3b 等模型,接近 StarCoder 的性能。
- 多语言支持:支持多种编程语言,在 MultiPL-HumanEval 等多语言评估中展现出良好的性能。
- 聊天功能:可以作为聊天机器人使用,在指令跟随(聊天)格式下的 HumanEval 结果中表现优异。
📦 安装指南
文档未提供具体安装步骤,可参考示例代码中的依赖安装命令:
pip install -q transformers
💻 使用示例
基础用法
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% |
|
聊天模式对比
模型 |
大小 |
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% |
|
模型架构
预训练
- 数据集:使用了包含宽松许可证代码的自有数据集和开放文本数据集。
- 过滤策略:仅使用英语文本,仅保留与计算机科学相关的主题,并进行了大量去重处理。
- 训练参数:文本与代码的比例为 50:50,模型训练了 1.2T 个标记。
微调
- 数据来源:15% 的开放代码指令跟随数据集,85% 的自定义微调数据集。
- 优化目标:提高模型在代码补全任务中的性能,并在多个指标上取得良好表现。
- 训练参数:最佳尝试使用了 40B 个标记,训练时间为 28 天。
模型统计信息
属性 |
详情 |
架构 |
类 LLAMA 模型,采用多查询注意力机制 |
目标任务 |
中间填充、聊天 |
标记上下文 |
4096 |
预训练标记 |
1.2T |
微调标记 |
40B |
精度 |
bfloat16 |
GPU 数量 |
64 块 NVidia A5000 |
训练时间 |
28 天 |
🔧 技术细节
- 填充中间(Fill-in-the-middle):使用特殊标记
<fim_prefix>
、<fim_suffix>
和 <fim_middle>
来识别输入和输出的前缀、中间和后缀部分。
- 聊天格式:使用特定的模板
<empty_output>SYSTEM {system}\n<empty_output>USER {query}\n<empty_output>ASSISTANT
来构建聊天提示。
📄 许可证
该模型遵循 BigScience OpenRAIL-M v1 许可协议。
📚 引用
如果您使用了此模型,请提供此页面的链接。
⚠️ 重要提示
Refact-1.6B 模型是在英语文本上进行训练的,因此在非英语语言上的性能可能会有所下降。
💡 使用建议
您可以通过下载 Refact 插件 立即开始使用该模型,也可以使用 开源 Docker 容器 自行托管模型。