英文

SantaCoder

SantaCoder Space Demo 上与模型一起玩耍。

目录

  • 模型概要
  • 用途
  • 限制
  • 训练
  • 授权
  • 引用
  • 模型概要

    SantaCoder模型是一系列1.1B参数模型,是在 The Stack (v1.1) 的Python、Java和JavaScript子集(排除了退出请求)上进行训练的。主要模型使用 Multi Query Attention ,2048个令牌的上下文窗口,并使用近似去重和代码注释比率作为过滤条件,并使用 Fill-in-the-Middle objective 进行训练。此外,还有几个模型是使用不同的过滤参数、体系结构和目标变化进行训练的。

    Model Architecture Objective Filtering
    mha MHA AR + FIM Base
    no-fim MQA AR Base
    fim MQA AR + FIM Base
    stars MQA AR + FIM GitHub stars
    fertility MQA AR + FIM Tokenizer fertility
    comments MQA AR + FIM Comment-to-code ratio
    dedup-alt MQA AR + FIM Stronger near-deduplication
    final MQA AR + FIM Stronger near-deduplication and comment-to-code ratio

    最终模型是表现最好的模型,训练时间是其他模型的两倍(236B个令牌)。此检查点是默认模型,位于主分支上。所有其他检查点都在以相应名称命名的单独分支上。

    用途

    预期用途

    该模型是在GitHub代码上进行训练的。因此,它不是一个指令模型,诸如“编写一个计算平方根的函数。”之类的命令效果不佳。您应该以源代码中出现的方式来表达命令,例如注释(例如 # 以下函数计算平方根 )或编写函数签名和文档字符串,然后让模型完成函数体。

    欢迎在社区选项卡中分享您的生成结果!

    如何使用

    生成

    # pip install -q transformers
    from transformers import AutoModelForCausalLM, AutoTokenizer
    
    checkpoint = "bigcode/santacoder"
    device = "cuda" # for GPU usage or "cpu" for CPU usage
    
    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]))
    

    加载其他检查点

    我们将每个实验的检查点上传到单独的分支,以及作为分支上的提交的中间检查点。您可以使用修订标志加载它们:

    model = AutoModelForCausalLM.from_pretrained(
        "bigcode/santacoder",
        revision="no-fim", # name of branch or commit hash
        trust_remote_code=True
    )
    

    归因和其他要求

    模型的预训练数据集仅过滤了许可证容许的数据。然而,模型可以逐字地从数据集中生成源代码。代码的许可证可能需要归属和/或其他特定要求,必须予以尊重。我们提供一个 search index ,让您在预训练数据中搜索生成的代码来确定其来源,并对您的代码进行正确归属。

    限制

    该模型是在Python、Java和JavaScript源代码上进行训练的。源代码中的主要语言是英语,虽然也存在其他语言。因此,该模型能够根据一定的上下文生成代码片段,但无法保证生成的代码能够按预期工作。它可能效率低下,包含错误或漏洞。

    训练

    模型

    • 架构: GPT-2模型,具有多查询注意力和填充中间目标
    • 预训练步骤: 600K
    • 预训练令牌: 2360亿个
    • 精度: float16

    硬件

    • GPU: 96台Tesla V100
    • 训练时间: 6.2天
    • 总FLOPS: 2.1 x 10e21

    软件

    许可证

    该模型的许可证为BigCode OpenRAIL-M v1 license agreement。您可以在 here 找到完整的协议。

    引用

    @article{allal2023santacoder,
      title={SantaCoder: don't reach for the stars!},
      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}
    }