LLMs之Code:CodeShell的简介、安装、使用方法之详细攻略

LLMs之code:CodeShell的简介、安装、使用方法之详细攻略

目录

CodeShell的简介

1、coshell的主要特点

2、性能

3、技术架构

Hyper-parameter:vocab_size=70144

Data:爬取Github/Stack/StarCoder+Minihash去重+KenLM过滤

Tokenizer:扩展中文词表

CodeShell的安装

1、安装

2、模型权重下载

3、测试:四种形式GUI/CLI/API/IDE

T1、Web UI

T2、CLI Demo

T3、API

T4、IDE

CodeShell的使用方法

1、Code Generation

(1)、Fill in the Moddle

(2)、代码问答

(3)、Model Quantization

(4)、CodeShell in c/c++

2、进阶用法

(1)、使用CodeShell-7B-Chat-int4实现

LLMs之code:CodelShell量化版(基于llama.cpp如CodeShell-7B-Chat-int4)的简介、安装与推理实战图文教程之详细攻略


CodeShell的简介

       2023年10月19日,CodeShell是北京大学知识计算实验室联合四川天府银行AI团队研发的多语言代码大模型基座。CodeShell具有70亿参数,在五千亿Tokens进行了训练,上下文窗口长度为8192。在权威的代码评估Benchmark(HumanEval与MBPP)上,CodeShell取得同等规模最好的性能。与此同时,我们提供了与CodeShell配套的部署方案与IDE插件,请参考代码库CodeShell。

本次开源的模型如下:
>> CodeShell Base:CodelShell底座模型,具有强大的代码基础能力。
>> CodeShell Chat:CodelShell对话模型,在代码问答、代码补全等下游任务重性能优异。
>> CodeShell Chat 4bit:CodelShell对话模型4bit量化版本,在保证模型性能的前提下内存消耗更小,速度更快。
>> CodeShell CPP:CodelShell对话模型CPP版本,支持开发者在没有GPU的个人电脑中使用。注意,CPP版本同样支持量化操作,用户可以在最小内存为8G的个人电脑中运行CodeShell。

GitHub地址https://github.com/WisdomShell/codeshell

1、coshell的主要特点

强大的性能:CodelShell在HumanEval和MBPP上达到了7B代码基座大模型的最优性能;
完整的体系:除了代码大模型,同时开源IDE(VS Code与JetBrains)插件,形成开源的全栈技术体系;
轻量化部署:支持本地C++部署,提供轻量快速的本地化软件开发助手解决方案;
全面的评测:提供支持完整项目上下文、覆盖代码生成、代码缺陷检测与修复、测试用例生成等常见软件开发活动的多任务评测体系(即将开源);
高效的训练:基于高效的数据治理体系,CodeShell在完全冷启动情况下,只训练了五千亿T;oken即获得了优异的性能;

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、技术架构

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

Hyper-parametervocab_size=70144

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

Data爬取Github/Stack/StarCoder+Minihash去重+KenLM过滤

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

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

CodeShell的安装

1、安装

下载项目代码,然后安装依赖

pip install -r requirements.txt
transformers>=4.34.0
torch>=2.0.1


pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade transformers
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade torch


pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade accelerate

2、模型权重下载

地址https://huggingface.co/WisdomShell/CodeShell-7B/tree/main

3、测试:四种形式GUI/CLI/API/IDE

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

T1、Web UI

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

python demos/web_demo.py

T2、CLI Demo

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

python demos/cli_demo.py

T3、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": "你好"
      }
    ]
  }'

T4、IDE

CodeShell最后提供了线上IDE,开发者可以通过IDE进行代码补全、代码问答等操作。同时,IDE插件也同时发布,开发者可以自行在本地进行安装使用。插件相关问题欢迎在VSCode插件仓库与IntelliJ插件仓库中讨论。

CodeShell的使用方法

1、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]))

(1)、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]))

(2)、代码问答

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插件仓库。

(3)、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')

(4)、CodeShell in c/c++

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

2、进阶用法

(1)、使用CodeShell-7B-Chat-int4实现

LLMs之code:CodelShell量化版(基于llama.cpp如CodeShell-7B-Chat-int4)的简介、安装与推理实战图文教程之详细攻略

https://yunyaniu.blog.csdn.net/article/details/134031755

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个处女座的程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值