Back to Annotated Deep Learning Paper Implementations

ජීපීටී

docs/si/transformers/gpt/index.html

latest13.9 KB
Original Source

hometransformersgpt

[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

#

GPTආකෘතිය

මෙයටෝකන් කාවැද්දීමේ ස්ථරයක්, ට්රාන්ස්ෆෝමර් එන්කෝඩරයක් සහ ටෝකන් පිවිසුම් ලබා දෙන අවසාන රේඛීය ස්ථරයකින් සමන්විත වේ.

47classGPT(Module):

#

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

Trending Research Paperslabml.ai