🚀 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 許可協議。
📖 引用說明
若你使用此模型,請提供此頁面的鏈接。