Don't reload model for the merge step;
This commit is contained in:
@@ -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
|
||||||
|
|||||||
14
Merger.py
14
Merger.py
@@ -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.storeAdapter:
|
|
||||||
raise Exception("Configuration problem: mergeFull requires storeAdapter")
|
|
||||||
|
|
||||||
print("Reloading model")
|
if not context.model:
|
||||||
baseModel = ModelLoader().load(context.locBaseModel, False, True, context)
|
if not context.storeAdapter:
|
||||||
peftModel = PeftModel.from_pretrained(baseModel, context.locAdapter)
|
raise Exception("Configuration problem: mergeFull requires storeAdapter")
|
||||||
|
|
||||||
|
print("Loading model")
|
||||||
|
baseModel = ModelLoader().load(context.locBaseModel, False, True, context)
|
||||||
|
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:
|
||||||
|
|||||||
52
Trainer.py
52
Trainer.py
@@ -16,42 +16,36 @@ 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)
|
||||||
|
context.model = sftTrainer.model
|
||||||
|
|
||||||
|
vInplace = context.validate and context.vInplace
|
||||||
|
validator = None
|
||||||
|
if vInplace:
|
||||||
|
validator = Validator()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
vInplace = context.validate and context.vInplace
|
cnt = 0
|
||||||
validator = None
|
continueTraining = True
|
||||||
if vInplace:
|
while continueTraining:
|
||||||
validator = Validator()
|
cnt += 1
|
||||||
|
print(f"Training run {cnt}")
|
||||||
|
|
||||||
try:
|
self.__train(sftTrainer)
|
||||||
cnt = 0
|
|
||||||
continueTraining = True
|
|
||||||
while continueTraining:
|
|
||||||
cnt += 1
|
|
||||||
print(f"Training run {cnt}")
|
|
||||||
|
|
||||||
self.__train(sftTrainer)
|
|
||||||
|
|
||||||
if vInplace:
|
|
||||||
continueTraining = not validator.validateInPlace(sftTrainer.tokenizer, sftTrainer.model, context)
|
|
||||||
else:
|
|
||||||
continueTraining = False
|
|
||||||
|
|
||||||
print(f"Total training runs: {cnt} epochs {cnt * (context.trEpochs or 1)}")
|
|
||||||
|
|
||||||
finally:
|
|
||||||
if vInplace:
|
if vInplace:
|
||||||
print(f"Validation statistics:\n{validator.statistics}")
|
continueTraining = not validator.validateInPlace(sftTrainer.tokenizer, sftTrainer.model, context)
|
||||||
validator.unload(context)
|
else:
|
||||||
|
continueTraining = False
|
||||||
|
|
||||||
if context.storeAdapter:
|
print(f"Total training runs: {cnt} epochs {cnt * (context.trEpochs or 1)}")
|
||||||
self.__storeAdapter(sftTrainer, context)
|
|
||||||
|
|
||||||
finally:
|
finally:
|
||||||
del sftTrainer
|
if vInplace:
|
||||||
del baseModel
|
print(f"Validation statistics:\n{validator.statistics}")
|
||||||
gc.collect()
|
validator.unload(context)
|
||||||
if context.accel:
|
|
||||||
torch.cuda.empty_cache()
|
if context.storeAdapter:
|
||||||
|
self.__storeAdapter(sftTrainer, context)
|
||||||
|
|
||||||
def __createTrainer(self, baseModel, context: Context):
|
def __createTrainer(self, baseModel, context: Context):
|
||||||
tokenizer = AutoTokenizer.from_pretrained(
|
tokenizer = AutoTokenizer.from_pretrained(
|
||||||
|
|||||||
Reference in New Issue
Block a user