Downloads · 30 days
8
7% of all-time downloads
kimsan0622/Llama-3.2-3B-Code-Knowledge-Value-Eval-lora
Llama-3.2-3B-Code-Knowledge-Value-Eval-lora is a machine learning model from kimsan0622. Use it for the machine learning task on the model card, and read the license before you ship it in a product. It is set up for peft. The card lists the license as llama3.2.
should probably proofread and complete it, then remove this comment. --
Downloads · 30 days
8
7% of all-time downloads
All-time downloads
117
Public
Repo size
9.3 MB
Likes
0
Public
Click a slice to open those files.
.safetensors9.3 MB · 100%
From the Hugging Face model README
This model is a fine-tuned version of meta-llama/Llama-3.2-3B on the kimsan0622/code-knowledge-eval dataset. It achieves the following results on the evaluation set:
The model trained on the Code Knowledge Value Evaluation Dataset is designed to assess the educational and knowledge value of code snippets. It leverages patterns and contextual information from a large collection of open-source code, sourced from the bigcode/the-stack repository. By analyzing these code samples, the model can evaluate their utility in teaching coding concepts, solving problems, and improving developer education.
The model focuses on understanding the structure, syntax, and logic of various programming languages, enabling it to provide insights into the learning potential and technical depth of different code samples. The dataset used for training consists of 22,786 samples for training, 4,555 for validation, and 18,232 for testing, ensuring that the model is both robust and well-generalized across different coding contexts.
bigcode/the-stack, it may not cover all programming languages or specialized domains. The model may perform less effectively in underrepresented languages or niche coding styles not well-represented in the dataset.import torch
import numpy as np
from transformers import AutoTokenizer, AutoModelForSequenceClassification
from peft import PeftModel, PeftConfig
# Define the model name or path for loading the tokenizer and model using LoRA fine-tuning
model_name_or_path = "kimsan0622/Llama-3.2-3B-Code-Knowledge-Value-Eval-lora"
# Load the PEFT (Parameter-Efficient Fine-Tuning) configuration from the pretrained model
config = PeftConfig.from_pretrained(model_name_or_path)
# Load the base model for sequence classification, setting up for 6 possible labels
inference_model = AutoModelForSequenceClassification.from_pretrained(
config.base_model_name_or_path, # Base model path
device_map="cuda:0", # Use the first CUDA device for inference
label2id={str(k): k for k in range(6)}, # Map label names (0-5) to IDs
id2label={k: str(k) for k in range(6)}, # Map label IDs to names (0-5)
num_labels=6, # Define the number of labels for classification (0 to 5)
)
# Load the tokenizer for the base model
tokenizer = AutoTokenizer.from_pretrained(config.base_model_name_or_path)
# Set the padding token if it is not already defined, matching it with the EOS token
if not tokenizer.pad_token_id:
tokenizer.pad_token_id = tokenizer.eos_token_id
inference_model.config.pad_token_id = inference_model.config.eos_token_id
# Load the PEFT model using the pre-trained LoRA model and the base model
model = PeftModel.from_pretrained(inference_model, model_name_or_path)
# Sample code input to evaluate
code = [
"""
import torch
import numpy as np
from transformers import AutoTokenizer, AutoModelForSequenceClassification
from peft import PeftModel, PeftConfig
# Define the model name or path for loading the tokenizer and model using LoRA fine-tuning
model_name_or_path = "kimsan0622/Llama-3.2-3B-Code-Knowledge-Value-Eval-lora"
# Load the PEFT (Parameter-Efficient Fine-Tuning) configuration from the pretrained model
config = PeftConfig.from_pretrained(model_name_or_path)
# Load the base model for sequence classification, setting up for 6 possible labels
inference_model = AutoModelForSequenceClassification.from_pretrained(
config.base_model_name_or_path, # Base model path
device_map="cuda:0", # Use the first CUDA device for inference
label2id={str(k): k for k in range(6)}, # Map label names (0-5) to IDs
id2label={k: str(k) for k in range(6)}, # Map label IDs to names (0-5)
num_labels=6, # Define the number of labels for classification (0 to 5)
)
# Load the tokenizer for the base model
tokenizer = AutoTokenizer.from_pretrained(config.base_model_name_or_path)
# Set the padding token if it is not already defined, matching it with the EOS token
if not tokenizer.pad_token_id:
tokenizer.pad_token_id = tokenizer.eos_token_id
inference_model.config.pad_token_id = inference_model.config.eos_token_id
# Load the PEFT model using the pre-trained LoRA model and the base model
model = PeftModel.from_pretrained(inference_model, model_name_or_path)
# Sample code input to evaluate
code = ["code"]
# Tokenize the input code, setting the maximum length and ensuring proper padding and truncation
batch = tokenizer(code, max_length=1024, padding=True, truncation=True, return_tensors="pt")
# Perform inference without computing gradients for faster processing
with torch.no_grad():
# Pass the input IDs and attention mask to the model for prediction
res = model(
input_ids=batch["input_ids"].to("cuda:0"),
attention_mask=batch["attention_mask"].to("cuda:0"),
)
# Move the logits to the CPU and convert them to a numpy array
preds = res.logits.cpu().numpy()
# Get the predicted label by taking the argmax of the logits
preds = np.argmax(preds, axis=1).tolist()
# Print the predicted labels
print(preds)
"""
]
# Tokenize the input code, setting the maximum length and ensuring proper padding and truncation
batch = tokenizer(code, max_length=1024, padding=True, truncation=True, return_tensors="pt")
# Perform inference without computing gradients for faster processing
with torch.no_grad():
# Pass the input IDs and attention mask to the model for prediction
res = model(
input_ids=batch["input_ids"].to("cuda:0"),
attention_mask=batch["attention_mask"].to("cuda:0"),
)
# Move the logits to the CPU and convert them to a numpy array
preds = res.logits.cpu().numpy()
# Get the predicted label by taking the argmax of the logits
preds = np.argmax(preds, axis=1).tolist()
# Print the predicted labels
print(preds)
from transformers import AutoTokenizer, AutoModelForSequenceClassification, BitsAndBytesConfig
from peft import PeftModel, PeftConfig
# Define the model name or path for loading the LoRA fine-tuned model
model_name_or_path = "kimsan0622/Llama-3.2-3B-Code-Knowledge-Value-Eval-lora"
# Configure the model to load in 8-bit precision to optimize memory usage and speed
bnb_config = BitsAndBytesConfig(load_in_8bit=True)
# Load the PEFT (Parameter-Efficient Fine-Tuning) configuration from the pre-trained model
config = PeftConfig.from_pretrained(model_path)
# Load the base model for sequence classification with 8-bit quantization and a device map to the first CUDA device
inference_model = AutoModelForSequenceClassification.from_pretrained(
config.base_model_name_or_path, # Base model path from PEFT config
quantization_config=bnb_config, # Apply 8-bit quantization for memory efficiency
device_map="cuda:0", # Map the model to the first CUDA device
label2id={str(k): k for k in range(6)}, # Map label names (0-5) to label IDs
id2label={k: str(k) for k in range(6)}, # Map label IDs to label names (0-5)
num_labels=6, # Specify the number of labels for classification
)
# Load the tokenizer associated with the base model
tokenizer = AutoTokenizer.from_pretrained(config.base_model_name_or_path)
# Set the padding token if it's not defined, using the EOS token as the fallback
if not tokenizer.pad_token_id:
tokenizer.pad_token_id = tokenizer.eos_token_id
inference_model.config.pad_token_id = inference_model.config.eos_token_id
# Load the PEFT model by applying LoRA (Low-Rank Adaptation) on top of the base model
model = PeftModel.from_pretrained(inference_model, model_path)
kimsan0622/code-knowledge-eval
The following hyperparameters were used during training:
| Training Loss | Epoch | Step | Validation Loss | Accuracy |
|---|---|---|---|---|
| 0.9527 | 0.9993 | 178 | 0.9795 | 0.5568 |
| 0.8867 | 1.9986 | 356 | 0.9173 | 0.5945 |
| 0.7937 | 2.9979 | 534 | 0.9297 | 0.5982 |
| 0.6486 | 3.9972 | 712 | 1.0171 | 0.5932 |
| 0.5555 | 4.9965 | 890 | 1.0441 | 0.5945 |
| y_true | pred_0 | pred_1 | pred_2 | pred_3 | pred_4 | pred_5 |
|---|---|---|---|---|---|---|
| 0 | 1112 | 155 | 75 | 35 | 0 | 0 |
| 1 | 413 | 327 | 274 | 226 | 3 | 1 |
| 2 | 151 | 207 | 433 | 941 | 37 | 5 |
| 3 | 71 | 79 | 298 | 3490 | 928 | 59 |
| 4 | 14 | 1 | 24 | 1735 | 3334 | 1216 |
| 5 | 1 | 0 | 2 | 77 | 591 | 1917 |
| y_true | precision | recall | f1-score | support |
|---|---|---|---|---|
| 0 | 0.63 | 0.81 | 0.71 | 1377 |
| 1 | 0.43 | 0.26 | 0.32 | 1244 |
| 2 | 0.39 | 0.24 | 0.30 | 1774 |
| 3 | 0.54 | 0.71 | 0.61 | 4925 |
| 4 | 0.68 | 0.53 | 0.59 | 6324 |
| 5 | 0.60 | 0.74 | 0.66 | 2588 |
| accuracy | 0.58 | 18232 | ||
| macro avg | 0.54 | 0.55 | 0.53 | 18232 |
| weighted avg | 0.58 | 0.58 | 0.57 | 18232 |
| y_true | pred_0 | pred_1 | pred_2 | pred_3 | pred_4 | pred_5 |
|---|---|---|---|---|---|---|
| 0 | 1107 | 169 | 71 | 29 | 1 | 0 |
| 1 | 396 | 359 | 273 | 213 | 2 | 1 |
| 2 | 143 | 234 | 418 | 938 | 36 | 5 |
| 3 | 66 | 97 | 301 | 3516 | 888 | 57 |
| 4 | 12 | 3 | 24 | 1799 | 3315 | 1171 |
| 5 | 1 | 0 | 2 | 81 | 610 | 1894 |
| y_true | precision | recall | f1-score | support |
|---|---|---|---|---|
| 0 | 0.64 | 0.80 | 0.71 | 1377 |
| 1 | 0.42 | 0.29 | 0.34 | 1244 |
| 2 | 0.38 | 0.24 | 0.29 | 1774 |
| 3 | 0.53 | 0.71 | 0.61 | 4925 |
| 4 | 0.68 | 0.52 | 0.59 | 6324 |
| 5 | 0.61 | 0.73 | 0.66 | 2588 |
| accuracy | 0.58 | 18232 | ||
| macro avg | 0.54 | 0.55 | 0.54 | 18232 |
| weighted avg | 0.58 | 0.58 | 0.57 | 18232 |