대규모 후보 생성을 위한 두 개의 타워 검색 구현

Last reviewed 2025-01-16 UTC

이 문서에서는 Vertex AI를 사용해서 엔드 투 엔드 방식의 2타워 후보군 생성 워크플로를 구현하는 방법을 보여주는 참조 아키텍처를 제공합니다. 2타워 모델링 프레임워크는 웹 쿼리 및 후보 항목과 같은 두 가지 서로 다른 항목 간의 의미적 유사성을 학습하기 때문에 맞춤설정 사용 사례에서 강력한 검색 기법입니다.

이 문서는 빠른 응답 시간이 필요한 대규모 추천 애플리케이션을 개발하는 데이터 과학자 및 머신러닝 엔지니어와 같은 기술 전문가를 대상으로 합니다. 2타워 모델을 빌드하기 위한 모델링 기법, 문제 정의, 데이터 준비에 대한 자세한 내용은 TensorFlow 추천자 및 벡터 검색을 사용한 심층 검색 확장을 참조하세요.

아키텍처

다음 다이어그램은 2타워 모델을 학습시키고 여러 다른 배포 및 서빙 태스크를 위해 각 타워를 개별적으로 배포하는 아키텍처를 보여줍니다.

2타워 모델을 학습시키고 각 타워를 개별적으로 배포하는 아키텍처

다이어그램에 표시된 아키텍처에는 다음 구성요소가 포함됩니다.

  • 학습 데이터: 학습 파일은 Cloud Storage에 저장됩니다.
  • 2타워 학습: 조합된 2타워 모델은 Vertex AI Training 서비스를 사용하여 오프라인으로 학습됩니다. 각 타워는 개별적으로 저장되어 서로 다른 태스크에 사용됩니다.
  • 등록된 쿼리 및 후보 타워: 타워 학습 후 각 타워가 Vertex AI Model Registry에 개별적으로 업로드됩니다.
  • 배포된 쿼리 타워: 등록된 쿼리 타워가 Vertex AI 온라인 엔드포인트에 배포됩니다.
  • 일괄 예측 임베딩: 등록된 후보 타워가 일괄 예측 작업에 사용되어 모든 사용 가능한 후보 항목의 임베딩 표현을 미리 계산합니다.
  • 임베딩 JSON: 예측한 임베딩이 Cloud Storage의 JSON 파일에 저장됩니다.
  • ANN 색인: Vertex AI 벡터 검색을 사용하여 근사 최근접 이웃(ANN) 검색용으로 구성된 서빙 색인을 생성합니다.
  • 배포된 색인: ANN 색인이 Vertex AI 벡터 검색 색인 엔드포인트에 배포됩니다.

사용 제품

이 참조 아키텍처에는 다음과 같은 Google Cloud 제품이 사용됩니다.

  • Vertex AI Training: 대규모 모델 학습을 운영화할 수 있게 해주는 완전 관리형 학습 서비스입니다.
  • 벡터 검색: 의미적으로 유사하거나 관련이 있는 데이터를 저장, 색인 생성, 검색할 수 있게 해주는 벡터 유사성 매칭 서비스입니다.
  • Vertex AI Model Registry: ML 모델의 수명 주기를 관리할 수 있는 중앙 저장소입니다.
  • Cloud Storage: 다양한 데이터 유형에 적합한 저비용, 무제한 객체 저장소입니다. Google Cloud내부 및 외부에서 데이터에 액세스할 수 있고 중복성을 위해 여러 위치에 복제됩니다.

사용 사례

지연 시간이 짧은 서빙 요구사항을 충족하기 위해서는 대규모 추천자가 2단계 시스템 또는 경우에 따라 다단계 시스템으로 프로덕션에 배포되는 경우가 많습니다. 첫 번째 단계인 후보군 생성의 목적은 많은 후보 항목 컬렉션을 선별하여 후속 필터링 및 순위 결정 태스크를 수행할 관련성이 높은 항목을 수백 개 정도 검색하는 것입니다. 이러한 검색 태스크를 최적화하려면 다음 두 가지 핵심 목표를 고려하세요.

  1. 모델 학습 중 문제 또는 해결할 태스크의 최적 표현을 학습하고 이 표현을 <query, candidate> 임베딩으로 컴파일합니다.
  2. 모델 서빙 중에는 지연 시간 요구사항을 충족하기에 충분히 빠른 속도록 관련 항목을 검색합니다.

다음 다이어그램은 2단계 추천자의 개념 구성요소를 보여줍니다.

2단계 추천자의 개념 구성요소

다이어그램에서 후보군 생성은 수백만 개의 후보 항목을 필터링합니다. 그런 후 순위 결정이 결과로 표시된 수백 개의 후보 항목을 필터링하고 십여 개의 추천 항목을 반환합니다.

이 문서의 참조 아키텍처는 2타워 기반의 검색 모델을 학습시킵니다. 이 아키텍처에서 각 타워는 쿼리 또는 후보 항목 특성을 처리한 후 이러한 특성의 임베딩 표현을 생성하는 신경망입니다. 각 타워는 프로덕션에서 서로 다른 태스크에 사용되기 때문에 개별적으로 배포됩니다.

  • 후보 타워: 후보 타워는 모든 후보 항목의 임베딩을 미리 계산하기 위해 사용됩니다. 사전 계산된 임베딩은 짧은 지연 시간 검색을 위해 최적화된 Vertex AI 벡터 검색 색인 엔드포인트에 배포됩니다.
  • 배포된 타워: 온라인 서빙 중 배포된 쿼리 타워는 원시 사용자 쿼리를 임베딩 표현으로 변환합니다. 그런 후 임베딩 표현을 사용하여 배포된 색인에서 비슷한 항목 임베딩을 찾습니다.

2타워 아키텍처는 쿼리 및 후보 항목의 의미 관계를 포착하고 이를 공유된 임베딩 공간에 매핑하기 때문에 많은 수의 검색 태스크에 이상적입니다. 항목이 공유된 임베딩 공간에 매핑될 때 의미적으로 비슷한 항목은 서로 더 가깝게 분류됩니다. 따라서 특정 쿼리의 벡터 임베딩을 계산할 경우 가장 가까운(가장 비슷한) 후보 항목의 임베딩 공간을 검색할 수 있습니다. 이러한 아키텍처의 주요 이점은 쿼리 추론과 후보 표현을 분리할 수 있다는 것입니다. 이러한 분리 이점은 주로 두 가지입니다.

  • 새로운 항목 어휘를 재학습시키지 않아도 새로운 항목을 서빙할 수 있습니다.. 후보 항목 타워에 항목 특성 집합을 공급하여 학습 중 표시되지 않은 것까지 후보 집합의 항목 임베딩을 계산할 수 있습니다. 이러한 계산을 수행하면 콜드 스타트 문제를 해결하는 데 도움이 됩니다.
    • 후보 타워는 아직 추천 시스템과 상호작용한 적이 없더라도 모든 후보 항목 집합을 지원할 수 있습니다. 이러한 지원은 2타워 아키텍처가 각 <query, candidate> 쌍에 대해 리치 콘텐츠 및 메타데이터 특성을 처리하기 때문에 가능합니다. 이러한 처리를 통해 시스템은 이미 학습한 유사한 항목과 비교해서 알려지지 않은 항목을 기술할 수 있습니다.
  • 모든 후보 항목 임베딩을 미리 계산하여 검색 추론을 최적화할 수 있습니다. 이러한 미리 계산된 임베딩은 색인으로 생성하여 짧은 지연 시간 검색에 최적화된 서빙 인프라에 배포할 수 있습니다.
    • 두 타워를 함께 학습시킴으로써 검색된 쿼리를 사용하여 항목을 표현하고 검색된 항목을 사용하여 쿼리를 표현할 수 있습니다. 쿼리와 같이, 쌍의 절반이 있고 다른 해당 항목을 찾을 필요가 있으면 미리 방정식의 절반을 계산할 수 있습니다. 미리 계산을 통해 가능한 한 빠르게 나머지를 결정할 수 있습니다.

설계 고려사항

이 섹션에서는 Google Cloud 에서 보안 및 성능 요구를 충족하는 후보군 생성 아키텍처를 개발하는 데 도움이 되는 안내를 제공합니다. 이 섹션의 안내는 일부일 뿐 모든 내용을 포함하지는 않습니다. 특정 요구사항에 따라 추가적인 설계 요소와 장단점을 고려할 수 있습니다.

보안

Vertex AI 벡터 검색은 공개 및 가상 프라이빗 클라우드(VPC) 엔드포인트 배포를 모두 지원합니다. VPC 네트워크를 사용하려면 먼저 VPC 네트워크 피어링 연결 설정을 수행합니다. 벡터 검색 색인이 VPC 경계 내에 배포된 경우 사용자가 동일한 VPC 네트워크 내에서 연결된 리소스에 액세스해야 합니다. 예를 들어 Vertex AI Workbench에서 개발 중이면 배포된 색인 엔드포인트와 동일한 VPC 네트워크 내에서 워크벤치 인스턴스를 만들어야 합니다. 마찬가지로 엔드포인트를 생성하거나 엔드포인트에 색인을 배포할 것으로 예상되는 파이프라인은 동일한 VPC 네트워크 내에서 실행되어야 합니다.

성능 최적화

이 섹션에서는 Google Cloud 에서 워크로드의 성능 요구사항을 충족하는 토폴로지를 설계하기 위해 이 참조 아키텍처를 사용할 때 고려해야 하는 요소를 설명합니다.

학습 작업 프로파일링

데이터 입력 파이프라인과 전체 학습 그래프를 최적화하려면 Cloud Profiler를 사용해서 학습 성능을 프로파일링하는 것이 좋습니다. Cloud Profiler는 오픈소스 TensorBoard Profiler가 관리형으로 구현된 버전입니다.

학습 작업에서 –profiler 인수를 전달하여 TensorFlow 콜백이 각 에포크에 대해 고정된 개수의 배치를 프로파일링하도록 만듭니다. 프로파일은 호스트 CPU와 기기 GPU 또는 TPU 하드웨어로부터 trace를 캡처합니다. trace는 학습 작업의 리소스 소비에 대한 정보를 제공합니다. 메모리 부족 오류를 방지하기 위해서는 학습 단계 간 프로파일 기간을 2~10 정도로 시작하고 필요에 따라 늘리는 것이 좋습니다.

Vertex AI Training 및 Vertex AI TensorBoard에서 Profiler를 사용하는 방법은 모델 학습 성능 프로파일링을 참조하세요. 디버깅 권장사항은 GPU 성능 최적화를 참조하세요. 성능 최적화 방법은 Profiler를 사용하여 TensorFlow 성능 최적화를 참조하세요.

가속기 완전 활용

NVIDIA GPU 또는 Cloud TPU와 같은 학습 가속기를 연결할 때는 가속기 활용도를 완전한 상태로 유지하는 것이 중요합니다. 학습 가속기는 아키텍처에서 가장 비용이 높은 구성요소이므로 비용 관리를 위해 활용도를 완전한 상태로 유지하는 것이 가장 좋습니다. 또한 유휴 시간이 없으면 전체 리소스 소비도 감소하기 때문에 작업 효율성을 위해서도 학습 가속기를 완전히 활용하는 것이 좋습니다.

가속기 활용도를 완전히 유지하려면 일반적으로 병목 지점을 찾아서 최적화하고, 가속기 기기 활용도가 허용 가능한 수준이 될 때까지 이러한 단계를 반복하는 과정을 거칩니다. 이 사용 사례의 많은 데이터 세트가 메모리에 맞지 않게 너무 크기 때문에 일반적으로 스토리지, 호스트 VM, 가속기 사이에 병목 지점이 발견됩니다.

다음 다이어그램은 ML 학습 입력 파이프라인의 개념 단계를 보여줍니다.

ML 학습 입력 파이프라인의 개념 단계

다이어그램에서는 스토리지에서 데이터를 읽고 전처리합니다. 전처리된 후에는 데이터가 기기로 전송됩니다. 성능을 최적화하려면 전체 성능이 호스트 CPU 또는 가속기 기기(GPU 또는 TPU)의 영향을 받는지 확인하는 것부터 시작합니다. 기기는 학습 루프를 가속하고, 호스트는 기기에 학습 데이터를 공급하고 기기로부터 결과를 수신합니다. 다음 섹션에서는 입력 파이프라인 성능과 기기 성능을 개선하여 병목 지점을 해결하는 방법을 설명합니다.

입력 파이프라인 성능 개선
  • 스토리지에서 데이터 읽기: 데이터 읽기를 개선하려면 캐싱, 미리 가져오기, 순차적 액세스 패턴, 병렬 I/O를 시도해보세요.
  • 데이터 전처리: 데이터 전처리를 개선하려면 데이터 추출 및 변환을 위한 병렬 처리를 구성하고 데이터 입력 파이프라인에서 interleave 변환을 조정합니다.
  • 기기에 데이터 전송: 전체 작업 시간을 줄이려면 호스트에서 여러 기기로 데이터를 병렬로 전송합니다.
기기 성능 개선
  • 미니 배치 크기 증가. 미니 배치는 학습 루프를 한 번 반복할 때 각 기기에 사용되는 학습 샘플 수입니다. 미니 배치 크기를 늘리면 작업 간 병렬 처리가 증가하고 데이터 재사용이 개선됩니다. 하지만 미니 배치가 나머지 학습 프로그램과 함께 메모리에 들어갈 수 있어야 합니다. 미니 배치 크기를 너무 늘리면 메모리 부족 오류와 모델 불일치가 발생할 수 있습니다.
  • 사용자 정의 함수 벡터화. 일반적으로 데이터 변환은 입력 데이터 세트의 각 요소 변환 방법을 기술하는 사용자 정의 함수로 표시할 수 있습니다. 이 함수를 벡터화하려면 요소를 한 번에 하나씩 변환하는 대신 한 번의 입력 배치로 변환 작업을 적용합니다. 모든 사용자 정의 함수에는 예약 및 실행과 관련된 오버헤드가 있습니다. 입력 배치를 변환할 때는 데이터 세트 요소가 아니라 각 배치별로 오버헤드가 발생합니다.
수평 확장 전에 수직 확장

학습 작업의 컴퓨팅 리소스를 구성할 때는 수평 확장 전에 수직 확장을 수행하는 것이 좋습니다. 즉, 더 큰 고성능 기기를 선택한 후에 저성능 기기를 여러 개 사용해야 합니다. 수평 축소는 다음 방식으로 수행하는 것이 좋습니다.

  1. 단일 작업자 + 단일 기기
  2. 단일 작업자 + 더 강력한 기기
  3. 단일 작업자 + 여러 기기
  4. 분산형 학습

ANN 검색의 이점을 평가할 때는 지정된 쿼리의 지연 시간과 재현율을 측정하면 됩니다. 색인 조정을 돕기 위해 Vertex AI 벡터 검색은 무차별 대입 색인을 만드는 기능을 제공합니다. 무차별 대입 색인은 지연 시간을 높이는 대신 완전한 검색을 수행하여 지정된 쿼리 벡터의 실제 최근접 이웃을 찾습니다. 무차별 대입 색인은 프로덕션 용도가 아니지만 색인 조정 중 재현율을 계산할 때 적합한 기준을 제시합니다.

지연 시간에 따라 재현율을 평가하려면 미리 계산된 후보 임베딩을 ANN 검색용으로 구성된 하나의 색인과 무차별 대입 검색용으로 구성된 다른 색인에 배포합니다. 무차별 대입 색인은 절대 최근접 이웃을 반환하지만 일반적으로 ANN 검색보다 오래 걸립니다. 검색 지연 시간의 이점을 위해 일부 검색 재현율을 희생하고 싶을 수 있지만 그전에 장단점을 미리 평가해야 합니다. 재현율과 지연 시간에 영향을 주는 추가적인 특성에는 다음이 포함됩니다.

  • 모델링 매개변수: 다양한 모델링 선택은 임베딩 공간에 영향을 주며, 이는 궁극적으로 서빙 색인을 형성합니다. 단순 및 심층 검색 모델 모두에서 빌드된 색인에서 검색된 후보를 비교하세요.
  • 측정기준: 측정기준은 궁극적으로 모델에 따라 결정되는 또 다른 특성입니다. ANN 색인의 측정기준은 쿼리 및 후보 타워 벡터의 측정기준과 일치해야 합니다.
  • 태그 개선 및 필터링: 태그는 다양한 프로덕션 사용 사례에서 결과를 조정하는 강력한 기능을 제공할 수 있습니다. 태그가 검색된 후보 선택과 성능에 미치는 영향을 이해하는 것이 중요합니다.
  • ANN 수: 이 값을 늘리면 재현율이 증가하고 비례적으로 지연 시간이 증가할 수 있습니다.
  • 검색할 리프 노드 비율: 검색할 리프 노드 비율은 지연 시간과 재현율의 장단점을 비교할 때 가장 중요한 옵션입니다. 이 값을 늘리면 재현율이 증가하고 비례적으로 지연 시간이 증가할 수 있습니다.

다음 단계

그 밖의 참조 아키텍처, 다이어그램, 튜토리얼, 권장사항을 알아보려면 클라우드 아키텍처 센터를 확인하세요.

참여자

저자:

기타 참여자: 카즈 사토 | Staff Developer Advocate