рдмрд╣реБрдЖрдпрд╛рдореА рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП faiss рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

рдирдорд╕реНрдХрд╛рд░! рдореЗрд░рд╛ рдирд╛рдо рд╡реНрд▓рд╛рджрд┐рдореАрд░ рдУрд▓реЛрдЦрдЯрдиреЛрд╡ рд╣реИ, рдореИрдВ рдПрд╡рд┐рдЯреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдореЙрдбрд░реЗрд╢рди рдЯреАрдо рдореЗрдВ рдПрдХ рд╡рд░рд┐рд╖реНрда рдбреЗрд╡рд▓рдкрд░ рд╣реВрдВред рд╢рд░рдж рдЛрддреБ 2019 рдореЗрдВ, рд╣рдордиреЗ рд╕рдорд╛рди рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рдорд╛рди рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЦреЛрдЬ рд╕реЗрд╡рд╛ рд╢реБрд░реВ рдХреАред рдпрд╣ рд╕рдордЭрдиреЗ рдореЗрдВ рд╣рдорд╛рд░реА рдорджрдж рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдлрд╝реЛрдЯреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд┐рдЬреНрдЮрд╛рдкрди рдореЗрдВ рджреЗрдЦреА рдЬрд╛ рдЪреБрдХреА рд╣реИрдВ, рднрд▓реЗ рд╣реА рд╡реЗ рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рд╡рд┐рдХреГрдд рд╣реЛрдВ: рдзреБрдВрдзрд▓реА, рдлрд╕рд▓реА рдФрд░ рдЬреИрд╕реАред рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рд╕рдВрднрд╛рд╡рд┐рдд рдирдХрд▓реА рдкреНрд░рдХрд╛рд╢рдиреЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВред


рдореИрдВ рдЙрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдордиреЗ рдЗрд╕ рд╕реЗрд╡рд╛ рдХреЛ рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рдерд╛, рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдгред



рд▓реЗрдЦ рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рдкрд╛рдардХ рдХрдо рд╕реЗ рдХрдо рдмрд╣реБрдЖрдпрд╛рдореА рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рдЦреЛрдЬ рдХреЗ рд╡рд┐рд╖рдп рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ, рдЗрд╕рдХреЗ рдмрд╛рдж рд╕реЗ рд╣рдо рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рддрдХрдиреАрдХреА рд╡рд┐рд╡рд░рдгреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗред рдпрджрд┐ рдпрд╣ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдореИрдВ рдкрд╣рд▓реЗ Mail.ru рдмреНрд▓реЙрдЧ рдкрд░ рдореВрд▓ рд▓реЗрдЦ рдкрдврд╝рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ ред


рд╣рдорд╛рд░реА рдкреНрд░рдгрд╛рд▓реА рдХреА рд╕рдорд╕реНрдпрд╛ рдФрд░ рд╡рд┐рд╡рд░рдг рдХрд╛ рд╡рд┐рд╡рд░рдг


рдЬрдм рдореБрдЭреЗ рдЪрд┐рддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЦреЛрдЬ рдкреНрд░рдгрд╛рд▓реА рдмрдирд╛рдиреЗ рдХрд╛ рдХрд╛рдо рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рдерд╛, рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛:


  1. рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╢реБрд░реБрдЖрдд рдореЗрдВ рд▓рдЧрднрдЧ 150 рдорд┐рд▓рд┐рдпрди рд╡реИрдХреНрдЯрд░ рдереЗ, рдЕрдм рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 240 рдорд┐рд▓рд┐рдпрди рд╕реЗ рдЕрдзрд┐рдХ рд╣реИрдВред
  2. рд╕рдордп рд╕реАрдорд╛ рдЦреЛрдЬреЗрдВред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, 95 рдкреНрд░рддрд┐рд╢рдд рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ 300 рдПрдордПрд╕ред
  3. рдореЗрдореЛрд░реА рдХреА рд╕реАрдорд╛ред рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд╕рд░реНрд╡рд░ рдкрд░ рд░рдЦрд╛ рдЬрд╛рдП, рдЕрдЧрд▓реЗ 2 рд╡рд░реНрд╖реЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╛рд╕ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдПред
  4. .  Kubernetes, ,    , .
  5. , .

  :


  ,   тАФ ,   . , .


 ,      .   , , .


. тАФ eventually consistent .   , .


 Python3.7, PostgreSQL, тАФ MinIO. faiss.



http- avio, aiohttp.


asyncio   fork,  ,   тАФ ,   ,   multiprocessing.Pipe.



Product Quantization. 64 .


рдЫрд╡рд┐
Product Quantization   .  


  Inverted File HNSW.



, faiss : IVF262144_HNSW32,PQ64. , Inverted File 262144 , HNSW 32 , 64 Product Quantization.


      faiss .


, :


  1.     10 000 ,    1 .
  2.  16 OpenMP-.   ,    16  ,   #pragma omp parallel for.


  тАФ    . , ,   - .


    ,   IVF262144_HNSW32,PQ64 80  :


  • 64  , ;
  • 8  id ( int64);
  • 8      .

:


int(faiss.get_mem_usage_kb() * 1024 / index.ntotal)

  ,    2Gb. nlist ├Ч pq.M ├Ч pq.ksub ├Ч float.   262144 ├Ч 64 ├Ч 256 ├Ч 4 тЙИ 17G, pq.M тАФ Product Quantization,  pq.ksub тАФ 256, .


    .   : ,  2. ,      Inverted File, . тАФ   .


bytes per vector :



, , ,   -   ,    ,     .  , .



  OpenMP faiss, ,   ,   . , ThreadPoolExecutor (faiss GIL).



, faiss   , . -, (add, remove)  - . -, OpenMP-   ,  , .


    RWLock,   , .  Python . OpenMP-   faiss.omp_set_num_threads.


    , query-per-second.    5.


,   . , , issue.


    faiss.



 ,    5     10 000 (   ).    , : 800   .


 20  150 rps 20    latency  500  throughput.   : ,  .



  ,   . , ,  .   MinIO.


тАФ fork   Copy-on-Write     .    .    тАФ   80   .


,      .


GPU


 GPU  ,   .


: SIFT1M, 128.
: 100   10 000   nprobe.



:


  1.   GPU. GPU   , ,   ,   ,   .
  2. Flat-  GPU,   (   128).
  3.   PQ64- GPU   .


Faiss тАФ   open source   , .


,  ,  faiss .  issues, .


  ,   vearch JD.com.  open source,   .


All Articles