🚀 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 容器 自行託管模型。