Back to Annotated Deep Learning Paper Implementations

ස්විච්ට්රාන්ස්ෆෝමර් අත්හදා බැලීම

docs/si/transformers/switch/experiment.html

latest11.1 KB
Original Source

hometransformersswitch

View code on Github

#

ස්විච්ට්රාන්ස්ෆෝමර් අත්හදා බැලීම

මෙයස්විච් ට්රාන්ස්ෆෝමරයක් පුහුණු කිරීම සඳහා කරන ලද පයිටෝර්ච් අත්හදා බැලීමකි.

15importtorch16importtorch.nnasnn1718fromlabmlimportexperiment,tracker19fromlabml.configsimportoption20fromlabml\_helpers.moduleimportModule21fromlabml\_helpers.train\_validimportBatchIndex22fromlabml\_nn.experiments.nlp\_autoregressionimportNLPAutoRegressionConfigs

#

ස්වයංක්රීයප්රතිගාමී ආකෘතිය

25classAutoregressiveModel(Module):

#

30def\_\_init\_\_(self,n\_vocab:int,d\_model:int,transformer:Module):31super().\_\_init\_\_()

#

ටෝකන්කාවැද්දීම මොඩියුලය

33self.src\_embed=nn.Embedding(n\_vocab,d\_model)

#

ට්රාන්ස්ෆෝමර්

35self.transformer=transformer

#

අවසන්ස්ථරය

37self.generator=nn.Linear(d\_model,n\_vocab)38self.mask=None

#

40defforward(self,x:torch.Tensor):

#

පසුකාලීනආවරණ ආරම්භ කරන්න

42ifself.maskisNoneorself.mask.size(0)!=len(x):43fromlabml\_nn.transformers.utilsimportsubsequent\_mask44self.mask=subsequent\_mask(len(x)).to(x.device)

#

ටෝකන්කාවැද්දීම්

46x=self.src\_embed(x)

#

ට්රාන්ස්ෆෝමරයහරහා එය ධාවනය කරන්න

48res,counts,route\_prob,n\_dropped,route\_prob\_max=self.transformer(x,self.mask)

#

ඊළඟටෝකනයේ පිවිසුම් ජනනය කරන්න

50res=self.generator(res)

#

52returnres,counts,route\_prob,n\_dropped,route\_prob\_max

#

වින්යාසකිරීම්

මෙයවිහිදේ NLPAutoRegressionConfigs.

අපිඅත්හදා බැලීම ආරම්භ කරන විට පෙරනිමි වින්යාස කළ හැකි අතර එය අධික ලෙස ධාවනය වනු ඇත

55classConfigs(NLPAutoRegressionConfigs):

#

64model:AutoregressiveModel65transformer:Module

#

ටෝකන්කාවැද්දීමේ ප්රමාණය

68d\_model:int=128

#

අවධානයයොමු ප්රධානීන් ගණන

70heads:int=4

#

අතහැරදැමීමේ සම්භාවිතාව

72dropout:float=0.0

#

FFNසැඟවුණු ස්ථරයේ විශේෂාංග ගණන

74d\_ff:int=256

#

ට්රාන්ස්ෆෝමර්ස්ථර ගණන

76n\_layers:int=6

#

විශේෂඥයන්සංඛ්යාව

78n\_experts:int=4

#

පැටවුම්තුලනය කිරීමේ සංගුණකය

80load\_balancing\_loss\_ceof=0.01

#

රවුටින්සම්භාවිතාව අනුව තෝරාගත් විශේෂ expert ප්රතිදානයන් පරිමාණය කළ යුතුද යන්න

82is\_scale\_prob:bool=True

#

ටෝකනඅතහරින්න යන්න

84drop\_tokens:bool=False

#

එක්එක් ආකෘතියේ ධාරිතාව තීරණය කිරීම සඳහා ධාරිතා සාධකය

86capacity\_factor:float=1.0

#

88definit(self):89super().init()

#

ලුහුබැඳීමේදර්ශක ආරම්භ කරන්න

91tracker.set\_scalar("lb\_loss.\*",False)92tracker.set\_scalar("route.\*",False)93tracker.set\_scalar("dropped.\*",False)

#

පුහුණුවහෝ වලංගු කිරීමේ පියවර

95defstep(self,batch:any,batch\_idx:BatchIndex):

#

උපාංගයවෙත දත්ත ගෙනයන්න

101data,target=batch[0].to(self.device),batch[1].to(self.device)

#

පුහුණුප්රකාරයේදී ගෝලීය පියවර යාවත්කාලීන කරන්න (සැකසූ ටෝකන ගණන)

104ifself.mode.is\_train:105tracker.add\_global\_step(data.shape[0]\*data.shape[1])

#

ආකෘතිප්රතිදානයන් ග්රහණය කර ගත යුතුද යන්න

108withself.mode.update(is\_log\_activations=batch\_idx.is\_last):

#

ආදර්ශප්රතිදානයන් ලබා ගන්න.

110output,counts,route\_prob,n\_dropped,route\_prob\_max=self.model(data)

#

එන්ට්රොපිනැතිවීම ගණනය කර හරස් කරන්න

113cross\_entropy\_loss=self.loss\_func(output,target)

#

වත්මන්කණ්ඩායම තුළ සැකසූ මුළු ටෝකන ගණන TB

115total=counts.sum(dim=-1,keepdims=True)

#

එක්එක් විශේෂ expert යා වෙත යොමු කරන ලද ටෝකන වල භාගය fi​=T1​x∈B∑​1{argmaxp(x),i} fi​ යනු ආගම්මැක්ස් සමාන p(x) වන ටෝකන ගණනයයි i.

119route\_frac=counts/total

#

මධ්යන්යමාර්ගගත කිරීමේ සම්භාවිතාව Pi​=T1​x∈B∑​pi​(x)

122route\_prob=route\_prob/total

#

බරතුලනය කිරීමේ අලාභය L=Ni=1∑N​fi​⋅Pi​ L යනු තනි තට්ටුවක් සඳහා වන අලාභය වන අතර මෙහිදී අපි සියලු ස්ථර හරහා පාඩු එකතුව ගනිමු.

127load\_balancing\_loss=self.n\_experts\*(route\_frac\*route\_prob).sum()

#

සංඛ්යානලුහුබඳින්න

130tracker.add('dropped.',total.new\_tensor(n\_dropped)/total)131tracker.add('route.min.',route\_frac.min())132tracker.add('route.max.',route\_frac.max())133tracker.add('route.std.',route\_frac.std())134tracker.add('route.max\_prob.',route\_prob\_max)135tracker.add("loss.",cross\_entropy\_loss)136tracker.add("lb\_loss.",load\_balancing\_loss)

#

ඒකාබද්ධඅලාභය. බර තුලනය අලාභය වැනි කුඩා දෙයකට සකසා α ඇති සංගුණකය මගින් ගුණ කරනු α=0.01ලැබේ.

141loss=cross\_entropy\_loss+self.load\_balancing\_loss\_ceof\*load\_balancing\_loss

#

ගණනයකිරීම සහ ලොග් කිරීමේ නිරවද්යතාවය

144self.accuracy(output,target)145self.accuracy.track()

#

ආකෘතියපුහුණු කරන්න

148ifself.mode.is\_train:

#

අනුක්රමිකගණනය කරන්න

150loss.backward()

#

ක්ලිප්අනුක්රමික

152torch.nn.utils.clip\_grad\_norm\_(self.model.parameters(),max\_norm=self.grad\_norm\_clip)

#

ප්රශස්තිකරණපියවර ගන්න

154self.optimizer.step()

#

සෑමයුගලයකම අවසාන කණ්ඩායමේ ආදර්ශ පරාමිතීන් සහ අනුක්රමික ලොග් කරන්න

156ifbatch\_idx.is\_last:157tracker.add('model',self.model)

#

අනුක්රමිකඉවත්

159self.optimizer.zero\_grad()

#

ලුහුබැඳඇති ප්රමිතික සුරකින්න

162tracker.save()

#

ස්වයංක්රීයප්රතිගාමී ආකෘතිය ආරම්භ කරන්න

165@option(Configs.model)166defautoregressive\_model(c:Configs):

#

170m=AutoregressiveModel(c.n\_tokens,c.d\_model,c.transformer)171returnm.to(c.device)

#

ස්විච්ට්රාන්ස්ෆෝමරය ආරම්භ කරන්න

174@option(Configs.transformer)175defswitch\_transformer(c:Configs):

#

179fromlabml\_nn.transformers.switchimportSwitchTransformer,SwitchTransformerLayer,SwitchFeedForward180fromlabml\_nn.transformersimportMultiHeadAttention181fromlabml\_nn.transformers.feed\_forwardimportFeedForward182183returnSwitchTransformer(184SwitchTransformerLayer(d\_model=c.d\_model,185attn=MultiHeadAttention(c.heads,c.d\_model,c.dropout),186feed\_forward=SwitchFeedForward(capacity\_factor=c.capacity\_factor,187drop\_tokens=c.drop\_tokens,188is\_scale\_prob=c.is\_scale\_prob,189n\_experts=c.n\_experts,190expert=FeedForward(c.d\_model,c.d\_ff,c.dropout),191d\_model=c.d\_model),192dropout\_prob=c.dropout),193c.n\_layers)

#

අත්හදාබැලීම ක්රියාත්මක කරන්න

196defmain():

#

අත්හදාබැලීම සාදන්න

201experiment.create(name="switch\_transformer",comment='')

#

වින්යාසසාදන්න

203conf=Configs()

#

වින්යාසයන්පූරණය කරන්න

205experiment.configs(conf,

#

අභිබවායාම සඳහා වින්යාසයන් පිළිබඳ ශබ්දකෝෂයක්

207{'tokenizer':'character',208'text':'tiny\_shakespeare',209'optimizer.learning\_rate':1.,210'optimizer.optimizer':'Noam',211'prompt':'It is',212'prompt\_separator':'',213214'transformer':'switch\_transformer',215'n\_experts':4,216217'drop\_tokens':True,218'capacity\_factor':1.2,219220'train\_loader':'shuffled\_train\_loader',221'valid\_loader':'shuffled\_valid\_loader',222223'seq\_len':64,224'epochs':128,225'batch\_size':32,226'inner\_iterations':25,227})

#

ඉතිරිකිරීම සහ පැටවීම සඳහා ආකෘති සකසන්න

230experiment.add\_pytorch\_models({'model':conf.model})

#

අත්හදාබැලීම ආරම්භ කරන්න

233withexperiment.start():

#

TrainValidConfigs.run

235conf.run()

#

239if\_\_name\_\_=='\_\_main\_\_':240main()

Trending Research Paperslabml.ai