Initial commit
This commit is contained in:
189
packages/leann-backend-hnsw/third_party/faiss/.github/actions/build_cmake/action.yml
vendored
Normal file
189
packages/leann-backend-hnsw/third_party/faiss/.github/actions/build_cmake/action.yml
vendored
Normal file
@@ -0,0 +1,189 @@
|
||||
name: Build cmake
|
||||
inputs:
|
||||
opt_level:
|
||||
description: 'Compile options / optimization level.'
|
||||
required: false
|
||||
default: generic
|
||||
gpu:
|
||||
description: 'Enable GPU support.'
|
||||
required: false
|
||||
default: OFF
|
||||
cuvs:
|
||||
description: 'Enable cuVS support.'
|
||||
required: false
|
||||
default: OFF
|
||||
rocm:
|
||||
description: 'Enable ROCm support.'
|
||||
required: false
|
||||
default: OFF
|
||||
runs:
|
||||
using: composite
|
||||
steps:
|
||||
- name: Setup miniconda
|
||||
uses: conda-incubator/setup-miniconda@v3
|
||||
with:
|
||||
python-version: '3.11'
|
||||
miniforge-version: latest # ensures conda-forge channel is used.
|
||||
channels: conda-forge
|
||||
conda-remove-defaults: 'true'
|
||||
# Set to aarch64 if we're on arm64 because there's no miniforge ARM64 package, just aarch64.
|
||||
# They are the same thing, just named differently.
|
||||
architecture: ${{ runner.arch == 'ARM64' && 'aarch64' || runner.arch }}
|
||||
- name: Configure build environment
|
||||
shell: bash
|
||||
run: |
|
||||
# initialize Conda
|
||||
conda config --set solver libmamba
|
||||
# Ensure starting packages are from conda-forge.
|
||||
conda list --show-channel-urls
|
||||
conda update -y -q conda
|
||||
echo "$CONDA/bin" >> $GITHUB_PATH
|
||||
|
||||
conda install -y -q python=3.11 cmake=3.26 make=4.2 swig=4.0 "numpy<2" scipy=1.14 pytest=7.4 gflags=2.2
|
||||
|
||||
# install base packages for ARM64
|
||||
if [ "${{ runner.arch }}" = "ARM64" ]; then
|
||||
conda install -y -q -c conda-forge openblas=0.3.29 gxx_linux-aarch64=14.2 sysroot_linux-aarch64=2.17
|
||||
fi
|
||||
|
||||
# install base packages for X86_64
|
||||
if [ "${{ runner.arch }}" = "X64" ]; then
|
||||
# TODO: merge this with ARM64
|
||||
conda install -y -q -c conda-forge gxx_linux-64=14.2 sysroot_linux-64=2.17
|
||||
conda install -y -q mkl=2022.2.1 mkl-devel=2022.2.1
|
||||
fi
|
||||
|
||||
# no CUDA needed for ROCm so skip this
|
||||
if [ "${{ inputs.rocm }}" = "ON" ]; then
|
||||
:
|
||||
# regular CUDA for GPU builds
|
||||
elif [ "${{ inputs.gpu }}" = "ON" ] && [ "${{ inputs.cuvs }}" = "OFF" ]; then
|
||||
conda install -y -q cuda-toolkit=12.4 -c "nvidia/label/cuda-12.4.0"
|
||||
# and CUDA from cuVS channel for cuVS builds
|
||||
elif [ "${{ inputs.cuvs }}" = "ON" ]; then
|
||||
conda install -y -q libcuvs=24.12 'cuda-version>=12.0,<=12.5' cuda-toolkit=12.4.1 gxx_linux-64=12.4 -c rapidsai -c conda-forge
|
||||
fi
|
||||
|
||||
# install test packages
|
||||
if [ "${{ inputs.rocm }}" = "ON" ]; then
|
||||
: # skip torch install via conda, we need to install via pip to get
|
||||
# ROCm-enabled version until it's supported in conda by PyTorch
|
||||
elif [ "${{ inputs.gpu }}" = "ON" ]; then
|
||||
conda install -y -q "pytorch<2.5" pytorch-cuda=12.4 -c pytorch -c "nvidia/label/cuda-12.4.0"
|
||||
else
|
||||
conda install -y -q "pytorch<2.5" -c pytorch
|
||||
fi
|
||||
- name: ROCm - Install dependencies
|
||||
if: inputs.rocm == 'ON'
|
||||
shell: bash
|
||||
run: |
|
||||
# Update repos and install kmod, wget, gpg
|
||||
sudo apt-get -qq update >/dev/null
|
||||
sudo apt-get -qq install -y kmod wget gpg >/dev/null
|
||||
|
||||
# Get UBUNTU version name
|
||||
UBUNTU_VERSION_NAME=`cat /etc/os-release | grep UBUNTU_CODENAME | awk -F= '{print $2}'`
|
||||
|
||||
# Set ROCm version
|
||||
ROCM_VERSION="6.2"
|
||||
|
||||
# Download, prepare, and install the package signing key
|
||||
mkdir --parents --mode=0755 /etc/apt/keyrings
|
||||
wget https://repo.radeon.com/rocm/rocm.gpg.key -O - | gpg --dearmor | sudo tee /etc/apt/keyrings/rocm.gpg > /dev/null
|
||||
|
||||
# Add rocm repository
|
||||
wget -qO - http://repo.radeon.com/rocm/rocm.gpg.key | sudo apt-key add -
|
||||
rocm_baseurl="http://repo.radeon.com/rocm/apt/${ROCM_VERSION}"
|
||||
echo "deb [arch=amd64] ${rocm_baseurl} ${UBUNTU_VERSION_NAME} main" | sudo tee /etc/apt/sources.list.d/rocm.list
|
||||
sudo apt-get -qq update --allow-insecure-repositories >/dev/null
|
||||
sudo apt-get -qq install -y --allow-unauthenticated \
|
||||
"rocm-dev${ROCM_VERSION}" "rocm-utils${ROCM_VERSION}" \
|
||||
"rocm-libs${ROCM_VERSION}" >/dev/null
|
||||
|
||||
# Fake presence of MI200-class accelerators
|
||||
echo "gfx90a" | sudo tee /opt/rocm/bin/target.lst
|
||||
|
||||
# Cleanup
|
||||
sudo apt-get -qq autoclean >/dev/null
|
||||
sudo apt-get -qq clean >/dev/null
|
||||
sudo rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
|
||||
- name: Symblink system dependencies
|
||||
if: inputs.rocm == 'ON'
|
||||
shell: bash
|
||||
run: |
|
||||
# symblink system libraries for HIP compiler
|
||||
sudo ln -s /lib/x86_64-linux-gnu/libc.so.6 /lib64/libc.so.6
|
||||
sudo ln -s /lib/x86_64-linux-gnu/libc_nonshared.a /usr/lib64/libc_nonshared.a
|
||||
sudo ln -s /usr/lib/x86_64-linux-gnu/libpthread.so.0 /lib64/libpthread.so.0
|
||||
sudo ln -s $HOME/miniconda3/x86_64-conda-linux-gnu/sysroot/usr/lib64/libpthread_nonshared.a /usr/lib64/libpthread_nonshared.a
|
||||
- name: Build all targets
|
||||
shell: bash
|
||||
run: |
|
||||
eval "$(conda shell.bash hook)"
|
||||
conda activate
|
||||
cmake -B build \
|
||||
-DBUILD_TESTING=ON \
|
||||
-DBUILD_SHARED_LIBS=ON \
|
||||
-DFAISS_ENABLE_GPU=${{ inputs.gpu }} \
|
||||
-DFAISS_ENABLE_CUVS=${{ inputs.cuvs }} \
|
||||
-DFAISS_ENABLE_ROCM=${{ inputs.rocm }} \
|
||||
-DFAISS_OPT_LEVEL=${{ inputs.opt_level }} \
|
||||
-DFAISS_ENABLE_C_API=ON \
|
||||
-DPYTHON_EXECUTABLE=$CONDA/bin/python \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DBLA_VENDOR=${{ runner.arch == 'X64' && 'Intel10_64_dyn' || '' }} \
|
||||
-DCMAKE_CUDA_FLAGS=${{ runner.arch == 'X64' && '"-gencode arch=compute_75,code=sm_75"' || '' }} \
|
||||
.
|
||||
make -k -C build -j$(nproc)
|
||||
- name: C++ tests
|
||||
shell: bash
|
||||
run: |
|
||||
export GTEST_OUTPUT="xml:$(realpath .)/test-results/googletest/"
|
||||
make -C build test
|
||||
- name: C++ perf benchmarks
|
||||
shell: bash
|
||||
if: inputs.rocm == 'OFF'
|
||||
run: |
|
||||
find ./build/perf_tests/ -executable -type f -name "bench*" -exec '{}' -v \;
|
||||
- name: Install Python extension
|
||||
shell: bash
|
||||
working-directory: build/faiss/python
|
||||
run: |
|
||||
$CONDA/bin/python setup.py install
|
||||
- name: ROCm - install ROCm-enabled torch via pip
|
||||
if: inputs.rocm == 'ON'
|
||||
shell: bash
|
||||
run: |
|
||||
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/rocm6.1
|
||||
- name: Python tests (CPU only)
|
||||
if: inputs.gpu == 'OFF'
|
||||
shell: bash
|
||||
run: |
|
||||
pytest --junitxml=test-results/pytest/results.xml tests/test_*.py
|
||||
pytest --junitxml=test-results/pytest/results-torch.xml tests/torch_*.py
|
||||
- name: Python tests (CPU + GPU)
|
||||
if: inputs.gpu == 'ON'
|
||||
shell: bash
|
||||
run: |
|
||||
pytest --junitxml=test-results/pytest/results.xml tests/test_*.py
|
||||
pytest --junitxml=test-results/pytest/results-torch.xml tests/torch_*.py
|
||||
cp tests/common_faiss_tests.py faiss/gpu/test
|
||||
pytest --junitxml=test-results/pytest/results-gpu.xml faiss/gpu/test/test_*.py
|
||||
pytest --junitxml=test-results/pytest/results-gpu-torch.xml faiss/gpu/test/torch_*.py
|
||||
- name: Test avx2 loading
|
||||
if: inputs.opt_level == 'avx2'
|
||||
shell: bash
|
||||
run: |
|
||||
FAISS_DISABLE_CPU_FEATURES=AVX2 LD_DEBUG=libs $CONDA/bin/python -c "import faiss" 2>&1 | grep faiss.so
|
||||
LD_DEBUG=libs $CONDA/bin/python -c "import faiss" 2>&1 | grep faiss_avx2.so
|
||||
- name: Upload test results
|
||||
if: always()
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: test-results-arch=${{ runner.arch }}-opt=${{ inputs.opt_level }}-gpu=${{ inputs.gpu }}-cuvs=${{ inputs.cuvs }}-rocm=${{ inputs.rocm }}
|
||||
path: test-results
|
||||
- name: Check installed packages channel
|
||||
shell: bash
|
||||
run: |
|
||||
# Shows that all installed packages are from conda-forge.
|
||||
conda list --show-channel-urls
|
||||
107
packages/leann-backend-hnsw/third_party/faiss/.github/actions/build_conda/action.yml
vendored
Normal file
107
packages/leann-backend-hnsw/third_party/faiss/.github/actions/build_conda/action.yml
vendored
Normal file
@@ -0,0 +1,107 @@
|
||||
name: Conda build
|
||||
description: Builds Faiss inside a Conda environment and uploads to repository when label is provided.
|
||||
inputs:
|
||||
label:
|
||||
description: "The label to be used for uploads to Conda."
|
||||
default: ""
|
||||
required: false
|
||||
cuda:
|
||||
description: "CUDA toolkit version to use."
|
||||
default: ""
|
||||
required: false
|
||||
cuvs:
|
||||
description: "Enable cuVS support."
|
||||
default: ""
|
||||
required: false
|
||||
runs:
|
||||
using: composite
|
||||
steps:
|
||||
- name: Choose shell
|
||||
shell: bash
|
||||
id: choose_shell
|
||||
run: |
|
||||
# Use pwsh on Windows; bash everywhere else
|
||||
if [ "${{ runner.os }}" != "Windows" ]; then
|
||||
echo "shell=bash" >> "$GITHUB_OUTPUT"
|
||||
else
|
||||
echo "shell=pwsh" >> "$GITHUB_OUTPUT"
|
||||
fi
|
||||
- name: Setup miniconda
|
||||
uses: conda-incubator/setup-miniconda@v3
|
||||
with:
|
||||
python-version: '3.11'
|
||||
miniforge-version: latest # ensures conda-forge channel is used.
|
||||
channels: conda-forge
|
||||
conda-remove-defaults: 'true'
|
||||
# Set to runner.arch=aarch64 if we're on arm64 because
|
||||
# there's no miniforge ARM64 package, just aarch64.
|
||||
# They are the same thing, just named differently.
|
||||
# However there is an ARM64 for macOS, so exclude that.
|
||||
architecture: ${{ (runner.arch == 'ARM64' && runner.os != 'macOS') && 'aarch64' || runner.arch }}
|
||||
- name: Install conda build tools
|
||||
shell: ${{ steps.choose_shell.outputs.shell }}
|
||||
run: |
|
||||
# Ensure starting packages are from conda-forge.
|
||||
conda list --show-channel-urls
|
||||
conda install -y -q "conda!=24.11.0"
|
||||
conda install -y -q "conda-build!=24.11.0" "liblief=0.14.1"
|
||||
conda list --show-channel-urls
|
||||
- name: Enable anaconda uploads
|
||||
if: inputs.label != ''
|
||||
shell: ${{ steps.choose_shell.outputs.shell }}
|
||||
env:
|
||||
PACKAGE_TYPE: ${{ inputs.label }}
|
||||
run: |
|
||||
conda install -y -q anaconda-client
|
||||
conda config --set anaconda_upload yes
|
||||
- name: Conda build (CPU)
|
||||
if: inputs.label == '' && inputs.cuda == ''
|
||||
shell: ${{ steps.choose_shell.outputs.shell }}
|
||||
working-directory: conda
|
||||
run: |
|
||||
conda build faiss --python 3.11 -c pytorch
|
||||
- name: Conda build (CPU) w/ anaconda upload
|
||||
if: inputs.label != '' && inputs.cuda == ''
|
||||
shell: ${{ steps.choose_shell.outputs.shell }}
|
||||
working-directory: conda
|
||||
env:
|
||||
PACKAGE_TYPE: ${{ inputs.label }}
|
||||
run: |
|
||||
conda build faiss --user pytorch --label ${{ inputs.label }} -c pytorch
|
||||
- name: Conda build (GPU)
|
||||
if: inputs.label == '' && inputs.cuda != '' && inputs.cuvs == ''
|
||||
shell: ${{ steps.choose_shell.outputs.shell }}
|
||||
working-directory: conda
|
||||
run: |
|
||||
conda build faiss-gpu --variants '{ "cudatoolkit": "${{ inputs.cuda }}" }' \
|
||||
-c pytorch -c nvidia/label/cuda-${{ inputs.cuda }} -c nvidia
|
||||
- name: Conda build (GPU) w/ anaconda upload
|
||||
if: inputs.label != '' && inputs.cuda != '' && inputs.cuvs == ''
|
||||
shell: ${{ steps.choose_shell.outputs.shell }}
|
||||
working-directory: conda
|
||||
env:
|
||||
PACKAGE_TYPE: ${{ inputs.label }}
|
||||
run: |
|
||||
conda build faiss-gpu --variants '{ "cudatoolkit": "${{ inputs.cuda }}" }' \
|
||||
--user pytorch --label ${{ inputs.label }} -c pytorch -c nvidia/label/cuda-${{ inputs.cuda }} -c nvidia
|
||||
- name: Conda build (GPU w/ cuVS)
|
||||
if: inputs.label == '' && inputs.cuda != '' && inputs.cuvs != ''
|
||||
shell: ${{ steps.choose_shell.outputs.shell }}
|
||||
working-directory: conda
|
||||
run: |
|
||||
conda build faiss-gpu-cuvs --variants '{ "cudatoolkit": "${{ inputs.cuda }}" }' \
|
||||
-c pytorch -c rapidsai -c rapidsai-nightly -c conda-forge -c nvidia
|
||||
- name: Conda build (GPU w/ cuVS) w/ anaconda upload
|
||||
if: inputs.label != '' && inputs.cuda != '' && inputs.cuvs != ''
|
||||
shell: ${{ steps.choose_shell.outputs.shell }}
|
||||
working-directory: conda
|
||||
env:
|
||||
PACKAGE_TYPE: ${{ inputs.label }}
|
||||
run: |
|
||||
conda build faiss-gpu-cuvs --variants '{ "cudatoolkit": "${{ inputs.cuda }}" }' \
|
||||
--user pytorch --label ${{ inputs.label }} -c pytorch -c rapidsai -c rapidsai-nightly -c conda-forge -c nvidia
|
||||
- name: Check installed packages channel
|
||||
shell: ${{ steps.choose_shell.outputs.shell }}
|
||||
run: |
|
||||
# Shows that all installed packages are from conda-forge.
|
||||
conda list --show-channel-urls
|
||||
Reference in New Issue
Block a user