🚀 StarCoder
StarCoder是一个拥有155亿参数的模型,在80多种编程语言的代码数据上进行训练。它能根据一定上下文生成代码片段,借助特定提示还可成为技术助手,但生成的代码不一定能正常工作。
🚀 快速开始
你可以在 StarCoder Playground 上体验该模型。
✨ 主要特性
📦 安装指南
from transformers import AutoModelForCausalLM, AutoTokenizer
checkpoint = "bigcode/starcoder"
device = "cuda"
tokenizer = AutoTokenizer.from_pretrained(checkpoint)
model = AutoModelForCausalLM.from_pretrained(checkpoint).to(device)
💻 使用示例
基础用法
from transformers import AutoModelForCausalLM, AutoTokenizer
checkpoint = "bigcode/starcoder"
device = "cuda"
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]))
高级用法
Fill-in-the-middle
Fill-in-the-middle 使用特殊标记来识别输入和输出的前缀/中间/后缀部分:
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 模型是具有155亿参数的模型,在来自 The Stack (v1.2) 的80多种编程语言上进行训练,排除了选择退出请求的数据。该模型使用 Multi Query Attention、8192 个标记的上下文窗口,并在1万亿个标记上使用 Fill-in-the-Middle 目标 进行训练。
使用说明
预期用途
该模型在 GitHub 代码上进行训练,因此它不是一个指令模型,像“编写一个计算平方根的函数”这样的命令效果不佳。但是,通过使用 Tech Assistant prompt,可以将其转变为一个强大的技术助手。
归属及其他要求
该模型的预训练数据集仅过滤了许可性许可证的数据。尽管如此,该模型仍可以逐字生成数据集中的源代码。代码的许可证可能要求归属和/或其他特定要求,必须予以遵守。我们提供了一个 搜索索引,可用于搜索预训练数据,以确定生成的代码来源,并为你的代码应用适当的归属。
局限性
该模型在80多种编程语言的源代码上进行训练。源代码中主要使用的自然语言是英语,尽管也存在其他语言。因此,该模型能够在一定上下文下生成代码片段,但生成的代码不能保证按预期工作。它可能效率低下、包含错误或漏洞。目前,没有机制来检测模型先前生成的内容。有关模型局限性的深入讨论,请参阅 论文。
训练信息
模型信息
- 架构:具有多查询注意力和 Fill-in-the-Middle 目标的 GPT - 2 模型
- 预训练步骤:250k
- 预训练标记:1万亿
- 精度:bfloat16
硬件信息
- GPU:512 个 Tesla A100
- 训练时间:24 天(320,256 GPU 小时预训练 + 11,208 GPU 小时 Python 微调)
- 训练 FLOPS:8.46E+22
软件信息
🔧 技术细节
该模型使用了 Multi Query Attention 技术,这种技术可以在减少计算量的同时保持模型的性能。同时,它拥有 8192 个标记的上下文窗口,能够处理更长的输入序列。在训练过程中,采用了 Fill-in-the-Middle 目标,使得模型在处理代码生成任务时更加灵活。
📄 许可证
该模型遵循 BigCode OpenRAIL - M v1 许可协议。你可以在 此处 查看完整协议。
如有与许可协议相关的问题或对使用限制的申诉,请发送邮件至 contact@bigcode-project.org。
📚 引用
@article{li2023starcoder,
title={StarCoder: may the source be with you!},
author={Raymond Li and Loubna Ben Allal and Yangtian Zi and Niklas Muennighoff and Denis Kocetkov and Chenghao Mou and Marc Marone and Christopher Akiki and Jia Li and Jenny Chim and Qian Liu and Evgenii Zheltonozhskii and Terry Yue Zhuo and Thomas Wang and Olivier Dehaene and Mishig Davaadorj and Joel Lamy-Poirier and João Monteiro and Oleh Shliazhko and Nicolas Gontier and Nicholas Meade and Armel Zebaze and Ming-Ho Yee and Logesh Kumar Umapathi and Jian Zhu and Benjamin Lipkin and Muhtasham Oblokulov and Zhiruo Wang and Rudra Murthy and Jason Stillerman and Siva Sankalp Patel and Dmitry Abulkhanov and Marco Zocca and Manan Dey and Zhihan Zhang and Nour Fahmy and Urvashi Bhattacharyya and Wenhao Yu and Swayam Singh and Sasha Luccioni and Paulo Villegas and Maxim Kunakov and Fedor Zhdanov and Manuel Romero and Tony Lee and Nadav Timor and Jennifer Ding and Claire Schlesinger and Hailey Schoelkopf and Jan Ebert and Tri Dao and Mayank Mishra and Alex Gu and Jennifer Robinson and Carolyn Jane Anderson and Brendan Dolan-Gavitt and Danish Contractor and Siva Reddy and Daniel Fried and Dzmitry Bahdanau and Yacine Jernite and Carlos Muñoz Ferrandis and Sean Hughes and Thomas Wolf and Arjun Guha and Leandro von Werra and Harm de Vries},
year={2023},
eprint={2305.06161},
archivePrefix={arXiv},
primaryClass={cs.CL}
}
📋 信息表格
属性 |
详情 |
模型类型 |
具有155亿参数,基于GPT - 2架构,使用多查询注意力和Fill - in - the - Middle目标的代码生成模型 |
训练数据 |
来自 The Stack (v1.2) 的80多种编程语言代码数据,排除选择退出请求的数据 |
训练步骤 |
250k |
训练标记 |
1万亿 |
精度 |
bfloat16 |
硬件 |
512个Tesla A100 GPU,训练24天(320,256 GPU小时预训练 + 11,208 GPU小时Python微调) |
软件 |
编排工具为 Megatron - LM,神经网络框架为 PyTorch,BP16(如适用)为 apex |
许可证 |
BigCode OpenRAIL - M v1 |