首页 > 系统相关 >突破性的多语言代码大模型基CodeShell:引领AI编程新时代

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

时间:2023-11-03 17:14:49浏览次数:35  
标签:CodeShell multiple 7B AI 代码 编程 Chat 模型

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

1.CodeShell简介

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

  • 能力点

    • 强大的性能:CodelShell在HumanEval和MBPP上达到了7B代码基座大模型的最优性能

    • 完整的体系:除了代码大模型,同时开源IDE(VS Code与JetBrains)插件,形成开源的全栈技术体系

    • 轻量化部署:支持本地C++部署,提供轻量快速的本地化软件开发助手解决方案

    • 全面的评测:提供支持完整项目上下文、覆盖代码生成、代码缺陷检测与修复、测试用例生成等常见软件开发活动的多任务评测体系(即将开源)

    • 高效的训练:基于高效的数据治理体系,CodeShell在完全冷启动情况下,只训练了五千亿Token即获得了优异的性能

  • 开源模型

    • CodeShell Base:CodelShell底座模型,具有强大的代码基础能力。
    • CodeShell Chat:CodelShell对话模型,在代码问答、代码补全等下游任务重性能优异。
    • CodeShell Chat 4bit:CodelShell对话模型4bit量化版本,在保证模型性能的前提下内存消耗更小,速度更快。
    • CodeShell CPP: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环境依赖

- 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系列模型已经上传至 Hugging Face,开发者可以通过Transformers快速调用CodeShell和CodeShell-Chat。

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

pip install -r requirements.txt

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

3.2 Code Generation

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

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模式,从而更好的支持软件开发过程。

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,开发者可以通过下列代码与模型进行交互。

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

开发者也可以通过VS Code与JetBrains插件与CodeShell-7B-Chat交互,详情请参VSCode插件仓库IntelliJ插件仓库

  • Model Quantization

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

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++版本的推理支持,开发者可以根据本地环境进行编译与使用,详见CodeShell C/C++本地化版

3.3 Demo

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

3.3.1 Web UI

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

python demos/web_demo.py

3.3.2 CLI Demo

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

python demos/cli_demo.py

3.3.3 API

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

python demos/openai_api.py

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

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插件也同时发布,开发者可以自行在本地进行安装使用。插件相关问题欢迎在VSCode插件仓库IntelliJ插件仓库中讨论。

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

参考链接:

* Hugging Face模型链接:[https://huggingface.co/WisdomShell/CodeShell-7B/tree/main](https://huggingface.co/WisdomShell/CodeShell-7B/tree/main)

* [codeshell](https://github.com/WisdomShell/codeshell)

* https://se.pku.edu.cn/kcl/

更多优质内容请关注公号:汀丶人工智能;会提供一些相关的资源和优质文章,免费获取阅读。

标签:CodeShell,multiple,7B,AI,代码,编程,Chat,模型
From: https://www.cnblogs.com/ting1/p/17807987.html

相关文章

  • 实验3—C语言函数应用编程
    1、实验任务1源代码1#include<stdio.h>2#include<stdlib.h>3#include<time.h>4#include<windows.h>5#defineN806voidprint_text(intline,intcol,chartext[]);//函数声明7voidprint_spaces(intn);//函数声明8voidprint_b......
  • 为什么要强调AI技术与边缘智能结合?应用场景有哪些?
    随着城市规模扩大所带来的公共安全问题越来越受到重视。传统城市安全视频监控系统前端摄像机内置计算能力较低,以边缘计算和万物互联技术为基础的新型视频监控系统是未来发展趋势。在移动计算和物联网进步的推动下,数十亿移动和物联网设备连接到互联网,在网络边缘生成数以亿计的数据字......
  • 为什么要强调AI技术与边缘智能结合?应用场景有哪些?
    随着城市规模扩大所带来的公共安全问题越来越受到重视。传统城市安全视频监控系统前端摄像机内置计算能力较低,以边缘计算和万物互联技术为基础的新型视频监控系统是未来发展趋势。在移动计算和物联网进步的推动下,数十亿移动和物联网设备连接到互联网,在网络边缘生成数以亿计的数据......
  • 编程猫11岁学员拿到NOC决赛一等奖,妈妈分享教育心得
    来自广州的龙芷盈今年11岁,上五年级。她在编程猫学习编程快三年的时间,已经拿到了蓝桥杯国赛二等奖、NOC决赛一等奖。小盈妈妈说“小盈平常有点难管教、很倔强”,但同时也是个有主见、有规划的孩子,她会自己做好学习规划和时间管理,这也让她在学校和编程猫的学习中都收获了很好的成......
  • 零代码编程:用ChatGPT批量重命名多个子文件夹里面的文件标题名
    一个文件夹:D:\英语学习图书配套资源\亲子英语游戏书,这本最好玩,里面有多个子文件夹:子文件夹里面的文件要重命名,将文件名称中的track替换为子文件夹名称:在ChatGPT中输入提示词:你是一个Python编程专家,要完成一个批量删除掉对话音频文件开头的任务,具体步骤如下:打开文件夹:D:\英语学习图......
  • RAID 磁盘阵列与阵列卡
    RAIDRAID功能实现提高IO能力提高耐用性磁盘冗余备份RAID实现的方式外接式磁盘阵列:通过扩展卡提供适配能力内接式RAID:主板集成RAID控制器,安装OS前在BIOS里配置软件RAID:通过OS实现,比如:群晖的NAS存储 学名(廉洁的磁盘阵列技术)raid:将多块磁盘你组合成一个磁盘阵列组,来提高......
  • Lightsail CDN 现已对 Lightsail Container Services 作为来源进行支持
    AmazonLightsail 现在通过将LightsailCDN与您的LightsailContainerServices结合使用,为您提供了优化向全球受众交付容器化应用程序的功能。只需从Lightail控制台点击几下,Lightail容器就可以配置为LightsailCDN分配的来源。亚马逊云科技开发者社区为开发者们提供全......
  • MegEngine 9-10 双月报:新版本发布,AI 生态升级,不容错过!
    ●v1.13.2新版本发布<https://github.com/MegEngine/MegEngine/releases/tag/v1.13.2>●MegCC新版本发布<https://github.com/MegEngine/MegCC/releases/tag/v0.1.6>●DataFunSummit2023:AI基础软件架构峰会《MegEngine训练性能优化与AI编译实践》主题演讲<https://w......
  • [Linux] shell编程之数组 [转载]
    1概述数组是Shell的一种特殊变量,是一组数据的集合,里面的每个数据被称为一个数组元素。当前Bash仅支持一维索引数组和关联数组,Bash对数组的大小没有限制。2定义数组2.1一维索引数组方法1#定义一个空数组array=()#为数组元素赋值array1[0]=aarray1[1]=barray......
  • 【专题】生成式AI:产业变革与机会论坛(演讲PPT)报告PDF合集分享(附原数据表)
    原文链接:https://tecdat.cn/?p=34132自18世纪中期工业革命以来,人类进入工业社会。在历次工业革命中,人类通过发明创造和管理革新,改进生产方式、降低成本、提高效率,随之而来的是生活、物质、文化、教育等各方面的变化,人际关系和社会结构也得以重塑。如今,数字化技术的发展为工业注入......