docs/si/transformers/gpt/index.html
[View code on Github](https://github.com/labmlai/annotated_deep_learning_paper_implementations/tree/master/labml_nn/transformers/gpt/ init.py)
මෙය PyTorch හි OpenAI GPT ගෘහ නිර්මාණ ශිල්පය පිළිබඳ නිබන්ධනයක්/ක්රියාත්මක කිරීමකි.@karpathy විසින් MingPT වෙතින් ක්රියාත්මක කිරීමේ විස්තර රාශියක් අපට ලැබුණි. මෙම ක්රියාත්මක කිරීම අක්ෂර කුඩා ෂේක්ස්පියර් දත්ත කට්ටලය ද භාවිතා කරයි.
GPTආකෘතිය අත්යවශ්යයෙන්ම tweaks කිහිපයක් සහිත සම්මත ට්රාන්ස්ෆෝමරයක් වේ. GPT-2 සහ විශේෂයෙන් GPT-3 මාදිලි තරමක් විශාල වන අතර තනි GPU එකකට නොගැලපෙන අතර ආකෘති සමාන්තරකරණය අවශ්ය වේ. මෙම ක්රියාත්මක කිරීම දත්ත සමාන්තරකරණය පවා භාවිතා නොකරන අතර නිබන්ධනයක් වැඩි කිරීමට අදහස් කරයි.
සරලස්වයංක්රීය ප්රතිගාමී ට්රාන්ස්ෆෝමරයකට සාපේක්ෂව මෙහි ප්රධාන වෙනස්කම් වන්නේ පරාමිති ආරම්භය, බර ක්ෂය වීම සහ ඉගෙනුම් අනුපාත කාලසටහනයයි. ට්රාන්ස්ෆෝමරය සඳහා අපි දැනට පවතින labml/nn ට්රාන්ස්ෆෝමර් ක්රියාත්මක කිරීමනැවත භාවිතා කරමු.
කුඩාෂේක්ස්පියර් දත්ත කට්ටලය පිළිබඳ ජීපීටී ආකෘතියක් පුහුණු කිරීම සඳහා සටහන් පොතක් මෙන්න.
35importtorch36fromtorchimportnn3738fromlabmlimportexperiment39fromlabml.configsimportoption40fromlabml\_helpers.moduleimportModule41fromlabml\_nn.experiments.nlp\_autoregressionimportNLPAutoRegressionConfigs42fromlabml\_nn.optimizers.configsimportOptimizerConfigs43fromlabml\_nn.transformersimportTransformerConfigs,Encoder44fromlabml\_nn.transformers.utilsimportsubsequent\_mask
මෙයටෝකන් කාවැද්දීමේ ස්ථරයක්, ට්රාන්ස්ෆෝමර් එන්කෝඩරයක් සහ ටෝකන් පිවිසුම් ලබා දෙන අවසාන රේඛීය ස්ථරයකින් සමන්විත වේ.
47classGPT(Module):
encoder ට්රාන්ස්ෆෝමර් එන්කෝඩරයsrc_embed යනු ටෝකන් කාවැද්දීමේ මොඩියුලය (ස්ථානීය කේතීකරණ සමඟ)generator යනු පිවිසුම් ලබා දෙන අවසාන පූර්ණ සම්බන්ධිත ස්ථරයයි .55def\_\_init\_\_(self,encoder:Encoder,src\_embed:Module,generator:Module):
62super().\_\_init\_\_()63self.src\_embed=src\_embed64self.encoder=encoder65self.generator=generator
පළමුඇමතුමෙන් වෙස්මුහුණ ආරම්භ කරනු ඇත
68self.mask=None
70defforward(self,x:torch.Tensor):
වෙස්මුහුණආරම්භ කර නොමැති නම් හෝ වෙස් මුහුණෙහි ප්රමාණය වෙනස් නම් පසුකාලීන වෙස්මුහුණක් සාදන්න
73ifself.maskisNoneorself.mask.size(0)!=len(x):
පසුකාලීනවෙස්මුහුණ, අනාගත ටෝකන දැකීමෙන් ටෝකන වසං කරනු ඇත
75self.mask=subsequent\_mask(len(x)).to(x.device)
ස්ථානීයකේතන ක්රම සමඟ ටෝකන් කාවැද්දීම් ලබා ගන්න
77x=self.src\_embed(x)
ට්රාන්ස්ෆෝමර්එන්කෝඩරය
79x=self.encoder(x,self.mask)
පිවිසුම්ලබා ගන්න
81x=self.generator(x)
ප්රතිලාභප්රති results ල (දෙවන අගය රාජ්ය සඳහා වේ, මන්ද අපගේ පුහුණුකරු RNs සමඟ ද භාවිතා කරයි)
85returnx,None
මෙයඋරුම වන්නේ NLPAutoRegressionConfigs
88classConfigs(NLPAutoRegressionConfigs):
GPTආකෘතිය
97model:GPT
ට්රාන්ස්ෆෝමර්
99transformer:TransformerConfigs
සිරුරේබර ක්ෂය
101weight\_decay:float=0.1
වම්අප්සඳහා ටෝකන ගණන
103warmup\_steps:int=128\*128\*20
අභිරුචිප්රශස්තකරණය
106optimizer='transformer\_optimizer'
109@option(Configs.transformer,'GPT')110def\_transformer\_configs(c:Configs):
අපගේ වින්යාසගත කළ හැකි ට්රාන්ස්ෆෝමර් ක්රියාත්මක කිරීම භාවිතා කරමු
117conf=TransformerConfigs()
කාවැද්දීම්සහ පිවිසුම් උත්පාදනය සඳහා වචන මාලාව ප්රමාණ සකසන්න
119conf.n\_src\_vocab=c.n\_tokens120conf.n\_tgt\_vocab=c.n\_tokens
GPTස්ථානගත නැණවත් පෝෂණය සඳහා GELU සක්රිය කිරීම භාවිතා කරයි
122conf.ffn.activation='GELU'
125returnconf
පෙරනිමිසේවියර් ආරම්භය N(0,0.02) වෙනුවට රේඛීය ස්ථර සහ කාවැද්දීමේ ස්ථර වල බර ආරම්භ කර ඇත.
128def\_init\_weights(module):
137ifnotisinstance(module,(nn.Linear,nn.Embedding)):138return139140module.weight.data.normal\_(mean=0.0,std=0.02)
නැඹුරුවආරම්භ කරන්න 0
143ifisinstance(module,nn.Linear)andmodule.biasisnotNone:144module.bias.data.zero\_()
GPTආකෘතිය සාදන්න සහ බර ආරම්භ කරන්න
147@option(Configs.model)148def\_model(c:Configs):
152m=GPT(c.transformer.encoder,153c.transformer.src\_embed,154c.transformer.generator).to(c.device)
අභිරුචිබර ආරම්භ කිරීම යොදන්න
157m.apply(\_init\_weights)158159returnm
මෙමකේතය MingPTවෙතින් ගනු ලැබේ. මෙය රේඛීය ස්ථරවල බරට පමණක් බර ක්ෂය වීම අදාළ වේ.
162@option(NLPAutoRegressionConfigs.optimizer)163deftransformer\_optimizer(c:NLPAutoRegressionConfigs):
බරක්ෂය වීම යෙදීම සඳහා පරාමිතීන්ගේ නම් එකතු කරන්න
171decay=set()172formn,minc.model.named\_modules():173forpn,pinm.named\_parameters():174fpn=f'{mn}.{pn}'ifmnelsepn# full param name175176iffpn.endswith('weight')andisinstance(m,nn.Linear):177decay.add(fpn)
සියලුපරාමිතීන් ලබා ගන්න
180param\_dict={pn:pforpn,pinc.model.named\_parameters()}
දිරාපත්නොවන පරාමිතීන්
182no\_decay=set(param\_dict.keys())-decay
පයිටෝච්ප්රශස්තිකරණ වස්තුව සාදන්න
185opt\_groups=[186{"params":[param\_dict[pn]forpninsorted(list(decay))],"weight\_decay":c.weight\_decay},187{"params":[param\_dict[pn]forpninsorted(list(no\_decay))],"weight\_decay":0.0},188]
වින්යාසගත කළ හැකි ප්රශස්තිකරණයක්සාදන්න, එවිට වින්යාස ශබ්දකෝෂයක් සම්මත කිරීමෙන් අපට මේවා වෙනස් කළ හැකිය.
193optimizer=OptimizerConfigs()
ප්රශස්තිකරණයසඳහා පරාමිති කණ්ඩායම් සකසන්න.
196optimizer.parameters=opt\_groups
කොසයින් ක්ෂය වීමේ ප්රශස්තකාරකයභාවිතා කරන්න. GPT භාවිතා කරන්නේ මෙයයි.
199optimizer.optimizer='AdamWarmupCosineDecay'
Setආදර්ශ කාවැද්දීම ප්රමාණය, අපි ඝාතීය ක්ෂය ඇති Noam optimizer භාවිතා කරන්නේ නම් අවශ්ය.
202optimizer.d\_model=c.d\_model
පෙරනිමිබර ක්ෂය වීම සකසන්න. පරාමිති කණ්ඩායම්වල බර ක්ෂය වීම නිසා මෙය අවශ්ය නොවේ.
205optimizer.weight\_decay=c.weight\_decay
GPTඋපරිම ඉගෙනුම් අනුපාතය භාවිතා කරයි 6×10−4.
207optimizer.learning\_rate=6e-4
β1=0.9,β2=0.95
209optimizer.betas=(0.9,0.95)
ϵ=10−8
211optimizer.eps=1e-8
බරක්ෂය වීම අනුක්රමික සිට decoupled ඇත
213optimizer.weight\_decouple=True
ඉගෙනීමේඅනුපාතය කොසයින් ක්ෂය වීම සඳහා ප්රශස්තිකරණ පියවර ගණන
215optimizer.total\_steps=c.epochs\*len(c.text.train)//(c.batch\_size\*c.seq\_len)
උනුසුම්ප්රශස්තිකරණ පියවර ගණන
217optimizer.warmup=c.warmup\_steps//(c.batch\_size\*c.seq\_len)218219returnoptimizer
222defmain():
අත්හදාබැලීම සාදන්න
224experiment.create(name="gpt")
වින්යාසසාදන්න
226conf=Configs()
වින්යාසයන්අභිබවා යන්න
228experiment.configs(conf,{
අක්ෂරමට්ටමේ ටෝකනයිසර් භාවිතා කරන්න
230'tokenizer':'character',
කඩිනම්බෙදුම්කරු හිස් ය
232'prompt\_separator':'',
නියැදීමසඳහා විමසුමක් ආරම්භ කිරීම
234'prompt':'It is ',
කුඩාෂේක්ස්පියර් දත්ත කට්ටලය භාවිතා කරන්න
236'text':'tiny\_shakespeare',
කසන්දර්භය ප්රමාණය භාවිතා 128
239'seq\_len':128,
32 Epochs සඳහා දුම්රිය
241'epochs':32,
කණ්ඩායම්ප්රමාණය 128
243'batch\_size':128,
එක් 10 යුගයකට වරක් පුහුණුව සහ වලංගු කිරීම අතර මාරු වන්න
246'inner\_iterations':10,
ට්රාන්ස්ෆෝමර්වින්යාසයන්
249'transformer.d\_model':512,250'transformer.ffn.d\_ff':2048,251'transformer.n\_heads':8,252'transformer.n\_layers':6253})
ඉතිරිකිරීම සහ පැටවීම සඳහා ආකෘති සකසන්න
256experiment.add\_pytorch\_models({'model':conf.model})
අත්හදාබැලීම ආරම්භ කරන්න
259withexperiment.start():
පුහුණුධාවනය
261conf.run()
265if\_\_name\_\_=='\_\_main\_\_':266main()