Please refer to our new GitHub Wiki which documents our efforts in detail in creating the open source version of GitHub Copilot
Courtesy of the awesome Aimee Trevett!
GPT-Code-Clippy (GPT-CC) is an open source version of GitHub Copilot, a language model -- based on GPT-3, called GPT-Codex -- that is fine-tuned on publicly available code from GitHub.
The dataset used to train GPT-CC is obtained from SEART GitHub Search using the following criteria:
- >10 GitHub stars
- >2 commits
- Must have a licence
- Exclude forks
- Size < 70708 bytes
These repositories are then combined with all of the GitHub repositories contain in The Pile.
The repositories are then filtered for duplicate files. Filtering is performed by regexing each file in each repository to obtain a list of "variables" (the tokens which only contain alphanumeric characters) and then filtering out any files which contain the same sequence of "variables. The deduplication script is available here.
The final dataset is available here. The dataset without the duplicates filtered out is also available here.
The datasheet discussing in more detail the construction, usage, and limitation of the dataset can be found here. We hope to get it officially into Huggingface's datasets library soon!
We recently came to know about a bug which happened during the scraping of the dataset. We found out that the file names are obsolete/misleading.[Refer this issue] We thank Naman for pointing out the issue.
This might have two implications,
- Since the filtering for the training dataset is done using the file extension, we might have had wrong datapoints in the dataset while training and we might have missed a lot of right datapoints that belong to the languages of choice.
One intermittent fix would be to use tools like lib-magic to some extension for the purpose of filtering. More detailed steps can be found here.
The GPT-CC models are fine-tuned versions of GPT-2 and GPT-Neo.
The available models can be found here
The ones that perform relatively well (None improve on the standard GPT-Neo 125M model except for APPs specific models and only for the APPs task):
- https://huggingface.co/flax-community/gpt-code-clippy-125M-apps-alldata
- https://huggingface.co/flax-community/gpt-code-clippy-1.3B-apps-alldata-2
- https://huggingface.co/flax-community/gpt-code-clippy-1.3B-apps-alldata
- https://huggingface.co/flax-community/gpt-code-clippy-1.3B-apps
- https://huggingface.co/flax-community/gpt-neo-125M-code-clippy
- https://huggingface.co/flax-community/gpt-neo-125M-code-clippy-dedup-filtered-no-resize-2048bs
- https://huggingface.co/flax-community/gpt-neo-125M-code-clippy-dedup-2048
TODO: which is the recommended model?
Training is done using the training scripts available here.
For fine-tuning GPTNeo-125M on CodeClippy dataset we used AdamW optimizer (beta1=0.9, beta2=0.95) with GPT3-like learning rate schedule (4k warmup steps from 0 to 5e-5 followed by 50k cosine decay steps to 5e-6), weight decay 0.1 and batch size 1024, sequence length 2048. The choice of relatively large batch size and low LR with long warmup are made to avoid agressive updates and preserve the knowledge contained in pretrained GPTNeo weights.
For fine-tuning GPTNe0-125M on APPS dataset we used AdamW optimizer (beta1=0.9, beta2=0.98) with linear learning rate schedule (800 warmup steps from 0 to peak LR followed by linear decay to 0, a range of value for peak LR was [1e-5; 1e-4]), weight decay 0.1 and batch size 256, sequence length 1024. We trained model for 5 epochs selecting best checkpoint judging by validation loss. The language modelling objective for APPS dataset is modified to backpropagate loss only for the tokens corresponding to code solution (refer to Hendrycks et al for more details).
For fine-tuning GPTNe0-1.3B on APPS dataset we used Adafactor optimizer with linear learning rate schedule (5k warmup steps from 0 to 2e-5 followed by linear decay to 0), weight decay 0.1 and batch size 24, sequence length 1024. The choice of hyperparameters for 1.3B model is in part determined by hardware limitations. We trained model for 5 epochs selecting best checkpoint judging by validation loss.
TODO: which is the recommended way to train GPT-CC?
The models are also evaluated on the APPS and HumanEval datasets.
Model | pass@1 | pass@2 | pass@5 | pass@10 |
---|---|---|---|---|
EleutherAI/gpt-neo | 0.12% | 0.24% | 0.61% | 1.22% |
gpt-neo-125M-apps | 0.06% | 0.12% | 0.30% | 0.61% |
dedup-filtered-no-resize-2048bs | 0.00% | 0.00% | 0.00% | 0.00% |
1024-filtered | 0.00% | 0.00% | 0.00% | 0.00% |
dedup-2048 | 0.00% | 0.00% | 0.00% | 0.00% |
Coming soon...
A Visual Studio Code which uses the HuggingFace Inference API is available and can be found here.
We also have Huggingface's Space demo where you can specify and problem in the format of a programming competition question.
TODO: more information about this when complete.
For more information about GPT-CC, GitHub Copilot, etc, see:
TODO: add more further reading.
Special thanks to our contributors!!
- https://github.com/arampacha
- https://github.com/ncoop57
- https://github.com/bentrevett
- https://github.com/arunraja-hub
- https://github.com/reshinthadithyan
- https://github.com/shpotes
- https://github.com/taisazero
- https://github.com/neubig
- https://github.com/Mrinal18
- and everyone else that helped out the project!