{"id":306325,"date":"2020-07-02T15:01:38","date_gmt":"2020-07-02T15:01:38","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=306325"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=306325","title":{"rendered":"FAISS: \u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u043f\u043e\u0438\u0441\u043a \u043b\u0438\u0446 \u0438 \u043a\u043b\u043e\u043d\u043e\u0432 \u043d\u0430 \u043c\u043d\u043e\u0433\u043e\u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445"},"content":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/company\/dentsuaegisnetworkrussia\/blog\/509204\/\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/8x\/ue\/vk\/8xuevk8kk8l-99kjyhxh3rktk6s.jpeg\"><\/p>\n<p>  \u041e\u0434\u043d\u0430\u0436\u0434\u044b \u0432 \u043f\u0440\u0435\u0434\u0434\u0432\u0435\u0440\u0438\u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u043e\u0439 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u0443\u044e<a href=\"https:\/\/dansessions.ru\/archive\"> \u0435\u0436\u0435\u0433\u043e\u0434\u043d\u043e \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442<\/a> \u0433\u0440\u0443\u043f\u043f\u0430 DAN, \u043c\u044b \u0440\u0430\u0437\u043c\u044b\u0448\u043b\u044f\u043b\u0438 \u043d\u0430\u0434 \u0442\u0435\u043c, \u0447\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u0443 \u043d\u0430\u0448\u0438\u0445 \u043f\u0430\u0440\u0442\u043d\u0435\u0440\u043e\u0432 \u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u043e\u0441\u0442\u0430\u043b\u0438\u0441\u044c \u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0435 \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u0435\u043d\u0438\u044f \u0438 \u0432\u043e\u0441\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u044f \u043e \u043c\u0435\u0440\u043e\u043f\u0440\u0438\u044f\u0442\u0438\u0438. \u041c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c \u0430\u0440\u0445\u0438\u0432 \u0438\u0437 \u0442\u044b\u0441\u044f\u0447 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0439 \u0441 \u044d\u0442\u043e\u0439 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438 \u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u0440\u043e\u0448\u043b\u044b\u0445 (\u0430 \u0432\u0441\u0435\u0433\u043e \u0438\u0445 \u043a \u0442\u043e\u043c\u0443 \u043c\u043e\u043c\u0435\u043d\u0442\u0443 \u0431\u044b\u043b\u043e 18): \u0447\u0435\u043b\u043e\u0432\u0435\u043a \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0430\u043c \u0441\u0432\u043e\u044e \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u044e, \u0430 \u043c\u044b \u0435\u043c\u0443 \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0443 \u0441\u0435\u043a\u0443\u043d\u0434 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u043e\u0434\u0431\u043e\u0440\u043a\u0443 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0439 \u0441 \u043d\u0438\u043c \u0437\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043b\u0435\u0442 \u0438\u0437 \u043d\u0430\u0448\u0438\u0445 \u0430\u0440\u0445\u0438\u0432\u043e\u0432.<\/p>\n<p>  \u0412\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434 \u043c\u044b \u043d\u0435 \u043f\u0440\u0438\u0434\u0443\u043c\u044b\u0432\u0430\u043b\u0438, \u0432\u0437\u044f\u043b\u0438 \u0432\u0441\u0435\u043c \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 dlib \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u044d\u043c\u0431\u0435\u0434\u0434\u0438\u043d\u0433\u0438 (\u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f) \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043b\u0438\u0446\u0430.\u00a0<\/p>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043b\u0438 Telegram-\u0431\u043e\u0442\u0430 \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430, \u0438 \u0432\u0441\u0451 \u0431\u044b\u043b\u043e \u043e\u0442\u043b\u0438\u0447\u043d\u043e. \u0421 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044f \u043b\u0438\u0446 \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u043d\u0430 \u0443\u0440\u0430, \u043d\u043e \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0430\u0441\u044c, \u0430 \u0440\u0430\u0441\u0441\u0442\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0441 \u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f\u043c\u0438 \u043d\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c. \u041e\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0442\u044b\u0441\u044f\u0447 \u043b\u0438\u0446 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0441\u043e\u0442\u043d\u044f\u043c \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432, \u043d\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0431\u0438\u0437\u043d\u0435\u0441-\u0437\u0430\u0434\u0430\u0447\u0438 \u0443 \u043d\u0430\u0441 \u043d\u0435 \u0431\u044b\u043b\u043e. \u0427\u0435\u0440\u0435\u0437 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0443 \u043d\u0430\u0448\u0438\u0445 \u043a\u043e\u043b\u043b\u0435\u0433 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0437\u0430\u0434\u0430\u0447\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0442\u0430\u043a\u0438\u043c\u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u043c\u0438 \u043e\u0431\u044a\u0435\u043c\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445.<br \/>  <a name=\"habracut\"><\/a><br \/>  \u0412\u043e\u043f\u0440\u043e\u0441 \u0431\u044b\u043b \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0443\u043c\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u0431\u043e\u0442\u043e\u0432 \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0435\u0442\u0438 Instagram. \u0422\u0443\u0442 \u043d\u0430\u0448\u0430 \u043c\u044b\u0441\u043b\u044c \u043f\u043e\u0440\u043e\u0434\u0438\u043b\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0438 \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434\u044b:<\/p>\n<p>  \u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0443\u0442\u044c: \u0420\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c \u0432\u0441\u0435 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u044b, \u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u043e\u0434\u043f\u0438\u0441\u043e\u043a \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u043e\u0432, \u043d\u0435\u0442 \u0430\u0432\u0430\u0442\u0430\u0440\u043a\u0438, \u043d\u0435 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043e full name \u0438 \u0442.\u0434. \u0412 \u0438\u0442\u043e\u0433\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u0443\u044e \u0442\u043e\u043b\u043f\u0443 \u043f\u043e\u043b\u0443\u043c\u0435\u0440\u0442\u0432\u044b\u0445 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u043e\u0432.<\/p>\n<p>  \u0421\u043b\u043e\u0436\u043d\u044b\u0439 \u043f\u0443\u0442\u044c: \u0422\u0430\u043a \u043a\u0430\u043a \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0431\u043e\u0442\u044b \u0441\u0442\u0430\u043b\u0438 \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u0443\u043c\u043d\u0435\u0435, \u0438 \u0442\u0435\u043f\u0435\u0440\u044c \u043e\u043d\u0438 \u0432\u044b\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442 \u043f\u043e\u0441\u0442\u044b, \u0441\u043f\u044f\u0442, \u0434\u0430 \u0435\u0449\u0435 \u0438 \u043a\u043e\u043d\u0442\u0435\u043d\u0442 \u043f\u0438\u0448\u0443\u0442, \u0432\u0441\u0442\u0430\u0451\u0442 \u0432\u043e\u043f\u0440\u043e\u0441: \u043a\u0430\u043a \u0442\u0430\u043a\u0438\u0445 \u043f\u043e\u0439\u043c\u0430\u0442\u044c? \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0437\u0430 \u0438\u0445 \u0434\u0440\u0443\u0437\u044c\u044f\u043c\u0438, \u0442\u0430\u043a \u043a\u0430\u043a \u0447\u0430\u0441\u0442\u043e \u043e\u043d\u0438 \u0442\u043e\u0436\u0435 \u0431\u044b\u0432\u0430\u044e\u0442 \u0431\u043e\u0442\u0430\u043c\u0438, \u0438 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u0434\u0443\u0431\u043b\u0438\u0440\u0443\u044e\u0449\u0438\u0435 \u0444\u043e\u0442\u043a\u0438. \u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u0440\u0435\u0434\u043a\u043e \u043a\u0430\u043a\u043e\u0439 \u0431\u043e\u0442 \u0443\u043c\u0435\u0435\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u0444\u043e\u0442\u043a\u0438 (\u0445\u043e\u0442\u044f \u0438 <a href=\"https:\/\/www.instagram.com\/neural_tp\">\u0442\u0430\u043a\u043e\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e<\/a>), \u0430 \u0437\u043d\u0430\u0447\u0438\u0442, \u0434\u0443\u0431\u043b\u0438 \u0444\u043e\u0442\u043e \u043b\u044e\u0434\u0435\u0439 \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0430\u0445 \u0432 \u0418\u043d\u0441\u0442\u0430\u0433\u0440\u0430\u043c\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0445\u043e\u0440\u043e\u0448\u0438\u043c \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u043e\u043c \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0441\u0435\u0442\u0438 \u0431\u043e\u0442\u043e\u0432.<\/p>\n<h4>\u0427\u0442\u043e \u0434\u0430\u043b\u044c\u0448\u0435?<\/h4>\n<p>  \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0443\u0442\u044c \u0432\u043f\u043e\u043b\u043d\u0435 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c \u0438 \u0431\u044b\u0441\u0442\u0440\u043e \u0434\u0430\u0435\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b, \u0442\u043e \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u0441\u043b\u043e\u0436\u0435\u043d \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0434\u043b\u044f \u0435\u0433\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0430\u043c \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0439 \u043f\u043e\u0445\u043e\u0436\u0435\u0441\u0442\u0438 \u043d\u0435\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043e\u0431\u044a\u0435\u043c\u044b \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0439 \u2013 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u044b, \u0438 \u0434\u0430\u0436\u0435 \u043c\u0438\u043b\u043b\u0438\u0430\u0440\u0434\u044b. \u041a\u0430\u043a \u044d\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435? \u0412\u0435\u0434\u044c \u0432\u0441\u0442\u0430\u044e\u0442 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b:<\/p>\n<ol>\n<li>\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0438 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0438\u0441\u043a\u0430<\/li>\n<li>\u0420\u0430\u0437\u043c\u0435\u0440 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u043c\u043e\u0433\u043e \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043c\u0435\u0441\u0442\u0430 \u043d\u0430 \u0434\u0438\u0441\u043a\u0435<\/li>\n<li>\u0420\u0430\u0437\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0439 RAM \u043f\u0430\u043c\u044f\u0442\u0438.\u00a0<\/li>\n<\/ol>\n<p>  \u0415\u0441\u043b\u0438 \u0431\u044b \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0439 \u0431\u044b\u043b\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e, \u0445\u043e\u0442\u044f \u0431\u044b \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 \u0434\u0435\u0441\u044f\u0442\u043a\u0430 \u0442\u044b\u0441\u044f\u0447, \u043c\u044b \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u044b\u043c\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u044f\u043c\u0438 \u0441 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u043e\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0435\u0439, \u043d\u043e \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0433\u0440\u043e\u043c\u0430\u0434\u043d\u044b\u043c\u0438 \u043e\u0431\u044a\u0435\u043c\u0430\u043c\u0438 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u0438 \u043f\u043e\u0438\u0441\u043a\u0430 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0438\u0445 \u043a \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0432\u0435\u043a\u0442\u043e\u0440\u0443 \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b. <\/p>\n<p>  \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0435 \u0438 \u0437\u0430\u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u0432\u0448\u0438\u0435 \u0441\u0435\u0431\u044f \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a Annoy, FAISS, HNSW. \u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e\u0438\u0441\u043a\u0430 \u0441\u043e\u0441\u0435\u0434\u0435\u0439 <a href=\"https:\/\/arxiv.org\/abs\/1603.09320\"><abbr title=\"Hierarchical Navigable Small World\">HNSW <\/abbr><\/a>, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0439 \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u0445 <a href=\"https:\/\/github.com\/nmslib\/nmslib\">nmslib<\/a> \u0438 <a href=\"https:\/\/github.com\/nmslib\/hnswlib\">hnswlib<\/a>, \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 state-of-the-art \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043d\u0430 CPU, \u0447\u0442\u043e \u0432\u0438\u0434\u043d\u043e \u043f\u043e \u0442\u0435\u043c \u0436\u0435 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0430\u043c. \u041d\u043e \u0435\u0433\u043e \u043c\u044b \u043e\u0442\u0441\u0435\u043a\u043b\u0438 \u0441\u0440\u0430\u0437\u0443, \u0442\u0430\u043a \u043a\u0430\u043a \u043d\u0430\u0441 \u043d\u0435 \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0438\u043c\u0438 \u043e\u0431\u044a\u0435\u043c\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. \u041c\u044b \u0441\u0442\u0430\u043b\u0438 \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u043c\u0435\u0436\u0434\u0443 Annoy \u0438 FAISS \u0438 \u0432 \u0438\u0442\u043e\u0433\u0435 \u0432\u044b\u0431\u0440\u0430\u043b\u0438 FAISS \u0438\u0437-\u0437\u0430 \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430, \u043c\u0435\u043d\u044c\u0448\u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438, \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430 GPU \u0438 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u043e\u0432 \u043f\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 (\u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043c\u043e\u0436\u043d\u043e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <a href=\"https:\/\/github.com\/erikbern\/ann-benchmarks\">\u0437\u0434\u0435\u0441\u044c<\/a>). \u041a \u0441\u043b\u043e\u0432\u0443, \u0432 FAISS \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c HNSW \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u043a\u0430\u043a \u043e\u043f\u0446\u0438\u044f.<\/p>\n<h4>\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 FAISS?<\/h4>\n<p>  <strong>Facebook AI Research Similarity Search <\/strong>\u2013 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u044b Facebook AI Research \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0438\u0445 \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u0438 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0432 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435. \u0412\u044b\u0441\u043e\u043a\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043e\u0447\u0435\u043d\u044c \u0431\u043e\u043b\u044c\u0448\u0438\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u2013 \u0434\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043c\u0438\u043b\u043b\u0438\u0430\u0440\u0434\u043e\u0432 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432.<\/p>\n<p>  \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e FAISS \u2013 state-of-the-art \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043d\u0430 GPU, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0435\u0433\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0430 CPU \u043d\u0435\u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0435\u0442 hnsw (nmslib). \u041d\u0430\u043c \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u0435\u0441\u0442\u0438 \u043f\u043e\u0438\u0441\u043a \u043a\u0430\u043a \u043d\u0430 CPU, \u0442\u0430\u043a \u0438 \u043d\u0430 GPU. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, FAISS \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d \u0432 \u0447\u0430\u0441\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u043f\u043e\u0438\u0441\u043a\u0430 \u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0431\u0430\u0442\u0447\u0430\u0445.<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/hi\/5r\/a2\/hi5ra2ctzyaigedz98lbslv88ig.png\"><br \/>  <i><a href=\"https:\/\/www.benfrederickson.com\/approximate-nearest-neighbours-for-recommender-systems\/\">Source<\/a><\/i><\/p>\n<p>  FAISS \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u043e \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e \u043f\u043e\u0438\u0441\u043a\u0430 k \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0438\u0445 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u0430 x. \u041d\u043e \u043a\u0430\u043a \u0436\u0435 \u044d\u0442\u043e\u0442 \u043f\u043e\u0438\u0441\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c?<\/p>\n<h4>\u0418\u043d\u0434\u0435\u043a\u0441\u044b<\/h4>\n<p>  \u0413\u043b\u0430\u0432\u043d\u043e\u0435 \u043f\u043e\u043d\u044f\u0442\u0438\u0435 \u0432 FAISS \u2013 \u044d\u0442\u043e <b>index<\/b>, \u0438, \u043f\u043e \u0441\u0443\u0442\u0438, \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u0431\u043e\u0440 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0438 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432. \u041d\u0430\u0431\u043e\u0440\u044b \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0431\u044b\u0432\u0430\u044e\u0442 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0440\u0430\u0437\u043d\u044b\u0435 \u0438 \u0437\u0430\u0432\u0438\u0441\u044f\u0442 \u043e\u0442 \u043d\u0443\u0436\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u0412\u0435\u043a\u0442\u043e\u0440\u044b \u043c\u043e\u0433\u0443\u0442 \u043e\u0441\u0442\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0435\u0438\u0437\u043c\u0435\u043d\u043d\u044b\u043c\u0438, \u0430 \u043c\u043e\u0433\u0443\u0442 \u043f\u0435\u0440\u0435\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c\u0441\u044f. \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432 \u043d\u0438\u0445 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432, \u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f. \u0418\u043c\u0435\u043d\u0430 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u0438\u043d\u0434\u0435\u043a\u0441\u0435: \u043b\u0438\u0431\u043e \u0432 \u043d\u0443\u043c\u0435\u0440\u0430\u0446\u0438\u0438 \u043e\u0442 0 \u0434\u043e n, \u043b\u0438\u0431\u043e \u0432 \u0432\u0438\u0434\u0435 \u0447\u0438\u0441\u043b\u0430, \u0432\u043b\u0435\u0437\u0430\u044e\u0449\u0435\u0433\u043e \u0432 \u0442\u0438\u043f Int64.<\/p>\n<p>  \u041f\u0435\u0440\u0432\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441, \u0438 \u0441\u0430\u043c\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u0435\u0449\u0451 \u043d\u0430 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438, \u2013 \u044d\u0442\u043e <b>Flat<\/b>. \u041e\u043d \u043b\u0438\u0448\u044c \u0445\u0440\u0430\u043d\u0438\u0442 \u0432 \u0441\u0435\u0431\u0435 \u0432\u0441\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u0430, \u0430 \u043f\u043e\u0438\u0441\u043a \u043f\u043e \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u0432\u0435\u043a\u0442\u043e\u0440\u0443 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u044b\u043c \u043f\u0435\u0440\u0435\u0431\u043e\u0440\u043e\u043c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0431\u0443\u0447\u0430\u0442\u044c \u0435\u0433\u043e \u043d\u0435 \u043d\u0443\u0436\u043d\u043e (\u043d\u043e \u043e\u0431 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0438 \u043d\u0438\u0436\u0435). \u041d\u0430 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u043c \u043e\u0431\u044a\u0435\u043c\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0442\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 \u043c\u043e\u0436\u0435\u0442 \u0432\u043f\u043e\u043b\u043d\u0435 \u043f\u043e\u043a\u0440\u044b\u0442\u044c \u043d\u0443\u0436\u0434\u044b \u043f\u043e\u0438\u0441\u043a\u0430.<\/p>\n<p>  \u041f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code class=\"python\">import numpy as np dim = 512  # \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u044b \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u0438 512 nb = 10000  # \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u0432 \u0438\u043d\u0434\u0435\u043a\u0441\u0435 nq = 5 # \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u0432 \u0432\u044b\u0431\u043e\u0440\u043a\u0435 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 np.random.seed(228) vectors = np.random.random((nb, dim)).astype('float32') query = np.random.random((nq, dim)).astype('float32') <\/code><\/pre>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0435\u043c Flat \u0438\u043d\u0434\u0435\u043a\u0441 \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432\u0435\u043a\u0442\u043e\u0440\u044b \u0431\u0435\u0437 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f:<\/p>\n<pre><code class=\"python\">import faiss index = faiss.IndexFlatL2(dim) print(index.ntotal)  # \u043f\u043e\u043a\u0430 \u0438\u043d\u0434\u0435\u043a\u0441 \u043f\u0443\u0441\u0442\u043e\u0439 index.add(vectors) print(index.ntotal)  # \u0442\u0435\u043f\u0435\u0440\u044c \u0432 \u043d\u0435\u043c 10 000 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u0439\u0434\u0435\u043c 7 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0438\u0445 \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u0434\u043b\u044f \u043f\u0435\u0440\u0432\u044b\u0445 \u043f\u044f\u0442\u0438 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u0438\u0437 vectors:<\/p>\n<pre><code class=\"python\">topn = 7 D, I = index.search(vectors[:5], topn)  # \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: Distances, Indices print(I) print(D) <\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">Output<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">[[0 5662 6778 7738 6931 7809 7184]  [1 5831 8039 2150 5426 4569 6325]  [2 7348 2476 2048 5091 6322 3617]  [3  791 3173 6323 8374 7273 5842]  [4 6236 7548  746 6144 3906 5455]]  [[ 0.  71.53578  72.18823  72.74326  73.2243   73.333244 73.73317 ]  [ 0.  67.604805 68.494774 68.84221  71.839905 72.084335 72.10817 ]  [ 0.  66.717865 67.72709  69.63666  70.35903  70.933304 71.03237 ]  [ 0.  68.26415  68.320595 68.82381  68.86328  69.12087  69.55179 ]  [ 0.  72.03398  72.32417  73.00308  73.13054  73.76181  73.81281 ]]<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u0412\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0441\u0430\u043c\u044b\u0435 \u0431\u043b\u0438\u0437\u043a\u0438\u0435 \u0441\u043e\u0441\u0435\u0434\u0438 \u0441 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c 0 \u2013 \u044d\u0442\u043e \u0441\u0430\u043c\u0438 \u0432\u0435\u043a\u0442\u043e\u0440\u044b, \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u0442\u0440\u0430\u043d\u0436\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043f\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044e \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f. \u041f\u0440\u043e\u0432\u0435\u0434\u0435\u043c \u043f\u043e\u0438\u0441\u043a \u043f\u043e \u043d\u0430\u0448\u0438\u043c \u0432\u0435\u043a\u0442\u043e\u0440\u0430\u043c \u0438\u0437 query:<\/p>\n<pre><code class=\"python\">D, I = index.search(query, topn)  print(I) print(D) <\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">Output<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">[[2467 2479 7260 6199 8640 2676 1767]  [2623 8313 1500 7840 5031   52 6455]  [1756 2405 1251 4136  812 6536  307]  [3409 2930  539 8354 9573 6901 5692]  [8032 4271 7761 6305 8929 4137 6480]]  [[73.14189  73.654526 73.89804  74.05615  74.11058  74.13567  74.443436]  [71.830215 72.33813  72.973885 73.08897  73.27939  73.56996  73.72397 ]  [67.49588  69.95635  70.88528  71.08078  71.715965 71.76285  72.1091  ]  [69.11357  69.30089  70.83269  71.05977  71.3577   71.62457  71.72549 ]  [69.46417  69.66577  70.47629  70.54611  70.57645  70.95326  71.032005]]<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0432 \u043f\u0435\u0440\u0432\u043e\u043c \u0441\u0442\u043e\u043b\u0431\u0446\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u043d\u0435 \u043d\u0443\u043b\u0435\u0432\u044b\u0435, \u0442\u0430\u043a \u043a\u0430\u043a \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u0438\u0437 query \u043d\u0435\u0442 \u0432 \u0438\u043d\u0434\u0435\u043a\u0441\u0435.<\/p>\n<p>  \u0418\u043d\u0434\u0435\u043a\u0441 \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043d\u0430 \u0434\u0438\u0441\u043a \u0438 \u0437\u0430\u0442\u0435\u043c \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0441 \u0434\u0438\u0441\u043a\u0430:<\/p>\n<pre><code class=\"python\">faiss.write_index(index, &quot;flat.index&quot;) index = faiss.read_index(&quot;flat.index&quot;)<\/code><\/pre>\n<p>  \u041a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u044b, \u0432\u0441\u0451 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0440\u043d\u043e! \u041d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0440\u043e\u0447\u0435\u043a \u043a\u043e\u0434\u0430 \u2013 \u0438 \u043c\u044b \u0443\u0436\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u0430\u043c \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u0438. \u041d\u043e \u0442\u0430\u043a\u043e\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 \u0432\u0441\u0435\u0433\u043e \u0441 \u0434\u0435\u0441\u044f\u0442\u043a\u043e\u043c \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u0438 512 \u0431\u0443\u0434\u0435\u0442 \u0432\u0435\u0441\u0438\u0442\u044c \u043e\u043a\u043e\u043b\u043e 20\u0413\u0431 \u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0436\u0435 RAM.<\/p>\n<p>  \u0412 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0434\u043b\u044f \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a\u043e\u0439 \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0441 flat index, \u0432\u0441\u0451 \u0431\u044b\u043b\u043e \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u043c\u0443 \u043e\u0431\u044a\u0435\u043c\u0443 \u0434\u0430\u043d\u043d\u044b\u0445, \u043e\u0434\u043d\u0430\u043a\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u0440\u0435\u0447\u044c \u0438\u0434\u0435\u0442 \u043e \u0434\u0435\u0441\u044f\u0442\u043a\u0430\u0445 \u0438 \u0441\u043e\u0442\u043d\u044f\u0445 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u0438!<\/p>\n<h4>\u0423\u0441\u043a\u043e\u0440\u044f\u0435\u043c \u043f\u043e\u0438\u0441\u043a \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Inverted lists<\/h4>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/-s\/sl\/ar\/-sslarc98eeymf0saobd-yfsgs0.jpeg\"><br \/>  <i><a href=\"https:\/\/www.warhammer-community.com\/2017\/03\/07\/road-to-adepticon-march-for-macragge\/\">Source<\/a><\/i><\/p>\n<p>  \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0438 \u043d\u0430\u0438\u043a\u0440\u0443\u0442\u0435\u0439\u0448\u0430\u044f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c FAISS \u2013 IVF index, \u0438\u043b\u0438 <strong>Inverted File<\/strong> index. \u0418\u0434\u0435\u044f Inverted files \u043b\u0430\u043a\u043e\u043d\u0438\u0447\u043d\u0430, \u0438 <a href=\"https:\/\/medium.com\/dotstar\/understanding-faiss-part-2-79d90b1e5388\">\u043a\u0440\u0430\u0441\u0438\u0432\u043e \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u043f\u0430\u043b\u044c\u0446\u0430\u0445<\/a>:<\/p>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c \u0441\u0435\u0431\u0435 \u0433\u0438\u0433\u0430\u043d\u0442\u0441\u043a\u0443\u044e \u0430\u0440\u043c\u0438\u044e, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0443\u044e \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u0440\u0430\u0437\u043d\u043e\u0448\u0435\u0440\u0441\u0442\u043d\u044b\u0445 \u0432\u043e\u0438\u043d\u043e\u0432, \u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e, \u0441\u043a\u0430\u0436\u0435\u043c, \u0432 1 000 000 \u0447\u0435\u043b\u043e\u0432\u0435\u043a. \u041a\u043e\u043c\u0430\u043d\u0434\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435\u0439 \u0430\u0440\u043c\u0438\u0435\u0439 \u0441\u0440\u0430\u0437\u0443 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e. \u041a\u0430\u043a \u0438 \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u0432 \u0432\u043e\u0435\u043d\u043d\u043e\u043c \u0434\u0435\u043b\u0435, \u043d\u0443\u0436\u043d\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0430\u0448\u0443 \u0430\u0440\u043c\u0438\u044e \u043d\u0430 \u043f\u043e\u0434\u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u043c \u043d\u0430 <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/46c\/01f\/f95\/46c01ff95411d5e9189996ca615a62f1.svg\" alt=\"$\\sqrt{1 000 000} = 1000$\" data-tex=\"inline\"><\/math> \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0440\u0430\u0432\u043d\u044b\u0445 \u0447\u0430\u0441\u0442\u0435\u0439, \u0432\u044b\u0431\u0440\u0430\u0432 \u043d\u0430 \u0440\u043e\u043b\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0438\u0440\u043e\u0432 \u043f\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u0435\u043b\u044e \u0438\u0437 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u043e\u0434\u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f. \u0418 \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u0435\u043c\u0441\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u0445\u043e\u0436\u0438\u0445 \u043f\u043e \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0443, \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044e, \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0434\u0430\u043d\u043d\u044b\u043c \u0438 \u0442.\u0434. \u0432\u043e\u0438\u043d\u043e\u0432 \u0432 \u043e\u0434\u043d\u043e \u043f\u043e\u0434\u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435, \u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0438\u0440\u0430 \u0432\u044b\u0431\u0435\u0440\u0435\u043c \u0442\u0430\u043a\u0438\u043c, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0442\u043e\u0447\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u043b \u0441\u0432\u043e\u0435 \u043f\u043e\u0434\u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u2013 \u0431\u044b\u043b \u043a\u0435\u043c-\u0442\u043e \u00ab\u0441\u0440\u0435\u0434\u043d\u0438\u043c\u00bb. \u0412 \u0438\u0442\u043e\u0433\u0435 \u043d\u0430\u0448\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u0441\u0432\u0435\u043b\u0430\u0441\u044c \u043e\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u043c \u0432\u043e\u0438\u043d\u043e\u0432 \u043a \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0432\u0430\u043d\u0438\u044e 1000-\u044e \u043f\u043e\u0434\u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f\u043c\u0438 \u0447\u0435\u0440\u0435\u0437 \u0438\u0445 \u043a\u043e\u043c\u0430\u043d\u0434\u0438\u0440\u043e\u0432, \u0438 \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u043e\u0442\u043b\u0438\u0447\u043d\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e \u0441\u043e\u0441\u0442\u0430\u0432\u0435 \u043d\u0430\u0448\u0435\u0439 \u0430\u0440\u043c\u0438\u0438, \u0442\u0430\u043a \u043a\u0430\u043a \u0437\u043d\u0430\u0435\u043c, \u0447\u0442\u043e \u0438\u0437 \u0441\u0435\u0431\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u0438\u0440\u044b.<\/p>\n<p>  \u0412 \u044d\u0442\u043e\u043c \u0438 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0434\u0435\u044f IVF \u0438\u043d\u0434\u0435\u043a\u0441\u0430: \u0441\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u0443\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043d\u0430\u0431\u043e\u0440 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u043f\u043e \u0447\u0430\u0441\u0442\u044f\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_k-%D1%81%D1%80%D0%B5%D0%B4%D0%BD%D0%B8%D1%85\">k-means<\/a>, \u043a\u0430\u0436\u0434\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0432 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u0446\u0435\u043d\u0442\u0440\u043e\u0438\u0434\u0443, \u2013 \u0432\u0435\u043a\u0442\u043e\u0440, \u044f\u0432\u043b\u044f\u044e\u0449\u0438\u0439\u0441\u044f \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u043c \u0446\u0435\u043d\u0442\u0440\u043e\u043c \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430. \u041f\u043e\u0438\u0441\u043a \u0431\u0443\u0434\u0435\u043c \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0434\u043e \u0446\u0435\u043d\u0442\u0440\u043e\u0438\u0434, \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u043e\u043c \u0438\u0441\u043a\u0430\u0442\u044c \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0441\u0440\u0435\u0434\u0438 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u0432 \u0442\u043e\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435, \u0447\u0442\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u0430\u043d\u043d\u043e\u0439 \u0446\u0435\u043d\u0442\u0440\u043e\u0438\u0434\u0435. \u0412\u0437\u044f\u0432 k \u0440\u0430\u0432\u043d\u044b\u043c <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/256\/98b\/78f\/25698b78f9922ef83faafe4d0c8fb11f.svg\" alt=\"$\\sqrt{n}$\" data-tex=\"inline\"><\/math>, \u0433\u0434\u0435 <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/08d\/9fa\/efb\/08d9faefbe272bdf8fbb80773542e343.svg\" alt=\"$n$\" data-tex=\"inline\"><\/math> \u2013 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u0432 \u0438\u043d\u0434\u0435\u043a\u0441\u0435, \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0438\u0441\u043a \u043d\u0430 \u0434\u0432\u0443\u0445 \u0443\u0440\u043e\u0432\u043d\u044f\u0445 \u2013 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0440\u0435\u0434\u0438 <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/256\/98b\/78f\/25698b78f9922ef83faafe4d0c8fb11f.svg\" alt=\"$\\sqrt{n}$\" data-tex=\"inline\"><\/math> \u0446\u0435\u043d\u0442\u0440\u043e\u0438\u0434, \u0437\u0430\u0442\u0435\u043c \u0441\u0440\u0435\u0434\u0438 <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/256\/98b\/78f\/25698b78f9922ef83faafe4d0c8fb11f.svg\" alt=\"$\\sqrt{n}$\" data-tex=\"inline\"><\/math> \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435. \u041f\u043e\u0438\u0441\u043a \u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 \u043f\u043e\u043b\u043d\u044b\u043c \u043f\u0435\u0440\u0435\u0431\u043e\u0440\u043e\u043c \u0443\u0441\u043a\u043e\u0440\u044f\u0435\u0442\u0441\u044f \u0432 \u0440\u0430\u0437\u044b, \u0447\u0442\u043e \u0440\u0435\u0448\u0430\u0435\u0442 \u043e\u0434\u043d\u0443 \u0438\u0437 \u043d\u0430\u0448\u0438\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e\u043c \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/wa\/fa\/gl\/wafaglupre-y6bt9hmozs9aeyoi.jpeg\"><br \/>  <i>\u041f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434\u043e\u043c k-means \u043d\u0430 k \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432. \u041a\u0430\u0436\u0434\u043e\u043c\u0443 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0443 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044f \u0446\u0435\u043d\u0442\u0440\u043e\u0438\u0434\u0430<\/i><\/p>\n<p>  \u041f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0434\u0430:<\/p>\n<pre><code class=\"python\">dim = 512 k = 1000  # \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u201c\u043a\u043e\u043c\u0430\u043d\u0434\u0438\u0440\u043e\u0432\u201d quantiser = faiss.IndexFlatL2(dim)  index = faiss.IndexIVFFlat(quantiser, dim, k) vectors = np.random.random((1000000, dim)).astype('float32')  # 1 000 000 \u201c\u0432\u043e\u0438\u043d\u043e\u0432\u201d <\/code><\/pre>\n<p>  \u0410 \u043c\u043e\u0436\u043d\u043e \u044d\u0442\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u0443\u0434\u0430 \u0431\u043e\u043b\u0435\u0435 \u044d\u043b\u0435\u0433\u0430\u043d\u0442\u043d\u043e, \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0432\u0448\u0438\u0441\u044c \u0443\u0434\u043e\u0431\u043d\u043e\u0439 \u0448\u0442\u0443\u043a\u043e\u0439 FAISS \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u0430:<\/p>\n<pre><code class=\"python\">index = faiss.index_factory(dim, \u201cIVF1000,Flat\u201d) \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435: print(index.is_trained)   # False. index.train(vectors)  # Train \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u043d\u0430\u0431\u043e\u0440\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432   # \u041e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043e, \u043d\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u0432 \u0438\u043d\u0434\u0435\u043a\u0441\u0435 \u043f\u043e\u043a\u0430 \u043d\u0435\u0442, \u0442\u0430\u043a \u0447\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0438\u0445 \u0432 \u0438\u043d\u0434\u0435\u043a\u0441: print(index.is_trained)  # True print(index.ntotal)   # 0 index.add(vectors) print(index.ntotal)   # 1000000 <\/code><\/pre>\n<p>  \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0432 \u0442\u0430\u043a\u043e\u0439 \u0442\u0438\u043f \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u043f\u043e\u0441\u043b\u0435 Flat, \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u043e\u0434\u043d\u0443 \u0438\u0437 \u043d\u0430\u0448\u0438\u0445 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u2013 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u043e\u0438\u0441\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0432 \u0440\u0430\u0437\u044b \u043c\u0435\u043d\u044c\u0448\u0435 \u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 \u043f\u043e\u043b\u043d\u044b\u043c \u043f\u0435\u0440\u0435\u0431\u043e\u0440\u043e\u043c.<\/p>\n<pre><code class=\"python\">D, I = index.search(query, topn)  print(I) print(D) <\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">Output<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">[[19898 533106 641838 681301 602835 439794 331951]  [654803 472683 538572 126357 288292 835974 308846]  [588393 979151 708282 829598  50812 721369 944102]  [796762 121483 432837 679921 691038 169755 701540]  [980500 435793 906182 893115 439104 298988 676091]]  [[69.88127  71.64444  72.4655   72.54283  72.66737  72.71834  72.83057]  [72.17552  72.28832  72.315926 72.43405  72.53974  72.664055 72.69495]  [67.262115 69.46998  70.08826  70.41119  70.57278  70.62283  71.42067]  [71.293045 71.6647   71.686615 71.915405 72.219505 72.28943  72.29849]  [73.27072  73.96091  74.034706 74.062515 74.24464  74.51218  74.609695]] <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u041d\u043e \u0435\u0441\u0442\u044c \u043e\u0434\u043d\u043e \u00ab\u043d\u043e\u00bb \u2013 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0438\u0441\u043a\u0430, \u043a\u0430\u043a \u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c, \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0432\u0438\u0441\u0435\u0442\u044c \u043e\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043f\u043e\u0441\u0435\u0449\u0430\u0435\u043c\u044b\u0445 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 nprobe:<\/p>\n<pre><code class=\"python\">print(index.nprobe)  # 1 \u2013 \u0437\u0430\u0445\u043e\u0434\u0438\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043e\u0434\u0438\u043d \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0438 \u0432\u0435\u0434\u0435\u043c \u043f\u043e\u0438\u0441\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043d\u0451\u043c index.nprobe = 16  # \u041f\u0440\u043e\u0445\u043e\u0434\u0438\u043c \u043f\u043e \u0442\u043e\u043f-16 \u0446\u0435\u043d\u0442\u0440\u043e\u0438\u0434 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 top-n \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0438\u0445 \u0441\u043e\u0441\u0435\u0434\u0435\u0439 D, I = index.search(query, topn)  print(I) print(D) <\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">Output<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">[[ 28707 811973  12310 391153 574413  19898 552495]  [540075 339549 884060 117178 878374 605968 201291]  [588393 235712 123724 104489 277182 656948 662450]  [983754 604268  54894 625338 199198  70698  73403]  [862753 523459 766586 379550 324411 654206 871241]]  [[67.365585 67.38003  68.17187  68.4904   68.63618  69.88127  70.3822]  [65.63759  67.67015  68.18429  68.45782  68.68973  68.82755  69.05]  [67.262115 68.735535 68.83473  68.88733  68.95465  69.11365  69.33717]  [67.32007  68.544685 68.60204  68.60275  68.68633  68.933334 69.17106]  [70.573326 70.730286 70.78615  70.85502  71.467674 71.59512  71.909836]]<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e, \u043f\u043e\u0441\u043b\u0435 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044f nprobe \u0438\u043c\u0435\u0435\u043c \u0441\u043e\u0432\u0441\u0435\u043c \u0434\u0440\u0443\u0433\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b, \u0442\u043e\u043f \u043d\u0430\u0438\u043c\u0435\u043d\u044c\u0448\u0438\u0445 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u0432 D \u0441\u0442\u0430\u043b \u043b\u0443\u0447\u0448\u0435.<\/p>\n<p>  \u041c\u043e\u0436\u043d\u043e \u0431\u0440\u0430\u0442\u044c nprobe \u0440\u0430\u0432\u043d\u044b\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u0446\u0435\u043d\u0442\u0440\u043e\u0438\u0434 \u0432 \u0438\u043d\u0434\u0435\u043a\u0441\u0435, \u0442\u043e\u0433\u0434\u0430 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u043e \u043f\u043e\u0438\u0441\u043a\u0443 \u043f\u043e\u043b\u043d\u044b\u043c \u043f\u0435\u0440\u0435\u0431\u043e\u0440\u043e\u043c, \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0430\u044f, \u043d\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u043e\u0438\u0441\u043a\u0430 \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u0441\u044f.<\/p>\n<h4>\u0412\u0435\u0434\u0435\u043c \u043f\u043e\u0438\u0441\u043a \u043f\u043e \u0434\u0438\u0441\u043a\u0443 \u2013 On Disk Inverted Lists<\/h4>\n<p>  \u041e\u0442\u043b\u0438\u0447\u043d\u043e, \u043f\u0435\u0440\u0432\u0443\u044e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438, \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0430 \u0434\u0435\u0441\u044f\u0442\u043a\u0430\u0445 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u0440\u0438\u0435\u043c\u043b\u0435\u043c\u0443\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u043e\u0438\u0441\u043a\u0430! \u041d\u043e \u0432\u0441\u0451 \u044d\u0442\u043e \u0431\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u043d\u0430\u0448 \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 \u043d\u0435 \u0443\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432 RAM.<\/p>\n<p>  \u041a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e FAISS \u2013 \u0432 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0445\u0440\u0430\u043d\u0438\u0442\u044c Inverted Lists IVF \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u043d\u0430 \u0434\u0438\u0441\u043a\u0435, \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u044f \u0432 RAM \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435.<\/p>\n<p>  \u041a\u0430\u043a \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0442\u0430\u043a\u043e\u0439 \u0438\u043d\u0434\u0435\u043a\u0441: \u043e\u0431\u0443\u0447\u0430\u0435\u043c indexIVF \u0441 \u043d\u0443\u0436\u043d\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u043d\u0430 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u043c \u043e\u0431\u044a\u0435\u043c\u0435 \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043b\u0435\u0437\u0430\u0435\u0442 \u0432 \u043f\u0430\u043c\u044f\u0442\u044c, \u0437\u0430\u0442\u0435\u043c \u0432 \u043e\u0431\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 \u043f\u043e \u0447\u0430\u0441\u0442\u044f\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432\u0435\u043a\u0442\u043e\u0440\u044b (\u043f\u043e\u0431\u044b\u0432\u0430\u0432\u0448\u0438\u0435 \u0432 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0438 \u0438 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e) \u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043d\u0430 \u0434\u0438\u0441\u043a \u0438\u043d\u0434\u0435\u043a\u0441 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u0447\u0430\u0441\u0442\u0435\u0439. <\/p>\n<pre><code class=\"python\">index = faiss.index_factory(512, \u201c,IVF65536, Flat\u201d, faiss.METRIC_L2)<\/code><\/pre>\n<p>  \u041e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u043d\u0430 GPU \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u043c \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"python\">res = faiss.StandardGpuResources() index_ivf = faiss.extract_index_ivf(index) index_flat = faiss.IndexFlatL2(512) clustering_index = faiss.index_cpu_to_gpu(res, 0, index_flat)  #  0 \u2013 \u043d\u043e\u043c\u0435\u0440 GPU index_ivf.clustering_index = clustering_index<\/code><\/pre>\n<p>  <i>faiss.index_cpu_to_gpu(res, 0, index_flat)<\/i> \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430 <i>faiss.index_cpu_to_all_gpus(index_flat)<\/i>, \u0447\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 GPU \u0432\u043c\u0435\u0441\u0442\u0435. <\/p>\n<p>  \u041a\u0440\u0430\u0439\u043d\u0435 \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u0443\u0447\u0430\u044e\u0449\u0430\u044f \u0432\u044b\u0431\u043e\u0440\u043a\u0430 \u0431\u044b\u043b\u0430 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0440\u0435\u043f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0442\u0438\u0432\u043d\u0430 \u0438 \u0438\u043c\u0435\u043b\u0430 \u0440\u0430\u0432\u043d\u043e\u043c\u0435\u0440\u043d\u043e\u0435 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u043e\u0431\u0443\u0447\u0430\u044e\u0449\u0438\u0439 \u0434\u0430\u0442\u0430\u0441\u0435\u0442 \u0438\u0437 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432, \u0440\u0430\u043d\u0434\u043e\u043c\u043d\u043e \u0432\u044b\u0431\u0438\u0440\u0430\u044f \u0438\u0445 \u0438\u0437 \u0432\u0441\u0435\u0433\u043e \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0430.<\/p>\n<pre><code class=\"python\">train_vectors = ...  # \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0434\u0430\u0442\u0430\u0441\u0435\u0442 \u0434\u043b\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f index.train(train_vectors)  # \u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u043f\u0443\u0441\u0442\u043e\u0439 \u043e\u0431\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b: faiss.write_index(index, &quot;trained_block.index&quot;)   # \u041f\u043e\u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u043e\u0432\u044b\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043e\u0431\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e # \u0411\u043b\u043e\u043a\u0430\u043c\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u043d\u0438\u0445 \u0447\u0430\u0441\u0442\u0438 \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0430: for bno in range(first_block, last_block+ 1):     block_vectors = vectors_parts[bno]     block_vectors_ids = vectors_parts_ids[bno]  # id \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432, \u0435\u0441\u043b\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e     index = faiss.read_index(&quot;trained_block.index&quot;)     index.add_with_ids(block_vectors, block_vectors_ids)     faiss.write_index(index, &quot;block_{}.index&quot;.format(bno)) <\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u043c \u0432\u0441\u0435 Inverted Lists \u0432\u043e\u0435\u0434\u0438\u043d\u043e. \u042d\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u0431\u043b\u043e\u043a\u043e\u0432, \u043f\u043e \u0441\u0443\u0442\u0438, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u0438\u043c \u0438 \u0442\u0435\u043c \u0436\u0435 \u043e\u0431\u0443\u0447\u0435\u043d\u043d\u044b\u043c \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u043c, \u043f\u0440\u043e\u0441\u0442\u043e \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0432\u0435\u043a\u0442\u043e\u0440\u0430\u043c\u0438 \u0432\u043d\u0443\u0442\u0440\u0438.<\/p>\n<pre><code class=\"python\">ivfs = [] for bno in range(first_block, last_block+ 1):     index = faiss.read_index(&quot;block_{}.index&quot;.format(bno), faiss.IO_FLAG_MMAP)     ivfs.append(index.invlists)     # \u0441\u0447\u0438\u0442\u0430\u0442\u044c index \u0438 \u0435\u0433\u043e inv_lists \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u043c\u0438     # \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u043e\u0442\u0435\u0440\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438:     index.own_invlists = False  # \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441: index = faiss.read_index(&quot;trained_block.index&quot;)  # \u0433\u043e\u0442\u043e\u0432\u0438\u043c \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0435 invlists # \u0432\u0441\u0435 invlists \u0438\u0437 \u0431\u043b\u043e\u043a\u043e\u0432 \u0431\u0443\u0434\u0443\u0442 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u044b \u0432 \u0444\u0430\u0439\u043b merged_index.ivfdata invlists = faiss.OnDiskInvertedLists(index.nlist, index.code_size, &quot;merged_index.ivfdata&quot;) ivf_vector = faiss.InvertedListsPtrVector()   for ivf in ivfs:      ivf_vector.push_back(ivf)  ntotal = invlists.merge_from(ivf_vector.data(), ivf_vector.size()) index.ntotal = ntotal  # \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u043c \u043b\u0438\u0441\u0442\u044b \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u043d\u0430 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u043d\u044b\u0435 index.replace_invlists(invlists)   faiss.write_index(index, data_path + &quot;populated.index&quot;)  # \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0432\u0441\u0451 \u043d\u0430 \u0434\u0438\u0441\u043a <\/code><\/pre>\n<p>  \u0418\u0442\u043e\u0433: \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u0448 \u0438\u043d\u0434\u0435\u043a\u0441 \u044d\u0442\u043e \u0444\u0430\u0439\u043b\u044b <i>populated.index<\/i> \u0438 <i>merged_blocks.ivfdata<\/i>.<\/p>\n<p>  \u0412 <i>populated.index<\/i> \u0437\u0430\u043f\u0438\u0441\u0430\u043d \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u043b\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u043a \u0444\u0430\u0439\u043b\u0443 \u0441 Inverted Lists, \u043f\u043e\u044d\u0442\u043e\u043c\u0443, \u0435\u0441\u043b\u0438 \u043f\u0443\u0442\u044c \u043a \u0444\u0430\u0439\u043b\u0443 ivfdata \u043f\u043e \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u0441\u044f, \u043f\u0440\u0438 \u0447\u0442\u0435\u043d\u0438\u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u043b\u0430\u0433 <i>faiss.IO_FLAG_ONDISK_SAME_DIR<\/i>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0441\u043a\u0430\u0442\u044c ivfdata \u0444\u0430\u0439\u043b \u0432 \u0442\u043e\u0439 \u0436\u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438, \u0447\u0442\u043e \u0438 populated.index:<\/p>\n<pre><code class=\"python\">index = faiss.read_index('populated.index', faiss.IO_FLAG_ONDISK_SAME_DIR) <\/code><\/pre>\n<p>  \u0417\u0430 \u043e\u0441\u043d\u043e\u0432\u0443 \u0431\u044b\u043b \u0432\u0437\u044f\u0442 <a href=\"https:\/\/github.com\/facebookresearch\/faiss\/blob\/master\/demos\/demo_ondisk_ivf.py\">demo \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0437 Github \u043f\u0440\u043e\u0435\u043a\u0442\u0430 FAISS<\/a>.<\/p>\n<p>  \u041c\u0438\u043d\u0438-\u0433\u0430\u0439\u0434 \u043f\u043e \u0432\u044b\u0431\u043e\u0440\u0443 \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 <a href=\"https:\/\/github.com\/facebookresearch\/faiss\/wiki\/Guidelines-to-choose-an-index\">FAISS Wiki<\/a>. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u044b \u0441\u043c\u043e\u0433\u043b\u0438 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432 RAM \u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u043e\u0447\u043d\u044b\u0439 \u0434\u0430\u0442\u0430\u0441\u0435\u0442 \u0438\u0437 12 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u044b\u0431\u0440\u0430\u043b\u0438 IVFFlat \u0438\u043d\u0434\u0435\u043a\u0441 \u043d\u0430 262144 \u0446\u0435\u043d\u0442\u0440\u043e\u0438\u0434\u0430\u0445, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0442\u0435\u043c \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043e \u0441\u043e\u0442\u0435\u043d \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432. \u0422\u0430\u043a\u0436\u0435 \u0432 \u0433\u0430\u0439\u0434\u0435 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0434\u0435\u043a\u0441 IVF262144_HNSW32, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u043a \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0443 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0443 HNSW \u0441 32 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0438\u043c\u0438 \u0441\u043e\u0441\u0435\u0434\u044f\u043c\u0438 (\u0438\u043d\u044b\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f quantizer IndexHNSWFlat), \u043d\u043e, \u043a\u0430\u043a \u043d\u0430\u043c \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u043f\u0440\u0438 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0445 \u0442\u0435\u0441\u0442\u0430\u0445, \u043f\u043e\u0438\u0441\u043a \u043f\u043e \u0442\u0430\u043a\u043e\u043c\u0443 \u0438\u043d\u0434\u0435\u043a\u0441\u0443 \u043c\u0435\u043d\u0435\u0435 \u0442\u043e\u0447\u0435\u043d. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0439 quantizer \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430 GPU.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0421\u043f\u043e\u0439\u043b\u0435\u0440:<\/b>                         <\/p>\n<div class=\"spoiler_text\">\u0414\u0430\u0436\u0435 \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 on disk inverted lists FAISS \u043f\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c. \u0422\u0430\u043a \u043a\u0430\u043a RAM \u043f\u0430\u043c\u044f\u0442\u0438 \u043d\u0430 \u044d\u0442\u0430\u043f\u0430\u0445 \u0442\u0435\u0441\u0442\u043e\u0432 \u043d\u0430\u043c \u0445\u0432\u0430\u0442\u0430\u043b\u043e, \u043f\u0443\u0441\u0442\u044c \u0438 \u0441 \u0442\u0440\u0443\u0434\u043e\u043c, \u0430 \u0434\u043b\u044f \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u043d\u044b\u0445 \u0442\u0435\u0441\u0442\u043e\u0432 \u0431\u044b\u043b\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u043c\u0435\u0442\u044c \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0438\u0439 \u0437\u0430\u043f\u0430\u0441 \u0434\u0430\u043d\u043d\u044b\u0445 \u0437\u0434\u0435\u0441\u044c \u0438 \u0441\u0435\u0439\u0447\u0430\u0441, \u0442\u0435\u0441\u0442\u044b \u043d\u0430 \u043e\u0431\u044a\u0435\u043c\u0430\u0445 \u0441\u0432\u044b\u0448\u0435 \u043e\u0431\u044a\u0435\u043c\u0430 RAM \u043d\u0435 \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u043b\u0438\u0441\u044c. \u041d\u043e <a href=\"https:\/\/github.com\/facebookresearch\/faiss\/wiki\/Indexing-1T-vectors\">FAISS wiki<\/a> \u0438 \u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u043d\u0430 Github \u0433\u043e\u0432\u043e\u0440\u044f\u0442, \u0447\u0442\u043e \u0432\u0441\u0451 \u0434\u043e\u043b\u0436\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e.  <\/div>\n<\/p><\/div>\n<h4>\u0417\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u0438\u0441\u043a\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0441 Product Quantization<\/h4>\n<p>  \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043c\u0435\u0442\u043e\u0434\u0443 \u043f\u043e\u0438\u0441\u043a\u0430 \u0441 \u0434\u0438\u0441\u043a\u0430 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0441\u043d\u044f\u0442\u044c \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0441 RAM, \u043d\u043e \u0438\u043d\u0434\u0435\u043a\u0441 \u0441 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u043c \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u043b \u043e\u043a\u043e\u043b\u043e 2 \u0413\u0411 \u0434\u0438\u0441\u043a\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430, \u0430 \u043c\u044b \u0440\u0430\u0441\u0441\u0443\u0436\u0434\u0430\u0435\u043c \u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043c\u0438\u043b\u043b\u0438\u0430\u0440\u0434\u0430\u043c\u0438 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432, \u0447\u0442\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e \u0431\u044b \u0431\u043e\u043b\u0435\u0435 \u0434\u0432\u0443\u0445 \u0422\u0411! \u0411\u0435\u0437\u0443\u0441\u043b\u043e\u0432\u043d\u043e, \u043e\u0431\u044a\u0435\u043c \u043d\u0435 \u0442\u0430\u043a\u043e\u0439 \u0431\u043e\u043b\u044c\u0448\u043e\u0439, \u0435\u0441\u043b\u0438 \u0437\u0430\u0434\u0430\u0442\u044c\u0441\u044f \u0446\u0435\u043b\u044c\u044e \u0438 \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0434\u0438\u0441\u043a\u043e\u0432\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e, \u043d\u043e \u043d\u0430\u0441 \u044d\u0442\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043d\u0430\u043f\u0440\u044f\u0433\u0430\u043b\u043e.<\/p>\n<p>  \u0418 \u0442\u0443\u0442 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 \u043f\u043e\u043c\u043e\u0449\u044c \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e <b>Scalar Quantization (SQ)<\/b> \u0438 <b>Product Quantization (PQ)<\/b>. SQ \u2013 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u0430\u0436\u0434\u043e\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0432\u0435\u043a\u0442\u043e\u0440\u0430 n \u0431\u0438\u0442\u0430\u043c\u0438 (\u043e\u0431\u044b\u0447\u043d\u043e 8, 6 \u0438\u043b\u0438 4 \u0431\u0438\u0442). \u041c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442 PQ, \u0432\u0435\u0434\u044c \u0438\u0434\u0435\u044f \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0442\u0438\u043f\u0430 float32 \u0432\u043e\u0441\u0435\u043c\u044c\u044e \u0431\u0438\u0442\u0430\u043c\u0438 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0443\u0436 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0443\u0434\u0440\u0443\u0447\u0430\u044e\u0449\u0435 \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u043f\u043e\u0442\u0435\u0440\u044c \u0432 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438. \u0425\u043e\u0442\u044f \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0441\u0436\u0430\u0442\u0438\u0435 SQfp16 \u0434\u043e \u0442\u0438\u043f\u0430 float16 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0447\u0442\u0438 \u0431\u0435\u0437 \u043f\u043e\u0442\u0435\u0440\u044c \u0432 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p>  \u0421\u0443\u0442\u044c Product Quantization \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c: \u0432\u0435\u043a\u0442\u043e\u0440\u044b \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u0438 512 \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0430 n \u0447\u0430\u0441\u0442\u0435\u0439, \u043a\u0430\u0436\u0434\u0430\u044f \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u043e 256 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430\u043c (1 \u0431\u0430\u0439\u0442), \u0442.\u0435. \u043c\u044b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0432\u0435\u043a\u0442\u043e\u0440 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e n \u0431\u0430\u0439\u0442, \u0433\u0434\u0435 n \u043e\u0431\u044b\u0447\u043d\u043e \u043d\u0435 \u043f\u0440\u0435\u0432\u043e\u0441\u0445\u043e\u0434\u0438\u0442 64 \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 FAISS. \u041d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0442\u0430\u043a\u0430\u044f \u043a\u0432\u0430\u043d\u0442\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0435 \u043a \u0441\u0430\u043c\u0438\u043c \u0432\u0435\u043a\u0442\u043e\u0440\u0430\u043c \u0438\u0437 \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0430, \u0430 \u043a \u0440\u0430\u0437\u043d\u043e\u0441\u0442\u044f\u043c \u044d\u0442\u0438\u0445 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0438\u043c \u0446\u0435\u043d\u0442\u0440\u043e\u0438\u0434, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u043c \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 Inverted Lists! \u0412\u044b\u0445\u043e\u0434\u0438\u0442, \u0447\u0442\u043e Inverted Lists \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u0437 \u0441\u0435\u0431\u044f \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043d\u0430\u0431\u043e\u0440\u044b \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u043c\u0435\u0436\u0434\u0443 \u0432\u0435\u043a\u0442\u043e\u0440\u0430\u043c\u0438 \u0438 \u0438\u0445 \u0446\u0435\u043d\u0442\u0440\u043e\u0438\u0434\u0430\u043c\u0438.<\/p>\n<pre><code class=\"python\">index = faiss.index_factory(dim, &quot;IVF262144,PQ64&quot;, faiss.METRIC_L2)<\/code><\/pre>\n<p>  \u0412\u044b\u0445\u043e\u0434\u0438\u0442, \u0447\u0442\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043c \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432\u0441\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u044b \u2013 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u044b\u0434\u0435\u043b\u044f\u0442\u044c n \u0431\u0430\u0439\u0442 \u043d\u0430 \u0432\u0435\u043a\u0442\u043e\u0440 \u0438 2048 \u0431\u0430\u0439\u0442 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0432\u0435\u043a\u0442\u043e\u0440 \u0446\u0435\u043d\u0442\u0440\u043e\u0438\u0434\u044b. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435\u043c \u043c\u044b \u0432\u0437\u044f\u043b\u0438 <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/01d\/175\/707\/01d175707cca5af7d74b2793db885cd2.svg\" alt=\"$n = 64$\" data-tex=\"inline\"><\/math>, \u0442\u043e \u0435\u0441\u0442\u044c <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/914\/5fc\/f37\/9145fcf3741cf47565504a23c975f43d.svg\" alt=\"$\\frac{512}{64} = 8$\" data-tex=\"inline\"><\/math> \u2013 \u0434\u043b\u0438\u043d\u0430 \u043e\u0434\u043d\u043e\u0433\u043e \u0441\u0443\u0431\u0432\u0435\u043a\u0442\u043e\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u043e\u0434\u0438\u043d \u0438\u0437 256 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/zm\/mb\/sb\/zmmbsbtpwy5lt2-cnlfei8ynjwo.jpeg\"><\/p>\n<p>  \u041f\u0440\u0438 \u043f\u043e\u0438\u0441\u043a\u0435 \u043f\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u0443 x \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u0431\u044b\u0447\u043d\u044b\u043c Flat \u043a\u0432\u0430\u043d\u0442\u0430\u0439\u0437\u0435\u0440\u043e\u043c \u0431\u0443\u0434\u0443\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c\u0441\u044f \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0438\u0435 \u0446\u0435\u043d\u0442\u0440\u043e\u0438\u0434\u044b, \u0430 \u0437\u0430\u0442\u0435\u043c x \u0442\u0430\u043a \u0436\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u0443\u0431-\u0432\u0435\u043a\u0442\u043e\u0440\u044b, \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043a\u043e\u0434\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u043e\u043c\u0435\u0440\u043e\u043c \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 256 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u0446\u0435\u043d\u0442\u0440\u043e\u0438\u0434\u044b. \u0418 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0434\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0441\u0443\u043c\u043c\u0430 \u0438\u0437 64 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u043c\u0435\u0436\u0434\u0443 \u0441\u0443\u0431-\u0432\u0435\u043a\u0442\u043e\u0440\u0430\u043c\u0438.<\/p>\n<h4>\u0427\u0442\u043e \u0432 \u0438\u0442\u043e\u0433\u0435?<\/h4>\n<p>  \u041c\u044b \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438 \u0441\u0432\u043e\u0438 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u044b \u043d\u0430 \u0438\u043d\u0434\u0435\u043a\u0441\u0435 \u00abIVF262144, PQ64\u00bb, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u0438\u043b \u0432\u0441\u0435 \u043d\u0430\u0448\u0438 \u043d\u0443\u0436\u0434\u044b \u043f\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0438 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0438\u0441\u043a\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u043b \u0440\u0430\u0437\u0443\u043c\u043d\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u0438\u0441\u043a\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u043f\u0440\u0438 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u0430. \u0415\u0441\u043b\u0438 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0435\u0435, \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u0440\u0438 315 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u0430\u0445 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u0438\u043d\u0434\u0435\u043a\u0441 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 22 \u0413\u0431 \u0434\u0438\u0441\u043a\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0438 \u043e\u043a\u043e\u043b\u043e 3 \u0413\u0431 RAM \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438.<\/p>\n<p>  \u0415\u0449\u0435 \u043e\u0434\u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f \u0434\u0435\u0442\u0430\u043b\u044c, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u043d\u0435 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b\u0438 \u0440\u0430\u043d\u0435\u0435, \u2013 \u043c\u0435\u0442\u0440\u0438\u043a\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0430\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u043c. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u043b\u044e\u0431\u044b\u043c\u0438 \u0434\u0432\u0443\u043c\u044f \u0432\u0435\u043a\u0442\u043e\u0440\u0430\u043c\u0438 \u0441\u0447\u0438\u0442\u0430\u044e\u0442\u0441\u044f \u0432 \u0435\u0432\u043a\u043b\u0438\u0434\u043e\u0432\u043e\u0439 \u043c\u0435\u0442\u0440\u0438\u043a\u0435 L2, \u0438\u043b\u0438 \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u043c \u044f\u0437\u044b\u043a\u043e\u043c, \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0441\u0447\u0438\u0442\u0430\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u044b\u0439 \u043a\u043e\u0440\u0435\u043d\u044c \u0438\u0437 \u0441\u0443\u043c\u043c\u044b \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043e\u0432 \u043f\u043e\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u043d\u044b\u0445 \u0440\u0430\u0437\u043d\u043e\u0441\u0442\u0435\u0439. \u041d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u043c\u0435\u0442\u0440\u0438\u043a\u0443 \u043c\u043e\u0436\u043d\u043e \u0438 \u0434\u0440\u0443\u0433\u0443\u044e, \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u043c\u044b \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u043c\u0435\u0442\u0440\u0438\u043a\u0443 <i>METRIC_INNER_PRODUCT<\/i>, \u0438\u043b\u0438 \u043c\u0435\u0442\u0440\u0438\u043a\u0443 \u043a\u043e\u0441\u0438\u043d\u0443\u0441\u043d\u044b\u0445 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u043c\u0435\u0436\u0434\u0443 \u0432\u0435\u043a\u0442\u043e\u0440\u0430\u043c\u0438. \u041a\u043e\u0441\u0438\u043d\u0443\u0441\u043d\u0430\u044f \u043e\u043d\u0430 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043a\u043e\u0441\u0438\u043d\u0443\u0441 \u0443\u0433\u043b\u0430 \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043c\u044f \u0432\u0435\u043a\u0442\u043e\u0440\u0430\u043c\u0438 \u0432 \u0415\u0432\u043a\u043b\u0438\u0434\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0432\u044b\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u043e\u0433\u043e (\u043f\u043e\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u043d\u043e\u0433\u043e) \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u043a \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044e \u0438\u0445 \u0434\u043b\u0438\u043d, \u0430 \u0435\u0441\u043b\u0438 \u0432\u0441\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u044b \u0432 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u0438\u043c\u0435\u044e\u0442 \u0434\u043b\u0438\u043d\u0443 1, \u0442\u043e \u043a\u043e\u0441\u0438\u043d\u0443\u0441 \u0443\u0433\u043b\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0432\u0435\u043d \u043f\u043e\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u043d\u043e\u043c\u0443 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044e. \u0412 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0447\u0435\u043c \u0431\u043b\u0438\u0436\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u0432\u0435\u043a\u0442\u043e\u0440\u044b \u0432 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435, \u0442\u0435\u043c \u0431\u043b\u0438\u0436\u0435 \u043a \u0435\u0434\u0438\u043d\u0438\u0446\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u0445 \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u043e\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435.<\/p>\n<p>  \u041c\u0435\u0442\u0440\u0438\u043a\u0430 L2 \u0438\u043c\u0435\u0435\u0442 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043a \u043c\u0435\u0442\u0440\u0438\u043a\u0435 \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u044b\u0445 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0439. \u041e\u0434\u043d\u0430\u043a\u043e \u043f\u0440\u0438 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u043c \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 \u0434\u0432\u0443\u0445 \u043c\u0435\u0442\u0440\u0438\u043a \u0441\u043b\u043e\u0436\u0438\u043b\u043e\u0441\u044c \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u043c\u0435\u0442\u0440\u0438\u043a\u0430 \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u044b\u0445 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0439 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u043d\u0430\u043c \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b \u043f\u043e\u0445\u043e\u0436\u0435\u0441\u0442\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0431\u043e\u043b\u0435\u0435 \u0443\u0434\u0430\u0447\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c. \u041a \u0442\u043e\u043c\u0443 \u0436\u0435 \u044d\u043c\u0431\u0435\u0434\u0434\u0438\u043d\u0433\u0438 \u043d\u0430\u0448\u0438\u0445 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0439 \u0431\u044b\u043b\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u044b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <a href=\"https:\/\/github.com\/deepinsight\/insightface\">InsightFace<\/a>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 <a href=\"https:\/\/arxiv.org\/abs\/1801.07698\">ArcFace<\/a>, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0430\u044f \u043a\u043e\u0441\u0438\u043d\u0443\u0441\u043d\u044b\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f. \u0422\u0430\u043a\u0436\u0435 \u0435\u0441\u0442\u044c \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0432 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0445 FAISS, \u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c <a href=\"https:\/\/github.com\/facebookresearch\/faiss\/wiki\/MetricType-and-distances\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u043f\u0430\u0440\u0443 \u0441\u043b\u043e\u0432 \u043e GPU<\/b>                         <\/p>\n<div class=\"spoiler_text\">\u041e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 FAISS \u043d\u0430 GPU \u0432\u0435\u0441\u044c\u043c\u0430 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043e \u0432 \u0432\u044b\u0431\u043e\u0440\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0438\u043d\u0434\u0435\u043a\u0441\u0430, \u0430 \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0433\u0438\u0433\u0430\u043d\u0442\u0441\u043a\u0438\u043c\u0438 \u043e\u0431\u044a\u0435\u043c\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0435\u0441\u043b\u0438 \u0438 \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c, \u0442\u043e \u0432\u044b\u0437\u043e\u0432\u0435\u0442 \u0442\u0440\u0443\u0434\u043d\u043e\u0441\u0442\u0438, \u043d\u0435\u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043c\u044b\u0435 \u0441 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c. \u041a \u0442\u043e\u043c\u0443 \u0436\u0435 \u043d\u0430 GPU \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0442\u0440\u0438\u043a\u0430 L2.\u00a0<\/p>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e, \u0441\u0442\u043e\u0438\u0442 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u0441 PQ \u043a\u0432\u0430\u043d\u0442\u0438\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u043d\u0430 GPU \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u043e\u0434\u0430 56-\u044e \u0431\u0430\u0439\u0442\u0430\u043c\u0438, \u043b\u0438\u0431\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0441\u043c\u0435\u043d\u0438\u0442\u044c float32 \u043d\u0430 float16, \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u044d\u0442\u043e \u0441 <a href=\"https:\/\/github.com\/facebookresearch\/faiss\/wiki\/Faiss-on-the-GPUU#limitations\">\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c<\/a>.<\/p>\n<p>  \u0412 \u0438\u0442\u043e\u0433\u0435 \u043e FAISS \u043d\u0430 GPU \u043c\u044b \u0434\u0443\u043c\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043b\u0438, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e CPU \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0430\u0441 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0443\u0441\u0442\u0440\u043e\u0438\u043b\u0430 \u043f\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438, \u0438 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u043c\u0435\u0442\u0440\u0438\u043a\u043e\u0439 \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u044b\u0445 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0439, \u0447\u0442\u043e \u043d\u0430 GPU \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e. \u0427\u0442\u043e\u0431\u044b \u0440\u0435\u0433\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u043d\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u044b \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u043c\u0438, \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432:<\/p>\n<pre><code class=\"python\">faiss.omp_set_num_threads(N)<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <\/p>\n<h4>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0438 \u043b\u044e\u0431\u043e\u043f\u044b\u0442\u043d\u044b\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b<\/h4>\n<p>  \u0418\u0442\u0430\u043a, \u0432\u0435\u0440\u043d\u0435\u043c\u0441\u044f \u0436\u0435 \u043a \u0442\u043e\u043c\u0443, \u0441 \u0447\u0435\u0433\u043e \u0432\u0441\u0451 \u043d\u0430\u0447\u0438\u043d\u0430\u043b\u043e\u0441\u044c. \u0410 \u043d\u0430\u0447\u0438\u043d\u0430\u043b\u043e\u0441\u044c, \u043d\u0430\u043f\u043e\u043c\u043d\u0438\u043c, \u0441 \u043c\u043e\u0442\u0438\u0432\u0430\u0446\u0438\u0438 \u0440\u0435\u0448\u0438\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0443 \u043f\u043e\u0438\u0441\u043a\u0430 \u0431\u043e\u0442\u043e\u0432 \u0432 \u0441\u0435\u0442\u0438 Instagram, \u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0435\u0435 \u2013 \u0438\u0441\u043a\u0430\u0442\u044c \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u044b \u043f\u043e\u0441\u0442\u043e\u0432 \u0441 \u043b\u044e\u0434\u044c\u043c\u0438 \u0438\u043b\u0438 \u0430\u0432\u0430\u0442\u0430\u0440\u043e\u043a \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430\u0445 \u044e\u0437\u0435\u0440\u043e\u0432. \u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430 \u0441\u0442\u0430\u043b\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043d\u0430\u0448\u0435\u0439 \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u0438 \u043f\u043e\u0438\u0441\u043a\u0430 \u0431\u043e\u0442\u043e\u0432 \u0442\u044f\u043d\u0435\u0442 \u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e, \u043e \u0447\u0435\u043c \u043c\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u043c \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044f\u0445, \u0430 \u043f\u043e\u043a\u0430 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u043c\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438 \u043d\u0430\u0448\u0438\u0445 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432 \u0441 FAISS.<\/p>\n<p>  \u0412\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0438\u043b\u0438 \u043b\u0438\u0446\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u043e-\u0440\u0430\u0437\u043d\u043e\u043c\u0443, \u043c\u044b \u0432\u044b\u0431\u0440\u0430\u043b\u0438 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044e InsightFace (\u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0438 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 n-\u043c\u0435\u0440\u043d\u044b\u0445 \u0444\u0438\u0447\u0435\u0439 \u0438\u0437 \u043d\u0438\u0445 \u2013 \u044d\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0434\u043e\u043b\u0433\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f). \u0412 \u0445\u043e\u0434\u0435 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432 \u0441 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0439 \u043d\u0430\u043c\u0438 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439 \u0431\u044b\u043b\u0438 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u044b \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u0438 \u0437\u0430\u0431\u0430\u0432\u043d\u044b\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430.<\/p>\n<p>  \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0437\u0430\u0440\u0443\u0447\u0438\u0432\u0448\u0438\u0441\u044c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c \u043a\u043e\u043b\u043b\u0435\u0433 \u0438 \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0445, \u043c\u044b \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u043b\u0438 \u0432 \u043f\u043e\u0438\u0441\u043a \u0438\u0445 \u043b\u0438\u0446\u0430 \u0438 \u0431\u044b\u0441\u0442\u0440\u043e \u043d\u0430\u0448\u043b\u0438 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0438, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043e\u043d\u0438 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/co\/gk\/y2\/cogky27copcp5i57ychxi8fvs3y.jpeg\"><br \/>  <i>\u041d\u0430\u0448 \u043a\u043e\u043b\u043b\u0435\u0433\u0430 \u043f\u043e\u043f\u0430\u043b \u043d\u0430 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u044e \u043f\u043e\u0441\u0435\u0442\u0438\u0442\u0435\u043b\u044c\u043d\u0438\u0446\u044b Comic-Con, \u043e\u043a\u0430\u0437\u0430\u0432\u0448\u0438\u0441\u044c \u043d\u0430 \u0437\u0430\u0434\u043d\u0435\u043c \u0444\u043e\u043d\u0435 \u0432 \u0442\u043e\u043b\u043f\u0435. <a href=\"https:\/\/www.instagram.com\/p\/Bo-IPB4A5fI\/\">\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a<\/a><\/i><\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/-s\/8l\/rb\/-s8lrbqjwjkgonrbhf-e5bhl2py.jpeg\"><br \/>  <i>\u041f\u0438\u043a\u043d\u0438\u043a \u0432 \u043c\u043d\u043e\u0433\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0434\u0440\u0443\u0437\u0435\u0439, \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u044f \u0438\u0437 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0430 \u043f\u043e\u0434\u0440\u0443\u0433\u0438. <a href=\"https:\/\/www.instagram.com\/p\/Bz9_eXinJN7\/\">\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a<\/a><\/i><\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/p7\/fm\/sn\/p7fmsngx-la4gkrvtkgya9letr8.jpeg\"><br \/>  <i>\u041f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043b\u0438 \u043c\u0438\u043c\u043e. \u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444 \u0437\u0430\u043f\u0435\u0447\u0430\u0442\u043b\u0435\u043b \u0440\u0435\u0431\u044f\u0442 \u0434\u043b\u044f \u0441\u0432\u043e\u0435\u0433\u043e \u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0444\u0438\u043b\u044f. \u041e\u043d\u0438 \u043d\u0435 \u0437\u043d\u0430\u043b\u0438, \u043a\u0443\u0434\u0430 \u043f\u043e\u043f\u0430\u043b\u0430 \u0438\u0445 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u044f, \u0430 \u0441\u043f\u0443\u0441\u0442\u044f 5 \u043b\u0435\u0442 \u0438 \u0432\u043e\u0432\u0441\u0435 \u0437\u0430\u0431\u044b\u043b\u0438, \u043a\u0430\u043a \u0438\u0445 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0440\u043e\u0432\u0430\u043b\u0438. <a href=\"https:\/\/www.instagram.com\/p\/-R4Cn6H7OI\/\">\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a<\/a><\/i><\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/xi\/bd\/zj\/xibdzjzmezmoovrvl8cieudzlji.jpeg\"><br \/>  <i>\u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0438 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d, \u0438 \u0441\u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0442\u0430\u0439\u043d\u043e! <br \/>  \u0421\u0440\u0430\u0437\u0443 \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u043b\u0430\u0441\u044c \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0434\u0435\u0432\u0443\u0448\u043a\u0430 \u0441 \u0437\u0435\u0440\u043a\u0430\u043b\u044c\u043d\u044b\u043c \u0444\u043e\u0442\u043e\u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043e\u043c, \u0441\u0438\u0434\u0435\u0432\u0448\u0430\u044f \u0432 \u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u043f\u0440\u043e\u0442\u0438\u0432:) <a href=\"https:\/\/www.instagram.com\/p\/B5vppXJleHk\/\">\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a<\/a><\/i><\/p>\n<p>  \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043f\u0443\u0442\u0451\u043c \u043d\u0435\u0445\u0438\u0442\u0440\u044b\u0445 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 FAISS \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043d\u0430 \u043a\u043e\u043b\u0435\u043d\u043a\u0435 \u0430\u043d\u0430\u043b\u043e\u0433 \u0432\u0441\u0435\u043c \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0433\u043e FindFace. <\/p>\n<p>  \u0414\u0440\u0443\u0433\u0430\u044f \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c: \u0432 \u0438\u043d\u0434\u0435\u043a\u0441\u0435 FAISS \u0447\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u043b\u0438\u0446\u0430 \u043f\u043e\u0445\u043e\u0436\u0438 \u0434\u0440\u0443\u0433 \u043d\u0430 \u0434\u0440\u0443\u0433\u0430, \u0442\u0435\u043c \u0431\u043b\u0438\u0436\u0435 \u0434\u0440\u0443\u0433 \u043a \u0434\u0440\u0443\u0433\u0443 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0438\u043c \u0432\u0435\u043a\u0442\u043e\u0440\u044b \u0432 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435. \u042f \u0440\u0435\u0448\u0438\u043b \u043f\u043e\u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u0435\u0435 \u0438\u0437\u0443\u0447\u0438\u0442\u044c \u0447\u0443\u0442\u044c \u043c\u0435\u043d\u0435\u0435 \u0442\u043e\u0447\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e \u0441\u0432\u043e\u0435\u043c\u0443 \u043b\u0438\u0446\u0443 \u0438 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b \u0434\u043e \u0443\u0436\u0430\u0441\u0430 \u043f\u043e\u0445\u043e\u0436\u0438\u0445 \u043d\u0430 \u0441\u0435\u0431\u044f \u043a\u043b\u043e\u043d\u043e\u0432:)<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/op\/4i\/hx\/op4ihxflsiblquzbhjjr8mwdr80.jpeg\"><br \/>  <i>\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u043a\u043b\u043e\u043d\u043e\u0432 \u0430\u0432\u0442\u043e\u0440\u0430.<br \/>  \u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438 \u0444\u043e\u0442\u043e: <a href=\"https:\/\/www.instagram.com\/p\/B72_g0ZoSVv\/\">1<\/a>, <a href=\"https:\/\/www.instagram.com\/p\/BxXgMtKF4-x\/\">2<\/a>,\u00a0<a href=\"https:\/\/www.instagram.com\/p\/BWf141CnYtg\/\">3<\/a><\/i><\/p>\n<p>  \u0412\u043e\u043e\u0431\u0449\u0435 \u0433\u043e\u0432\u043e\u0440\u044f, FAISS \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0435 \u043f\u043e\u043b\u0435 \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u0430\u043a\u0438\u0445-\u043b\u0438\u0431\u043e \u0442\u0432\u043e\u0440\u0447\u0435\u0441\u043a\u0438\u0445 \u0438\u0434\u0435\u0439. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e \u0442\u043e\u043c\u0443 \u0436\u0435 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u043e\u0439 \u0431\u043b\u0438\u0437\u043e\u0441\u0442\u0438 \u043f\u043e\u0445\u043e\u0436\u0438\u0445 \u043b\u0438\u0446 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0443\u0442\u0438 \u043e\u0442 \u043e\u0434\u043d\u043e\u0433\u043e \u043b\u0438\u0446\u0430 \u043a \u0434\u0440\u0443\u0433\u043e\u043c\u0443. \u0418\u043b\u0438 \u0432 \u043a\u0440\u0430\u0439\u043d\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0438\u0437 FAISS \u0444\u0430\u0431\u0440\u0438\u043a\u0443 \u043f\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0443 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u043c\u0435\u043c\u043e\u0432:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/4c\/ti\/tc\/4ctitc94-swc4n22kuy7aptk648.png\"><br \/>  <i><a href=\"https:\/\/pikabu.ru\/story\/a_godyi_letyat_6520654\">Source<\/a><\/i><\/p>\n<p>  \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u0438\u043c \u0437\u0430 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0438 \u043d\u0430\u0434\u0435\u0435\u043c\u0441\u044f \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u0435\u043d \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044f\u043c \u0425\u0430\u0431\u0440\u0430!<\/p>\n<p>  <i>\u0421\u0442\u0430\u0442\u044c\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u043f\u0440\u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0435 \u043c\u043e\u0438\u0445 \u043a\u043e\u043b\u043b\u0435\u0433 \u0410\u0440\u0442\u0451\u043c\u0430 \u041a\u043e\u0440\u043e\u043b\u0451\u0432\u0430 (<a href=\"https:\/\/habr.com\/ru\/users\/korolevart\/\" class=\"user_link\">korolevart<\/a>), \u0422\u0438\u043c\u0443\u0440\u0430 \u041a\u0430\u0434\u044b\u0440\u043e\u0432\u0430 \u0438 \u0410\u0440\u0438\u043d\u044b \u0420\u0435\u0448\u0435\u0442\u043d\u0438\u043a\u043e\u0432\u043e\u0439. <\/p>\n<p>  R&amp;D Dentsu Aegis Network Russia.<\/i><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/company\/dentsuaegisnetworkrussia\/blog\/509204\/\"> https:\/\/habr.com\/ru\/company\/dentsuaegisnetworkrussia\/blog\/509204\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/company\/dentsuaegisnetworkrussia\/blog\/509204\/\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/8x\/ue\/vk\/8xuevk8kk8l-99kjyhxh3rktk6s.jpeg\"><\/p>\n<p>  \u041e\u0434\u043d\u0430\u0436\u0434\u044b \u0432 \u043f\u0440\u0435\u0434\u0434\u0432\u0435\u0440\u0438\u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u043e\u0439 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u0443\u044e<a href=\"https:\/\/dansessions.ru\/archive\"> \u0435\u0436\u0435\u0433\u043e\u0434\u043d\u043e \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442<\/a> \u0433\u0440\u0443\u043f\u043f\u0430 DAN, \u043c\u044b \u0440\u0430\u0437\u043c\u044b\u0448\u043b\u044f\u043b\u0438 \u043d\u0430\u0434 \u0442\u0435\u043c, \u0447\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u0443 \u043d\u0430\u0448\u0438\u0445 \u043f\u0430\u0440\u0442\u043d\u0435\u0440\u043e\u0432 \u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u043e\u0441\u0442\u0430\u043b\u0438\u0441\u044c \u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0435 \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u0435\u043d\u0438\u044f \u0438 \u0432\u043e\u0441\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u044f \u043e \u043c\u0435\u0440\u043e\u043f\u0440\u0438\u044f\u0442\u0438\u0438. \u041c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c \u0430\u0440\u0445\u0438\u0432 \u0438\u0437 \u0442\u044b\u0441\u044f\u0447 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0439 \u0441 \u044d\u0442\u043e\u0439 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438 \u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u0440\u043e\u0448\u043b\u044b\u0445 (\u0430 \u0432\u0441\u0435\u0433\u043e \u0438\u0445 \u043a \u0442\u043e\u043c\u0443 \u043c\u043e\u043c\u0435\u043d\u0442\u0443 \u0431\u044b\u043b\u043e 18): \u0447\u0435\u043b\u043e\u0432\u0435\u043a \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0430\u043c \u0441\u0432\u043e\u044e \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u044e, \u0430 \u043c\u044b \u0435\u043c\u0443 \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0443 \u0441\u0435\u043a\u0443\u043d\u0434 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u043e\u0434\u0431\u043e\u0440\u043a\u0443 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0439 \u0441 \u043d\u0438\u043c \u0437\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043b\u0435\u0442 \u0438\u0437 \u043d\u0430\u0448\u0438\u0445 \u0430\u0440\u0445\u0438\u0432\u043e\u0432.<\/p>\n<p>  \u0412\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434 \u043c\u044b \u043d\u0435 \u043f\u0440\u0438\u0434\u0443\u043c\u044b\u0432\u0430\u043b\u0438, \u0432\u0437\u044f\u043b\u0438 \u0432\u0441\u0435\u043c \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 dlib \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u044d\u043c\u0431\u0435\u0434\u0434\u0438\u043d\u0433\u0438 (\u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f) \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043b\u0438\u0446\u0430.\u00a0<\/p>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043b\u0438 Telegram-\u0431\u043e\u0442\u0430 \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430, \u0438 \u0432\u0441\u0451 \u0431\u044b\u043b\u043e \u043e\u0442\u043b\u0438\u0447\u043d\u043e. \u0421 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044f \u043b\u0438\u0446 \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u043d\u0430 \u0443\u0440\u0430, \u043d\u043e \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0430\u0441\u044c, \u0430 \u0440\u0430\u0441\u0441\u0442\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0441 \u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f\u043c\u0438 \u043d\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c. \u041e\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0442\u044b\u0441\u044f\u0447 \u043b\u0438\u0446 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0441\u043e\u0442\u043d\u044f\u043c \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432, \u043d\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0431\u0438\u0437\u043d\u0435\u0441-\u0437\u0430\u0434\u0430\u0447\u0438 \u0443 \u043d\u0430\u0441 \u043d\u0435 \u0431\u044b\u043b\u043e. \u0427\u0435\u0440\u0435\u0437 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0443 \u043d\u0430\u0448\u0438\u0445 \u043a\u043e\u043b\u043b\u0435\u0433 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0437\u0430\u0434\u0430\u0447\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0442\u0430\u043a\u0438\u043c\u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u043c\u0438 \u043e\u0431\u044a\u0435\u043c\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-306325","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/306325","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=306325"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/306325\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=306325"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=306325"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=306325"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}