File size: 2,811 Bytes
0ab2566 | 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 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | ## TODO: 实现一个映射层,将输出得到的特征维度映射到embed空间当中
from models.proj_models import LLM2EmbedProjector, LLM2EmbedAddProjector
from typing import Optional
from logger import get_logger
from transformers.modeling_utils import load_state_dict
from transformers.trainer_utils import get_last_checkpoint
import os
from . import register_loader
logger = get_logger(__name__)
@register_loader("load_mlp_projector")
def load_mlp_projector(
fc_args: "FCArguments",
in_dim = 3074,
is_trainable: Optional[bool] = False,
resume_from_checkpoint=None,
output_dir=None
):
if fc_args.stage == "classify":
mlp_model = LLM2EmbedProjector(
in_dim = in_dim,
out_dim = fc_args.embed_dim,
fp16=False
)
if resume_from_checkpoint:
if os.path.exists(output_dir):
new_model_name_or_path_proj = get_last_checkpoint(output_dir)
logger.info("start to load pfc not from: {}, but from {}".format(
fc_args.model_name_or_path_proj, new_model_name_or_path_proj
))
else:
new_model_name_or_path_proj = None
logger.info('not exists (output_dir) for pfc {}, load pfc from {}'.format(output_dir, fc_args.model_name_or_path_proj))
if new_model_name_or_path_proj:
logger.info("(resume process) start to load pfc from: {}".format(new_model_name_or_path_proj))
mlp_model.maybe_load_state_dict_from_path(new_model_name_or_path_proj)
else:
logger.info("(resume failed) still start to load pfc from: {}".format(fc_args.model_name_or_path_proj))
mlp_model.maybe_load_state_dict_from_path(fc_args.model_name_or_path_proj)
else:
logger.info("start to load pfc from: {}".format(fc_args.model_name_or_path_proj))
mlp_model.maybe_load_state_dict_from_path(fc_args.model_name_or_path_proj)
if is_trainable:
mlp_model.train()
else:
mlp_model.eval()
else:
mlp_model = None
return mlp_model
@register_loader("load_add_projector")
def load_add_projector(
fc_args: "FCArguments",
in_dim = 3074,
is_trainable: Optional[bool] = False,
resume_from_checkpoint=None,
output_dir=None
):
if fc_args.stage == "classify":
mlp_model = LLM2EmbedAddProjector(
in_dim = in_dim,
out_dim = fc_args.embed_dim,
fp16=False
)
logger.info("No weights for LLM2EmbedAddProjector")
if is_trainable:
mlp_model.train()
else:
mlp_model.eval()
else:
mlp_model = None
return mlp_model |