julyanghar's picture
Add self-contained TOSC evaluation pipeline
7e01f18
Raw
History Blame Contribute Delete
2.23 kB
import torch
from peft import PeftModel # noqa
from transformers import (
AutoProcessor,
LlavaNextForConditionalGeneration,
LlavaNextProcessor,
PreTrainedModel,
Qwen2_5_VLForConditionalGeneration,
Qwen2VLForConditionalGeneration,
)
def init_hf_model(args) -> tuple[PreTrainedModel, AutoProcessor]:
model_name: str = args.model_name
model_dir: str = args.model_dir
print(f"Loading model name {model_name} from dir {model_dir}")
if "llava" in model_name.lower():
model_type = LlavaNextForConditionalGeneration
processor_type = LlavaNextProcessor
elif "qwen2_5" in model_name.lower() or "qwen2.5" in model_name.lower() or "qwen25" in model_name.lower():
model_type = Qwen2_5_VLForConditionalGeneration
processor_type = AutoProcessor
elif "qwen" in model_name.lower():
model_type = Qwen2VLForConditionalGeneration
processor_type = AutoProcessor
model: PreTrainedModel = model_type.from_pretrained(
model_name,
cache_dir=model_dir,
torch_dtype=torch.float16,
low_cpu_mem_usage=True,
device_map="cuda",
attn_implementation="flash_attention_2",
).eval()
if args.lora_name is not None and len(args.lora_name) > 10:
lora_name: str = args.lora_name
print(f"Loading LoRA model from {lora_name}")
model = PeftModel.from_pretrained(
model,
args.lora_name,
torch_dtype=torch.float16,
device_map="cuda",
)
else:
print("No LoRA model specified, using base model.")
processor: AutoProcessor = processor_type.from_pretrained(
model_name,
cache_dir=model_dir,
padding_side="left",
use_fast=True,
)
return model, processor
def truncate_gen_ids(encoded_inputs: dict, generated_ids: torch.Tensor) -> torch.Tensor:
"""
截断 generated_ids 到其有效长度并保留原来的格式。
Args:
encoded_inputs: 编码后的输入数据,包含 input_ids。
generated_ids: 生成的 ID 列表。
Returns:
list: 截断后的 generated_ids。
"""
return generated_ids[:, encoded_inputs.input_ids.size(1) :]