| | --- |
| | tags: |
| | - generated_from_trainer |
| | - code |
| | - coding |
| | - llama-2 |
| | model-index: |
| | - name: Llama-2-7b-4bit-python-coder |
| | results: [] |
| | license: apache-2.0 |
| | language: |
| | - code |
| | datasets: |
| | - iamtarun/python_code_instructions_18k_alpaca |
| | pipeline_tag: text-generation |
| | --- |
| | |
| |
|
| | # LlaMa 2 7b 4-bit Python Coder 👩💻 |
| |
|
| | **LlaMa-2 7b** fine-tuned on the **python_code_instructions_18k_alpaca Code instructions dataset** by using the method **QLoRA** in 4-bit with [PEFT](https://github.com/huggingface/peft) library. |
| |
|
| | ## Pretrained description |
| |
|
| | [Llama-2](https://huggingface.co/meta-llama/Llama-2-7b) |
| |
|
| | Meta developed and publicly released the Llama 2 family of large language models (LLMs), a collection of pretrained and fine-tuned generative text models ranging in scale from 7 billion to 70 billion parameters. |
| |
|
| | Model Architecture Llama 2 is an auto-regressive language model that uses an optimized transformer architecture. The tuned versions use supervised fine-tuning (SFT) and reinforcement learning with human feedback (RLHF) to align to human preferences for helpfulness and safety |
| |
|
| | ## 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. |
| |
|
| | ### Training hyperparameters |
| |
|
| | The following `bitsandbytes` quantization config was used during training: |
| | - load_in_8bit: False |
| | - load_in_4bit: True |
| | - llm_int8_threshold: 6.0 |
| | - llm_int8_skip_modules: None |
| | - llm_int8_enable_fp32_cpu_offload: False |
| | - llm_int8_has_fp16_weight: False |
| | - bnb_4bit_quant_type: nf4 |
| | - bnb_4bit_use_double_quant: False |
| | - bnb_4bit_compute_dtype: float16 |
| |
|
| | **SFTTrainer arguments** |
| | ```py |
| | # Number of training epochs |
| | num_train_epochs = 1 |
| | # Enable fp16/bf16 training (set bf16 to True with an A100) |
| | fp16 = False |
| | bf16 = True |
| | # Batch size per GPU for training |
| | per_device_train_batch_size = 4 |
| | # Number of update steps to accumulate the gradients for |
| | gradient_accumulation_steps = 1 |
| | # Enable gradient checkpointing |
| | gradient_checkpointing = True |
| | # Maximum gradient normal (gradient clipping) |
| | max_grad_norm = 0.3 |
| | # Initial learning rate (AdamW optimizer) |
| | learning_rate = 2e-4 |
| | # Weight decay to apply to all layers except bias/LayerNorm weights |
| | weight_decay = 0.001 |
| | # Optimizer to use |
| | optim = "paged_adamw_32bit" |
| | # Learning rate schedule |
| | lr_scheduler_type = "cosine" #"constant" |
| | # Ratio of steps for a linear warmup (from 0 to learning rate) |
| | warmup_ratio = 0.03 |
| | ``` |
| | ### Framework versions |
| | - PEFT 0.4.0 |
| |
|
| | ### Training metrics |
| | ``` |
| | {'loss': 1.044, 'learning_rate': 3.571428571428572e-05, 'epoch': 0.01} |
| | {'loss': 0.8413, 'learning_rate': 7.142857142857143e-05, 'epoch': 0.01} |
| | {'loss': 0.7299, 'learning_rate': 0.00010714285714285715, 'epoch': 0.02} |
| | {'loss': 0.6593, 'learning_rate': 0.00014285714285714287, 'epoch': 0.02} |
| | {'loss': 0.6309, 'learning_rate': 0.0001785714285714286, 'epoch': 0.03} |
| | {'loss': 0.5916, 'learning_rate': 0.00019999757708974043, 'epoch': 0.03} |
| | {'loss': 0.5861, 'learning_rate': 0.00019997032069768138, 'epoch': 0.04} |
| | {'loss': 0.6118, 'learning_rate': 0.0001999127875580558, 'epoch': 0.04} |
| | {'loss': 0.5928, 'learning_rate': 0.00019982499509519857, 'epoch': 0.05} |
| | {'loss': 0.5978, 'learning_rate': 0.00019970696989770335, 'epoch': 0.05} |
| | {'loss': 0.5791, 'learning_rate': 0.0001995587477103701, 'epoch': 0.06} |
| | {'loss': 0.6054, 'learning_rate': 0.00019938037342337933, 'epoch': 0.06} |
| | {'loss': 0.5864, 'learning_rate': 0.00019917190105869708, 'epoch': 0.07} |
| | {'loss': 0.6159, 'learning_rate': 0.0001989333937537136, 'epoch': 0.08} |
| | {'loss': 0.583, 'learning_rate': 0.00019866492374212205, 'epoch': 0.08} |
| | {'loss': 0.6066, 'learning_rate': 0.00019836657233204182, 'epoch': 0.09} |
| | {'loss': 0.5934, 'learning_rate': 0.00019803842988139374, 'epoch': 0.09} |
| | {'loss': 0.5836, 'learning_rate': 0.00019768059577053473, 'epoch': 0.1} |
| | {'loss': 0.6021, 'learning_rate': 0.00019729317837215943, 'epoch': 0.1} |
| | {'loss': 0.5659, 'learning_rate': 0.00019687629501847898, 'epoch': 0.11} |
| | {'loss': 0.5754, 'learning_rate': 0.00019643007196568606, 'epoch': 0.11} |
| | {'loss': 0.5936, 'learning_rate': 0.000195954644355717, 'epoch': 0.12} |
| | ``` |
| |
|
| | ### Example of usage |
| |
|
| | ```py |
| | import torch |
| | from transformers import AutoModelForCausalLM, AutoTokenizer |
| | |
| | model_id = "edumunozsala/llama-2-7b-int4-python-code-20k" |
| | |
| | tokenizer = AutoTokenizer.from_pretrained(hf_model_repo) |
| | |
| | model = AutoModelForCausalLM.from_pretrained(hf_model_repo, load_in_4bit=True, torch_dtype=torch.float16, |
| | device_map=device_map) |
| | |
| | instruction="Write a Python function to display the first and last elements of a list." |
| | input="" |
| | |
| | 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, return_tensors="pt", truncation=True).input_ids.cuda() |
| | # with torch.inference_mode(): |
| | outputs = model.generate(input_ids=input_ids, max_new_tokens=100, do_sample=True, top_p=0.9,temperature=0.5) |
| | |
| | print(f"Prompt:\n{prompt}\n") |
| | print(f"Generated instruction:\n{tokenizer.batch_decode(outputs.detach().cpu().numpy(), skip_special_tokens=True)[0][len(prompt):]}") |
| | |
| | ``` |
| |
|
| | ### Citation |
| |
|
| | ``` |
| | @misc {edumunozsala_2023, |
| | author = { {Eduardo Muñoz} }, |
| | title = { llama-2-7b-int4-python-coder }, |
| | year = 2023, |
| | url = { https://huggingface.co/edumunozsala/llama-2-7b-int4-python-18k-alpaca }, |
| | publisher = { Hugging Face } |
| | } |
| | ``` |