|
--- |
|
library_name: transformers |
|
tags: |
|
- code |
|
license: mit |
|
datasets: |
|
- iamtarun/python_code_instructions_18k_alpaca |
|
pipeline_tag: text-generation |
|
language: |
|
- en |
|
--- |
|
|
|
# PyCodeGen 350M |
|
|
|
<!-- Provide a quick summary of what the model is/does. --> |
|
|
|
This model is finetuned version of [codegen-350M-mono](https://huggingface.co/Salesforce/codegen-350M-mono) by Salesforce trained on python code [dataset](https://huggingface.co/datasets/iamtarun/python_code_instructions_18k_alpaca) using QLORA method. |
|
|
|
|
|
## Pretrained model description |
|
|
|
[codegen-350M-mono](https://huggingface.co/Salesforce/codegen-350M-mono) |
|
|
|
Codegen-350M-mono comes from the family of autoregressive models for program synthesis developed by Salesforce. |
|
This model was first trained on ThePile dataset which is 825.18 GiB English text corpus. |
|
It was then adapted to generate code by training on a set of GitQuery with source codes. |
|
Finally model has been adapted to the Python language by training on the BigPython dataset. |
|
|
|
|
|
## Training Data |
|
|
|
[python_code_instructions_18k_alpaca](https://huggingface.co/datasets/iamtarun/python_code_instructions_18k_alpaca) |
|
|
|
The dataset contains problem descriptions and code in python language. |
|
This dataset is taken from sahil2801/code_instructions_120k, which adds a prompt column in alpaca style. |
|
|
|
## Intended uses |
|
|
|
The model can be used to generate python code that solves task with optionally given input data. |
|
|
|
|
|
## Example of usage |
|
|
|
```py |
|
from transformers import AutoModelForCausalLM, AutoTokenizer |
|
|
|
|
|
model = AutoModelForCausalLM.from_pretrained('chincyk/PyCodeGen') |
|
tokenizer = AutoTokenizer.from_pretrained('chincyk/PyCodeGen') |
|
|
|
instruction = "Write a python class that represents a calculator, then use it to add two numbers." |
|
input = "a = 5, b = 2" |
|
|
|
prompt = f""" |
|
### Instruction: |
|
Use the Task below and the Input given to write the Response, which is a programming code that can solve the Task. |
|
|
|
### Task: |
|
{instruction} |
|
|
|
### Input: |
|
{input} |
|
|
|
### Response: |
|
""" |
|
|
|
input_ids = tokenizer(prompt, truncation=True, return_tensors="pt")['input_ids'] |
|
output = model.generate(input_ids=input_ids, max_length=200) |
|
|
|
print(tokenizer.decode(output[0], skip_special_tokens=True)) |
|
|
|
``` |
|
|
|
## Training parameters |
|
|
|
BitsAndBytes: |
|
- load_in_4bit: True, |
|
- bnb_4bit_quant_type: nf4, |
|
- bnb_4bit_use_double_quant: True, |
|
- bnb_4bit_compute_dtype: torch.bfloat16 |
|
|
|
LoraConfig: |
|
- r: 32, |
|
- lora_alpha: 16, |
|
- target_modules: all-linear, |
|
- lora_dropout: 0.1, |
|
- bias: none, |
|
- task_type: CASUAL_LM |
|
|
|
Finetuning: |
|
- num_epochs: 15 |
|
- train_batch_size: 4 |
|
- eval_batch_size: 8 |
|
- gradient_accumulation_steps: 8 |
|
- learning_rate: 3e-4 |
|
- weight_decay: 0.01 |
|
- lr_scheduler_name: cosine |
|
- num_warmup_steps: 190 |