[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/