[AWS] S3: Vector bucket
Vector bucket์ AWS์์ ์ผ๋ง์ ์ ๊ณต๊ฐํ S3 ๊ธฐ๋ฐ์ ๋ฒกํฐ๊ฒ์ ์๋น์ค๋ค.
ํ์ฌ ์์ ์์๋ ์์ง ํ๋ฆฌ๋ทฐ์ด๋ฉฐ, ์ผ๋ถ ๋ฆฌ์ ์์๋ง ์ง์๋๊ณ ์๋ค.
๋ฒ์ง๋์, ์คํ์ด์ค, ์ค๋ฆฌ๊ฑด, ํ๋ํฌํ๋ฃจํธ, ์๋๋ ์ ๋์ด๋ฉฐ, ์์ธ์ ์๋ค.

Opensearch๋ก์ ๋ด๋ณด๋ด๊ธฐ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉฐ, Bedrock ์๋ฒ ๋ฉ ๊ธฐ๋ฅ๊ณผ์ ํตํฉ์ด ์ง์๋๋ค.
์ ํ์ฌํญ
์์ง ํ๋ฆฌ๋ทฐ ๊ธฐ๋ฅ์ด๋ผ ๊ทธ๋ฐ์ง ์ ํ์ด ๋ง๋ค.
์ธ๋ฑ์ค๋น ์ต๋ 5000๋ง๊ฐ์ ๋ฒกํฐ๋ง ์ ์ฅํ ์ ์๋ค.
๋ฒกํฐ ์ ์ฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ ํด๋ฆฌ๋์ ์ฝ์ฌ์ธ๋ง ์ง์ํ๋ค. (Dot Product ์์)
์ฐ๊ธฐ ์ ํ ์๋ ์ด๋น 5๊ฑด์ด๊ณ , ๋ญ ์ ํ์ฌํญ์ด ๊ณผํ๊ฒ ๋ง์ ์ํ๋ค. ์์ง ํ๋ก๋์ ์ ์ฐ๊ธฐ๋ ํ๋ค์ด๋ณด์ธ๋ค.
๊ธฐํ ์ ํ์ฌํญ ๋ชฉ๋ก์ ๋ณ๋ ๋ฌธ์๋ฅผ ์ฐธ์กฐํ๋ค.
https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-vectors-limitations.html
๋น์ฉ
๋น์ฐํ ๊ณต์ง๋ ์๋๋ค.
https://aws.amazon.com/s3/pricing/?nc1=h_ls
์ ์ฅ๋น์ฉ์ GB๋น 0.06๋ฌ๋ฌ ์ ๋๋ค.
๊ธฐ๋ณธ S3 ํด๋์ค๊ฐ GB๋น 0.023์ธ ๊ฒ์ ์๊ฐํ๋ฉด ๋๋ต 2.5๋ฐฐ์ฏค ๋น์ผ ๊ฒ์ด๋ค.
๊ทธ๋๋ EBS ๋์คํฌ ๋ณผ๋ฅจ์ด gp3 ๊ธฐ์ค GB๋น 0.8๋ฌ๋ฌ ์ ๋๋๊น... ํ , ๋ฏธ๋ฌํ ์ค๊ฐ์ ์ด๊ธด ํ๋ค.
์์ฒญ๋ณ๋ก๋ ์๊ธ์ ๋ถ๊ณผํ๋ค.

์ฌ์ฉํด๋ณด๊ธฐ
S3 ์ฝ์์ ์ ์ฉ ํญ์ด ๋ณ๋๋ก ์กด์ฌํ๋ค.

๋ฒํท์ ๋จผ์ ๋์ถฉ ๋ง๋ค๊ณ


์ฌ์ฉ์ฌ๋ก๋ณ๋ก ์ธ๋ฑ์ค๋ฅผ ๋ฐ๋ก ๋ง๋ค๋ฉด ๋๋ค.
๋ฒกํฐ ๊ธธ์ด์ ์ ์ฌ๋ ๋ฐฉ์๋ง ์ ํ๋ฉด ๋๋ค. ๊ฐ๋จํ ํธ์ด๋ค.
์ด๋ ๊ฒ ์ธ๋ฑ์ค๊ฐ ์์ฑ๋๋ฉด ์ค๋น๋ ์ ๋ ๊ฒ์ด๋ค.
์ด๊ฑด ๋ค๋ฅธ S3 ๊ธฐ๋ฅ๊ณผ๋ ๋ค๋ฅด๊ฒ ์ฝ์๋ก ์ ์ดํ ์ ์๋๊ฒ ๋ณ๋ก ์๋ค. SDK๋ฅผ ์จ์ผํ๋ค.
AWS CLI๋ฅผ ํตํด์ ์ฐ๋ฌ๋ณด์.
๋ค์ ๋ช ๋ น์ ๋์ถฉ ๋ฒกํฐ ์ ์ฅ๋๊ฑฐ ๋ฆฌ์คํธ์ ํ๋ ๋ช ๋ น์ด๋ค.
aws s3vectors list-vectors \
--vector-bucket-name "vector-test" \
--index-name "test-index" \
--segment-count 2 \
--segment-index 0 \
--return-data \
--return-metadata
๋น์ฐํ ์๋ฌด๊ฒ๋ ์๋์จ๋ค.
์ฝ์ ์ ํ๋ฒ ํด๋ณด์. put-vectors๋ฅผ ์ฐ๋ฉด ๋๋ค.
aws s3vectors put-vectors --vector-bucket-name 'vector-test' --index-name 'test-index' --vectors \
'[{
"key": "Something",
"data": {"float32": [69, 22, 38, 4, 72, 61, 34, 3, 65, 36, 87, 86, 1, 42, 30, 22, 25, 7, 89, 16]},
"metadata": {"category": "TOPS"}
}]'
aws s3vectors put-vectors --vector-bucket-name 'vector-test' --index-name 'test-index' --vectors \
'[{
"key": "Rust",
"data": {"float32": [77, 55, 14, 20, 2, 50, 41, 83, 35, 48, 38, 4, 68, 87, 86, 99, 61, 50, 26, 21]},
"metadata": {"category": "Lang"}
}]'
<br>
aws s3vectors put-vectors --vector-bucket-name 'vector-test' --index-name 'test-index' --vectors \
'[{
"key": "Special",
"data": {"float32": [52, 40, 49, 25, 19, 6, 82, 72, 65, 54, 49, 65, 25, 59, 9, 94, 13, 66, 51, 37]},
"metadata": {"category": "TOPS"}
}]'
์ด๋ ๊ฒ ๋ฃ์ ์ ์๋ค.
key๋ ๊ฐ๋ณ ํ์ ๊ตฌ๋ถํ๋ ๊ณ ์ ์ ๊ฐ์ด๊ณ , ๋ฉํ๋ฐ์ดํฐ๋ ๋ง ๊ทธ๋๋ก ๋ฉํ๋ฐ์ดํฐ๋ค.
๋ฉํ๋ฐ์ดํฐ๋ ํํฐ๋ง ์กฐ๊ฑด์ผ๋ก ์ฌ์ฉํ ์๋ ์๋ค.
๋ฃ๊ณ ๋์ ๋ณด๋ฉด
์ด์ ๋ณด์ด๊ธฐ ์์ํ ๊ฒ์ด๋ค.
์ฌ๊ธฐ์ ํน์ ๋ฒกํฐ๊ฐ๊ณผ ์ ์ฌํ 2๊ฐ์ ๋ฒกํฐ๋ง ๊ฐ์ ธ์ค๊ณ ์ถ๋ค๋ฉด, ์ด๋ ๊ฒ ์ฟผ๋ฆฌ๋ฅผ ๋ ๋ฆด ์ ์๋ค.
aws s3vectors query-vectors --vector-bucket-name 'vector-test' --index-name 'test-index' \
--query-vector '{"float32": [77, 55, 14, 20, 2, 50, 41, 83, 35, 48, 38, 4, 68, 87, 86, 99, 61, 50, 26, 21]}' --top-k 2
๊ทธ๋ฌ๋ฉด ์ด๋ ๊ฒ ํค๊ฐ์ด ๋์ด์จ๋ค.
๋ง์ฝ ๋ฉํ๋ฐ์ดํฐ๋ ๊ฑฐ๋ฆฌ ๊ฐ๊น์ง ๊ฐ์ ธ์ค๊ณ ์ถ๋ค๋ฉด, ํ๋๊ทธ๋ฅผ ์ค์ ํจ๊ป ๊ฐ์ ธ์ฌ ์ ์๋ค.
aws s3vectors query-vectors --vector-bucket-name 'vector-test' --index-name 'test-index' \
--query-vector '{"float32": [77, 55, 14, 20, 2, 50, 41, 83, 35, 48, 38, 4, 68, 87, 86, 99, 61, 50, 26, 21]}' --top-k 2 \
--return-distance --return-metadata

๋ ์ฌ๊ธฐ์ ์ ์ฉํ ๊ธฐ๋ฅ ์ค ํ๋๋, ๋ฉํ๋ฐ์ดํฐ ๊ฐ์ผ๋ก ํํฐ๋ง์ด ๋๋ค๋ ๊ฒ์ด๋ค.
aws s3vectors query-vectors --vector-bucket-name 'vector-test' --index-name 'test-index' \
--query-vector '{"float32": [77, 55, 14, 20, 2, 50, 41, 83, 35, 48, 38, 4, 68, 87, 86, 99, 61, 50, 26, 21]}' --top-k 2 \
--filter '{"category": "TOPS"}' --return-metadata
๊ทธ๋ฌ๋ฉด ํด๋น ๋ฉํ๋ฐ์ดํฐ ํค์ ์ผ์นํ๋ ๋ฒกํฐ๋ง์ ์ฌ์ ํํฐ๋งํด์ ๊ฐ์ ธ์จ๋ค.
์์ง์ ์ ๋ชจ๋ฅด๊ฒ ๋๋ฐ, ์ข ์์ ํ๋๊ณ ๊ฒ์ฆ์ด ๋๋ฉด ์ฌ์ฉ์ ๊ณ ๋ คํด๋ณผ๋ง๋ ํ ๊ฒ ๊ฐ๋ค.
์ฐธ์กฐ
https://aws.amazon.com/ko/s3/features/vectors/
https://aws.amazon.com/ko/blogs/aws/introducing-amazon-s3-vectors-first-cloud-storage-with-native-vector-support-at-scale/