写点什么

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

  • 2023-11-03
    浙江
  • 本文字数:2661 字

    阅读完需:约 9 分钟

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

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

1.CodeShell 简介

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


  • 能力点

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

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

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

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

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

2.效果评估

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


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


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


pip install -r requirements.txt
复制代码


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

3.2 Code Generation

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


import torchfrom 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

4.2 数据集

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

4.3 Tokenizer

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



参考链接:


* 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/
复制代码


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

发布于: 刚刚阅读数: 5
用户头像

本博客将不定期更新关于NLP等领域相关知识 2022-01-06 加入

本博客将不定期更新关于机器学习、强化学习、数据挖掘以及NLP等领域相关知识,以及分享自己学习到的知识技能,感谢大家关注!

评论

发布
暂无评论
突破性的多语言代码大模型基CodeShell:引领AI编程新时代_人工智能_汀丶人工智能_InfoQ写作社区