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