[fix] robustness
parent
e57130e9e7
commit
959561791f
|
|
@ -1,5 +1,8 @@
|
||||||
model/__pycache__
|
model/__pycache__
|
||||||
|
__pycache__/
|
||||||
|
*.py[cod]
|
||||||
|
.DS_Store
|
||||||
out
|
out
|
||||||
website/
|
website/
|
||||||
docs-minimind-v/
|
docs-minimind-v/
|
||||||
测试.py
|
测试.py
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ import io
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
from torch.utils.data import Dataset, DataLoader
|
from torch.utils.data import Dataset, DataLoader
|
||||||
from model.model_vlm import MiniMindVLM
|
from model.model_vlm import MiniMindVLM
|
||||||
|
from datasets import Dataset as HFDataset
|
||||||
import pyarrow as pa
|
import pyarrow as pa
|
||||||
import pyarrow.parquet as pq
|
import pyarrow.parquet as pq
|
||||||
|
|
||||||
|
|
@ -47,7 +48,7 @@ def post_processing_chat(prompt_content, empty_think_ratio=0.2):
|
||||||
class VLMDataset(Dataset):
|
class VLMDataset(Dataset):
|
||||||
def __init__(self, parquet_path, tokenizer, preprocess=None, max_length=512, image_special_token='<|image_pad|>', image_token_len=64):
|
def __init__(self, parquet_path, tokenizer, preprocess=None, max_length=512, image_special_token='<|image_pad|>', image_token_len=64):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self.table = pa.Table.from_batches(pq.ParquetFile(parquet_path).iter_batches())
|
self.dataset = HFDataset.from_parquet(parquet_path)
|
||||||
self.tokenizer = tokenizer
|
self.tokenizer = tokenizer
|
||||||
self.max_length = max_length
|
self.max_length = max_length
|
||||||
self.preprocess = preprocess
|
self.preprocess = preprocess
|
||||||
|
|
@ -56,7 +57,7 @@ class VLMDataset(Dataset):
|
||||||
self.eos_id = tokenizer(f'{tokenizer.eos_token}\n', add_special_tokens=False).input_ids
|
self.eos_id = tokenizer(f'{tokenizer.eos_token}\n', add_special_tokens=False).input_ids
|
||||||
|
|
||||||
def __len__(self):
|
def __len__(self):
|
||||||
return len(self.table)
|
return len(self.dataset)
|
||||||
|
|
||||||
def create_chat_prompt(self, conversations):
|
def create_chat_prompt(self, conversations):
|
||||||
messages = []
|
messages = []
|
||||||
|
|
@ -90,8 +91,9 @@ class VLMDataset(Dataset):
|
||||||
return labels
|
return labels
|
||||||
|
|
||||||
def __getitem__(self, index: int):
|
def __getitem__(self, index: int):
|
||||||
conversations = json.loads(self.table['conversations'][index].as_py())
|
row = self.dataset[index]
|
||||||
image_bytes = self.table['image_bytes'][index].as_py()
|
conversations = json.loads(row['conversations']) if isinstance(row['conversations'], str) else row['conversations']
|
||||||
|
image_bytes = row['image_bytes']
|
||||||
if not isinstance(image_bytes, list): image_bytes = [image_bytes]
|
if not isinstance(image_bytes, list): image_bytes = [image_bytes]
|
||||||
|
|
||||||
conversations = pre_processing_chat(conversations)
|
conversations = pre_processing_chat(conversations)
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,9 @@ def init_model(args):
|
||||||
model = AutoModelForCausalLM.from_pretrained(args.load_from, trust_remote_code=True)
|
model = AutoModelForCausalLM.from_pretrained(args.load_from, trust_remote_code=True)
|
||||||
model.vision_encoder, model.processor = MiniMindVLM.get_vision_model("./model/siglip2-base-p32-256-ve")
|
model.vision_encoder, model.processor = MiniMindVLM.get_vision_model("./model/siglip2-base-p32-256-ve")
|
||||||
get_model_params(model, model.config)
|
get_model_params(model, model.config)
|
||||||
return model.half().eval().to(args.device), tokenizer, model.processor
|
model = model.eval()
|
||||||
|
if "cuda" in args.device: model = model.half()
|
||||||
|
return model.to(args.device), tokenizer, model.processor
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,9 @@ def load_vlm_model(model_path):
|
||||||
if model.vision_encoder is None: raise FileNotFoundError(f"视觉编码器未找到: {vision_model_path}")
|
if model.vision_encoder is None: raise FileNotFoundError(f"视觉编码器未找到: {vision_model_path}")
|
||||||
preprocess = model.processor
|
preprocess = model.processor
|
||||||
lm_config = model.config
|
lm_config = model.config
|
||||||
model = model.half().eval().to(device)
|
model = model.eval()
|
||||||
|
if "cuda" in device: model = model.half()
|
||||||
|
model = model.to(device)
|
||||||
model.vision_encoder = model.vision_encoder.to(device)
|
model.vision_encoder = model.vision_encoder.to(device)
|
||||||
current_model_name = os.path.basename(model_path)
|
current_model_name = os.path.basename(model_path)
|
||||||
param_str = f'{sum(p.numel() for p in model.parameters() if p.requires_grad) / 1e6:.2f}M'
|
param_str = f'{sum(p.numel() for p in model.parameters() if p.requires_grad) / 1e6:.2f}M'
|
||||||
|
|
@ -76,13 +78,14 @@ def chat(prompt, current_image_path=None):
|
||||||
messages,
|
messages,
|
||||||
tokenize=False,
|
tokenize=False,
|
||||||
add_generation_prompt=True
|
add_generation_prompt=True
|
||||||
)[-max_seq_len + 1:]
|
)
|
||||||
|
|
||||||
with torch.no_grad():
|
with torch.no_grad():
|
||||||
inputs = tokenizer(
|
inputs = tokenizer(
|
||||||
new_prompt,
|
new_prompt,
|
||||||
return_tensors="pt",
|
return_tensors="pt",
|
||||||
truncation=True
|
truncation=True,
|
||||||
|
max_length=max_seq_len
|
||||||
).to(device)
|
).to(device)
|
||||||
queue = Queue()
|
queue = Queue()
|
||||||
streamer = CustomStreamer(tokenizer, queue)
|
streamer = CustomStreamer(tokenizer, queue)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue