1. DeepSeek Coder 简介
DeepSeek Coder 由一系列代码语言模型组成,每个模型都在 2T 令牌上从头开始训练,其中 87% 的代码和 13% 的自然语言在中英文中组成。我们提供各种大小的代码模型,从 1B 到 33B 版本。每个模型都通过采用 16K 的窗口大小和额外的填空任务在项目级代码语料库上进行预训练,以支持项目级代码完成和填充。在编码功能方面,DeepSeek Coder 在多种编程语言和各种基准测试的开源代码模型中实现了最先进的性能。
-
海量训练数据:使用 2T 令牌从头开始训练,包括 87% 的代码和 13% 的语言数据,包括英文和中文。
-
高度灵活和可扩展:提供1B、5.7B、6.7B和33B的型号尺寸,使用户能够选择最适合他们需求的设置。
-
卓越的模型性能:在 HumanEval、MultiPL-E、MBPP、DS-1000 和 APPS 基准测试中公开可用的代码模型中具有最先进的性能。
-
高级代码补全能力:窗口大小 16K 和填空任务,支持项目级代码补全和填空任务。
支持的编程语言
['ada', 'agda', 'alloy', 'antlr', 'applescript', 'assembly', 'augeas', 'awk', 'batchfile', 'bluespec', 'c', 'c-sharp', 'clojure', 'cmake', 'coffeescript', 'common-lisp', 'cpp', 'css', 'cuda', 'dart', 'dockerfile', 'elixir', 'elm', 'emacs-lisp', 'erlang', 'f-sharp', 'fortran', 'glsl', 'go', 'groovy', 'haskell', 'html', 'idris', 'isabelle', 'java', 'java-server-pages', 'javascript', 'json', 'julia', 'jupyter-notebook', 'kotlin', 'lean', 'literate-agda', 'literate-coffeescript', 'literate-haskell', 'lua', 'makefile', 'maple', 'markdown', 'mathematica', 'matlab', 'ocaml', 'pascal', 'perl', 'php', 'powershell', 'prolog', 'protocol-buffer', 'python', 'r', 'racket', 'restructuredtext', 'rmarkdown', 'ruby', 'rust', 'sas', 'scala', 'scheme', 'shell', 'smalltalk', 'solidity', 'sparql', 'sql', 'stan', 'standard-ml', 'stata', 'systemverilog', 'tcl', 'tcsh', 'tex', 'thrift', 'typescript', 'verilog', 'vhdl', 'visual-basic', 'xslt', 'yacc', 'yaml', 'zig']
2. 评估结果
我们根据各种与编码相关的基准评估 DeepSeek Coder。 此处仅报告了 HumanEval(Python 和多语言)、MBPP 和 DS-1000 的结果:pass@1
结果表明,DeepSeek-Coder-Base-33B 的性能明显优于现有的开源代码 LLM。与 CodeLlama-34B 相比,它在 HumanEval Python、HumanEval Multilingual、MBPP 和 DS-1000 上分别领先 7.9%、9.3%、10.8% 和 5.9%。 令人惊讶的是,我们的 DeepSeek-Coder-Base-7B 达到了 CodeLlama-34B 的性能。 指令调整后的 DeepSeek-Coder-Instruct-33B 模型在 HumanEval 上优于 GPT35-turbo,并在 MBPP 上取得了与 GPT35-turbo 相当的结果。
更多评估详情可在详细评估中找到。
3. 数据创建和模型训练过程
数据创建
- 步骤 1:从 GitHub 收集代码数据,并应用与 StarCoder Data 相同的过滤规则来过滤数据。
- 第 2 步:解析同一存储库中文件的依赖关系,以根据其依赖关系重新排列文件位置。
- 第 3 步:连接依赖文件以形成单个示例,并使用 repo 级 minhash 进行重复数据删除。
- 第 4 步:进一步过滤掉低质量的代码,例如语法错误或可读性差的代码。
模型训练
- 第 1 步:最初使用由 87% 代码、10% 代码相关语言(Github Markdown 和 StackExchange)和 3% 非代码相关中文组成的数据集进行预训练。在此步骤中,使用 1.8T 令牌和 4K 窗口大小对模型进行预训练。
- 第 2 步:在额外的 200B 令牌上使用扩展的 16K 窗口大小进行进一步的预训练,从而产生基础模型 (DeepSeek-Coder-Base)。
- 第 3 步:指令 对指令数据的 2B 标记进行微调,从而产生指令调优模型 (DeepSeek-Coder-Instruct)。
4. 如何使用
在继续之前,您需要安装必要的依赖项。您可以通过运行以下命令来执行此作:
<span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><span style="color:#1f2328"><span style="color:var(--fgColor-default, var(--color-fg-default))"><span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><code>pip install -r requirements.txt
</code></span></span></span></span>
Hugging Face Space 上也提供了一个🤗演示,您可以使用 demo 文件夹中的 demo 在本地运行演示。(感谢所有 HF 团队的支持)app.py
以下是如何使用我们模型的一些示例。
1) 代码补全
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
tokenizer = AutoTokenizer.from_pretrained("deepseek-ai/deepseek-coder-6.7b-base", trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained("deepseek-ai/deepseek-coder-6.7b-base", trust_remote_code=True, torch_dtype=torch.bfloat16).cuda()
input_text = "#write a quick sort algorithm"
inputs = tokenizer(input_text, return_tensors="pt").to(model.device)
outputs = model.generate(**inputs, max_length=128)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
此代码将输出以下结果:
<span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><span style="color:#1f2328"><span style="color:var(--fgColor-default, var(--color-fg-default))"><span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><code>def quick_sort(arr):
if len(arr) <= 1:
return arr
pivot = arr[0]
left = []
right = []
for i in range(1, l