Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >突破性的多语言代码大模型基CodeShell:引领AI编程新时代

突破性的多语言代码大模型基CodeShell:引领AI编程新时代

原创
作者头像
汀丶人工智能
发布于 2023-11-03 08:55:43
发布于 2023-11-03 08:55:43
57400
代码可运行
举报
文章被收录于专栏:NLP/KGNLP/KG
运行总次数:0
代码可运行

突破性的多语言代码大模型基CodeShell:北京大学与四川天府银行联合打造,引领AI编程新时代

1.CodeShell简介

CodeShell是北京大学知识计算实验室联合四川天府银行AI团队研发的多语言代码大模型基座。它拥有70亿参数,经过对五千亿Tokens的训练,并具有8192的上下文窗口长度。CodeShell在权威的代码评估Benchmark(HumanEval与MBPP)上取得了同等规模最好的性能。这个项目为多语言代码处理和理解提供了有力的工具

  • 能力点
代码语言:txt
AI代码解释
复制
* 强大的性能:CodelShell在HumanEval和MBPP上达到了7B代码基座大模型的最优性能
代码语言:txt
AI代码解释
复制
* 完整的体系:除了代码大模型,同时开源IDE(VS Code与JetBrains)插件,形成开源的全栈技术体系
代码语言:txt
AI代码解释
复制
* 轻量化部署:支持本地C++部署,提供轻量快速的本地化软件开发助手解决方案
代码语言:txt
AI代码解释
复制
* 全面的评测:提供支持完整项目上下文、覆盖代码生成、代码缺陷检测与修复、测试用例生成等常见软件开发活动的多任务评测体系(即将开源)
代码语言:txt
AI代码解释
复制
* 高效的训练:基于高效的数据治理体系,CodeShell在完全冷启动情况下,只训练了五千亿Token即获得了优异的性能
  • 开源模型
代码语言:txt
AI代码解释
复制
- <a href="https://huggingface.co/WisdomShell/CodeShell" target="_blank"><b>CodeShell Base</b></a>:CodelShell底座模型,具有强大的代码基础能力。
- <a href="https://huggingface.co/WisdomShell/CodeShell-Chat" target="_blank"><b>CodeShell Chat</b></a>:CodelShell对话模型,在代码问答、代码补全等下游任务重性能优异。
- <a href="https://huggingface.co/WisdomShell/CodeShell-Chat-int4" target="_blank"><b>CodeShell Chat 4bit</b></a>:CodelShell对话模型4bit量化版本,在保证模型性能的前提下内存消耗更小,速度更快。
- <a href="https://github.com/WisdomShell/llama_cpp_for_codeshell" target="_blank"><b>CodeShell CPP</b></a>:CodelShell对话模型CPP版本,支持开发者在没有GPU的个人电脑中使用。注意,CPP版本同样支持量化操作,用户可以在最小内存为8G的个人电脑中运行CodeShell。

2.效果评估

我们选取了目前最流行的两个代码评测数据集(HumanEval与MBPP)对模型进行评估,与目前最先进的两个7b代码大模型CodeLllama与Starcoder相比,Codeshell 取得了最优的成绩。具体评测结果如下。

任务

CodeShell-7b

CodeLlama-7b

Starcoder-7b

humaneval

34.32

29.44

27.80

mbpp

38.65

37.60

34.16

multiple-js

33.17

31.30

27.02

multiple-java

30.43

29.24

24.30

multiple-cpp

28.21

27.33

23.04

multiple-swift

24.30

25.32

15.70

multiple-php

30.87

25.96

22.11

multiple-d

8.85

11.60

8.08

multiple-jl

22.08

25.28

22.96

multiple-lua

22.39

30.50

22.92

multiple-r

20.52

18.57

14.29

multiple-rkt

17.20

12.55

10.43

multiple-rs

24.55

25.90

22.82

3.快速开始

3.1环境依赖

代码语言:txt
AI代码解释
复制
- python 3.8 and above
- pytorch 2.0 and above are recommended
- transformers 4.32 and above
- CUDA 11.8 and above are recommended (this is for GPU users, flash-attention users, etc.)

CodeShell系列模型已经上传至 <a href="https://huggingface.co/WisdomShell/CodeShell" target="_blank">Hugging Face</a>,开发者可以通过Transformers快速调用CodeShell和CodeShell-Chat。

在开始之前,请确保已经正确设置了环境,并安装了必要的代码包,以及满足上一小节的环境要求。你可以通过下列代码快速安装相关依赖。

代码语言:txt
AI代码解释
复制
pip install -r requirements.txt

接下来你可以通过Transformers使用CodeShell。

3.2 Code Generation

开发者可以使用CodeShell快速生成代码,加速开发效率。

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

device = 'cuda' if torch.cuda.is_available() else 'cpu'
tokenizer = AutoTokenizer.from_pretrained("WisdomShell/CodeShell-7B")
model = AutoModelForCausalLM.from_pretrained("WisdomShell/CodeShell-7B", trust_remote_code=True, torch_dtype=torch.bfloat16).to(device)
inputs = tokenizer('def merge_sort():', return_tensors='pt').to(device)
outputs = model.generate(**inputs)
print(tokenizer.decode(outputs[0]))
  • Fill in the Moddle

CodeShell 支持Fill-in-the-Middle模式,从而更好的支持软件开发过程。

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
input_text = "<fim_prefix>def print_hello_world():\n    <fim_suffix>\n    print('Hello world!')<fim_middle>"
inputs = tokenizer(input_text, return_tensors='pt').to(device)
outputs = model.generate(**inputs)
print(tokenizer.decode(outputs[0]))
  • 代码问答

CodeShell同时开源了代码助手模型CodeShell-7B-Chat,开发者可以通过下列代码与模型进行交互。

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
model = AutoModelForCausalLM.from_pretrained('WisdomShell/CodeShell-7B-Chat', trust_remote_code=True, torch_dtype=torch.bfloat16).to(device)
tokenizer = AutoTokenizer.from_pretrained('WisdomShell/CodeShell-7B-Chat')

history = []
query = '你是谁?'
response = model.chat(query, history, tokenizer)
print(response)
history.append((query, response))

query = '用Python写一个HTTP server'
response = model.chat(query, history, tokenizer)
print(response)
history.append((query, response))

Model Quantization

CodeShell 支持4 bit/8 bit量化,4 bit量化后,占用显存大小约6G,用户可以在显存较小的GPU上使用CodeShell。

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
model = AutoModelForCausalLM.from_pretrained('WisdomShell/CodeShell-7B-Chat-int4', trust_remote_code=True).to(device)
tokenizer = AutoTokenizer.from_pretrained('WisdomShell/CodeShell-7B-Chat-int4')
  • CodeShell in c/c++

由于大部分个人电脑没有GPU,CodeShell提供了C/C++版本的推理支持,开发者可以根据本地环境进行编译与使用

3.3 Demo

我们提供了Web-UI、命令行、API、IDE四种形式的Demo。

3.3.1 Web UI

开发者通过下列命令启动Web服务,服务启动后,可以通过https://127.0.0.1:8000进行访问。

代码语言:txt
AI代码解释
复制
python demos/web_demo.py

3.3.2 CLI Demo

我们也提供了命令行交互的Demo版本,开发者可以通过下列命令运行。

代码语言:txt
AI代码解释
复制
python demos/cli_demo.py

3.3.3 API

CodeShell也提供了基于OpenAI API的部署方法。

代码语言:txt
AI代码解释
复制
python demos/openai_api.py

启动后即可通过HTTP请求与CodeShell交互。

代码语言:txt
AI代码解释
复制
curl http://127.0.0.1:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "CodeShell-7B-Chat",
    "messages": [
      {
        "role": "user",
        "content": "你好"
      }
    ]
  }'

3.3.4 IDE

CodeShell最后提供了线上IDE,开发者可以通过IDE进行代码补全、代码问答等操作。同时,IDE插件也同时发布,开发者可以自行在本地进行安装使用

4.模型详情

Code Shell使用GPT-2作为基础架构,采用Grouped-Query Attention、RoPE相对位置编码等技术。

4.1 Hyper-parameter

Hyper-parameter

Value

n_layer

42

n_embd

4096

n_inner

16384

n_head

32

num_query_groups

8

seq-length

8192

vocab_size

70144

4.2 数据集

CodeShell基于自己爬取的Github数据、Big Code开源的Stack和StarCoder数据集、以及少量高质量的中英文数据进行训练。在原始数据集的基础上,CodeShell采用基于Minihash对数据去重,基于KenLM以及高质量数据筛选模型对数据进行了过滤与筛选,最终得到高质量的预训练数据集。

4.3 Tokenizer

CodeShell基于Starcoder词表进行了优化,去除了使用频率较低的词语,并添加了部分中文词表,显著提升了中文的压缩率,为Chat版本的训练提供了基础。

Tokenizer

Size

Chinese

English

Code

Total

Starcoder

49152

1.22

3.47

3.30

2.66

CodeShell

70020

1.50

3.47

3.30

2.95

参考链接:

代码语言:txt
AI代码解释
复制
* Hugging Face模型链接:[https://huggingface.co/WisdomShell/CodeShell-7B/tree/main](https://huggingface.co/WisdomShell/CodeShell-7B/tree/main)
代码语言:txt
AI代码解释
复制
* [codeshell](https://github.com/WisdomShell/codeshell)
代码语言:txt
AI代码解释
复制
* https://se.pku.edu.cn/kcl/

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
python中面向对象VS面向过程
面向过程编程:首先分析出解决问题所需要的步骤(即“第一步做什么,第二步做什么,第三步做什么”),然后用函数实现各个步骤,再依次调用。
全栈程序员站长
2022/09/07
4480
python中面向对象VS面向过程
python-面向过程、面向对象、类
前言:编程不就编程吗?怎么还有这么多的洋气词后缀??今天主要介绍一下面向过程和面向对象是什么。
HammerZe
2022/03/25
4590
面向对象与面向过程的区别-面向过程和面向对象有什么区别 面向过程和面向对象的区别
  1、面向过程:是一种以过程为中心的编程思想。都是以什么正在发生为主要目标进行编程。
宜轩
2022/12/29
7440
java是面向对象还是面向过程_Java面向对象编程和面向过程编程的区别[通俗易懂]
“面向过程”(Procedure Oriented)是一种以过程为中心的编程思想,简称OP。“面向过程”也可称之为“面向记录”编程思想,就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。所以面向过程的编程方式关注点不在“事物”上,而是做这件事分几步,先做什么,后做什么。例如:早晨起来:起床、穿衣、洗漱、上班,只要按照这个步骤来,就能实现“一天”的功能,整个这个过程中关注的是一步一步怎么做,并没有关注“人”这个事物。再例如:开门、调整座椅、系好安全带、踩离合、启动、挂档、给油,只要按照这个步骤来,车就走了,显然关注点还是在步骤上,只要实现每一步就行,整个过程并没有关注“汽车”这个事物。
全栈程序员站长
2022/09/08
1K0
面向过程 VS 面向对象
学习编程, 基本功是掌握编程语言,但编程的本质是逻辑,所以编程思维的培养也很重要。面向过程和面向对象是两种重要的编程思想,下面讲述一下这两者的区别和优缺点比较。
用户8639654
2021/07/26
7350
python 面向对象
面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。
py3study
2018/08/02
6260
面向对象相比面向过程有哪些优势?面向过程真的过时了吗?
如果你是一名比较资深的程序员,最开始学习编程的时候,接触的是 Basic、Pascal、C 等面向过程的编程语言,那你对这两个概念肯定不陌生。但如果你是新生代的程序员,一开始学编程的时候,接触的就是面向对象编程语言,那你对这两个概念可能会比较不熟悉。所以,在对比面向对象与面向过程优劣之前,我们先把面向过程编程和面向过程编程语言这两个概念搞清楚。
码农架构
2021/01/19
2.2K0
面向对象与面向过程的本质的区别
如果你很想搞明白面向对象是什么,面向过程是什么,或者说二者之间的区别是什么,那么就花费一点时间来研读一下这篇博客,你一定会有很大的收获的!
全栈程序员站长
2022/08/31
3450
面向对象与面向过程的本质的区别
面向对象和面向过程的区别理解_c是面向对象还是面向过程
玩家对象负责接受用户输入,棋盘对象棋子布局的变化,棋盘对象接收到了棋子的变化就要负责在屏幕上面显示出这种变化,同时利用规则对象来对棋局进行判定。
全栈程序员站长
2022/09/23
1K0
面向对象和面向过程的区别理解_c是面向对象还是面向过程
记录 | 学习面向对象编程与面向过程编程的笔记
面向过程编程一般都是为了完成某个任务的单个代码 >> 可以理解成为单个函数,一个函数只负责一个功能(任务)
Leo Deng
2024/07/25
1080
面向对象和面向过程的区别
面向对象(Object-Oriented) 是一种编程范式,它将程序设计看作是一组对象的集合,每个对象都可以接收消息、处理数据,并与其他对象进行交互。在面向对象编程中,程序由多个对象组成,每个对象都有自己的状态和行为。
程序员朱永胜
2023/10/07
6930
[Python零基础入门篇③②] - 你了解编程范式吗?面向过程编程与面向对象编程的区别又是什么?
编程范式是计算机语言编程的一种需要编程者遵循的基本风格与规范模式。如果说每一个编程者进行的编程是在创造一个依托于计算机而存在的虚拟世界,那么编程范式就是这个虚拟世界所采用的世界观与创造世界的方法论。
哈哥撩编程
2024/07/11
1740
[Python零基础入门篇③②] - 你了解编程范式吗?面向过程编程与面向对象编程的区别又是什么?
编程思想 _用Minercraft来讲解面向过程与面向对象
!!!这篇文章主要学习面向对象和面向过程的思想,面向对象的具体实现将在后续文章出现
木杉乀
2021/04/02
5280
什么是面向对象以及和面向过程的区别
面向对象是一种编程范式,它将现实世界中的事物抽象为对象,并通过对象之间的交互来实现程序的设计和开发。在面向对象编程中,对象是程序的基本单元,具有状态(属性)和行为(方法)。通过封装、继承和多态等概念,面向对象编程提供了一种结构化的方法来组织和管理代码。
关忆北.
2023/10/11
4180
什么是面向对象以及和面向过程的区别
编程思想:面向对象和面向过程
何谓面向对象?何谓面向过程?对于这编程界的两大思想,一直贯穿在我们学习和工作当中。我们知道面向过程和面向对象,但要让我们讲出来个所以然,又感觉是不知从何说起,最后可能也只会说出一句就是那样啦,你知道啦。而这种茫然,其实就是对这两大编程思想的迷糊之处。本文通过学生到校报道注册的实例,阐述了面向过程和面向对象两大思想。希望能对你的学习和工作有所帮助。 一、面向过程   首先我们来认识下,什么是面向过程?如果咬文嚼字的话可以这样来理解,面向过程就是面向解决问题的过程进行编程。仔细思考一下,我们在学习和工作中,当我
李海彬
2018/03/23
1K0
编程思想:面向对象和面向过程
面向对象VS面向过程
面向过程编程OPP:Procedure Oriented Programming,是一种以过程为中心的编程思想。主要关注“怎么做”,即完成任务的具体细节。
大忽悠爱学习
2022/09/28
4860
面向对象和面向过程的区别?
面向过程 :分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了;面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。面向过程性能比面向对象高。因为类调用时需要实例化,开销比较大,比较消耗资源,所以当性能是最重要的考量因素的时候,比如单片机、嵌入式开发、Linux/Unix 等一般采用面向过程开发。但是,面向过程没有面向对象易维护、易复用、易扩展。
黑洞代码
2021/01/14
7220
面向对象和面向过程的区别?
java语言和c语言一样是面向对象的程序设计语言_面向对象和面向过程具体区别
  很多初学编程的小伙伴或者想要学习编程的小白弄不清C语言和Java的区别。本文就针对萌新们尽量用通俗的语言来介绍一下我所理解的编程语言界的两大巨头。
全栈程序员站长
2022/09/20
7220
java语言和c语言一样是面向对象的程序设计语言_面向对象和面向过程具体区别
重新思考面向过程与面向对象
面向过程的思考方式是,要采购原材料、生产产品、卖产品、管理入账出账,因此需要生产人员、销售人员、财务等,将他们串起来,公司就运转起来了。
李拜六不开鑫
2018/12/19
4690
面向过程与面向对象
《Java编程思想》是一本好书,但同时也是晦涩难懂,其一是知识本身的难度,其二这本书是翻译过来的,而且是直译。我也是尝试了好多次才又拿起了这本书啃,没想到今天突然感觉发现了宝藏。
Noneplus
2020/07/21
7600
推荐阅读
相关推荐
python中面向对象VS面向过程
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验