Google의 ScaNN(Scalable Nearest Neighbors)을 Mac에 설치하는 방법
GloVe 임베딩에 대한 ANN 벤치마크(dim=100) ( source )
최근에 시도해 볼 시간을 찾았지만 Mac에 설치하는 것이 얼마나 까다로워서 좌절했습니다. 성공적으로 설치하기 위해 취한 단계는 다음과 같습니다.
단계별 연습
먼저 필요한 컴파일러를 설치합니다.
brew install bazel
brew install llvm
brew install gcc
그런 다음
pyenv
를 통해 Python 버전을 설정합니다.brew update && brew upgrade pyenv
pyenv --version
> pyenv 1.2.21
pyenv install 3.8.6. # Doesn't work with 3.9 yet
pyenv local 3.8.6
python --version
> Python 3.8.6
이제 가상 환경을 만듭니다.
python -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
ScaNN
는 거대한 google-research repo의 일부입니다. 거기에는 200개 이상의 디렉토리가 있으며 모두 필요하지는 않습니다. 따라서 다음을 수행하여 ScaNN 디렉토리만 체크아웃합니다.git clone --depth 1 --filter=blob:none --no-checkout https://github.com/google-research/google-research.git
git checkout master -- scann
cd scann
다음으로 Python 종속성을 설치해야 합니다.
pip install wheel
python configure.py
# There might be complaints about "tensorflow 2.3.1 requires numpy<1.19.0,>=1.16.0, but you'll have numpy 1.19.2 which is incompatible." but it's fine
몇 가지 문제로 인해 직접 설치가 불가능하며 여기서 수동으로 수정하겠습니다.
먼저
.bazelrc
및 .bazel-query.sh
를 업데이트합니다. (업데이트.bazel-query.sh
가 반드시 필요한 것은 아니지만 완전성을 위해 업데이트를 한다고 생각했습니다.) 다음을 교체해야 합니다.TF_SHARED_LIBRARY_NAME="ensorflow_framework.2"
와 함께:
TF_SHARED_LIBRARY_NAME="libtensorflow_framework.2.dylib"
그런 다음 다음을 교체하여 C++ 가져오기를 업데이트해야 합니다(이 중 4개가 있음).
#include <hash_set>
와 함께:
#include <ext/hash_set>
이제
bazel
를 통해 빌드할 수 있습니다. 지정된 대로 clang-8
를 사용하는 대신 최신 버전의 clang
를 사용했는데 제대로 작동했습니다.CC=/usr/local/opt/llvm/bin/clang CXX=/usr/local/opt/gcc/bin/gcc bazel build -c opt --copt=-mavx2 --copt=-mfma --cxxopt="-D_GLIBCXX_USE_CXX11_ABI=0" --cxxopt="-std=c++17" --copt=-fsized-deallocation --copt=-w :build_pip_pkg
성공적으로 빌드되면 이와 유사한 출력이 표시됩니다.
INFO: Elapsed time: 316.366s, Critical Path: 206.32s
INFO: 1066 processes: 319 internal, 747 local.
INFO: Build completed successfully, 1066 total actions
그런 다음 Python 휠을 빌드합니다.
./bazel-bin/build_pip_pkg
이제 설치할 수 있습니다.
pip install scann-1.1.1-<replace with your package suffix>
Python에서 설치가 성공했는지 테스트할 수 있습니다.
import scann
scann.scann_ops_pybind.builder()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: builder() missing 3 required positional arguments: 'db', 'num_neighbors', and 'distance_measure'
설치에 성공하면 오류가 표시됩니다. 다음은 sample demo on using it 입니다.
Reference
이 문제에 관하여(Google의 ScaNN(Scalable Nearest Neighbors)을 Mac에 설치하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/eugeneyan/how-to-install-google-s-scalable-nearest-neighbors-scann-on-mac-64l텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)