Back to Annotated Deep Learning Paper Implementations

ඇගයීම

docs/si/neox/evaluation/index.html

latest11.6 KB
Original Source

homeneoxevaluation

[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)

Trending Research Paperslabml.ai