DeepSeek Coder:开启代码自动编写的新时代

360影视 2025-01-28 16:03 2

摘要:最近 DeepSeek 在全球掀起了热潮,其以低成本获得了世界领先模型的性能,引发了科技行业的广泛关注。在其引人注目的推理和问答能力以外,DeepSeek 也致力于为代码编写提效,推出的 DeepSeek Coder 吸引着众多开发者的目光。

最近 DeepSeek 在全球掀起了热潮,其以低成本获得了世界领先模型的性能,引发了科技行业的广泛关注。在其引人注目的推理和问答能力以外,DeepSeek 也致力于为代码编写提效,推出的 DeepSeek Coder 吸引着众多开发者的目光。

DeepSeek Coder 是 DeepSeek 团队开发维护的代码生成项目,仓库位于 https://github.com/deepseek-ai/DeepSeek-Coder。DeepSeek Coder 组合了一系列的代码语言模型,每种语言使用了达 2T 的海量 token,并提供了从 1B 到 33B 不等的多种规模的模型,达到了在多语言编程领域的领先水准。

DeepSeek Coder 有以下特点:

海量训练数据:使用了 2T 的 Token 进行训练,训练数据包括 87% 的代码和 13% 的自然语言数据(中文和英文)高度灵活和可扩展:提供1B、5.7B、6.7B和33B不同规模的模型,使用户能够按需使用卓越的模型性能:在 HumanEval、MultiPL-E、MBPP、DS-1000 和 APPS 基准测试中,取得了在公开代码模型中的领先水平高级代码补全能力:支持项目级别的代码补全和填空任务

使用 DeepSeek Coder 其实并不复杂,按照以下步骤操作,开发者就能快速体验其强大功能。

安装依赖:在使用前,需要先安装必要的依赖项。打开命令行工具,运行pip install -r requirements.txt

完成依赖的安装和环境搭建。

代码补全:以 Python 代码为例,首先导入相关的库,然后初始化模型:from transformers import AutoTokenizer, AutoModelForCausalLMimport torchtokenizer = 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

接着,提供输入的文本,经过 tokenizer 解析后,输入到模型中进行生成,最终得到一个快排的算法实现代码:

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))

运行这段代码,模型就会输出快速排序算法的 Python 代码:

def quick_sort(arr):if len(arr)


3. 代码插入:通过提供需要插入代码的源代码块,同样经过模型生成,就能自动插入缺失的代码:

from transformers import AutoTokenizer, AutoModelForCausalLMimport torchtokenizer = 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).cudainput_text = """def quick_sort(arr):if len(arr) if arr[i] """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)[len(input_text):])

运行程序,会生成以下代码,能够合理填补源代码的空缺:

for i in range(1, len(arr)):


4. 聊天模型推理:DeepSeek Coder 也支持与模型进行交互,实现聊天式的代码生成:

from transformers import AutoTokenizer, AutoModelForCausalLMimport torchtokenizer = AutoTokenizer.from_pretrained("deepseek-ai/deepseek-coder-6.7b-instruct", trust_remote_code=True)model = AutoModelForCausalLM.from_pretrained("deepseek-ai/deepseek-coder-6.7b-instruct", trust_remote_code=True, torch_dtype=torch.bfloat16).cudamessages=[{ 'role': 'user', 'content': "write a quick sort algorithm in python."}]inputs = tokenizer.apply_chat_template(messages, add_generation_prompt=True, return_tensors="pt").to(model.device)# tokenizer.eos_token_id is the id of tokenoutputs = model.generate(inputs, max_new_tokens=512, do_sample=False, top_k=50, top_p=0.95, num_return_sequences=1, eos_token_id=tokenizer.eos_token_id)print(tokenizer.decode(outputs[0][len(inputs[0]):], skip_special_tokens=True))

在这里,通过提供一条聊天的消息,就能够实现与常见的聊天对话式的交互。运行程序,会返回包含相关代码的富文本聊天消息:

Sure, here is a simple implementation of the Quick Sort algorithm in Python:def quick_sort(arr):if len(arr) pivot]return quick_sort(less_than_pivot) + [pivot] + quick_sort(greater_than_pivot)# Test the functionarr = [10, 7, 8, 9, 1, 5]print("Original array:", arr)print("Sorted array:", quick_sort(arr))This code works by selecting a 'pivot' element from the array and partitioning the other elements into two sub-arrays, according to whether they are less than or greater than the pivot. The pivot element is then in its final position. The process is then repeated for the sub-arrays.

5. 仓库级别的代码补全:DeepSeek Coder 性能优异,已经能支持代码仓库级别的大量代码的补全,实现更为准确和合理的编码提效。


6. 微调模型:DeepSeek Coder 也为用户提供了脚本,以便在下游任务上进行模型微调。相应的脚本位于 finetune/finetune_deepseekcoder.py,该脚本支持使用 DeepSpeed 进行训练。首先安装依赖:

pip install -r finetune/requirements.txt

然后按照示例数据集格式准备训练数据,每行都是一个 json 序列化的字符串,其中包含两个必填字段和 .instruction,output。数据准备完成后,就可以使用示例脚本进行参数微调了。

DeepSeek Coder 的出现,无疑为代码开发领域带来了诸多便利,其较低的成本和优越的性能,使其成为难以忽视的编码利器。

DeepSeek Coder 可以帮助开发者快速补全代码,减少重复和基础代码的编写,大大提高开发效率。而对于初学者而言,它就像是一个随时在线的编程导师,能够帮助学习编程知识和理解代码逻辑。

乘着 DeepSeek 的春风,DeepSeek Coder 将凭借其强大的性能,在编程领域中扮演重要角色,值得广大开发者深入探索和应用。

来源:每日开源代码

相关推荐