StarCoder 项目介绍
项目简介
StarCoder 是一个强大的代码生成模型,拥有 155 亿个参数,支持 80 多种编程语言,训练数据来自于筛选后的 The Stack 数据集(v1.2)。该模型的训练采用了多查询注意力机制和一个长达 8192 词元的上下文窗口。其目标是在一个包含 1 万亿词元的数据集上进行填补并生成代码。StarCoder 项目的相关资源包括 GitHub 仓库 bigcode/Megatron-LM,以及 项目网站 和 学术论文等。
使用方法
预期用途
StarCoder 模型主要用于 GitHub 上的代码,因此其并不是一个指令模型,对诸如“写一个平方根计算函数”这样的命令不太适用。但通过使用 Tech Assistant 提示,可以将其转变为一个技术助手。
代码生成示例
# 安装 transformers
from transformers import AutoModelForCausalLM, AutoTokenizer
checkpoint = "bigcode/starcoder"
device = "cuda" # 如使用 GPU 或 "cpu"
tokenizer = AutoTokenizer.from_pretrained(checkpoint)
model = AutoModelForCausalLM.from_pretrained(checkpoint).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]))
限制
StarCoder 虽然支持多种编程语言,但大部分是基于英文的代码。因此虽然可以根据上下文生成代码片段,但不能保证生成的代码一定可行,可能存在缺陷、低效或潜在漏洞。
训练信息
模型架构
- 架构: 使用多查询注意力机制的 GPT-2 模型与填补目标
- 预训练步骤数: 250,000
- 预训练词元数: 1 万亿
- 精度: bfloat16
硬件信息
- GPU 数量: 512 Tesla A100
- 训练时长: 24 天(总计 320,256 GPU 小时预训练 + 11,208 GPU 小时 Python 微调)
- 训练 FLOPS: 8.46E+22
软件信息
- 协调工具: Megatron-LM
- 神经网络: PyTorch
- BP16(如适用): apex
许可证
StarCoder 模型基于 BigCode OpenRAIL-M v1 许可协议。完整的许可协议可以通过 此链接 查阅。对于有关许可协议的任何问题或使用限制的上诉,请发送邮件至 contact@bigcode-project.org。