MLNLP 
机器学习算法与自然语言处理 
)社区是国内外知名自然语言处理社区,受众覆盖国内外NLP硕博生、高校老师以及企业研究人员。

社区的愿景 是促进国内外自然语言处理,机器学习学术界、产业界和广大爱好者之间的交流,特别是初学者同学们的进步。

作者 | 金属成色
接 | https://lowin.li/2022/06/27/pan-dian-kai-yuan-copilot/
1
『背景』
Github Copilot 即将收费:
Copilot 官方近期宣布结束技术预览,并将在 2022 年 8 月 22 日开始收费, 收费标准为每月 10 美元或者每年 100 美元。学生和热门开源项目维护者可以免费使用。
程序员已经离不开 Copilot:
Github 声称 ,当前网站上 1/3 的代码都是在 Copilot 工具下完成的。而笔者也是在使用了半年的 Copilot 后,已经很难离开它的帮助,它已帮我做了很多重复性的编程工作。
开源代码生成模型:
Huggingface Model Hub 社区有很多开源模型可以直接下载使用,其中不乏一些开源代码生成模型,那么为什么不可以do it yourself。
私有化部署一套”Copilot”:
如果我们使用开源的代码生成模型自己部署一个代码生成服务,再辅以编辑器/IDE 插件,就可以模拟 Copilot 为自己和同事做代码生成服务。而且还有以下优点:
免去连 Copilot 偶尔的网络不稳定问题
免去代码上传 Copilot 的安全问题
根据自己的编码习惯,已有代码,对开源模型进行二次训练,为自己定制更懂自己的模型
2
『简述』
在本博客中,我们先从用户的角度,盘点一下当前开源代码生成模型的生成效果;然后自己搭建代码生成服务,搭建 Vscode 插件,为自己提供私有化”Copilot”。
3
『盘点开源代码生成模型』
3.1. 模型清单
这里列举了已code作为关键字,在HuggingFace Model Hub搜索 text generation类型的模型,过滤掉月下载量在100以下且没有介绍的开源模型。
可见大家主要围绕Python语言做代码生成
3.2. 模型测试
下面尝试输入代码,分别测试代码生成模型都能输出什么,看看哪个预训练模型更懂我。
生成配置统一为:
3.2.1. Python语言代码生成测试1
输入原文:
结果:
1.code-autocomplete-distilgpt2-python
2.code-autocomplete-gpt2-base
3.CodeGPT-small-py-adaptedGPT2
5.incoder-6B
6.incoder-1B
7.codegen-350M-mono
8.codegen-2B-mono
9.codegen-6B-mono
11.codegen-350M-multi
12.codegen-2B-multi
13.codegen-6B-multi
16.gpt-neo-125M-code-clippy
17.GPT2-python-code-generator
18.codeparrot
19.codeparrot-small
3.2.2. Python语言代码生成测试2
输入原文:
输出:
1.code-autocomplete-distilgpt2-python
2.code-autocomplete-gpt2-base
3.CodeGPT-small-py-adaptedGPT2
5.incoder-6B
6.incoder-1B
7.codegen-350M-mono
8.codegen-2B-mono
9.codegen-6B-mono
11.codegen-350M-multi
12.codegen-2B-multi
13.codegen-6B-multi
15.gpt-neo-125M-code-search-py
16.gpt-neo-125M-code-clippy
17.GPT2-python-code-generator
18.codeparrot
19.codeparrot-small
3.2.3. Python语言代码生成测试3
输入原文:
输出:
1.code-autocomplete-distilgpt2-python
2.code-autocomplete-gpt2-base
3.CodeGPT-small-py-adaptedGPT2
5.incoder-6B
6.incoder-1B
7.codegen-350M-mono
8.codegen-2B-mono
9.codegen-6B-mono
11.codegen-350M-multi
12.codegen-2B-multi
13.codegen-6B-multi
15.gpt-neo-125M-code-search-py
16.gpt-neo-125M-code-clippy
17.GPT2-python-code-generator
18.codeparrot
19.codeparrot-small
3.2.4.Vue.js语言代码生成测试4
输入原文:
输出:
5.incoder-6B
6.incoder-1B
11.codegen-350M-multi
12.codegen-2B-multi
13.codegen-6B-multi
16.gpt-neo-125M-code-clippy
3.2.5.JavaScript语言代码生成测试5
输入原文:
结果:
5.incoder-6B
6.incoder-1B
11.codegen-350M-multi
12.codegen-2B-multi
13.codegen-6B-multi
16.gpt-neo-125M-code-clippy
3.3.亮点
codegen-6B-mono在测试1中,完美的写出了TextCNN的网络结构
3.4.结论
模型大真的能力会更强,参考codegen-6B-mono的表现
Model Hub 的下载量水分很大,参考code-autocomplete-distilgpt2-python的表现
分领域很有用,参考codegen-6B-mono相比codegen-6B-multi在Python问题上的表现
Sailesforce 的 codegen 系列,比其他开源代码生成模型好了一个档次
开源代码生成模型都是围绕Python语言居多,偶尔有全栈语言
4
『搭建私有化代码生成服务』
4.1. onnx量化压缩
模型一般部署在cpu上运行,使用onnxruntime量化技术可以大幅提高模型运行提速
推荐使用 fastgpt 库对transformers的GPT模型进行onnx量化和加载
对于不支持transformers的codegen系列,fastgpt也有 codegen例子 做onnx量化和代码生成
4.1.1. fastgpt安装方法
4.1.2. fastgpt快速使用
4.2. 私有化web服务
在 fastgpt 仓库的 codegen例子 中已经把codegen-350M-mono和codegen-350M-multi进行onnx量化和打包镜像,并上传了 dockerhub
4.2.1. docker-compose启动
4.2.2. 测试
codegen-350M-multi
codegen-350M-multi
5.制作私有化Vscode插件
详见适配最新vscode版本(1.68.1)的 vscode插件
6.enjoy-coding
附录:
1. 推理计算资源
cpu: Intel(R) Core(TM) i9-9900X CPU @ 3.50GHz
技术交流群邀请函
△长按添加小助手
扫描二维码添加小助手微信
请备注:姓名-学校/公司-研究方向
(如:小张-哈工大-对话系统)
即可申请加入自然语言处理/Pytorch等技术交流群

关于我们

MLNLP社区  机器学习算法与自然语言处理 ) 是由国内外自然语言处理学者联合构建的民间学术社区,目前已经发展为国内外知名自然语言处理社区,旗下包括  万人顶会交流群、AI臻选汇、AI英才汇  以及  AI学术汇  等知名品牌,旨在促进机器学习,自然语言处理学术界、产业界和广大爱好者之间的进步。
社区可以为相关从业者的深造、就业及研究等方面提供开放交流平台。欢迎大家关注和加入我们。
继续阅读
阅读原文