英文

InCoder 6B

一个在代码上使用因果掩码目标进行训练的6B参数的解码器-Transformer模型,它允许插入/填充代码以及标准的从左到右生成。

该模型是在公共开源存储库上进行训练的,这些存储库具有宽松的非版权限制许可证(Apache 2.0、MIT、BSD-2或BSD-3),来源于GitHub、GitLab和StackOverflow。这些存储库主要包含Python和JavaScript代码,但也包括28种语言的代码,以及StackOverflow的代码。

有关更多信息,请参阅我们的:

还可以使用较小的1B参数模型,URL地址为 facebook/incoder-1B

要求

pytorch、tokenizers和transformers。由于预标记器发生了变化,我们的模型需要HF的tokenizers >= 0.12.1。

pip install torch
pip install "tokenizers>=0.12.1"
pip install transformers

用法

模型

参见 https://github.com/dpfried/incoder 中的示例代码。

这个6B模型有两个版本:完全精度(float32)的权重版本(存储在main分支中)和半精度(float16)的权重版本(存储在float16分支中)。可以按如下方式加载版本:

完全精度(float32):如果您打算对模型进行微调,应使用此版本(注意:这将占用大量GPU内存,可能需要多个GPU,我们尚未尝试在transformers中训练模型,它是在Fairseq中训练的)。加载方式如下:

model = AutoModelForCausalLM.from_pretrained("facebook/incoder-6B")

半精度(float16):如果您只进行推理(即从模型中生成),则可以使用此版本。它将使用更少的GPU内存,并在加载模型时使用更少的RAM。使用此版本时,应该能够在16 GB GPU上进行推理(批处理大小为1,序列长度至少为256)。加载方式如下:

model = AutoModelForCausalLM.from_pretrained("facebook/incoder-6B", revision="float16", torch_dtype=torch.float16, low_cpu_mem_usage=True)

分词器

tokenizer = AutoTokenizer.from_pretrained("facebook/incoder-6B")

注意:incoder-1B和incoder-6B的分词器是相同的,因此也可以使用'facebook/incoder-1B'。

在调用tokenizer.decode时,重要的是将clean_up_tokenization_spaces=False传递给避免删除标点符号之后的空格:

tokenizer.decode(tokenizer.encode("from ."), clean_up_tokenization_spaces=False)

(注意:编码在“<|endoftext|>”令牌之前,因为它标记了我们的模型的文档的开始。可以通过将skip_special_tokens=True传递给tokenizer.decode从解码输出中删除此令牌。)

许可证

CC-BY-NC 4.0

鸣谢

该模型由Daniel Fried、Armen Aghajanyan、Jessy Lin、Sida Wang、Eric Wallace、Freda Shi、Ruiqi Zhong、Wen-tau Yih、Luke Zettlemoyer和Mike Lewis开发。

感谢HuggingFace的Lucile Saulnier、Leandro von Werra、Nicolas Patry、Suraj Patil、Omar Sanseviero和其他人对模型发布的帮助,以及对我们的演示代码提供基础的Naman Goyal和Stephen Roller的帮助!