Back to Annotated Deep Learning Paper Implementations

K-nnසෙවීම සඳහා FAISS දර්ශකය සාදන්න

docs/si/transformers/knn/build_index.html

latest8.8 KB
Original Source

hometransformersknn

View code on Github

#

K-nnසෙවීම සඳහා FAISS දර්ශකය සාදන්න

අපටදර්ශකය තැනීමට අවශ්යයි (f(ci​),wi​). අපි ගබඩා f(ci​) කර wi​ මතකයේ සිතියම් ගත කළ අරා. අපි FAISS f(ct​)භාවිතා කිරීමට f(ci​) ආසන්නතම සොයා. FAISS දර්ශක (f(ci​),i) සහ අපි එය විමසන්න f(ct​).

15fromtypingimportOptional1617importfaiss18importnumpyasnp19importtorch2021fromlabmlimportexperiment,monit,lab22fromlabml.utils.pytorchimportget\_modules23fromlabml\_nn.transformers.knn.train\_modelimportConfigs

#

දුම්රිය ආකෘතියෙන්සුරකින ලද අත්හදා බැලීමක් පටවන්න.

26defload\_experiment(run\_uuid:str,checkpoint:Optional[int]=None):

#

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

32conf=Configs()

#

අත්හදාබැලීමේදී භාවිතා කරන අභිරුචි වින්යාසයන් පූරණය කරන්න

34conf\_dict=experiment.load\_configs(run\_uuid)

#

අපටආහාර ඉදිරි ස්ථරයට යෙදවුම් ලබා ගත යුතුය, f(ci​)

36conf\_dict['is\_save\_ff\_input']=True

#

මෙමඅත්හදා බැලීම ඇගයීමක් පමණි; එනම් කිසිවක් ලුහුබැඳ හෝ ගැලවීම නැත

39experiment.evaluate()

#

වින්යාසයන්ආරම්භ කරන්න

41experiment.configs(conf,conf\_dict)

#

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

43experiment.add\_pytorch\_models(get\_modules(conf))

#

සිටපැටවීම සඳහා අත්හදා බැලීම නියම කරන්න

45experiment.load(run\_uuid,checkpoint)

#

අත්හදාබැලීම ආරම්භ කරන්න; මෙය ඇත්ත වශයෙන්ම ආකෘති පටවන විට

48experiment.start()4950returnconf

#

අරාතුළ ඒවා එකතු (f(ci​),wi​) කර සුරකින්න

ඔබගේදත්ත කට්ටලයේ ප්රමාණය අනුව මෙම අරා විශාල ඉඩක් (ගිගාබයිට් සිය ගණනක් වුවද) ගන්නා බව සලකන්න.

53defgather\_keys(conf:Configs):

#

මානයන් f(ci​)

62d\_model=conf.transformer.d\_model

#

පුහුණුදත්ත පැටවුම

64data\_loader=conf.trainer.data\_loader

#

සන්දර්භයන්ගණන; එනම් පුහුණු දත්තවල ටෝකන ගණන us ණ එකක්. (f(ci​),wi​)

සඳහා i∈[2,T]

67n\_keys=data\_loader.data.shape[0]\*data\_loader.data.shape[1]-1

#

සඳහාඅංකුර අරාව f(ci​)

69keys\_store=np.memmap(str(lab.get\_data\_path()/'keys.npy'),dtype=np.float32,mode='w+',shape=(n\_keys,d\_model))

#

සඳහාඅංකුර අරාව wi​

71vals\_store=np.memmap(str(lab.get\_data\_path()/'vals.npy'),dtype=np.int,mode='w+',shape=(n\_keys,1))

#

f(ci​) එකතු කරන ලද යතුරු ගණන

74added=075withtorch.no\_grad():

#

දත්තහරහා ලූප

77fori,batchinmonit.enum("Collect data",data\_loader,is\_children\_silent=True):

#

wi​ ඉලක්කගත ලේබල

79vals=batch[1].view(-1,1)

#

ආදානදත්ත ආකෘතියේ උපාංගය වෙත ගෙන ගියේය

81data=batch[0].to(conf.device)

#

ආකෘතියධාවනය කරන්න

83\_=conf.model(data)

#

ලබාගන්න f(ci​)

85keys=conf.model.ff\_input.view(-1,d\_model)

#

යතුරුසුරකින්න, f(ci​) මතකයේ සිතියම්ගත කළ අංකන අරාව තුළ

87keys\_store[added:added+keys.shape[0]]=keys.cpu()

#

මතකසිතියම්ගත කළ අංකන අරාව wi​ තුළ අගයන් සුරකින්න

89vals\_store[added:added+keys.shape[0]]=vals

#

එකතුකරන ලද යතුරු සංඛ්යාව වැඩි කිරීම

91added+=keys.shape[0]

#

FAISSදර්ශකය ගොඩනඟ

ආරම්භකිරීම, වේගවත් සෙවීමසහ මතක අඩිපාර නිබන්ධන අඩුකිරීම FAISS භාවිතය පිළිබඳ වැඩිදුර දැන ගැනීමට FAISS ඔබට උපකාර කරනු ඇත.

94defbuild\_index(conf:Configs,n\_centeroids:int=2048,code\_size:int=64,n\_probe:int=8,n\_train:int=200\_000):

#

මානයන් f(ci​)

104d\_model=conf.transformer.d\_model

#

පුහුණුදත්ත පැටවුම

106data\_loader=conf.trainer.data\_loader

#

සන්දර්භයන්ගණන; එනම් පුහුණු දත්තවල ටෝකන ගණන us ණ එකක්. (f(ci​),wi​)

සඳහා i∈[2,T]

109n\_keys=data\_loader.data.shape[0]\*data\_loader.data.shape[1]-1

#

පූර්ණදෛශික ගබඩා නොකරන සම්පීඩනය සමඟ වෙරෙනෝයි සෛල මත පදනම් වූ වේගවත් සෙවුමක් සහිත සූචකයක් සාදන්න.

113quantizer=faiss.IndexFlatL2(d\_model)114index=faiss.IndexIVFPQ(quantizer,d\_model,n\_centeroids,code\_size,8)115index.nprobe=n\_probe

#

මතකයසිතියම් ගත කළ අංකිත යතුරු අරාව පූරණය කරන්න

118keys\_store=np.memmap(str(lab.get\_data\_path()/'keys.npy'),dtype=np.float32,mode='r',shape=(n\_keys,d\_model))

#

දර්ශකයපුහුණු කිරීම සඳහා යතුරු අහඹු නියැදියක් තෝරන්න

121random\_sample=np.random.choice(np.arange(n\_keys),size=[min(n\_train,n\_keys)],replace=False)122123withmonit.section('Train index'):

#

යතුරුගබඩා කිරීම සඳහා දර්ශකය පුහුණු කරන්න

125index.train(keys\_store[random\_sample])

#

දර්ශකයටයතුරු එකතු කරන්න; (f(ci​),i)

128forsinmonit.iterate('Index',range(0,n\_keys,1024)):129e=min(s+1024,n\_keys)

#

f(ci​)

131keys=keys\_store[s:e]

#

i

133idx=np.arange(s,e)

#

දර්ශකයටඑකතු කරන්න

135index.add\_with\_ids(keys,idx)136137withmonit.section('Save'):

#

දර්ශකයසුරකින්න

139faiss.write\_index(index,str(lab.get\_data\_path()/'faiss.index'))

#

142defmain():

#

අත්හදාබැලීම පූරණය කරන්න. ආකෘතිය පුහුණුකිරීමෙන් ඔබ uuid ධාවනය සමඟ uuid ධාවනය කරන්න.

145conf=load\_experiment('4984b85c20bf11eb877a69c1a03717cd')

#

ඇගයීම්ප්රකාරයට ආකෘතිය සකසන්න

147conf.model.eval()

#

එකතුකරන්න (f(ci​),wi​)

150gather\_keys(conf)

#

වේගවත්සෙවීම සඳහා ඒවා දර්ශකයට එක් කරන්න

152build\_index(conf)153154155if\_\_name\_\_=='\_\_main\_\_':156main()

Trending Research Paperslabml.ai