벡터 버킷에 벡터 인덱스 만들기
벡터 버킷에 벡터 인덱스 만들기
벡터 버킷 안에 벡터 인덱스를 만드는 방법을 설명해요.
본문
벡터 인덱스 구성 파라미터는 신중하게 선택하세요. 벡터 인덱스를 만든 뒤에는 인덱스 이름, 차원(dimension), 거리 메트릭(distance metric), 비필터 가능 메타데이터 키(non-filterable metadata keys)를 업데이트할 수 없어요. 이 값들 중 하나라도 바꾸려면 새 벡터 인덱스를 만들어야 해요.
벡터 인덱스는 효율적인 유사도 검색을 위해 벡터 데이터를 저장하고 조직화하는, 벡터 버킷 안의 리소스예요. 벡터 인덱스를 만들 때는 그 인덱스의 모든 벡터가 공유해야 하는 특성, 즉 차원과 유사도 계산에 사용하는 거리 메트릭, 그리고 선택적으로 비필터 가능 메타데이터 키를 정의해요. 또한 인덱스를 만들 때 벡터 인덱스 전용 암호화 설정과 태그도 선택적으로 구성할 수 있어요. 벡터 인덱스 이름 요구 사항, 차원 요구 사항, 거리 메트릭 옵션, 비필터 가능 메타데이터 키에 대한 자세한 내용은 Limitations and restrictions을 참고해 주세요. 벡터 인덱스의 암호화 구성 설정은 Data protection and encryption in S3 Vectors를, 태그 설정은 Using tags with S3 vector buckets을 참고해 주세요.
벡터 인덱스는 기존 벡터 버킷 안에서 만들어야 하며, 만든 뒤 수정할 수 없는 특정 구성 파라미터를 요구해요.
S3 콘솔에서 만들기
- Amazon S3 콘솔(https://console.aws.amazon.com/s3/)을 엽니다.
- 탐색 창에서 Vector buckets를 선택합니다.
- 벡터 버킷 목록에서 벡터 인덱스를 만들려는 버킷 이름을 선택합니다.
- Create vector index를 선택합니다.
- Vector index name에 벡터 인덱스 이름을 입력합니다. 벡터 인덱스 이름은 벡터 버킷 안에서 고유해야 합니다. 인덱스 이름은 3자에서 63자 사이여야 합니다. 유효한 문자는 소문자(a-z), 숫자(0-9), 하이픈(-), 점(.)입니다. 벡터 인덱스 명명 요구 사항은 Limitations and restrictions을 참고해 주세요.
- Dimension에 각 벡터의 값 개수를 입력합니다. 참고: Dimension 값은 각 벡터가 포함할 숫자 값의 개수를 결정해요. 이 인덱스에 추가되는 모든 벡터는 정확히 이 값의 개수를 가져야 합니다. Dimension은 1에서 4096 사이여야 합니다. 차원이 클수록 더 많은 저장 공간이 필요합니다. 임베딩 모델의 출력 차원에 맞춰 선택하세요. 차원 요구 사항은 Limitations and restrictions을 참고해 주세요.
- Distance metric에서 다음 옵션 중 하나를 선택합니다.
- Cosine – 벡터 사이 각도의 코사인을 측정합니다. 정규화된 벡터에, 방향이 크기보다 더 중요할 때 가장 좋아요.
- Euclidean – 벡터 사이의 직선 거리를 측정합니다. 방향과 크기 둘 다 중요할 때 가장 좋아요.
- (선택) Non-filterable metadata 아래에서 저장되지만 필터링에는 사용하지 않을 메타데이터 키를 구성합니다. 비필터 가능 메타데이터 키를 추가하려면: Add key를 선택하고 키 이름(1-63자, 이 벡터 인덱스 안에서 고유)을 입력합니다. 반복해 추가 키를 추가할 수 있습니다(최대 10개). 참고: 벡터 인덱스를 만든 뒤 벡터 데이터를 삽입할 때 각 벡터에 필터 가능 메타데이터를 키-값 쌍으로 붙일 수 있어요. 기본적으로 벡터에 붙는 모든 메타데이터 키는 필터 가능하며 유사도 질의에서 필터로 쓸 수 있어요. 벡터 인덱스 생성 중 비필터 가능으로 지정된 메타데이터 키만 필터링에서 제외돼요. 벡터당 메타데이터 크기 제한(전체 및 필터 가능 메타데이터 제약 포함)은 Limitations and restrictions을 참고해 주세요.
- 구성을 신중히 검토합니다. 참고: 이 설정들은 만든 뒤에 바꿀 수 없어요.
- Encryption 아래에서 Specify encryption type을 선택합니다. Use bucket settings for encryption을 선택하거나 벡터 인덱스의 암호화 설정을 덮어쓸 수 있어요. 버킷 수준 설정을 덮어쓰는 경우, 벡터 인덱스의 암호화 유형을 AWS Key Management Service 키를 사용한 서버 측 암호화(SSE-KMS)나 Amazon S3 관리형 키를 사용한 서버 측 암호화(SSE-S3)로 지정할 수 있습니다. 벡터 인덱스의 암호화 구성 설정은 Data protection and encryption in S3 Vectors를 참고해 주세요.
- Tags (Optional) 아래에서 AWS Billing and Cost Management로 벡터 인덱스 비용을 추적·정리하는 데 쓸 태그를 키-값 쌍으로 추가할 수 있어요. Key와 Value를 입력합니다. 태그를 더 추가하려면 Add Tag를 선택합니다. 벡터 인덱스에는 최대 50개의 태그를 입력할 수 있어요. 자세한 내용은 Using tags with S3 vector buckets을 참고해 주세요.
- Create vector index를 선택합니다.
벡터 버킷에 벡터 인덱스를 만들려면 다음 예시 명령을 사용하고, 사용자 입력 플레이스홀더를 여러분의 정보로 바꿔 넣으세요.
예시 1: 비필터 가능 메타데이터 키가 있는 벡터 인덱스 만들기
aws s3vectors create-index \
--vector-bucket-name "amzn-s3-demo-vector-bucket" \
--index-name "idx" \
--data-type "float32" \
--dimension 1 \
--distance-metric "cosine" \
--metadata-configuration '{"nonFilterableMetadataKeys":["nonFilterableKey1"]}'
예시 2: 비필터 가능 메타데이터 키가 없는 벡터 인덱스 만들기
aws s3vectors create-index \
--vector-bucket-name "amzn-s3-demo-vector-bucket" \
--index-name "idx2" \
--data-type "float32" \
--dimension 4096 \
--distance-metric "euclidean"
또한 모든 메타데이터(필터 가능과 비필터 가능 모두)는 GetVectors, ListVectors, QueryVectors API 작업으로 동일하게 조회돼요. 다음 CLI 명령은 메타데이터(비필터 가능 메타데이터 포함)와 함께 벡터를 조회하는 방법을 보여줘요.
요청 예시:
aws s3vectors get-vectors \
--vector-bucket-name "amzn-s3-demo-vector-bucket" \
--index-name "idx" \
--keys '["vec1", "vec3"]' \
--return-data \
--return-metadata
응답 예시:
{
"vectors": [
{
"key": "vec1",
"data": {
"float32": [
0.10000000149011612,
0.20000000298023224,
0.30000001192092896,
0.4000000059604645,
0.5
]
},
"metadata": {
"category": "test",
"text": "First vector"
}
},
{
"key": "vec3",
"data": {
"float32": [
0.6000000238418579,
0.699999988079071,
0.800000011920929,
0.8999999761581421,
1.0
]
},
"metadata": {
"text": "Third vector",
"category": "test"
}
}
]
}
응답은 인덱스 생성 중에 필터 가능 또는 비필터 가능으로 지정되었는지와 무관하게 벡터와 연결된 모든 메타데이터를 포함해요.
AWS SDK (Python/boto3)
import boto3
# Create a S3 Vectors client in the AWS Region of your choice.
s3vectors = boto3.client("s3vectors", region_name="us-west-2")
#Create a vector index "movies" in the vector bucket "media-embeddings" without non-filterable metadata keys
s3vectors.create_index(
vectorBucketName="media-embeddings",
indexName="movies",
dimension=3,
distanceMetric="cosine",
dataType = "float32"
)
#Create a vector index "movies" in the vector bucket "media-embeddings" with non-filterable metadata keys
s3vectors.create_index(
vectorBucketName="media-embeddings",
indexName="movies",
dimension=3,
distanceMetric="cosine",
dataType = "float32",
metadataConfiguration= {
"nonFilterableMetadataKeys": ["nonFilterableMetadataKey1"]}
)