盤點開源“Copilot”,doityourself


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學術匯  等知名品牌,旨在促進機器學習,自然語言處理學術界、產業界和廣大愛好者之間的進步。
社群可以為相關從業者的深造、就業及研究等方面提供開放交流平臺。歡迎大家關注和加入我們。

相關文章