파일 리소스 관리

파일 리소스는 텍스트 분석기가 런타임에 사용하는 외부 사전 파일에 대한 서버에 등록된 참조입니다. Milvus 3.0에서는 네 가지 분석기 구성 요소가 인라인 배열 대신 파일 리소스에서 사전을 로드할 수 있습니다:

분석기 구성 요소

파일 리소스를 허용하는 매개변수

지에바 토큰화

extra_dict_file

필터 중지

stop_words_file

디컴파운더 필터

word_list_file

동의어 필터

synonyms_file

파일 리소스는 인라인 사전 배열의 두 가지 실질적인 문제를 해결합니다:

  • 실제 사전은 방대합니다. 중국어 지에바 어휘는 수만 줄에 달할 수 있고 동의어 테이블은 일반적으로 수천 개의 규칙으로 구성되어 있습니다. 이를 분석기 구성에 인라인화하는 것은 비현실적입니다.

  • 일반적으로 동일한 사전이 여러 컬렉션에서 공유됩니다. 한 번 등록한 다음 이름으로 참조하면 스키마가 작아지고 사전 업데이트가 한 번의 작업으로 이루어집니다.

파일 리소스 유형

Milvus는 관리 책임이 서로 다른 두 가지 파일 리소스 유형을 지원합니다:

유형

파일이 있는 위치

파일을 관리하는 사람

Fit

원격

Milvus 클러스터가 이미 사용하도록 구성된 오브젝트 저장소(MinIO/S3/GCS/Azure)에서

Milvus, add_file_resource / remove_file_resource / list_file_resources 클라이언트 API를 통해

대부분의 배포에 권장됩니다.

로컬

모든 Milvus 구성 요소(데이터 노드, 쿼리 노드, 스트리밍 노드)의 로컬 파일 시스템에서 동일한 절대 경로에 있습니다.

사용자 - 예를 들어 Kubernetes 볼륨을 통해 파일을 직접 마운트합니다.

Milvus 외부에서 사전 파일을 관리하고자 하는 오픈 소스/자체 호스팅 시나리오.

이 페이지의 나머지 부분에서는 보다 일반적인 원격 유형부터 시작하여 두 가지 유형을 모두 살펴봅니다.

전제 조건

  • 원격 파일 리소스의 경우 Milvus 배포에 개체 저장소가 구성되어 있어야 합니다. 대부분의 배포는 이미 구성되었으므로 milvus.yaml (또는 이에 상응하는 헬름 차트 값)의 minio: 섹션을 확인한다. bucketNamerootPath 값은 파일 리소스를 등록할 때 필요하다.

  • 로컬 파일 리소스의 경우, 모든 밀버스 파드/컨테이너에 동일한 절대 경로에 파일을 배치할 수 있어야 한다. 이를 수행하는 방법은 배포(바인드 마운트, 컨피그맵 지원 볼륨, 컨테이너 초기화 등)에 따라 다릅니다.

원격 파일 리소스 등록하기

원격 파일 리소스 등록은 파일을 오브젝트 스토리지에 업로드하고, 선택한 이름으로 Milvus에 등록한 다음, 필요한 모든 분석기에서 참조하는 3단계 워크플로로 이루어집니다.

1단계. 오브젝트 스토리지에 사전 파일 업로드

자체 도구(mc, aws s3 cp, boto3, 또는 S3 호환 클라이언트)를 사용하여 Milvus가 사용하도록 구성된 버킷에 파일을 넣습니다.

예를 들어 milvus.yaml 에 포함된 경우

minio:
  bucketName: milvus-bucket
  rootPath: file

rootPath 을 접두사로 사용하여 chinese_terms.txt 이라는 이름의 파일을 업로드하면 s3://milvus-bucket/file/chinese_terms.txt 에 오브젝트가 배치됩니다.

2단계에서 add_file_resource 에 전달할 path 인수는 rootPath 접두사를 포함한 전체 오브젝트 키입니다 (위의 예의 경우 path="file/chinese_terms.txt"). 접두사가 없는 경로(예: "chinese_terms.txt")는 file resource path not exist 오류와 함께 거부됩니다.

2단계. 파일을 등록합니다. add_file_resource

from pymilvus import MilvusClient

client = MilvusClient(uri="http://localhost:19530")

client.add_file_resource(
    name="chinese_terms",                # short, unique name you'll reference later
    path="file/chinese_terms.txt",       # full S3 object key, including the rootPath prefix
)

add_file_resource 는 동기적으로 유효성을 검사합니다. Milvus가 구성된 개체 저장소의 path 에 개체가 존재하는지 확인한 후에만 호출이 반환됩니다. 객체가 없는 경우 MilvusException(code=65535, "file resource path not exist") - 파일을 먼저 업로드한 다음 다시 시도합니다.

호출이 무효화됩니다. 동일한 namepath 으로 add_file_resource 을 두 번 호출해도 중복이 생성되지 않습니다.

3단계. 분석기에서 파일 리소스 참조하기

분석기 매개변수가 파일 참조(extra_dict_file, stop_words_file, word_list_file, synonyms_file)를 허용하는 경우 표준 원격 양식을 사용하세요:

{
    "type": "remote",
    "resource_name": "chinese_terms",    # must match the name in add_file_resource
    "file_name": "chinese_terms.txt",    # filename only — Milvus uses this to identify the file inside the resource
}

네 개의 분석기 매개변수 모두 동일한 형태를 사용하며, 주변 분석기 키만 다릅니다. 분석기별 구체적인 예는 Jieba 토큰화 도구, 중지 필터, 분해기 필터 및 동의어 필터를 참조하세요.

매개변수 이름은 namefile 가 아닌 resource_namefile_name 입니다. name / file (또는 "type": "remote" 대신 "type": "resource" )을 사용하면 분석기 생성 시 resource name of remote file ... must be set 과 같은 메시지와 함께 MilvusException 가 발생합니다.

파일 리소스 목록

resources = client.list_file_resources()
for r in resources:
    print(r.name, r.path)
# chinese_terms file/chinese_terms.txt

list_file_resources().name.path 속성을 가진 FileResourceInfo 개체 목록을 반환합니다. 빈 클러스터는 [] 을 반환합니다. 리소스별 get 은 없으며, list_file_resources 은 유일한 읽기 API입니다.

파일 리소스 제거

client.remove_file_resource(name="chinese_terms")

remove_file_resource 는 무효입니다. 존재하지 않는 이름으로 호출하면 발생하지 않고 None 가 반환됩니다.

파일 리소스를 제거하기 전에 분석기 구성이 이를 참조하는 컬렉션을 삭제하거나 변경하세요. 의존하는 컬렉션이 없을 때까지 파일 리소스를 유지하면 리소스가 사라진 후 분석기 조회가 실패할 위험을 피할 수 있습니다.

로컬 파일 리소스 사용

로컬 파일 리소스는 각 Milvus 구성 요소의 로컬 파일 시스템 경로를 직접 가리킵니다. add_file_resource 호출이 없습니다. Milvus는 로컬 리소스를 추적하지 않습니다. 모든 관련 포드 또는 컨테이너의 동일한 절대 경로에 파일을 직접 배치한 다음 경로로 참조합니다:

{
    "type": "local",
    "path": "/var/lib/milvus/dicts/chinese_terms.txt",
}

로컬 파일 리소스는 데이터 노드, 쿼리 노드 및 스트리밍 노드의 파일 시스템을 제어하는 배포(일반적으로 베어메탈에서 자체 호스팅된 Milvus 또는 볼륨 마운트를 추가할 수 있는 Kubernetes 클러스터)에서만 유효합니다. 파일은 모든 구성 요소에서 정확히 동일한 절대 경로에 존재해야 하며, 그렇지 않으면 분석기를 로드할 때 일부 노드가 실패합니다.

파일은 분석기가 처음 생성될 때 열립니다. 그 시점에 경로가 존재하지 않으면 MilvusException(code=2000, "IOError: No such file or directory") 으로 분석기 생성이 실패합니다.

고려 사항

  • 클러스터 전체가 즉시 사용 가능하지 않습니다. add_file_resource 이 반환되면 Milvus는 파일을 필요로 하는 모든 구성 요소에 파일을 동기화합니다. 이 짧은 기간 동안, 아직 동기화되지 않은 노드에서는 리소스를 참조하는 컬렉션이 생성되지 않을 수 있습니다. 일반적인 해결 방법은 몇 초 후에 만들기 호출을 다시 시도하는 것입니다.

  • 리소스에 종속된 컬렉션이 없는 경우에만 제거하세요. remove_file_resource 을 호출하기 전에 분석기 구성이 리소스를 참조하는 모든 컬렉션을 삭제하거나 변경하여 파일을 찾지 못하는 분석기 조회를 방지하세요.

  • list_file_resources()namepath 을 반환하며 크기, 체크섬, 업로드 시간 또는 기타메타데이터가 없습니다. 필요한 경우 고유한 명명 규칙을 사용하여 사전 버전을 추적하세요.