| import config as config |
| import torch |
| from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig |
| from peft import PeftModel |
| class Load_model(): |
| def __init__(self,adapter_path): |
| self.repo = config.repo_id |
| self.base_model_name = config.MODEL |
| self.adapter_path = adapter_path |
| self.token = config.HUGGINGFACE_TOKEN |
| self.device = torch.device("cuda" if torch.cuda.is_available() else "cpu") |
|
|
| bnb_config = BitsAndBytesConfig( |
| load_in_4bit=True, |
| bnb_4bit_quant_type="nf4", |
| bnb_4bit_compute_dtype=torch.bfloat16, |
| bnb_4bit_use_double_quant=False, |
| ) |
| base_model = AutoModelForCausalLM.from_pretrained( |
| self.base_model_name, |
| quantization_config=bnb_config, |
| device_map={"": 0}, |
| token=self.token, |
| trust_remote_code=True |
| ) |
|
|
| self.tokenizer = AutoTokenizer.from_pretrained( |
| self.base_model_name, |
| token=self.token, |
| trust_remote_code=True) |
| |
| if self.tokenizer.pad_token is None: |
| self.tokenizer.pad_token = self.tokenizer.eos_token |
| self.tokenizer.padding_side = "right" |
|
|
| self.model = PeftModel.from_pretrained(base_model, self.repo, subfolder=self.adapter_path) |
| self.model = self.model.eval() |
|
|
| print(f"--- SFT model load complete: {self.base_model_name} + {self.adapter_path} ---") |
| |
| def get(self): |
| return self.model, self.tokenizer |
|
|