Views
No views yet

<|user|>\n<|image_1|>\n{prompt}<|end|>\n<|assistant|>\n <|assistant|> . For multi-turn conversations, the prompt should be formatted as follows:<|user|>\n<|image_1|>\n{prompt_1}<|end|>\n<|assistant|>\n{response_1}<|end|>\n<|user|>\n{prompt_2}<|end|>\n<|assistant|>\n 1from PIL import Image
2import requests
3from transformers import AutoModelForCausalLM
4from transformers import AutoProcessor
5
6model_id = "lamm-mit/Cephalo-Phi-3-vision-128k-4b-alpha"
7
8model = AutoModelForCausalLM.from_pretrained(model_id, device_map="cuda", trust_remote_code=True, torch_dtype="auto")
9
10processor = AutoProcessor.from_pretrained(model_id, trust_remote_code=True)
11
12messages = [
13 {"role": "user", "content": "<|image_1|>\nWhat is shown in this image, and what is the relevance for materials design?"},
14 ]
15
16url = "https://d2r55xnwy6nx47.cloudfront.net/uploads/2018/02/Ants_Lede1300.jpg"
17
18image = Image.open(requests.get(url, stream=True).raw)
19
20prompt = processor.tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
21
22inputs = processor(prompt, [image], return_tensors="pt").to("cuda:0")
23
24generation_args = {
25 "max_new_tokens": 512,
26 "temperature": 0.1,
27 "do_sample": True,
28 "stop_strings": ['<|end|>',
29 '<|endoftext|>'],
30 "tokenizer": processor.tokenizer,
31 }
32
33generate_ids = model.generate(**inputs, eos_token_id=processor.tokenizer.eos_token_id, **generation_args)
34
35# remove input tokens
36generate_ids = generate_ids[:, inputs['input_ids'].shape[1]:]
37response = processor.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
38
39print(response) 

1model_id = "microsoft/Phi-3-vision-128k-instruct"
2
3model = AutoModelForCausalLM.from_pretrained(model_id, device_map="cuda", trust_remote_code=True, torch_dtype="auto")
4
5processor = AutoProcessor.from_pretrained(model_id, trust_remote_code=True) FT_repo_id='xxxxx/' #<repo_ID>from datasets import load_dataset
train_dataset = load_dataset("lamm-mit/Cephalo-Wikipedia-Materials", split="train")1import random
2
3class MyDataCollator:
4 def __init__(self, processor):
5 self.processor = processor
6
7 def __call__(self, examples):
8 texts = []
9 images = []
10 for example in examples:
11 image = example["image"]
12 question = example["query"]
13 answer = example["answer"]
14 messages = [ {
15 "role": "user", "content": '<|image_1|>\n'+question},
16 {"role": "assistant", "content": f"{answer}"}, ]
17
18 text = processor.tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=False)
19
20 images.append(image)
21
22 batch = processor(text=text, images=[image], return_tensors="pt", padding=True
23
24 labels = batch["input_ids"].clone()
25 labels[labels <0] = -100
26
27 batch["labels"] = labels
28
29 return batch
30
31data_collator = MyDataCollator(processor)1from transformers import TrainingArguments, Trainer
2
3optim = "paged_adamw_8bit"
4
5training_args = TrainingArguments(
6 num_train_epochs=2,
7 per_device_train_batch_size=1,
8 #per_device_eval_batch_size=4,
9 gradient_accumulation_steps=4,
10 warmup_steps=250,
11 learning_rate=1e-5,
12 weight_decay=0.01,
13 logging_steps=25,
14 output_dir="output_training",
15 optim=optim,
16 save_strategy="steps",
17 save_steps=1000,
18 save_total_limit=16,
19 #fp16=True,
20 bf16=True,
21 push_to_hub_model_id=FT_repo_id,
22 remove_unused_columns=False,
23 report_to="none",
24)
25
26trainer = Trainer(
27 model=model,
28 args=training_args,
29 data_collator=data_collator,
30 train_dataset=train_dataset,
31)
32
33trainer.train()1@article{Buehler_Cephalo_2024,
2 title={Cephalo: Multi-Modal Vision-Language Models for Bio-Inspired Materials Analysis and Design},
3 author={Markus J. Buehler},
4 journal={arXiv preprint arXiv:2405.19076},
5 year={2024}
6}