[PYTHON] Installez Faiss sur CentOS 7

Aperçu:

Une note sur la façon d'installer faiss dans un environnement CentOS7 sans Anaconda installé. Je ne sais pas si Anaconda peut être installé sur CentOS7 sans aucun problème, mais ... je n'ai pas pu l'installer sans problème avec pip, j'ai donc enregistré la procédure d'installation.

Contexte:

Je ne peux pas l'installer dans l'environnement CentOS7 pour une raison quelconque! D'un point de vue global, il semble que certaines personnes aient rencontré des problèmes similaires, mais il n'y a aucune information qui trouve clairement une solution telle que "Ça y est!" ... Passé plus d'une demi-journée. Oups. J'ai confirmé qu'il ne pouvait pas non plus être installé dans plusieurs environnements CentOS7, j'ai donc pensé qu'il s'agissait d'un problème spécifique à CentOS7 et je voulais établir une procédure.


Au début ça allait bien ...

Faiss est une bibliothèque publiée par Facebook qui implémente un algorithme haute vitesse pour la recherche de similarité (et le clustering). J'essaye de construire un mécanisme de recherche sémantique à partir des valeurs vectorisées par SentenceBERT ... Initialement, c'était une mise en œuvre qui calculait et triait simplement la similitude de Cos entre le vecteur à rechercher et le vecteur à rechercher pour obtenir le vecteur avec la plus grande similitude. Cependant, lorsque le nombre de cibles de recherche de cette recherche sémantique est devenu important, j'ai senti que le coût de calcul serait dangereux.

Après quelques recherches, j'ai trouvé une bibliothèque appelée "Faiss" qui permet d'indexer le vecteur (?) Et de le calculer à faible coût (en peu de temps). Je l'ai tout de suite essayé sur Google Colab!

!pip3 install faiss-cpu
import numpy as np
import faiss

d = max([len(v) for v in sentence_vectors])
index = faiss.IndexFlatL2(d)
index.add(np.array(sentence_vectors).astype('float32'))
closest_n = 1
D, I = index.search(np.array(query_embeddings).astype('float32'), closest_n)

Victoire facile! !!

C'est toujours un test avec un petit nombre de vecteurs à rechercher (100 ou moins), donc je ne ressens aucun changement dramatique ... En fait, le temps de recherche a été raccourci et la recherche de similitude n'était pas différente du résultat de l'extraction par similarité Cos, j'ai donc commencé à travailler à l'incorporer dans le mécanisme réel.


Eh bien ... installons-le sur le serveur CentOS 7 du sujet principal! !! Bien sûr, c ’est une victoire facile, non? !!

Installé avec pip comme Colab. Faiss semble être principalement installé avec Anaconda, mais je n'utilise pas Anaconda, donc c'est un pip. Dans le cas de pip, il semble que le nom du module faiss-cpu / faiss-gpu soit spécifié ... Lors du basculement entre cpu et gpu, il semble désinstaller et réinstaller avec l'un ou l'autre.

https://pypi.org/project/faiss-cpu/ https://pypi.org/project/faiss-gpu/

Pourtant! J'obtiens une erreur! Pourquoi? !!

$ sudo pip3 install faiss-cpu
Collecting faiss-cpu
  Downloading https://files.pythonhosted.org/packages/8b/3e/d64ff22504a70fb15457de8fb2f5fd84e35448fdcd9958880ae8d0438a82/faiss-cpu-1.6.4.post2.tar.gz
Building wheels for collected packages: faiss-cpu
  Running setup.py bdist_wheel for faiss-cpu ... error
  Complete output from command /usr/bin/python3 -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-i9sic395/faiss-cpu/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" bdist_wheel -d /tmp/tmp2c2gltlxpip-wheel- --python-tag cp36:
  running bdist_wheel
  running build
  running build_py
  running build_ext
  building 'faiss._swigfaiss' extension
  swigging faiss/faiss/python/swigfaiss.i to faiss/faiss/python/swigfaiss_wrap.cpp
  swig -python -c++ -Doverride= -I/usr/local/include -Ifaiss -DSWIGWORDSIZE64 -o faiss/faiss/python/swigfaiss_wrap.cpp faiss/faiss/python/swigfaiss.i
  unable to execute 'swig': No such file or directory
  error: command 'swig' failed with exit status 1
  
  ----------------------------------------
  Failed building wheel for faiss-cpu
  Running setup.py clean for faiss-cpu
Failed to build faiss-cpu
Installing collected packages: faiss-cpu
  Running setup.py install for faiss-cpu ... error
    Complete output from command /usr/bin/python3 -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-i9sic395/faiss-cpu/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-q0l4dufw-record/install-record.txt --single-version-externally-managed --compile:
    running install
    running build
    running build_py
    running build_ext
    building 'faiss._swigfaiss' extension
    swigging faiss/faiss/python/swigfaiss.i to faiss/faiss/python/swigfaiss_wrap.cpp
    swig -python -c++ -Doverride= -I/usr/local/include -Ifaiss -DSWIGWORDSIZE64 -o faiss/faiss/python/swigfaiss_wrap.cpp faiss/faiss/python/swigfaiss.i
    unable to execute 'swig': No such file or directory
    error: command 'swig' failed with exit status 1
    
    ----------------------------------------
Command "/usr/bin/python3 -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-i9sic395/faiss-cpu/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-q0l4dufw-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-build-i9sic395/faiss-cpu/

Au fait, je l'ai essayé sur mon Mac local. Peut-être que Colab seul était la voie à suivre? !! Non, l'installation est terminée avec faiss-cpu sur mon Mac local sans aucun problème ... Cela sent mauvais!

Je me suis perdu dans le labyrinthe ...

J'ai cherché sur le Web, mais je n'ai trouvé aucune mesure décisive ... Parmi eux, j'ai trouvé un substitut appelé faiss-centos, qui est une combinaison des mots-clés de mes inquiétudes actuelles. C'est cool! !!

https://pypi.org/project/faiss-centos/

Je suis enthousiaste ici! Regardez! !!

$ sudo pip3 install faiss-centos
WARNING: Running pip install with root privileges is generally not a good idea. Try `pip3 install --user` instead.
Collecting faiss-centos
  Could not find a version that satisfies the requirement faiss-centos (from versions: )
No matching distribution found for faiss-centos

cancer…

J'ai erré sur le Web de différentes manières, mais je me demande si la solution était la suivante ... Je ne suis pas sûr. https://github.com/facebookresearch/faiss/issues/866

Après cela, j'ai fait diverses choses!

Parmi eux, faiss-centos est un œuf, pas une roue, alors essayez de laisser tomber la version pip à 8 ... Essayez de décompresser le fichier œuf ... Essayez d'installer openblas-serial ou gmp-devel ...

Cependant, je ne trouve pas _swigfaiss ou quelque chose comme ça, sans me soucier de mon angoisse! Je dirai un problème difficile. Je suis fatigué ...

Faites une pause ... ou faites autre chose pour distraire, boire du thé, tomber malade ...


que ~! ??

Eh bien, je me suis reposé, je me suis débarrassé de ma fatigue cérébrale, et il fait déjà nuit! Connectez-vous à nouveau au serveur CentOS7 ...

$ python3
Python 3.6.8 (default, Apr  2 2020, 13:34:55) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import faiss
>>> 

Il n'y a pas d'erreurs! !!

Avant la pause, c'était une erreur ... Est-ce que sept Kobitos sont finalement venus vers moi? ??

Alors déplacez-vous vers le dossier souhaité et réessayez ... Revenez à l'itinéraire et réessayez ... Cool! Quelle est la différence? ??

D'une manière ou d'une autre, j'ai téléchargé depuis "https://pypi.org/project/faiss-centos/", j'ai décompressé faiss_centos-1.5.2-py3.6.egg, créé le dossier faiss / directement sous celui-ci et l'ai importé. Il est. Un rayon de lumière ...

Si oui ... Que faire si je copie ce faiss / dossier dans site-packages /? ?? ??


Conclusion

Après cela, j'ai identifié les bibliothèques qui doivent être installées en plus, et identifié la procédure d'installation de faiss sur CentOS7.

Une fois que je l'ai su, c'était juste ça ...

$ wget https://files.pythonhosted.org/packages/f6/8b/ab69a201ea1b8be759ba16f172f92d1fb935a8f4a94f02fe52c7d8ec579f/faiss_centos-1.5.2-py3.6.egg
$ unzip faiss_centos-1.5.2-py3.6.egg
$ sudo cp -r ./faiss /usr/local/lib/python3.6/site-packages
(Ou ...$ sudo cp -r ./faiss /usr/lib/python3.6/site-colis en fonction de l'environnement ...)

$ sudo yum install openblas-serial
$ sudo yum install gmp gmp-devel

$ python3
Python 3.6.8 (default, Apr 2 2020, 13:34:55) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import faiss
>>>

Si quelqu'un a un problème similaire, je vous serais reconnaissant de bien vouloir y faire référence.

Recommended Posts

Installez Faiss sur CentOS 7
Installez numba sur CentOS 7.2
Installez Python3.4 sur CentOS 6.6
Installez mecab-python sur CentOS
Installez Python 2.7.3 sur CentOS 5.4
Installez awscli sur centos7
Installer Chainer sur CentOS 6.7
Installez la série ImageMagick-6.2.x sur CentOS7.7
Installez Python 3.8 sur CentOS 7 (SCL)
Installez Chrome sur la série CentOS 7
Installez Python 3.8 sur CentOS 8 (AppStream)
Étapes pour installer MySQL 8.0 sur CentOS 8.1
raspberry pi 4 centos7 installer sur docker
Étapes pour installer VirtualBox sur CentOS
Installez java (Oracle JDK14) sur CentOS7
Comment installer PyPy sur CentOS
Comment installer TensorFlow sur CentOS 7
Installez pip sur CentOS7. Aussi iPython.
Installez VirtualBox sur CentOS 7 sur VirtualBox (mac + vagrant)
Installer Python sur CentOS à l'aide de Pyenv
Comment installer Maven sur CentOS
Note d'étude 9_Install Jenkins sur CentOS7
Installez Python sur CentOS en utilisant pyenv
CentOS8 --Installer --Django
CentOS8 --Installer --Python3
Activez la commande sar sur CentOS (installez sysstat)
Comment installer Apache (httpd) sur CentOS7
Comment installer Eclipse GlassFish 5.1.0 sur CentOS7
Comment installer Apache (httpd) sur CentOS8
Installez PostgreSQL à partir du code source sur CentOS
Installez pyenv et rbenv à l'échelle du système sur CentOS
Installer mecab sur Marvericks
Installez TensorFlow sur Ubuntu
Installer python sur WSL
Installez pyenv sur Mac
Installer pip sur Mavericks
Installez Python sur Pidora.
Installez mongodb sur termux
Installez Scrapy sur python3
Installer docker sur Fedora31
Installez Ansible sur Mac
[Ansible] Installer dnf sur Centos7 avec l'interpréteur Python3
Installez Python sur Mac
Installer Python 3 dans un environnement Mac
Installez Plone (4.3.6) sur MacOSX (10.10.3)
Installez PySide2 sur Ubuntu
Installer gensim sur Marvericks
Installez JModelica sur Ubuntu
Installez Anaconda sur Windows 10
Installez numpy sur Marvericks
Installez python sur Windows
Installer enebular-agent sur le livre Chrome
Installez pycuda sur Windows10
Installez aws-cli sur MacPorts
Installez pygraphviz sur Windows 10
Installez Docker sur AWS
Installez Python 3.3 sur Ubuntu 12.04
[Échec] Installer le clone de débordement de pile Askbot sur CentOS 6.4
Installez Chainer 1.5.0 sur Windows
Installez Python 3.4 sur Mac