docs/si/transformers/knn/build_index.html
අපටදර්ශකය තැනීමට අවශ්යයි (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
ඔබගේදත්ත කට්ටලයේ ප්රමාණය අනුව මෙම අරා විශාල ඉඩක් (ගිගාබයිට් සිය ගණනක් වුවද) ගන්නා බව සලකන්න.
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 ඔබට උපකාර කරනු ඇත.
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()