| import torch | |
| from transformers import AutoModelForCausalLM, AutoTokenizer | |
| from peft import LoraConfig, get_peft_model | |
| def load_model(model_name): | |
| has_cuda = torch.cuda.is_available() | |
| dtype = torch.bfloat16 if has_cuda and torch.cuda.is_bf16_supported() else torch.float16 | |
| if not has_cuda: | |
| print("WARNING: CUDA GPU not detected. Training will run on CPU and will be very slow.") | |
| model = AutoModelForCausalLM.from_pretrained( | |
| model_name, | |
| torch_dtype=dtype if has_cuda else torch.float32, | |
| device_map="auto" if has_cuda else "cpu", | |
| ) | |
| model.config.use_cache = False | |
| tokenizer = AutoTokenizer.from_pretrained(model_name) | |
| tokenizer.pad_token = tokenizer.eos_token | |
| if has_cuda: | |
| model.gradient_checkpointing_enable() | |
| lora_config = LoraConfig( | |
| r=8, | |
| lora_alpha=16, | |
| target_modules=["q_proj", "v_proj"], | |
| lora_dropout=0.1, | |
| bias="none", | |
| task_type="CAUSAL_LM" | |
| ) | |
| model = get_peft_model(model, lora_config) | |
| model.print_trainable_parameters() | |
| return model, tokenizer | |