Text Generation
PEFT
Safetensors
English
instruction-tuning
qlora
code-llama
conversational
File size: 8,603 Bytes
43a9cd4
 
 
78f5b35
 
 
 
 
 
 
 
 
 
04d3a3f
43a9cd4
 
06ecae2
43a9cd4
78f5b35
43a9cd4
 
 
 
 
06ecae2
43a9cd4
78f5b35
 
 
 
 
43a9cd4
78f5b35
43a9cd4
06ecae2
26660e5
43a9cd4
 
 
 
 
78f5b35
43a9cd4
 
 
78f5b35
43a9cd4
 
 
78f5b35
43a9cd4
 
 
78f5b35
43a9cd4
 
 
78f5b35
 
 
d0a43a5
78f5b35
d0a43a5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
78f5b35
d0a43a5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
78f5b35
d0a43a5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
78f5b35
 
d0a43a5
 
 
 
 
 
 
 
 
 
 
 
78f5b35
 
d0a43a5
 
78f5b35
d0a43a5
 
 
 
78f5b35
43a9cd4
 
78f5b35
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43a9cd4
78f5b35
43a9cd4
 
78f5b35
43a9cd4
78f5b35
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
---
library_name: peft
base_model: codellama/CodeLlama-7b-Instruct-hf
tags:
- instruction-tuning
- qlora
- code-llama
- text-generation
language:
- en
datasets:
- mingyue0101/prompt_code_parquet
- mingyue0101/prompts_modi
license: apache-2.0
---

# Model Card for codellama-7b-matplotlib-assistant

This model is a fine-tuned version of `codellama/CodeLlama-7b-Instruct-hf` designed to enhance instruction-following capabilities. It was developed as part of a Master's thesis project.

## Model Details

### Model Description

The `codellama-7b-matplotlib-assistant` model is a large language model fine-tuned using the QLoRA (4-bit Quantization + LoRA) technique. The goal of this model was to adapt the base CodeLlama model to better follow user instructions while maintaining its coding and reasoning capabilities.

- **Developed by:** mingyue0101
- **Model type:** Causal Language Model (Fine-tuned with PEFT/LoRA)
- **Language(s) (NLP):** English, Chinese
- **License:** Apache-2.0 (inherited from CodeLlama)
- **Finetuned from model:** codellama/CodeLlama-7b-Instruct-hf

### Model Sources

- **Repository:** https://huggingface.co/mingyue0101/codellama-7b-matplotlib-assistant
- **Dataset:** https://huggingface.co/datasets/mingyue0101/prompt_code_parquet

## Uses

### Direct Use

The model can be used for text generation, code assistance, and general-purpose instruction following. It is particularly suited for tasks where a balance of technical coding knowledge and conversational instruction following is required.

### Out-of-Scope Use

The model should not be used for high-stakes decision-making, generating malicious code, or any application that violates the safety guidelines of the base CodeLlama model.

## Bias, Risks, and Limitations

This model may inherit biases present in the training data or the base model. Since it was fine-tuned on a specific dataset (`parquet02`), it might exhibit limitations when handling domains outside of its training distribution. Users should expect potential hallucinations in complex reasoning tasks.

### Recommendations

Users are encouraged to use safety filters when deploying this model in production and to perform domain-specific evaluation before use.

## How to Get Started with the Model

Use the code below to load the model in 4-bit precision:

```python
import os
import torch
from datasets import load_dataset
from transformers import (
    AutoModelForCausalLM,
    AutoTokenizer,
    BitsAndBytesConfig,
    TrainingArguments,
    pipeline,
    logging,
)
from peft import LoraConfig
from trl import SFTTrainer

# ==========================================
# 1. Global Parameter Configuration
# ==========================================
base_model = "codeparrot/codeparrot"          # Base model ID on Hugging Face
new_dataset = "mingyue0101/prompts_modi"      # Fine-tuning dataset ID
new_model = "codeparrot_ming03"              # Directory name for saving the fine-tuned model

# ==========================================
# 2. Dataset Loading
# ==========================================
dataset = load_dataset(new_dataset, split="train")

# ==========================================
# 3. QLoRA 4-bit Quantization Configuration
# ==========================================
compute_dtype = getattr(torch, "float16")
quant_config = BitsAndBytesConfig(
    load_in_4bit=True,                        # Enable 4-bit quantization storage
    bnb_4bit_quant_type="nf4",                # Use NormalFloat4 for better precision than FP4
    bnb_4bit_compute_dtype=compute_dtype,     # Cast to Float16 during matrix multiplication
    bnb_4bit_use_double_quant=False,          # Disable double quantization
)

# ==========================================
# 4. Load Base Model with Optimizations
# ==========================================
model = AutoModelForCausalLM.from_pretrained(
    base_model,
    quantization_config=quant_config,
    device_map={"": 0}                       # Force load the model onto the first GPU (GPU 0)
)
model.config.use_cache = False                # Must disable KV cache during training to avoid backprop conflicts
model.config.pretraining_tp = 1               # Set tensor parallelism to 1 for single-GPU training

# ==========================================
# 5. Tokenizer Configuration & Alignment
# ==========================================
tokenizer = AutoTokenizer.from_pretrained(base_model, trust_remote_code=True)
tokenizer.pad_token = tokenizer.eos_token     # Causal LMs usually have no pad_token; reuse eos_token
tokenizer.padding_side = "right"              # Pad on the right to maintain proper causal attention masks

# ==========================================
# 6. PEFT (Lora) Adapter Hyperparameters
# ==========================================
peft_params = LoraConfig(
    r=64,                                     # LoRA rank, controlling the number of trainable parameters
    lora_alpha=16,                            # Scaling factor for LoRA weights
    lora_dropout=0.1,                         # Dropout probability to prevent overfitting in the adapter
    bias="none",                              # Do not train bias parameters
    task_type="CAUSAL_LM",                    # Explicitly declare the task type as Causal LM
    fan_in_fan_out="True"
)

# ==========================================
# 7. Training Arguments
# ==========================================
training_params = TrainingArguments(
    output_dir="./results",                   # Output directory for checkpoints and logs
    num_train_epochs=1,                       # Number of training epochs
    per_device_train_batch_size=4,            # Batch size per device during training
    gradient_accumulation_steps=1,            # Number of updates steps to accumulate gradients
    optim="paged_adamw_32bit",                # Use QLoRA paged optimizer to prevent Out-Of-Memory (OOM)
    save_steps=25,                            # Save checkpoint every 25 steps
    logging_steps=25,                         # Log training metrics every 25 steps
    learning_rate=2e-4,                       # Initial learning rate
    weight_decay=0.001,                       # Weight decay coefficient
    fp16=False,                               # Disable standard fp16 (handled by the quantization kernel)
    bf16=False,
    max_grad_norm=0.3,                        # Max gradient norm for gradient clipping
    max_steps=-1,                             # Rely on epochs instead of max_steps to control training length
    warmup_ratio=0.03,                        # Linear warmup ratio over training steps
    group_by_length=True,                     # Group sequences of similar lengths into batches to speed up training
    lr_scheduler_type="constant",             # Learning rate schedule type
    report_to="tensorboard"                   # Use TensorBoard to log training progress
)

# ==========================================
# 8. Start Supervised Fine-Tuning (SFT) & Save
# ==========================================
trainer = SFTTrainer(
    model=model,
    train_dataset=dataset,
    peft_config=peft_params,
    dataset_text_field="column0",             # Name of the column containing text data in the dataset
    max_seq_length=None,                      # Use default maximum sequence length
    tokenizer=tokenizer,
    args=training_params,
    packing=False,                            # Disable sample packing (combining multiple examples into one sequence)
)

# Launch the training process
trainer.train()

# Save the trained LoRA adapter weights and tokenizer files
trainer.model.save_pretrained(new_model)
trainer.tokenizer.save_pretrained(new_model)
print(f"Training complete! Finetuned weights successfully saved to: {new_model}")
```
## Training Details
### Training Data
The model was trained on the `mingyue0101/parquet02` dataset. This dataset contains instruction-response pairs formatted for Supervised Fine-Tuning (SFT).

### Training Procedure
**Training Hyperparameters**
- Training regime: QLoRA 4-bit (NF4) mixed precision (fp16)
- Learning rate: 2e-4
- Optimizer: paged_adamw_32bit
- Batch size: 4
- Epochs: 1
- LoRA Rank (r): 64
- LoRA Alpha: 16
- LoRA Dropout: 0.1
- LR Scheduler: constant
- Warmup Ratio: 0.03

## Technical Specifications
### Model Architecture and Objective
Based on the Llama 2 architecture, this model utilizes grouped-query attention (GQA) and rotary positional embeddings (RoPE), fine-tuned with a causal language modeling objective.

### Compute Infrastructure
### Software

- PEFT 0.10.0
- Transformers
- Bitsandbytes
- TRL (SFTTrainer)