license: bigcode-openrail-m
datasets:
- bigcode/the-stack
language:
- code
programming_language:
- Java
- JavaScript
- Python
pipeline_tag: text-generation
inference: true
widget:
- text: 'def print_hello_world():'
example_title: Hello world
group: Python
model-index:
- name: SantaCoder
results:
- task:
type: text-generation
dataset:
type: nuprl/MultiPL-E
name: MultiPL HumanEval (Python)
metrics:
- name: pass@1
type: pass@1
value: 0.18
verified: false
- name: pass@10
type: pass@10
value: 0.29
verified: false
- name: pass@100
type: pass@100
value: 0.49
verified: false
- task:
type: text-generation
dataset:
type: nuprl/MultiPL-E
name: MultiPL MBPP (Python)
metrics:
- name: pass@1
type: pass@1
value: 0.35
verified: false
- name: pass@10
type: pass@10
value: 0.58
verified: false
- name: pass@100
type: pass@100
value: 0.77
verified: false
- task:
type: text-generation
dataset:
type: nuprl/MultiPL-E
name: MultiPL HumanEval (JavaScript)
metrics:
- name: pass@1
type: pass@1
value: 0.16
verified: false
- name: pass@10
type: pass@10
value: 0.27
verified: false
- name: pass@100
type: pass@100
value: 0.47
verified: false
- task:
type: text-generation
dataset:
type: nuprl/MultiPL-E
name: MultiPL MBPP (Javascript)
metrics:
- name: pass@1
type: pass@1
value: 0.28
verified: false
- name: pass@10
type: pass@10
value: 0.51
verified: false
- name: pass@100
type: pass@100
value: 0.7
verified: false
- task:
type: text-generation
dataset:
type: nuprl/MultiPL-E
name: MultiPL HumanEval (Java)
metrics:
- name: pass@1
type: pass@1
value: 0.15
verified: false
- name: pass@10
type: pass@10
value: 0.26
verified: false
- name: pass@100
type: pass@100
value: 0.41
verified: false
- task:
type: text-generation
dataset:
type: nuprl/MultiPL-E
name: MultiPL MBPP (Java)
metrics:
- name: pass@1
type: pass@1
value: 0.28
verified: false
- name: pass@10
type: pass@10
value: 0.44
verified: false
- name: pass@100
type: pass@100
value: 0.59
verified: false
- task:
type: text-generation
dataset:
type: loubnabnl/humaneval_infilling
name: HumanEval FIM (Python)
metrics:
- name: single_line
type: exact_match
value: 0.44
verified: false
- task:
type: text-generation
dataset:
type: nuprl/MultiPL-E
name: MultiPL HumanEval FIM (Java)
metrics:
- name: single_line
type: exact_match
value: 0.62
verified: false
- task:
type: text-generation
dataset:
type: nuprl/MultiPL-E
name: MultiPL HumanEval FIM (JavaScript)
metrics:
- name: single_line
type: exact_match
value: 0.6
verified: false
- task:
type: text-generation
dataset:
type: code_x_glue_ct_code_to_text
name: CodeXGLUE code-to-text (Python)
metrics:
- name: BLEU
type: bleu
value: 18.13
verified: false
SantaCoder

在SantaCoder Space演示中体验该模型。
目录
- 模型概述
- 使用
- 局限性
- 训练
- 许可证
- 引用
模型概述
SantaCoder模型系列是基于The Stack (v1.1)中Python、Java和JavaScript子集(已排除退出请求)训练的11亿参数模型。主模型采用多查询注意力机制,具有2048个标记的上下文窗口,训练时使用近重复去除和注释与代码比例作为筛选标准,并采用填充中间目标。此外,还有多个模型基于不同筛选参数、架构和目标变体训练而成。
模型 |
架构 |
目标 |
筛选 |
mha |
MHA |
AR + FIM |
基础 |
no-fim |
MQA |
AR |
基础 |
fim |
MQA |
AR + FIM |
基础 |
stars |
MQA |
AR + FIM |
GitHub星标 |
fertility |
MQA |
AR + FIM |
标记器效率 |
comments |
MQA |
AR + FIM |
注释与代码比例 |
dedup-alt |
MQA |
AR + FIM |
强近重复去除 |
final |
MQA |
AR + FIM |
强近重复去除及注释与代码比例 |
final
模型表现最佳,训练时长是其他模型的两倍(2360亿标记)。此检查点为默认模型,位于main
分支。其他检查点位于各自命名的独立分支。
使用
预期用途
模型基于GitHub代码训练,因此非指令型模型,类似"编写计算平方根的函数"的指令效果不佳。应以源代码中出现的命令形式表述,如注释(例如# 以下函数计算平方根
)或编写函数签名及文档字符串,让模型完成函数体。
欢迎在社区标签页分享您的生成结果!
使用方法
生成
from transformers import AutoModelForCausalLM, AutoTokenizer
checkpoint = "bigcode/santacoder"
device = "cuda"
tokenizer = AutoTokenizer.from_pretrained(checkpoint)
model = AutoModelForCausalLM.from_pretrained(checkpoint, trust_remote_code=True).to(device)
inputs = tokenizer.encode("def print_hello_world():", return_tensors="pt").to(device)
outputs = model.generate(inputs)
print(tokenizer.decode(outputs[0]))
填充中间
填充中间使用特殊标记标识输入输出的前缀/中间/后缀部分:
input_text = "<fim-prefix>def print_hello_world():\n <fim-suffix>\n print('Hello world!')<fim-middle>"
inputs = tokenizer.encode(input_text, return_tensors="pt").to(device)
outputs = model.generate(inputs)
print(tokenizer.decode(outputs[0]))
确保使用<fim-prefix>, <fim-suffix>, <fim-middle>
而非StarCoder模型中的<fim_prefix>, <fim_suffix>, <fim_middle>
。
加载其他检查点
各实验检查点上传至独立分支,中间检查点作为分支提交。可通过revision
参数加载:
model = AutoModelForCausalLM.from_pretrained(
"bigcode/santacoder",
revision="no-fim",
trust_remote_code=True
)
归属及其他要求
模型预训练数据集仅筛选了宽松许可证内容。尽管如此,模型可能生成与数据集完全相同的源代码。代码许可证可能要求归属或其他特定要求。我们提供搜索索引帮助您检索预训练数据,识别生成代码来源并正确归属。
局限性
模型基于Python、Java和JavaScript源代码训练。源代码主要使用英语,但也包含其他语言。因此,模型能在给定上下文时生成代码片段,但不能保证生成代码按预期工作,可能存在低效、错误或漏洞。
训练
模型
- 架构: 采用多查询注意力和填充中间目标的GPT-2模型
- 预训练步数: 60万
- 预训练标记: 2360亿
- 精度: float16
硬件
- GPU: 96块Tesla V100
- 训练时间: 6.2天
- 总FLOPS: 2.1 x 10e21
软件
许可证
模型采用BigCode OpenRAIL-M v1许可证协议,完整协议参见此处。
引用
@article{allal2023santacoder,
title={SantaCoder: 不要好高骛远!},
author={Allal, Loubna Ben and Li, Raymond and Kocetkov, Denis and Mou, Chenghao and Akiki, Christopher and Ferrandis, Carlos Munoz and Muennighoff, Niklas and Mishra, Mayank and Gu, Alex and Dey, Manan and others},
journal={arXiv preprint arXiv:2301.03988},
year={2023}
}