docs/si/neox/evaluation/index.html
[View code on Github](https://github.com/labmlai/annotated_deep_learning_paper_implementations/tree/master/labml_nn/neox/evaluation/ init.py)
Eleutherai/LM-ඇගයීම්-පටිපිළිබඳ ආකෘතිය පරීක්ෂා කිරීමේ කේතය මෙයයි.
15importmath16fromtypingimportList1718importtorch19importtorch.nn.functionalasF20fromlm\_evalimporttasks,evaluator,utils21fromlm\_eval.baseimportBaseLM22fromtokenizersimportTokenizer23fromtorchimportnn24fromtqdmimporttqdm2526fromlabmlimportmonit27fromlabml\_nn.neox.tokenizerimportget\_tokenizer
මෙය Eleutherai/GPT-neox වෙතින් ඇඩප්ටරයමත පදනම් වේ
30classEvalHarnessAdapter(BaseLM):
tokenizer යනු හගිංෆේස් ටෝකනයිසර් යvocab_size යනු වචන මාලාවේ ප්රමාණයයි (මෙය ටෝකනයිසර් වොකාබ් ප්රමාණයට වඩා වෙනස් වන්නේ නියෝක්ස් කාවැද්දීමේ ස්ථර ආකෘතිය සමාන්තරව සිදු කිරීම සඳහා අමතර අමතර ප්රමාණයක් එකතු කරන බැවිනි.)batch_size කණ්ඩායම ප්රමාණය වේ37def\_\_init\_\_(self,tokenizer:Tokenizer,vocab\_size:int,batch\_size:int):
45super().\_\_init\_\_()46self.tokenizer=tokenizer47self.\_eot\_token\_id=self.tokenizer.token\_to\_id("\<|endoftext|\>")48self.\_vocab\_size=vocab\_size4950self.\_batch\_size=batch\_size
වචනමාලාවේ ප්රමාණය
52@property53defdevice(self):54raiseRuntimeError()5556@property57defvocab\_size(self):
59returnself.\_vocab\_size
පෙළඅවසන් ටෝකනය
61@property62defeot\_token\_id(self):
64returnself.\_eot\_token\_id
උපරිමඅනුක්රමය දිග
66@property67defmax\_length(self):
69return2048
උත්පාදනයකිරීමට උපරිම ටෝකන ගණන
71@property72defmax\_gen\_toks(self):
74return128
කණ්ඩායම්ප්රමාණය
76@property77defbatch\_size(self):
81returnself.\_batch\_size
දීඇති පෙළක් කේතනය කරන්න
83deftok\_encode(self,string:str):
87returnself.tokenizer.encode(string).ids
ටෝකන්හැඳුනුම්පත් වලින් පෙළ විකේතනය කරන්න
89deftok\_decode(self,tokens:List[int]):
93returnself.tokenizer.decode(tokens)
95def\_model\_call(self,inps:torch.Tensor):96raiseNotImplementedError
98def\_model\_generate(self,context,max\_length,eos\_token\_id):99raiseRuntimeError()
101defgreedy\_until(self,requests):102raiseRuntimeError()
requests සන්දර්භය සහ අපේක්ෂිත අඛණ්ඩ පැවැත්ම අඩංගු ඉල්ලීම් ලැයිස්තුව.disable_tqdm සත්ය නම්, tqdm ප්රගති තීරුව අක්රීය කරන්න.[email protected]\_grad()105def\_loglikelihood\_tokens(self,requests,disable\_tqdm=False):
ප්රතිඵලසඳහා
114res=[]
දිගපහළ අනුපිළිවෙලෙහි ඉල්ලීම් නැවත සකස් කරන්න, එවිට සමාන දිග සහිත අනුක්රමයන් සමීප වේ
118def\_collate(x):119toks=x[1]+x[2]120return-len(toks),tuple(toks)121122reord=utils.Reorderer(requests,\_collate)
වරකටඉල්ලීම් batch_size ගණනාවක් සහිත ඉල්ලීම් හරහා යැවීමක්
125forchunkinutils.chunks(tqdm(reord.get\_reordered(),disable=disable\_tqdm),self.batch\_size):
කණ්ඩායමසඳහා යෙදවුම් ගබඩා කිරීම
127inps=[]
කණ්ඩායමසඳහා අඛණ්ඩව
129continuations=[]
ආදානඅනුක්රමවල දිග
131inplens=[]
කණ්ඩායමසඳහා පෑඩ් දිග
133padded\_length=None
කුට්ටියේඇති එක් එක් ඉල්ලීම හරහා ලූප් කර ඒවා පෑඩින් සමඟ පයිටෝච් ටෙන්සර්වලට එකතු කරන්න
135for\_,context\_enc,continuation\_encinchunk:
සන්දර්භයසහ අඛණ්ඩ පැවැත්ම සංයුක්ත කරන්න
137inp=context\_enc+continuation\_enc
ප්රමාණයඉක්මවා ගියහොත් වමේ සිට කපා ගන්න max_length
139inp=inp[-(self.max\_length+1):]
අවසානටෝකනය ඉවත් කරන්න
141inp=inp[:-1]
ආතතියක්සාදන්න
143inp=torch.tensor(inp,dtype=torch.long)
ආදානදිග
145inplen=inp.shape[0]
පෑඩ්දිග තීරණය කරන්න. කෙටි අනුපිළිවෙලවල් පෑඩ් ලැබෙනු ඇත.
149ifpadded\_lengthisNone:150padded\_length=int(math.ceil(inplen/32))\*32
padded_length= padded_length නම් padded_length වෙන කිසිවක් නැත
පෑඩින්
154padding=torch.zeros(padded\_length-inplen,dtype=torch.long)
පෑඩින්එකතු කරන්න
157inp=torch.cat([inp,padding],dim=0)158159inps.append(inp)160continuations.append(continuation\_enc)161inplens.append(inplen)
ආදර්ශපිවිසුම් ලබා ගන්න
164logits=self.\_model\_call(torch.stack(inps))
ලොග්සොෆ්ට්මැක්ස් ලබා ගන්න
167multi\_logits=F.log\_softmax(logits,dim=-1)
කණ්ඩායමේආදාන/ප්රතිදාන යුගල හරහා ලූප
170forlogits,inplen,cont\_toksinzip(multi\_logits,inplens,continuations):
පුරෝකථනයකළ ටෝකන ගණන ලබා ගන්න
172contlen=len(cont\_toks)
අයගේපිවිසුම් ලබා ගන්න
174logits=logits[inplen-contlen:inplen]
ඉහළමසම්භාවිතාවන් සහිත ටෝකන ලබා ගන්න
176greedy\_tokens=logits.argmax(dim=-1)
ඉලක්කගතටෝකන ලබා ගන්න
178cont\_toks=torch.tensor(cont\_toks,dtype=torch.long).to(logits.device)
නිශ්චිතගැලපීමක් තිබේද යන්න
180max\_equal=(greedy\_tokens==cont\_toks).all()
ඉලක්කගතටෝකන වල ලොග් වීමේ හැකියාව
182logits=torch.gather(logits,1,cont\_toks[:,None])
මුළුලොග්-Likehoods එකතු කරන්න සහ ප්රතිඵල සඳහා තරගය තිබුණේ ද යන්න
184res.append((float(logits.sum()),bool(max\_equal)))
නැවතඇණවුම් කර නැවත ප්රති. ල
187returnreord.get\_original(res)
[email protected]\_grad()190defrun\_eval(self,name:str,eval\_tasks:List[str]):
Eleutherai/LM ඇගයීම-පටි ඇගයුම්කරු ධාවනය කරන්න
196results=evaluator.evaluate(lm=self,task\_dict=tasks.get\_task\_dict(eval\_tasks))
වින්යාසඑකතු කරන්න
199results["config"]={200"name":name,201}
204returnresults
මෙය Eleutherai/GPT-neox වෙතින් ඇඩප්ටරයමත පදනම් වේ
207classNoeXEvalHarnessAdapter(EvalHarnessAdapter):
model ආකෘතිය වේ
tokenizer යනු හගිංෆේස් ටෝකනයිසර් ය
vocab_size යනු වචන මාලාවේ ප්රමාණයයි (මෙය ටෝකනයිසර් වොකාබ් ප්රමාණයට වඩා වෙනස් වන්නේ නියෝක්ස් කාවැද්දීමේ ස්ථර ආකෘතිය සමාන්තරව සිදු කිරීම සඳහා අමතර අමතර ප්රමාණයක් එකතු කරන බැවිනි.)
batch_size කණ්ඩායම ප්රමාණය වේ
device ආකෘතියේ උපාංගය වේ
214def\_\_init\_\_(self,model:nn.Module,tokenizer:Tokenizer,vocab\_size:int,batch\_size:int,device:torch.device):
224super().\_\_init\_\_(tokenizer,vocab\_size,batch\_size)225self.model=model226self.\_device=device
ආකෘතියඅමතන්න
228def\_model\_call(self,inps:torch.Tensor):
232returnself.model(inps.to(self.\_device))
235defrun\_eval\_harness(model:nn.Module,name:str,eval\_tasks:List[str],device:torch.device,batch\_size:int=8):
ටෝකනයිසර්පටවන්න
241withmonit.section('Load tokenizer'):242tokenizer=get\_tokenizer()
කිසිවක්නියම කර නොමැති නම් සියලු කාර්යයන්
245ifnoteval\_tasks:246eval\_tasks=[247"anli\_r1",248"anli\_r2",249"anli\_r3",250"hellaswag",251"lambada",252"piqa",253"winogrande",254"wsc",255"mathqa",256]
ඇඩැප්ටරයසාදන්න
259adapter=NoeXEvalHarnessAdapter(model,tokenizer,50\_432,batch\_size,device)
දුවන්න
262returnadapter.run\_eval(name,eval\_tasks)