Updating faiss with new versions (#33983)
Co-authored-by: Massimiliano Culpo <massimiliano.culpo@gmail.com>
This commit is contained in:
parent
688dae7058
commit
1db914f567
2 changed files with 117 additions and 12 deletions
49
var/spack/repos/builtin/packages/faiss/fixes-in-v1.7.2.patch
Normal file
49
var/spack/repos/builtin/packages/faiss/fixes-in-v1.7.2.patch
Normal file
|
@ -0,0 +1,49 @@
|
|||
diff --git a/faiss/python/CMakeLists.txt b/faiss/python/CMakeLists.txt
|
||||
index e403065..be3736f 100644
|
||||
--- a/faiss/python/CMakeLists.txt
|
||||
+++ b/faiss/python/CMakeLists.txt
|
||||
@@ -68,7 +68,7 @@ swig_add_library(swigfaiss
|
||||
LANGUAGE python
|
||||
SOURCES swigfaiss.swig
|
||||
)
|
||||
-set_property(TARGET swigfaiss PROPERTY SWIG_COMPILE_OPTIONS -doxygen)
|
||||
+set_property(TARGET swigfaiss PROPERTY SWIG_COMPILE_OPTIONS)
|
||||
|
||||
set_property(SOURCE swigfaiss_avx2.swig
|
||||
PROPERTY SWIG_MODULE_NAME swigfaiss_avx2)
|
||||
@@ -77,7 +77,7 @@ swig_add_library(swigfaiss_avx2
|
||||
LANGUAGE python
|
||||
SOURCES swigfaiss_avx2.swig
|
||||
)
|
||||
-set_property(TARGET swigfaiss_avx2 PROPERTY SWIG_COMPILE_OPTIONS -doxygen)
|
||||
+set_property(TARGET swigfaiss_avx2 PROPERTY SWIG_COMPILE_OPTIONS)
|
||||
if(NOT FAISS_OPT_LEVEL STREQUAL "avx2")
|
||||
set_target_properties(swigfaiss_avx2 PROPERTIES EXCLUDE_FROM_ALL TRUE)
|
||||
endif()
|
||||
diff --git a/faiss/python/setup.py b/faiss/python/setup.py
|
||||
index 9ef3a03..5ff9585 100644
|
||||
--- a/faiss/python/setup.py
|
||||
+++ b/faiss/python/setup.py
|
||||
@@ -21,9 +21,11 @@ prefix = "Release/" * (platform.system() == 'Windows')
|
||||
|
||||
swigfaiss_generic_lib = f"{prefix}_swigfaiss{ext}"
|
||||
swigfaiss_avx2_lib = f"{prefix}_swigfaiss_avx2{ext}"
|
||||
+callbacks_lib = f"{prefix}libfaiss_python_callbacks{ext}"
|
||||
|
||||
found_swigfaiss_generic = os.path.exists(swigfaiss_generic_lib)
|
||||
found_swigfaiss_avx2 = os.path.exists(swigfaiss_avx2_lib)
|
||||
+found_callbacks = os.path.exists(callbacks_lib)
|
||||
|
||||
assert (found_swigfaiss_generic or found_swigfaiss_avx2), \
|
||||
f"Could not find {swigfaiss_generic_lib} or " \
|
||||
@@ -39,6 +41,10 @@ if found_swigfaiss_avx2:
|
||||
shutil.copyfile("swigfaiss_avx2.py", "faiss/swigfaiss_avx2.py")
|
||||
shutil.copyfile(swigfaiss_avx2_lib, f"faiss/_swigfaiss_avx2{ext}")
|
||||
|
||||
+if found_callbacks:
|
||||
+ print(f"Copying {callbacks_lib}")
|
||||
+ shutil.copyfile(callbacks_lib, f"faiss/{callbacks_lib}")
|
||||
+
|
||||
long_description="""
|
||||
Faiss is a library for efficient similarity search and clustering of dense
|
||||
vectors. It contains algorithms that search in sets of vectors of any size,
|
|
@ -8,7 +8,7 @@
|
|||
from spack.package import *
|
||||
|
||||
|
||||
class Faiss(AutotoolsPackage, CudaPackage):
|
||||
class Faiss(AutotoolsPackage, CMakePackage, CudaPackage):
|
||||
"""Faiss is a library for efficient similarity search and clustering of
|
||||
dense vectors.
|
||||
|
||||
|
@ -22,26 +22,34 @@ class Faiss(AutotoolsPackage, CudaPackage):
|
|||
homepage = "https://github.com/facebookresearch/faiss"
|
||||
url = "https://github.com/facebookresearch/faiss/archive/v1.6.3.tar.gz"
|
||||
|
||||
maintainers = ["bhatiaharsh"]
|
||||
maintainers = ["bhatiaharsh", "rblake-llnl"]
|
||||
|
||||
build_system(
|
||||
conditional("cmake", when="@1.7:"), conditional("autotools", when="@:1.6"), default="cmake"
|
||||
)
|
||||
|
||||
version("1.7.2", sha256="d49b4afd6a7a5b64f260a236ee9b2efb760edb08c33d5ea5610c2f078a5995ec")
|
||||
version("1.6.3", sha256="e1a41c159f0b896975fbb133e0240a233af5c9286c09a28fde6aefff5336e542")
|
||||
version("1.5.3", sha256="b24d347b0285d01c2ed663ccc7596cd0ea95071f3dd5ebb573ccfc28f15f043b")
|
||||
|
||||
variant("python", default=False, description="Build Python bindings")
|
||||
variant("shared", default=False, description="Build shared library")
|
||||
variant("tests", default=False, description="Build Tests")
|
||||
|
||||
conflicts("+tests", when="~python", msg="+tests must be accompanied by +python")
|
||||
|
||||
depends_on("cmake@3.17:", when="build_system=cmake", type="build")
|
||||
|
||||
extends("python", when="+python")
|
||||
depends_on("python@3.7:", when="+python", type=("build", "run"))
|
||||
depends_on("py-pip", when="+python", type="build")
|
||||
depends_on("py-wheel", when="+python", type="build")
|
||||
depends_on("py-setuptools", when="+python", type="build")
|
||||
depends_on("py-numpy", when="+python", type=("build", "run"))
|
||||
depends_on("py-scipy", when="+tests", type=("build", "run"))
|
||||
depends_on("swig@4", when="+python", type="build")
|
||||
depends_on("py-scipy", when="+python+tests", type=("build", "run"))
|
||||
|
||||
depends_on("blas")
|
||||
depends_on("python", type="build")
|
||||
depends_on("py-setuptools", when="+python", type="build")
|
||||
depends_on("swig", when="+python", type="build")
|
||||
|
||||
# patch for v1.5.3
|
||||
# faiss assumes that the "source directory" will always
|
||||
|
@ -56,12 +64,64 @@ class Faiss(AutotoolsPackage, CudaPackage):
|
|||
# also, some include paths in gpu/tests/Makefile are missing
|
||||
patch("fixes-in-v1.6.3.patch", when="@1.6.3")
|
||||
|
||||
# patch for v1.7.2
|
||||
# a shared object is missing in the python/setup.py
|
||||
# https://github.com/facebookresearch/faiss/issues/2063
|
||||
# https://github.com/facebookresearch/faiss/pull/2062
|
||||
# a header is missing in a test file
|
||||
# https://github.com/facebookresearch/faiss/issues/2300
|
||||
patch("fixes-in-v1.7.2.patch", when="@1.7.2")
|
||||
|
||||
def setup_run_environment(self, env):
|
||||
if "+python" in self.spec:
|
||||
env.prepend_path("PYTHONPATH", python_platlib)
|
||||
|
||||
|
||||
class CMakeBuilder(spack.build_systems.cmake.CMakeBuilder):
|
||||
def cmake_args(self):
|
||||
spec = self.spec
|
||||
args = [
|
||||
self.define_from_variant("BUILD_SHARED_LIBS", "shared"),
|
||||
self.define_from_variant("FAISS_ENABLE_PYTHON", "python"),
|
||||
self.define_from_variant("FAISS_ENABLE_GPU", "cuda"),
|
||||
self.define_from_variant("BUILD_TESTING", "tests"),
|
||||
self.define("FAISS_OPT_LEVEL", "generic"),
|
||||
]
|
||||
if "+python" in spec:
|
||||
pyexe = spec["python"].command.path
|
||||
args.append(self.define("Python_EXECUTABLE", pyexe))
|
||||
|
||||
if "+cuda" in spec:
|
||||
key = "CMAKE_CUDA_ARCHITECTURES"
|
||||
args.append(self.define_from_variant(key, "cuda_arch"))
|
||||
# args.append(self.define_from_variant(
|
||||
# 'CMAKE_CUDA_STANDARD', 'cudastd'))
|
||||
return args
|
||||
|
||||
def install(self, pkg, spec, prefix):
|
||||
super().install(pkg, spec, prefix)
|
||||
if "+python" in spec:
|
||||
|
||||
class CustomPythonPipBuilder(spack.build_systems.python.PythonPipBuilder):
|
||||
def __init__(self, pkg, build_dirname):
|
||||
spack.build_systems.python.PythonPipBuilder.__init__(self, pkg)
|
||||
self.build_dirname = build_dirname
|
||||
|
||||
@property
|
||||
def build_directory(self):
|
||||
return os.path.join(self.pkg.stage.path, self.build_dirname, "faiss", "python")
|
||||
|
||||
customPip = CustomPythonPipBuilder(pkg, self.build_dirname)
|
||||
customPip.install(pkg, spec, prefix)
|
||||
|
||||
|
||||
class AutotoolsBuilder(spack.build_systems.autotools.AutotoolsBuilder):
|
||||
def configure_args(self):
|
||||
args = []
|
||||
args.extend(self.with_or_without("cuda", activation_value="prefix"))
|
||||
return args
|
||||
|
||||
def build(self, spec, prefix):
|
||||
def build(self, pkg, spec, prefix):
|
||||
|
||||
make()
|
||||
|
||||
|
@ -81,7 +141,7 @@ def build(self, spec, prefix):
|
|||
make("build") # target added by the patch
|
||||
make("demo_ivfpq_indexing_gpu")
|
||||
|
||||
def install(self, spec, prefix):
|
||||
def install(self, pkg, spec, prefix):
|
||||
|
||||
make("install")
|
||||
|
||||
|
@ -123,7 +183,3 @@ def _fix_makefile(self):
|
|||
# spack injects its own optimization flags
|
||||
makefile = FileFilter("makefile.inc")
|
||||
makefile.filter("CPUFLAGS = -mavx2 -mf16c", "#CPUFLAGS = -mavx2 -mf16c")
|
||||
|
||||
def setup_run_environment(self, env):
|
||||
if "+python" in self.spec:
|
||||
env.prepend_path("PYTHONPATH", python_platlib)
|
||||
|
|
Loading…
Reference in a new issue