Don't reload model for the merge step;

This commit is contained in:
extio-de
2025-02-08 11:25:12 +01:00
parent a0e9a5a33a
commit f253fde344
3 changed files with 39 additions and 40 deletions

View File

@@ -1,9 +1,12 @@
import configparser import configparser
import torch import torch
from peft import PeftModel
from sympy.printing import str from sympy.printing import str
class Context: class Context:
model: PeftModel
accel: bool accel: bool
device: str device: str
purgeTargetDirectories: bool purgeTargetDirectories: bool

View File

@@ -7,15 +7,17 @@ class Merger:
def mergeAndStore(self, context: Context): def mergeAndStore(self, context: Context):
if not context.mergeFull: if not context.mergeFull:
return return
if not context.model:
if not context.storeAdapter: if not context.storeAdapter:
raise Exception("Configuration problem: mergeFull requires storeAdapter") raise Exception("Configuration problem: mergeFull requires storeAdapter")
print("Reloading model") print("Loading model")
baseModel = ModelLoader().load(context.locBaseModel, False, True, context) baseModel = ModelLoader().load(context.locBaseModel, False, True, context)
peftModel = PeftModel.from_pretrained(baseModel, context.locAdapter) context.model = PeftModel.from_pretrained(baseModel, context.locAdapter)
print("Merging") print("Merging")
mergedModel = peftModel.merge_and_unload() mergedModel = context.model.merge_and_unload()
print("Dequantize") print("Dequantize")
try: try:

View File

@@ -16,7 +16,8 @@ class Trainer:
baseModel = ModelLoader().load(context.locBaseModel, False, True, context) baseModel = ModelLoader().load(context.locBaseModel, False, True, context)
sftTrainer = self.__createTrainer(baseModel, context) sftTrainer = self.__createTrainer(baseModel, context)
try: context.model = sftTrainer.model
vInplace = context.validate and context.vInplace vInplace = context.validate and context.vInplace
validator = None validator = None
if vInplace: if vInplace:
@@ -46,13 +47,6 @@ class Trainer:
if context.storeAdapter: if context.storeAdapter:
self.__storeAdapter(sftTrainer, context) self.__storeAdapter(sftTrainer, context)
finally:
del sftTrainer
del baseModel
gc.collect()
if context.accel:
torch.cuda.empty_cache()
def __createTrainer(self, baseModel, context: Context): def __createTrainer(self, baseModel, context: Context):
tokenizer = AutoTokenizer.from_pretrained( tokenizer = AutoTokenizer.from_pretrained(
context.locBaseModel, context.locBaseModel,