본문 바로가기

좋아하는 것_매직IT/96.IT 핫이슈

Bolt - 10배 빠른 매트릭스 & 벡터 연산 알고리듬

반응형

Bolt - 10배 빠른 매트릭스 & 벡터 연산 알고리듬를 소개합니다

웹페이지에서는 아래와 같이 설명하고 있고요..
Bolt is an algorithm for compressing vectors of real-valued data and running mathematical operations directly on the compressed representations.

한마디로 말해서..
Bolt 는 10배 빠른 매트릭스 & 벡터 연산 알고리즘이라고 머릿속에 넣어두시면 될것 같네요..


추가적으로, Bolt 의 특징을 간단하게 정리해보면 아래와 같고요..

- 데이터의 벡터를 압축하고, 압축된 상태에서 직접 수학연산을 실행  
- 대규모의 밀도가 높은 벡터 컬렉션을 가지고 있고, 손실 압축을 견딜수 있다면  
→ 10~200x 공간과 계산시간을 줄여줌  
- C++로 구현, Python Wrapper 제공  
- AVX2 명령어 지원 필수

설치는 아래와 같이 진행하시면 됩니다. 
크게 파이썬과 C++ 로 구분되고요..

Python
  $ brew install swig  # for wrapping C++; use apt-get, yum, etc, if not OS X
  $ pip install numpy  # bolt installation needs numpy already present
  $ git clone https://github.com/dblalock/bolt.git
  $ cd bolt && python setup.py install
  $ pytest tests/  # optionally, run the tests
If you run into any problems, please don't hesitate to mention it in the Python build problems issue.

C++
Install Bazel, Google's open-source build system. Then

  $ git clone https://github.com/dblalock/bolt.git
  $ cd bolt/cpp && bazel run :main
The bazel run command will build the project and run the tests and benchmarks.

If you want to integrate Bolt with another C++ project, include cpp/src/include/public.hpp and add the remaining files under cpp/src to your builds. 

참고로, 기본적인 사용은 아래와 같이 하시면 됩니다.

Basic usage

X, queries = some N x D array, some iterable of length D arrays

# these are approximately equal (though the latter are shifted and scaled)
enc = bolt.Encoder(reduction='dot').fit(X)
[np.dot(X, q) for q in queries]
[enc.transform(q) for q in queries]

# same for these
enc = bolt.Encoder(reduction='l2').fit(X)
[np.sum((X - q) * (X - q), axis=1) for q in queries]
[enc.transform(q) for q in queries]

# but enc.transform() is 10x faster or more


좀더 자세한 사항은 아래  github 페이지 참고하시면 좋을것 같네요...

오늘의 블로그는 여기까지고요..

감사합니다

728x90
300x250