|
--- |
|
license: llama2 |
|
pipeline_tag: text-generation |
|
tags: |
|
- code |
|
- automated program repair |
|
--- |
|
# CodeLlama-70B_for_NTR |
|
|
|
We fine-tuned [CodeLlama-70B](https://huggingface.co/codellama/CodeLlama-70b-hf) on [Transfer_dataset](https://drive.google.com/drive/folders/1F1BPfTxHDGX-OCBthudCbu_6Qvcg_fbP?usp=drive_link) under the [NTR](https://sites.google.com/view/neuraltemplaterepair) framework for APR research. |
|
|
|
## Model Use |
|
|
|
To use this model, please make sure to install transformers, peft, bitsandbytes, and accelerate. |
|
|
|
```bash |
|
pip install transformers |
|
pip install peft |
|
pip install bitsandbytes |
|
pip install accelerate |
|
``` |
|
|
|
Then, please run the following script to merge the adapter into the CodeLlama. |
|
|
|
```bash |
|
bash merge.sh |
|
``` |
|
|
|
Finally, you can load the model to generate patches for buggy code. |
|
|
|
```python |
|
from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig |
|
from peft import LoraConfig, get_peft_model, prepare_model_for_kbit_training |
|
import torch |
|
|
|
|
|
# load model and tokenizer |
|
|
|
tokenizer = AutoTokenizer.from_pretrained("CodeLlama-70B_for_NTR/Epoch_1/-merged", use_auth_token=True) |
|
|
|
nf4_config = BitsAndBytesConfig( |
|
load_in_4bit=True, |
|
bnb_4bit_quant_type="nf4", |
|
bnb_4bit_use_double_quant=True, |
|
bnb_4bit_compute_dtype=torch.bfloat16 |
|
) |
|
|
|
model = AutoModelForCausalLM.from_pretrained( |
|
"CodeLlama-70B_for_NTR/Epoch_1/-merged", |
|
quantization_config=nf4_config, |
|
device_map='auto' |
|
) |
|
|
|
model = prepare_model_for_kbit_training(model) |
|
|
|
lora_config = LoraConfig( |
|
r=16, |
|
lora_alpha=32, |
|
lora_dropout=0.05, |
|
bias="none", |
|
task_type="CAUSAL_LM", |
|
target_modules = ["q_proj", "k_proj", "v_proj", "o_proj"] |
|
) |
|
|
|
model = get_peft_model(model, lora_config) |
|
|
|
|
|
# a bug-fix pairs |
|
|
|
buggy_code = " |
|
public MultiplePiePlot(CategoryDataset dataset){ |
|
super(); |
|
// bug_start |
|
this.dataset=dataset; |
|
// bug_end |
|
PiePlot piePlot=new PiePlot(null); |
|
this.pieChart=new JFreeChart(piePlot); |
|
this.pieChart.removeLegend(); |
|
this.dataExtractOrder=TableOrder.BY_COLUMN; |
|
this.pieChart.setBackgroundPaint(null); |
|
TextTitle seriesTitle=new TextTitle("Series Title",new Font("SansSerif",Font.BOLD,12)); |
|
seriesTitle.setPosition(RectangleEdge.BOTTOM); |
|
this.pieChart.setTitle(seriesTitle); |
|
this.aggregatedItemsKey="Other"; |
|
this.aggregatedItemsPaint=Color.lightGray; |
|
this.sectionPaints=new HashMap(); |
|
} |
|
" |
|
|
|
repair_template = "OtherTemplate" |
|
|
|
fixed_code = " |
|
// fix_start |
|
setDataset(dataset); |
|
// fix_end |
|
" |
|
|
|
# model inference |
|
|
|
B_INST, E_INST = "[INST]", "[/INST]" |
|
input_text = tokenizer.bos_token + B_INST +'\n[bug_function]\n' + buggy_code + '\n[fix_template]\n' + repair_template + '\n[fix_code]\n' + E_INST |
|
input_ids = tokenizer(input_text, return_tensors="pt").input_ids.to(0) |
|
|
|
eos_id = tokenizer.convert_tokens_to_ids(tokenizer.eos_token) |
|
generated_ids = model.generate( |
|
input_ids=input_ids, |
|
max_new_tokens=256, |
|
num_beams=10, |
|
num_return_sequences=10, |
|
early_stopping=True, |
|
pad_token_id=eos_id, |
|
eos_token_id=eos_id |
|
) |
|
|
|
for generated_id in generated_ids: |
|
generated_text = tokenizer.decode(generated_id, skip_special_tokens=False) |
|
patch = generated_text.split(E_INST)[1] |
|
patch = patch.replace(tokenizer.eos_token,'') |
|
print(patch) |
|
|
|
|
|
``` |
|
|
|
## Model Details |
|
*Note: Use of this model is governed by the Meta license. Meta developed and publicly released the Code Llama family of large language models (LLMs). |