|
|
---
|
|
|
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 |