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.
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.
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)
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.
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/
$ 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!
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
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
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 ...
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
>>>
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 /? ?? ??
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