[Qdrant] GPU ๊ฐ์
Qdrant๋ GPU๋ฅผ ํตํด ๊ฒ์ ์๋๋ฅผ ๊ฐ์ํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
๋ฒกํฐ-๋ฒกํฐ๊ฐ ๋น๊ต๊ฐ ํต์ฌ ์ฐ์ฐ์ด๋ค๋ณด๋, GPU๋ฅผ ํ์ฉํ ๋ณ๋ ฌ์ฒ๋ฆฌ์์ ์ด์ ์ ๋ง์ด ์ป์ ์ ์๋ ๊ฒ์ด๋ค.
์ ํ์ฌํญ
1.13๋ฒ์ ๋ถํฐ ์ฌ์ฉ ๊ฐ๋ฅํ๋ฉฐ, ํ ์์ ์์๋ ๋ค์๊ณผ ๊ฐ์ ์ ํ์ฌํญ์ด ์๋ค.
- Qdrant Cloud์์ ์ฌ์ฉ ๋ถ๊ฐ๋ฅ (ํฅํ ์ง์ ์์ )
- Linux amd64 ์ํคํ ์ณ์์๋ง ์ฌ์ฉ ๊ฐ๋ฅ. (arm64 ๋ฏธ์ง์)
- GPU๋ nvidia์ amd๋ง ์ฌ์ฉ ๊ฐ๋ฅ.
์ด์ธ์๋ ์ธ๊ทธ๋จผํธ ํฌ๊ธฐ ์ ํ ๋ฑ์ด ์กด์ฌํ๋ค.
์ฐธ์กฐ https://qdrant.tech/documentation/guides/running-with-gpu/#known-limitations
์ฌ์๊ณผ ์ฑ๋ฅ
๊ตณ์ด ๊ณ ์ฑ๋ฅ GPU๋ฅผ ์ธ ํ์๋ ์๋ค.
์ฌ๊ธฐ์ ์ฐ๋ ๋ณ๋ ฌ์ฐ์ฐ์ด๋ผ๊ณ ํด๋ด์ผ ๊ทธ๋ ๊ฒ ํค๋นํ๊ฒ ์๋๋ผ์, ์ ๋นํ ์ํธ๋ฆฌ๊ธ์ GPU๋ฅผ ์จ๋ ์ถฉ๋ถํ๋ค.
๊ทธ๋ฆฌ๊ณ ๋ฒกํฐ์ ๊ธธ์ด๊ฐ ๊ธธ์๋ก ์ฑ๋ฅ ํฅ์ ํจ๊ณผ๋ฅผ ๋ ์ ๋๋ ์ ์๋ค. ๋ฒกํฐ/๋ฒกํฐ ๋น๊ต๋ฅผ ๋ณ๋ ฌํํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
๊ณต๊ฐํ ๋ฒค์น๋งํฌ์ ๋ฐ๋ฅด๋ฉด 2-3๋ฐฐ ์ด์๋ ๋นจ๋ผ์ง ์ ์๋ค๊ณ ํ๋ค.
๊ทผ๋ฐ ์ด๊ฑด ๋ฒกํฐ์ ํฌ๊ธฐ์ ๋ฐ๋ผ์ ๋ง์ด ๋ฌ๋ผ์ง ๊ฒ ๊ฐ๋ค. ๋ฒกํฐ์ ํฌ๊ธฐ๊ฐ ํฌ์ง ์๋ค๋ฉด ๊ทธ๋ฅ CPU๋ง ์ฐ๋ ๊ฒ๊ณผ ์ฑ๋ฅ ์ฐจ์ด๊ฐ ๋ณ๋ก ์์ ์ ์๋ค.
GPU๋ฅผ ํ์ฑํํด๋ณด๊ธฐ
๋น์ฐํ GPU์ ๊ทธ ๋๋ผ์ด๋ฒ ์ธํ
์ ๋์ด์์ด์ผ ํ๋ค.
๋ด ๊ฒฝ์ฐ์๋ ์๋น๋์ 2080์ด๋ค.

์ผ๋จ ์ด ๊ธฐ๋ฅ์ ๊ธฐ์กด ์๋ฒ๋ก๋ ์ฌ์ฉํ ์๋ ์๋ค.
์์ค์์ ๋น๋ํ๋ค๋ฉด ๋ณ๋ ์ต์
์ ์ค์ผ ํ๊ณ , docker๋ gpu ๋ฒ์ ์ด๋ฏธ์ง๊ฐ ๋ฐ๋ก ์๋ค.
์ด gpu ๋ฒ์ ์ ๋ฐ์์ ์คํํ๋ฉด ๋๋ค.
๊ทธ๋ฅ docker๋ก ์คํํ๋ ค๋ฉด ์ด๋ ๊ฒ ํ๊ณ
docker run \
--rm \
--gpus=all \
-p 16333:6333 \
-p 16334:6334 \
-e QDRANT__GPU__INDEXING=1 \
qdrant/qdrant:v1.15-gpu-nvidia
docker compose ์์๋ ๋ค์๊ณผ ๊ฐ๋ค.
qdrant-gpu:
image: qdrant/qdrant:v1.15-gpu-nvidia
container_name: qdrant-gpu
ports:
- "16333:6333"
- "16334:6334"
volumes:
- qdrant_gpu:/qdrant/storage
environment:
- QDRANT__GPU__INDEXING=1
ulimits:
nofile: 65535
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
limits:
cpus: "4"
memory: 16192M
๋น์ฐํ ์ฌ์ฉํ GPU์ ๋ํ ๋๋ผ์ด๋ฒ ์ค์ , ๋๋ผ์ด๋ฒ-์ปจํ ์ด๋ ์ค์น๋ ์ฌ์ ์ ๋์ด์์ด์ผ ํ๋ค.
๊ทธ๋ ๊ฒ ์คํํด์
์์ ๊ฐ์ด GPU ๊ด๋ จ ์คํ ๋ก๊ทธ๊ฐ ๋จ๋ฉด ์ ์ฉ์ ์ ๋ ๊ฒ์ด๋ค.
์ฌ์ฉ ํ๋ก์ธ์ค ๋ชฉ๋ก์๋ ์ถ๊ฐ๋๋ค.
์ฑ๋ฅ ๋ฒค์น๋งํฌ
๋์ถฉ 256๊ณผ 512 ๋ฒกํฐ๋ฅผ 1000๋ง๊ฐ์ฉ ๋ฃ๊ณ ๋๋ฆฌ๋ฉด์ ๋น๊ตํด๋ดค๋ค.
๋ฒค์น๋งํฌ์ ์ฌ์ฉํ ์ฝ๋๋ ๊นํ์ ์๋ค.
https://github.com/myyrakle/benchmarks/tree/master/qdrant_benchmark
์ด๊ฑด GPU ์ฌ์ฉ ์ INSERT ์๋


GPU ์ฌ์ฉ ์ READ ์ฒ๋ฆฌ๋ - ๋์ ์ฟผ๋ฆฌ 20๊ฐ
256์ ์ด๋น 235๊ฐ ์ ๋์ ์ฟผ๋ฆฌ๋ฅผ ์ฒ๋ฆฌํ๊ณ , ๋ ์ดํด์๋ 100ms ์ ๋ ๋๋ค.
512๋ ์ด๋น 92๊ฐ ์ ๋๋ฐ์ ์ฒ๋ฆฌํ์ง ๋ชปํ๊ณ , ๋ ์ดํด์๋ 200ms. ์คํจ๋ ์ข ๋ฐ์ํ๋ค. ๋ฒกํฐ ํฌ๊ธฐ๊ฐ ์ปค์ง์๋ก ์ฑ๋ฅ ์์ ์ฑ์ด ๋ง์ด ๋จ์ด์ง๋ ๊ฒ ๊ฐ๋ค.
GPU ์ฌ์ฉ ์ READ ์ฒ๋ฆฌ๋ - ๋์ ์ฟผ๋ฆฌ 100๊ฐ
๋์ ์ฟผ๋ฆฌ๋ฅผ ๋๋ฆฐ๋ค๊ณ ๋์ ๋๊ฒ ์ฒ๋ฆฌ๋์ด ๋์ง ์์๋ค. 512์ ๊ฒฝ์ฐ์๋ ์คํจ์จ์ด ์๊ฒผ๋ค.
๊ทธ๋ผ GPU ๋ชจ๋๋ก ์ฐ๋ฅด๋ฉด ์ด๋จ๊น? ๊ฒฝ์ฒ๋์งํ ์ฑ๋ฅ ํฅ์์ด ์์๊น?
๋์ ์ฟผ๋ฆฌ 20๊ฐ ์ ๋๋ง ๋ฐ์ด๋ฃ์ด๋ดค๋ค.
์ผ๋จ 256์ ๊ฒฝ์ฐ์๋ ์ฑ๋ฅ ํฅ์์ด ์๊ธด ํ๋ฐ ๋ฏธ๋ฏธํ๋ค.
TPS๊ฐ 235 => 284๋๊น ๋์ถฉ 20% ์ ๋๋ ํฅ์์ด ๋ ๊ฒ์ด๋ค.

๊ทผ๋ฐ 512๋ ์ข ์ด์ํ๋ค.
์ฒ๋ฆฌ๋ ์์ฒญ ๋๋ฆฌ๊ณ , ๋์ ์ฒ๋ฆฌ๋๋ ๋ธ๋ฝ์ด ๊ฑธ๋ฆฐ๊ฒ์ฒ๋ผ ๋ค ๋งํ๊ณ ๋ป์๋ค.
๋ญ๊ฐ ๋ฒ๊ทธ๊ฐ ์ข ์๋ ๊ฒ ๊ฐ์๋ค.
๋๊ฐ์ ์กฐ๊ฑด์ผ๋ก 256๊ณผ 512๋ฅผ ์ ๋ถ ์ด๊ธฐํํ๋๋ฐ๋ ํ์ชฝ์๋ง ์ด๋ฐ ์ฆ์์ด ๋์๋ค.
์์ง ์์ ํ๋์๋ค๊ณ ๋ณด๊ธฐ๋ ์ด๋ฅธ๋ฏ...
์ฐธ์กฐ
https://qdrant.tech/documentation/guides/running-with-gpu/
https://qdrant.tech/blog/qdrant-1.13.x/
https://whatap.io/ko/blog/qdrant-vector-db-batch-search-optimization