MCPcopy Create free account
hub / github.com/WeixiangYAN/ClinicalLab / TaiyiLLMvaluator

Class TaiyiLLMvaluator

code/inference/evaluators/taiyillm.py:9–57  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

7
8
9class TaiyiLLMvaluator(Evaluator):
10
11 def __init__(self, pretrained_model_name_or_path, cache_dir=None, do_sample=False, max_length=4096):
12 super(TaiyiLLMvaluator, self).__init__()
13
14 self.tokenizer = AutoTokenizer.from_pretrained(
15 pretrained_model_name_or_path=pretrained_model_name_or_path,
16 cache_dir=cache_dir,
17 trust_remote_code=True
18 )
19 self.model = AutoModelForCausalLM.from_pretrained(
20 pretrained_model_name_or_path=pretrained_model_name_or_path,
21 cache_dir=cache_dir,
22 device_map='auto',
23 low_cpu_mem_usage=True,
24 torch_dtype=torch.float16,
25 trust_remote_code=True
26 )
27 self.model = self.model.eval()
28 self.do_sample = do_sample
29 self.max_length = max_length
30 print(f'Memory footprint: {self.model.get_memory_footprint() / 1e6:.2f} MB')
31
32 def format_prompt(self, prompt):
33 return prompt
34
35 @retry(wait=wait_random_exponential(min=1, max=60), stop=stop_after_attempt(6))
36 def generate_text(self, prompt):
37 prompt = self.format_prompt(prompt)
38 self.tokenizer.pad_token_id = self.tokenizer.eod_id
39 self.tokenizer.bos_token_id = self.tokenizer.eod_id
40 self.tokenizer.eos_token_id = self.tokenizer.eod_id
41 model_input_ids = self.tokenizer(prompt, add_special_tokens=False, return_tensors='pt').input_ids
42 bos_token_id = torch.tensor([[self.tokenizer.bos_token_id]], dtype=torch.long)
43 eos_token_id = torch.tensor([[self.tokenizer.eos_token_id]], dtype=torch.long)
44 input_ids = torch.concat([bos_token_id, model_input_ids, eos_token_id], dim=1).to(self.model.device)
45 outputs = self.model.generate(
46 input_ids,
47 do_sample=self.do_sample,
48 max_length=self.max_length,
49 eos_token_id=self.tokenizer.eos_token_id
50 ).to('cpu')
51 response = self.tokenizer.batch_decode(outputs)
52
53 return response[0].split(self.tokenizer.eos_token)[-2].strip()
54
55 @retry(wait=wait_random_exponential(min=1, max=60), stop=stop_after_attempt(6))
56 def count_tokens(self, prompt):
57 return len(self.tokenizer(prompt)['input_ids'])

Callers 1

eval.pyFile · 0.90

Calls

no outgoing calls

Tested by

no test coverage detected