Spaces:
Sleeping
Sleeping
File size: 2,268 Bytes
039c272 dd7ff72 039c272 dd7ff72 039c272 dd7ff72 039c272 dd7ff72 039c272 dd7ff72 | 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 | import os
os.environ['HF_HOME'] = os.path.abspath("./.hf_cache")
import torch
from transformers import BlipProcessor, BlipForQuestionAnswering, BitsAndBytesConfig
from peft import LoraConfig, get_peft_model, prepare_model_for_kbit_training
import yaml
# Initialize the BLIP model and processor
config = yaml.safe_load(open("./config.yaml", "r"))
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model_id = config["finetune_model"]["orignal_model_id"]
def load_model_processor(model_path=model_id, use_quantization=True):
print("Loading Model and Processor................")
if use_quantization and torch.cuda.is_available() and device.type == "cuda":
# Configure BitsAndBytes for 4-bit Quantization
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_use_double_quant=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.float16
)
# Load base model wrapped in 4-bit
model = BlipForQuestionAnswering.from_pretrained(
model_path,
quantization_config=bnb_config,
device_map="auto"
)
# Prepares model for k-bit training and gradient checkpointing
model = prepare_model_for_kbit_training(model)
# Setup LoRA (Parameter Efficient Fine Tuning)
# For Blip, common projection layers are query, value, key.
lora_config = LoraConfig(
r=16,
lora_alpha=32,
target_modules=["query", "value", "key"],
lora_dropout=0.05,
bias="none",
task_type="CAUSAL_LM" # BLIP uses a causal LM head for decoding
)
model = get_peft_model(model, lora_config)
model.print_trainable_parameters()
print("Model loaded with 4-bit quantization and LoRA adapters.")
else:
# Fallback to standard loading if no CUDA or quantization turned off
model = BlipForQuestionAnswering.from_pretrained(model_path).to(device)
print("Model loaded in full precision.")
processor = BlipProcessor.from_pretrained(model_id)
print(f"Model and Processor loaded successfully {model_path} !!!")
return model, processor
|