이 문서에서는 Vertex AI를 사용하여 엔드 투 엔드 2타워 후보 생성 워크플로를 구현하는 방법을 보여주는 참조 아키텍처를 제공합니다. 2타워 모델링 프레임워크는 웹 검색어와 후보 항목과 같이 두 개의 서로 다른 항목 간의 시맨틱 유사성을 학습하므로 맞춤설정 사용 사례에 강력한 검색 기법입니다.
이 문서는 지연 시간이 짧은 게재 요구사항이 있는 대규모 맞춤 콘텐츠 애플리케이션을 개발하는 데이터 과학자 및 머신러닝 엔지니어와 같은 기술 실무자를 대상으로 합니다. 2타워 모델을 빌드하기 위한 모델링 기법, 문제 정의, 데이터 준비에 관한 자세한 내용은 TensorFlow 추천자 및 벡터 검색으로 심층 검색 확장을 참고하세요.
아키텍처
다음 다이어그램은 두 개의 타워 모델을 학습시키고 다양한 배포 및 제공 작업에 각 타워를 별도로 배포하는 아키텍처를 보여줍니다.
다이어그램의 아키텍처에는 다음 구성요소가 포함됩니다.
- 학습 데이터: 학습 파일은 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단계 시스템으로 배포되며 경우에 따라 다단계 시스템으로 배포됩니다. 첫 번째 단계인 후보 생성의 목표는 대규모 후보 항목 모음을 선별하고 다운스트림 필터링 및 순위 지정 작업을 위해 수백 개의 항목 중 관련 하위 집합을 검색하는 것입니다. 이 검색 작업을 최적화하려면 다음 두 가지 핵심 목표를 고려하세요.
- 모델 학습 중에 해결할 문제 또는 작업을 가장 잘 나타내는 표현을 학습하고 이 표현을
<query, candidate>
임베딩으로 컴파일합니다. - 모델을 제공하는 동안 지연 시간 요구사항을 충족할 만큼 빠르게 관련 항목을 검색합니다.
다음 다이어그램은 2단계 추천 도구의 개념적 구성요소를 보여줍니다.
다이어그램에서 후보 생성은 수백만 개의 후보 항목을 필터링합니다. 그런 다음 순위는 수백 개의 후보 항목을 필터링하여 수십 개의 추천 항목을 반환합니다.
이 문서의 참조 아키텍처는 두 개의 타워 기반 검색 모델을 학습합니다. 이 아키텍처에서 각 타워는 쿼리 또는 후보 항목 기능을 처리한 다음 이러한 기능의 임베딩 표현을 생성하는 신경망입니다. 각 타워는 프로덕션에서 서로 다른 작업에 사용되므로 별도로 배포됩니다.
- 후보 타워: 후보 타워는 모든 후보 항목의 임베딩을 사전 계산하는 데 사용됩니다. 사전 계산된 임베딩은 지연 시간이 짧은 검색에 최적화된 Vertex AI 벡터 검색 색인 엔드포인트에 배포됩니다.
- 배포된 타워: 온라인 게재 중에 배포된 쿼리 타워는 원시 사용자 쿼리를 임베딩 표현으로 변환합니다. 그런 다음 임베딩 표현은 배포된 색인에서 유사한 항목 임베딩을 조회하는 데 사용됩니다.
2타워 아키텍처는 쿼리와 후보 항목의 시맨틱 관계를 포착하고 이를 공유 임베딩 공간에 매핑하므로 여러 검색 작업에 이상적입니다. 항목이 공유 임베딩 공간에 매핑되면 의미상 유사한 항목이 더 가까이 클러스터링됩니다. 따라서 특정 쿼리의 벡터 임베딩을 계산하면 임베딩 공간에서 가장 가까운 (가장 유사한) 후보 항목을 검색할 수 있습니다. 이러한 아키텍처의 주요 이점은 쿼리 및 후보 표현의 추론을 분리할 수 있다는 것입니다. 이러한 분리의 이점은 크게 두 가지입니다.
- 새로운 상품 어휘를 재학습하지 않고도 새로운 (최신) 상품을 게재할 수 있습니다. 후보 항목 타워에 항목 특성 집합을 제공하면 학습 중에 보지 못한 후보 집합을 포함한 모든 후보 집합의 항목 임베딩을 계산할 수 있습니다. 이 계산을 실행하면 콜드 스타트 문제를 해결하는 데 도움이 됩니다.
- 후보 타워는 아직 맞춤 콘텐츠 시스템과 상호작용하지 않은 항목을 비롯하여 임의의 후보 항목 집합을 지원할 수 있습니다. 이는 두 타워 아키텍처가 각
<query, candidate>
쌍에 관한 풍부한 콘텐츠와 메타데이터 기능을 처리하기 때문에 가능합니다. 이러한 종류의 처리를 통해 시스템은 알 수 없는 항목을 알고 있는 항목의 관점에서 설명할 수 있습니다.
- 후보 타워는 아직 맞춤 콘텐츠 시스템과 상호작용하지 않은 항목을 비롯하여 임의의 후보 항목 집합을 지원할 수 있습니다. 이는 두 타워 아키텍처가 각
- 모든 후보 항목 임베딩을 사전 계산하여 검색 추론을 최적화할 수 있습니다. 이러한 사전 계산된 임베딩은 색인이 생성되고 지연 시간이 짧은 검색에 최적화된 서비스 인프라에 배포될 수 있습니다.
- 타워를 공동 학습하면 쿼리 측면에서 항목을 설명하고 그 반대로도 설명할 수 있습니다. 쿼리와 같이 쌍의 절반이 있고 다른 상응하는 항목을 찾아야 하는 경우 방정식의 절반을 미리 계산할 수 있습니다. 사전 계산을 통해 나머지 결정을 최대한 빨리 내릴 수 있습니다.
설계 고려사항
이 섹션에서는 Google Cloud 에서 보안 및 성능 요구사항을 충족하는 후보 생성 아키텍처를 개발하는 데 도움이 되는 안내를 제공합니다. 이 섹션의 안내는 일부일 뿐 모든 내용을 포함하지는 않습니다. 특정 요구사항에 따라 추가 설계 요소와 장단점을 고려할 수 있습니다.
보안
Vertex AI 벡터 검색은 공개 및 Virtual Private Cloud (VPC) 엔드포인트 배포를 모두 지원합니다. VPC 네트워크를 사용하려면 VPC 네트워크 피어링 연결 설정을 참고하세요. 벡터 검색 색인이 VPC 경계 내에 배포된 경우 사용자는 동일한 VPC 네트워크 내에서 연결된 리소스에 액세스해야 합니다. 예를 들어 Vertex AI Workbench에서 개발하는 경우 배포된 색인 엔드포인트와 동일한 VPC 네트워크 내에 Workbench 인스턴스를 만들어야 합니다. 마찬가지로 엔드포인트를 만들거나 엔드포인트에 색인을 배포할 것으로 예상되는 파이프라인은 동일한 VPC 네트워크 내에서 실행되어야 합니다.
성능 최적화
이 섹션에서는 이 참조 아키텍처를 사용하여 Google Cloud 에서 워크로드의 성능 요구사항을 충족하는 토폴로지를 설계할 때 고려해야 하는 요소를 설명합니다.
학습 작업 프로파일링
데이터 입력 파이프라인과 전반적인 학습 그래프를 최적화하려면 Cloud Profiler로 학습 성능을 프로파일링하는 것이 좋습니다. 프로파일러는 오픈소스 TensorBoard 프로파일러의 관리형 구현입니다.
학습 작업에 –profiler
인수를 전달하면 TensorFlow 콜백이 각 에포크에 대해 설정된 수의 배치를 프로파일링하도록 설정할 수 있습니다. 프로필은 호스트 CPU와 기기 GPU 또는 TPU 하드웨어의 트레이스를 캡처합니다. 트레이스는 학습 작업의 리소스 사용량에 관한 정보를 제공합니다. 메모리 부족 오류를 방지하려면 프로필 기간을 2~10개의 트레인 단계로 시작하고 필요에 따라 늘리는 것이 좋습니다.
Vertex AI 학습 및 Vertex AI TensorBoard에서 프로파일러를 사용하는 방법을 알아보려면 모델 학습 성능 프로파일링을 참고하세요. 디버깅 권장사항은 GPU 성능 최적화를 참고하세요. 성능을 최적화하는 방법에 관한 자세한 내용은 프로파일러를 사용하여 TensorFlow 성능 최적화를 참고하세요.
가속기 최대한 활용
NVIDIA GPU 또는 Cloud TPU와 같은 학습 가속기를 연결할 때는 이를 최대한 활용하는 것이 중요합니다. 학습 가속기는 아키텍처에서 가장 비용이 많이 드는 구성요소이므로 학습 가속기를 최대한 활용하는 것이 비용 관리를 위한 권장사항입니다. 또한 유휴 시간이 없으면 전반적인 리소스 소비가 줄어들기 때문에 학습 가속기를 최대한 활용하는 것이 작업 효율성 측면에서도 권장사항입니다.
가속기를 최대한 활용하려면 일반적으로 병목 현상을 찾고 병목 현상을 최적화한 후 가속기 기기 사용률이 허용될 때까지 이러한 단계를 반복합니다. 이 사용 사례의 데이터 세트는 대부분 너무 커서 메모리에 맞지 않으므로 일반적으로 스토리지, 호스트 VM, 가속기 간에 병목 현상이 발생합니다.
다음 다이어그램은 ML 학습 입력 파이프라인의 개념적 단계를 보여줍니다.
다이어그램에서 데이터는 저장소에서 읽고 전처리합니다. 데이터가 사전 처리된 후 기기로 전송됩니다. 성능을 최적화하려면 먼저 전반적인 성능이 호스트 CPU에 의해 제한되는지 아니면 가속기 기기 (GPU 또는 TPU)에 의해 제한되는지 확인합니다. 기기는 학습 루프를 가속화하는 역할을 하고 호스트는 학습 데이터를 기기에 제공하고 기기에서 결과를 수신하는 역할을 합니다. 다음 섹션에서는 입력 파이프라인 성능과 기기 성능을 개선하여 병목 현상을 해결하는 방법을 설명합니다.
입력 파이프라인 성능 개선
- 저장소에서 데이터 읽기: 데이터 읽기를 개선하려면 캐싱, prefetching, 순차 액세스 패턴, 병렬 I/O를 사용해 보세요.
- 데이터 사전 처리: 데이터 사전 처리를 개선하려면 데이터 추출 및 변환을 위해 병렬 처리를 구성하고 데이터 입력 파이프라인에서
interleave
변환을 조정합니다. - 기기에 데이터 전송: 전체 작업 시간을 줄이려면 호스트에서 여러 기기로 데이터를 동시에 전송합니다.
기기 성능 개선
- 미니 배치 크기 늘리기 미니 배치는 학습 루프의 한 번 반복에서 각 기기에서 사용되는 학습 샘플 수입니다. 미니 배치 크기를 늘리면 작업 간의 동시 로드가 증가하고 데이터 재사용이 개선됩니다. 그러나 미니 배치는 나머지 학습 프로그램과 함께 메모리에 들어갈 수 있어야 합니다. 미니 배치 크기를 너무 늘리면 메모리 부족 오류와 모델 분산이 발생할 수 있습니다.
- 사용자 정의 함수를 벡터화합니다. 일반적으로 데이터 변환은 입력 데이터 세트의 각 요소를 변환하는 방법을 설명하는 사용자 정의 함수로 표현할 수 있습니다. 이 함수를 벡터화하려면 한 번에 하나의 요소를 변환하는 대신 일련의 입력에 변환 작업을 한 번에 적용합니다. 모든 사용자 정의 함수에는 예약 및 실행과 관련된 오버헤드가 있습니다. 입력 배치를 변환하면 데이터 세트 요소당 한 번이 아니라 배치당 한 번 오버헤드가 발생합니다.
수평 확장 전에 수직 확장
학습 작업의 컴퓨팅 리소스를 구성할 때는 확장하기 전에 확장하는 것이 좋습니다. 즉, 성능이 낮은 기기를 여러 대 사용하기 전에 더 크고 성능이 우수한 기기를 선택해야 합니다. 다음과 같은 방식으로 확장하는 것이 좋습니다.
- 단일 작업자 + 단일 기기
- 단일 작업자 + 더 강력한 기기
- 단일 작업자 + 여러 기기
- 분산형 학습
ANN 벡터 검색의 지연 시간에 대한 재현율 평가
ANN 검색의 이점을 평가하려면 지정된 쿼리의 지연 시간과 재현률을 측정하면 됩니다. 색인 조정에 도움이 되도록 Vertex AI 벡터 검색은 무차별 대입 색인을 만들 수 있는 기능을 제공합니다. 무작위 대입 색인은 지연 시간이 길어지더라도 포괄적인 검색을 수행하여 지정된 쿼리 벡터의 실제 최근접 이웃을 찾습니다. 무작위 대입 색인은 프로덕션용으로 사용되지는 않지만 색인 조정 중에 재현율을 계산할 때 유용한 기준을 제공합니다.
지연 시간에 대한 재현율을 평가하려면 사전 계산된 후보 임베딩을 ANN 검색용으로 구성된 색인과 무작위 대입 검색용으로 구성된 다른 색인에 배포합니다. 무차별 대입 색인은 절대적인 최근접 이웃을 반환하지만 일반적으로 ANN 검색보다 시간이 더 오래 걸립니다. 검색 지연 시간을 줄이기 위해 검색 검색 결과의 일부를 희생할 수는 있지만 이러한 절충점을 평가해야 합니다. 재현율과 지연 시간에 영향을 미치는 추가 특성은 다음과 같습니다.
- 모델링 매개변수: 많은 모델링 결정은 궁극적으로 게재 색인이 되는 삽입 공간에 영향을 미칩니다. 얕은 검색 모델과 심층 검색 모델에서 모두 빌드된 색인을 위해 검색된 후보를 비교합니다.
- 측정기준: 측정기준은 궁극적으로 모델에 의해 결정되는 또 다른 측면입니다. ANN 색인의 차원은 쿼리 및 후보 타워 벡터의 차원과 일치해야 합니다.
- 태그 그룹화 및 필터링: 태그는 다양한 프로덕션 사용 사례에 맞게 결과를 조정하는 강력한 기능을 제공할 수 있습니다. 태그가 검색된 후보에 미치는 영향과 실적에 미치는 영향을 이해하는 것이 좋습니다.
- ANN 개수: 이 값을 늘리면 재현율이 증가하고 지연 시간이 비례하여 증가할 수 있습니다.
- 검색할 리프 노드의 비율: 검색할 리프 노드의 비율은 지연 시간 절충에 대한 검색 결과 검색률을 평가하는 데 가장 중요한 옵션입니다. 이 값을 늘리면 재현율이 증가하고 지연 시간도 비례해 증가할 수 있습니다.
다음 단계
그 밖의 참조 아키텍처, 다이어그램, 튜토리얼, 권장사항을 알아보려면 클라우드 아키텍처 센터를 확인하세요.
참여자
저자:
기타 참여자: 카즈 사토 | 직원 Developer Advocate