HEY를 사용한 Vertex AI 온라인 예측 기준 테스트

1. 소개

이 튜토리얼에서는 HEY 웹 성능 도구를 사용하여 us-central1 및 us-west1에서 us-central1에 배포된 예측 엔드포인트에 대한 기준 테스트를 수행할 때 Cloud Monitoring 온라인 예측 측정항목을 만들고 평가하는 방법을 설명합니다.

빌드할 항목

us-west1 및 us-central1의 서브넷과 인스턴스로 구성된 goall-vpc라는 VPC 네트워크를 설정합니다. 이 네트워크는 us-central1에 배포된 온라인 예측 및 모델을 타겟팅하는 HEY를 사용하여 트래픽을 생성하는 데 사용됩니다.

온프레미스 및 멀티 클라우드 환경에서 PSC를 활용하여 googleapis에 액세스하는 방법을 보여주기 위해 Private Service Connect와 비공개 DNS도 가이드에 통합되어 있습니다.

이 가이드에서는 Cloud Monitoring 및 Network Intelligence를 사용하여 HEY에서 온라인 예측으로 생성된 트래픽을 검증합니다. 이 튜토리얼에서 설명하는 단계는 VPC에 배포되지만, 이 단계를 활용하여 온프레미스 또는 멀티 클라우드 환경에서 Vertex APIS의 기준을 배포하고 얻을 수 있습니다. 네트워크 아키텍처는 아래의 구성요소로 구성됩니다.

dd5c102ce1ab0150.png

다음은 사용 사례의 세부정보입니다.

  1. HEY를 사용하여 us-west1의 GCE 인스턴스에서 us-central1의 온라인 예측 액세스
  2. Vertex API에 액세스하는 데 PSC가 사용되고 있는지 확인
  3. HEY를 사용하여 5분 동안 curl 수행
  4. Cloud Monitoring을 사용하여 지연 시간 검증
  5. Network Intelligence를 사용하여 리전 간 지연 시간 검증
  6. HEY를 사용하여 us-central1의 GCE 인스턴스에서 us-central1의 온라인 예측 액세스
  7. Vertex API에 액세스하는 데 PSC가 사용되고 있는지 확인
  8. HEY를 사용하여 5분 동안 curl 수행
  9. Cloud Monitoring을 사용하여 지연 시간 검증
  10. Network Intelligence를 사용하여 리전 내 지연 시간 검증

학습할 내용

  • Private Service Connect 엔드포인트를 설정하는 방법
  • HEY를 사용하여 온라인 예측에 부하를 생성하는 방법
  • Cloud Monitoring을 사용하여 Vertex AI 측정항목을 만드는 방법을 알아봅니다.
  • Network Intelligence를 사용하여 내부 및 리전 간 지연 시간

필요한 항목

  • Google Cloud 프로젝트

IAM 권한

Compute 네트워크 관리자

Compute 네트워크 관리자

서비스 디렉터리 편집자

DNS 관리자

네트워크 관리 뷰어

2. 시작하기 전에

튜토리얼을 지원하도록 프로젝트 업데이트

이 튜토리얼에서는 $variables를 사용하여 Cloud Shell에서 gcloud 구성을 구현하는 데 도움을 줍니다.

Cloud Shell 내에서 다음을 수행합니다.

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid

3. goal-vpc 설정

Goal-vpc 만들기

gcloud 서비스는 networkmanagement.googleapis.com을 사용 설정함

Cloud Shell 내에서 다음을 수행합니다.

gcloud compute networks create aiml-vpc --project=$projectid --subnet-mode=custom

Cloud Shell 내에서 Network Intelligence용 네트워크 관리 API를 사용 설정합니다.

gcloud services enable networkmanagement.googleapis.com

사용자 관리 노트북 서브넷 만들기

Cloud Shell 내에서 Workbench-서브넷을 만듭니다.

gcloud compute networks subnets create workbench-subnet --project=$projectid --range=172.16.10.0/28 --network=aiml-vpc --region=us-central1 --enable-private-ip-google-access

Cloud Shell 내에서 us-west1-subnet을 만듭니다.

gcloud compute networks subnets create us-west1-subnet --project=$projectid --range=192.168.10.0/28 --network=aiml-vpc --region=us-west1

Cloud Shell 내에서 us-central1-subnet을 만듭니다.

gcloud compute networks subnets create us-central1-subnet --project=$projectid --range=192.168.20.0/28 --network=aiml-vpc --region=us-central1

Cloud Router 및 NAT 구성

GCE 인스턴스에는 외부 IP 주소가 없기 때문에 튜토리얼에서 소프트웨어 패키지를 다운로드하는 데 Cloud NAT가 사용됩니다. Cloud NAT는 이그레스 NAT 기능을 제공합니다. 즉, 인터넷 호스트가 사용자 관리 노트북과 통신을 시작할 수 없으므로 보안이 향상됩니다.

Cloud Shell 내에서 리전별 클라우드 라우터인 us-west1을 만듭니다.

gcloud compute routers create cloud-router-us-west1-aiml-nat --network aiml-vpc --region us-west1

Cloud Shell 내에서 리전별 Cloud NAT 게이트웨이인 us-west1을 만듭니다.

gcloud compute routers nats create cloud-nat-us-west1 --router=cloud-router-us-west1-aiml-nat --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-west1

Cloud Shell 내에서 리전별 클라우드 라우터인 us-central1을 만듭니다.

gcloud compute routers create cloud-router-us-central1-aiml-nat --network aiml-vpc --region us-central1

Cloud Shell 내에서 리전별 Cloud NAT 게이트웨이인 us-central1을 만듭니다.

gcloud compute routers nats create cloud-nat-us-central1 --router=cloud-router-us-central1-aiml-nat --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1

4. Private Service Connect 엔드포인트 만들기

다음 섹션에서는 subjectl-vpc에서 Vertex API에 액세스하는 데 사용할 Private Service Connect (PSC) 엔드포인트를 만듭니다.

Cloud Shell 사용

gcloud compute addresses create psc-ip \
    --global \
    --purpose=PRIVATE_SERVICE_CONNECT \
    --addresses=100.100.10.10 \
    --network=aiml-vpc

'pscendpointip' 저장 실습 기간 동안

pscendpointip=$(gcloud compute addresses list --filter=name:psc-ip --format="value(address)")

echo $pscendpointip

PSC 엔드포인트 만들기

Cloud Shell 사용

gcloud compute forwarding-rules create pscvertex \
    --global \
    --network=aiml-vpc \
    --address=psc-ip \
    --target-google-apis-bundle=all-apis

구성된 Private Service Connect 엔드포인트 나열

Cloud Shell 사용

gcloud compute forwarding-rules list  \
--filter target="(all-apis OR vpc-sc)" --global

구성된 Private Service Connect 엔드포인트 설명

Cloud Shell 사용

gcloud compute forwarding-rules describe \
    pscvertex --global

5. GCE 인스턴스용 서비스 계정 만들기

Vertex API에 대한 세밀한 제어를 제공하려면 서부 및 중앙 인스턴스에 적용될 사용자 관리 서비스 계정이 필요합니다. 생성된 서비스 계정 권한은 비즈니스 요구사항에 따라 수정할 수 있습니다. 이 튜토리얼에서는 사용자 관리형 서비스 계정인 vertex-sa에 다음 역할이 적용됩니다.

계속하기 전에 Service Account API를 해야 합니다.

Cloud Shell 내에서 서비스 계정을 만듭니다.

gcloud iam service-accounts create vertex-gce-sa \
    --description="service account for vertex" \
    --display-name="vertex-sa"

Cloud Shell 내에서 컴퓨팅 인스턴스 관리자 역할로 서비스 계정을 업데이트합니다.

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:vertex-gce-sa@$projectid.iam.gserviceaccount.com" --role="roles/compute.instanceAdmin.v1"

Cloud Shell 내에서 Vertex AI 사용자 역할로 서비스 계정을 업데이트합니다.

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:vertex-gce-sa@$projectid.iam.gserviceaccount.com" --role="roles/aiplatform.user"

6. 사용자 관리형 서비스 계정 만들기 (노트북)

다음 섹션에서는 튜토리얼에 사용되는 Vertex Workbench (노트북)와 연결할 사용자 관리형 서비스 계정을 만듭니다.

이 가이드에서는 서비스 계정에 다음 규칙이 적용됩니다.

Cloud Shell 내에서 서비스 계정을 만듭니다.

gcloud iam service-accounts create user-managed-notebook-sa \
    --display-name="user-managed-notebook-sa"

Cloud Shell 내에서 스토리지 관리자 역할로 서비스 계정을 업데이트합니다.

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:user-managed-notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/storage.admin"

Cloud Shell 내에서 Vertex AI 사용자 역할로 서비스 계정을 업데이트합니다.

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:user-managed-notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/aiplatform.user"

Cloud Shell 내에서 Artifact Registry 관리자 역할로 서비스 계정을 업데이트합니다.

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:user-managed-notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/artifactregistry.admin"

Cloud Shell 내에서 서비스 계정을 나열하고 사용자 관리 노트북을 만들 때 사용할 이메일 주소를 기록합니다.

gcloud iam service-accounts list

7. 테스트 인스턴스 만들기

다음 섹션에서는 us-west1 및 us-central1에서 기준 테스트를 수행하는 테스트 인스턴스를 만듭니다.

Cloud Shell 내에서 west-client를 만듭니다.

gcloud compute instances create west-client \
    --zone=us-west1-a \
    --image-family=debian-11 \
    --image-project=debian-cloud \
    --subnet=us-west1-subnet \
    --scopes=https://www.googleapis.com/auth/cloud-platform \
    --no-address \
    --shielded-secure-boot --service-account=vertex-gce-sa@$projectid.iam.gserviceaccount.com \
    --metadata startup-script="#! /bin/bash
      sudo apt-get update
      sudo apt-get install tcpdump dnsutils -y"

Cloud Shell 내에서 central-client를 만듭니다.

gcloud compute instances create central-client \
    --zone=us-central1-a \
    --image-family=debian-11 \
    --image-project=debian-cloud \
    --subnet=us-central1-subnet \
    --scopes=https://www.googleapis.com/auth/cloud-platform \
    --no-address \
    --shielded-secure-boot --service-account=vertex-gce-sa@$projectid.iam.gserviceaccount.com \
    --metadata startup-script="#! /bin/bash
      sudo apt-get update
      sudo apt-get install tcpdump dnsutils -y"

IAP에서 VM 인스턴스에 연결할 수 있도록 허용하려면 다음과 같은 방화벽 규칙을 만듭니다.

  • IAP를 사용하여 액세스할 수 있게 하려는 모든 VM 인스턴스에 적용됩니다.
  • IP 범위 35.235.240.0/20에서 들어오는 인그레스 트래픽을 허용합니다. 이 범위에는 IAP가 TCP 전달에 사용하는 모든 IP 주소가 포함됩니다.

Cloud Shell 내에서 IAP 방화벽 규칙을 만듭니다.

gcloud compute firewall-rules create ssh-iap-vpc \
    --network aiml-vpc \
    --allow tcp:22 \
    --source-ranges=35.235.240.0/20

8. 사용자 관리 노트북 만들기

노트북 API

다음 섹션에서는 이전에 만든 서비스 계정 user-managed-notebook-sa를 포함하는 사용자 관리 노트북을 만듭니다.

Cloud Shell 내에서 비공개 클라이언트 인스턴스를 만듭니다.

gcloud notebooks instances create workbench-tutorial \
      --vm-image-project=deeplearning-platform-release \
      --vm-image-family=common-cpu-notebooks \
      --machine-type=n1-standard-4 \
      --location=us-central1-a \
      --subnet-region=us-central1 \
      --shielded-secure-boot \
      --subnet=workbench-subnet \
      --no-public-ip    --service-account=user-managed-notebook-sa@$projectid.iam.gserviceaccount.com

Vertex AI → Workbench로 이동하여 배포된 노트북을 확인합니다.

b02fcb9b07dca06a.png

9. 모델 및 온라인 예측 배포

다음 섹션에서는 제공된 Codelab, Vertex AI:Sklearn과 함께 커스텀 예측 루틴을 사용하여 예측을 위한 데이터 사전 처리 및 사후 처리를 사용합니다. 이전 단계에서 이미 노트북을 만들었으므로 섹션 7부터 시작합니다. 모델이 배포되면 튜토리얼로 돌아가서 다음 섹션을 시작하세요.

ee68b7ba0cfd2746.png

10. 온라인 예측용 커스텀 모니터링 대시보드 만들기

온라인 예측은 VERTEX AI → 온라인 예측 → 엔드포인트 이름 (diamonds-cpr_endpoint)에 기본 모니터링 대시보드를 만듭니다. 하지만 테스트의 경우 시작 및 중지 시간을 정의해야 하므로 커스텀 대시보드가 필요합니다.

다음 섹션에서는 us-west1 및 us-central에 배포된 GCE 인스턴스에서 us-central1의 엔드포인트에 액세스할 때 다양한 지연 시간을 검증하기 위해 온라인 예측 엔드포인트에 대한 리전별 액세스를 기반으로 지연 시간 측정을 얻는 Cloud Monitoring 측정항목을 만듭니다.

이 튜토리얼에서는 Prediction_latencies 측정항목을 사용하며 aiplatform에서 추가 측정항목을 사용할 수 있습니다.

측정항목

설명

prediction/online/prediction_latencies

배포된 모델의 온라인 예측 지연 시간입니다.

predict_latencies 측정항목 차트 만들기

Cloud 콘솔에서 모니터링 → 측정항목 탐색기로 이동

536668ab0b29d77.png

측정항목 prediction/online/prediction_latencies를 삽입하고 다음 옵션을 선택한 후 적용을 선택합니다.

c1edd34208cb5ee2.png

다음 옵션에 따라 그룹화 기준을 업데이트하려면 차트 저장을 선택합니다.

e180a5d8a044b6e1.png

d2ecd6677a3b34e0.png

저장을 선택하면 대시보드를 선택하라는 메시지가 표시됩니다. '새 대시보드'를 선택하고 이름을 입력합니다.

e29a39dc941c8599.png

Vertex 커스텀 대시보드

다음 섹션에서 Vertex 커스텀 대시보드가 올바른 시간을 표시하는지 확인합니다.

모니터링 → 대시보드로 이동하여 Vertex 커스텀 대시보드를 선택하고 시간을 선택합니다. 시간대가 올바른지 확인합니다.

f43ebed798ce1147.png

테이블 보기를 얻으려면 범례를 펼쳐야 합니다.

61ffeef22e067ca9.png

확장형 뷰의 예:

9027e8785c023129.png

11. PSC 엔드포인트용 비공개 DNS 만들기

목표-vpc에 비공개 DNS 영역을 만들어 PSC 엔드포인트 IP 주소 100.100.10.10에 대한 모든 googleapis을 확인합니다.

Cloud Shell에서 비공개 DNS 영역을 만듭니다.

gcloud dns --project=$projectid managed-zones create psc-googleapis --description="Private Zone to resolve googleapis to a PSC endpoint" --dns-name="googleapis.com." --visibility="private" --networks="https://www.googleapis.com/compute/v1/projects/$projectid/global/networks/aiml-vpc"

Cloud Shell에서 *를 연결하는 A 레코드를 만듭니다. googleapis.com을 PSC IP에 연결할 수 있습니다.

gcloud dns --project=$projectid record-sets create *.googleapis.com. --zone="psc-googleapis" --type="A" --ttl="300" --rrdatas="100.100.10.10"

12. Hey 테스트 변수

Hey는 최종 사용자에게 네트워크 및 애플리케이션 요구사항에 따라 테스트를 맞춤설정할 수 있는 기능을 제공합니다. 이 가이드에서는 샘플 실행 문자열과 함께 아래에 설명된 옵션을 사용합니다.

c == 작업자 1개

z == 기간

m == HTTP 메서드 POST

D == 파일의 HTTP 요청 본문, instances.json

n == 실행할 요청 수. 기본값은 200입니다.

HEY가 포함된 curl 문자열 예 (실행 필요 없음)

user@us-central$ ./hey_linux_amd64 -c 1 -z 1m -m POST -D instances.json  -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://us-central1-aiplatform.googleapis.com/v1/projects/${projectid$}/locations/us-central1/endpoints/${ENDPOINT_ID}:predict

13. 예측 ID 가져오기

Cloud 콘솔에서 후속 단계에서 사용할 온라인 예측 엔드포인트 ID를 가져옵니다.

Vertex AI → 온라인 예측으로 이동합니다.

ce4d4a88a3fa2345.png

14. HEY (us-west1) 다운로드 및 실행

다음 섹션에서는 west-client에 로그인하여 us-central1에 있는 온라인 예측에 대해 HEY를 다운로드하고 실행합니다.

Cloud Shell에서 west-client에 로그인하고 HEY를 다운로드합니다.

gcloud compute ssh west-client --project=$projectid --zone=us-west1-a --tunnel-through-iap

OS에서 HEY를 다운로드하고 권한을 업데이트합니다.

wget https://hey-release.s3.us-east-2.amazonaws.com/hey_linux_amd64
chmod +x hey_linux_amd64

OS에서 다음 변수를 만듭니다.

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid
ENDPOINT_ID="insert-your-endpoint-id-here"

예:

ENDPOINT_ID="2706243362607857664"

다음 섹션에서는 vi 편집기 또는 nano를 사용하여 instances.json 파일을 만들고 배포된 모델에서 예측을 얻는 데 사용되는 데이터 문자열을 삽입합니다.

west-client OS에서 아래의 데이터 문자열로 instances.json 파일을 만듭니다.

{"instances": [
  [0.23, 'Ideal', 'E', 'VS2', 61.5, 55.0, 3.95, 3.98, 2.43],
  [0.29, 'Premium', 'J', 'Internally Flawless', 52.5, 49.0, 4.00, 2.13, 3.11]]}

예:

user@west-client:$ more instances.json 
{"instances": [
  [0.23, 'Ideal', 'E', 'VS2', 61.5, 55.0, 3.95, 3.98, 2.43],
  [0.29, 'Premium', 'J', 'Internally Flawless', 52.5, 49.0, 4.00, 2.13, 3.11]]}

user@west-client:$

사전 테스트

OS에서 curl을 실행하여 모델과 예측 엔드포인트가 제대로 작동하는지 확인합니다. 상세 로그의 PSC 엔드포인트 IP와 성공을 나타내는 HTTP/2 200을 확인하세요.

curl -v -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://us-central1-aiplatform.googleapis.com/v1/projects/${projectid}/locations/us-central1/endpoints/${ENDPOINT_ID}:predict -d @instances.json

예를 들어 예측 및 있습니다.

user@west-client:$ curl -v -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://us-central1-aiplatform.googleapis.com/v1/projects/${projectid}/locations/us-central1/endpoints/${ENDPOINT_ID}:predict -d @instances.json
Note: Unnecessary use of -X or --request, POST is already inferred.
*   Trying 100.100.10.10:443...
* Connected to us-central1-aiplatform.googleapis.com (100.100.10.10) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN, server accepted to use h2
* Server certificate:
*  subject: CN=upload.video.google.com
*  start date: Jul 31 08:22:19 2023 GMT
*  expire date: Oct 23 08:22:18 2023 GMT
*  subjectAltName: host "us-central1-aiplatform.googleapis.com" matched cert's "*.googleapis.com"
*  issuer: C=US; O=Google Trust Services LLC; CN=GTS CA 1C3
*  SSL certificate verify ok.
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* Using Stream ID: 1 (easy handle 0x55a9f38b42c0)
> POST /v1/projects/new-test-project-396322/locations/us-central1/endpoints/2706243362607857664:predict HTTP/2
> Host: us-central1-aiplatform.googleapis.com
> user-agent: curl/7.74.0
> accept: */*
> authorization: Bearer ya29.c.b0Aaekm1LqrcaOlWFFwuEOWX_tZVXXvJgN_K-u5_hFyEAYXAi3AnBEBwwtHS8dweW_P2QGfdyFfa31nMT_6BaKBI0mC9IsfzfIiUwXc8u2yJt01gTUSJpCmGAFKZKidRMgkPYivVYCnuymzdYbRAWacIe__StkRzI9UeQOGN3jNIeESr80AdH12goaxCFXWaNWxoYRfGVhekEgUcsKs7t1OhOM-937gy4YGkXcXa8sGuHWRqF5bnulYlTqlxqQ2aAxMTrQg2lwUWRGCmGhPrym7rXJq7oim0DkAJSbAarl1qFuz0PPfNXeHGbs13zY2r1giV7u8_w4Umj_Q5M7H9fTkq7EiqnLzqRkOHXismYL368P1jOUBYM__krFQt4M3X9RJa0g01tOw3FnOh27BmUqlFQ1J2h14JZpx215Q3xzRvgfJ5iW5YYSkv67uZRQk4V04naOUXyc0plzWuVOjj4nor3fYvkS_oW0IyxJoBjeXR16Vnvln8c04svWX9dt7eobczFvBOm9nVdh4lVp8qxbp__2WtMvc1QVg6y-2i6lRpbvmyp1oadxVRjxV1e0wiQFSe-qqsinJu3bnnaMbxdU2cu5j26o8o8Xpgo0SF1UM0b1WX84iatbWpdFSphZm1llwmRagMzcFBW0aBk-i35_bXSbzwURgMfY6Qbyb9Rv9y0F-Maf34I0WxiMldv2uc57nej7dVl9OSm_Ohnro-i9zcpq9fxo9soYVB8WjaZOUjauk4znstc2_6y4atcVVsQBkeU674biR567Ri3M74Jfv4MrrF02ObfrJRdB7UJ4MU_9kWW-kYeeJzoci15UqYV0f_yJgReBwQa66Supmebee2Sn2nku6xZkRMu5Mz55mXuva0XWrpIbor7WckSsXwUFbf7rj5ipa4mOOyf2hJe1Rq0x6yeBaariRzXrhfm5bBpFBU73-zd-IekvOji0ZJQSkk0o6gpX_794Jny7j14aQJ8VxezcFpZUztimYhMnRhlO2lqms1h0h48
> content-type: application/json
> content-length: 158
> 
* Connection state changed (MAX_CONCURRENT_STREAMS == 100)!
* We are completely uploaded and fine
< HTTP/2 200 
< x-vertex-ai-internal-prediction-backend: harpoon
< content-type: application/json; charset=UTF-8
< date: Sun, 20 Aug 2023 03:51:54 GMT
< vary: X-Origin
< vary: Referer
< vary: Origin,Accept-Encoding
< server: scaffolding on HTTPServer2
< cache-control: private
< x-xss-protection: 0
< x-frame-options: SAMEORIGIN
< x-content-type-options: nosniff
< accept-ranges: none
< 
{
  "predictions": [
    "$479.0",
    "$586.0"
  ],
  "deployedModelId": "3587550310781943808",
  "model": "projects/884291964428/locations/us-central1/models/6829574694488768512",
  "modelDisplayName": "diamonds-cpr",
  "modelVersionId": "1"
}
* Connection #0 to host us-central1-aiplatform.googleapis.com left intact

HEY 실행

OS에서 HEY를 실행하여 10분 기준 테스트를 사용 설정합니다.

./hey_linux_amd64 -c 1 -z 10m -m POST -D instances.json  -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://us-central1-aiplatform.googleapis.com/v1/projects/$projectid/locations/us-central1/endpoints/${ENDPOINT_ID}:predict

15. Hey Validation (us-west1)

이제 us-west1의 컴퓨팅 인스턴스에서 Hey를 실행했으므로 다음 결과를 평가합니다.

  • HEY 결과
  • Vertex 커스텀 대시보드
  • 네트워크 인텔리전스

HEY 결과

OS에서 10분 실행을 기준으로 HEY 결과를 검증해 보겠습니다.

초당 요청 17.5826개

0.0686초 내에 99% | 68 ms

응답 10,550개와 상태 코드 200

user@west-client:$ ./hey_linux_amd64 -c 1 -z 10m -m POST -D instances.json  -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://us-central1-aiplatform.googleapis.com/v1/projects/$projectid/locations/us-central1/endpoints/${ENDPOINT_ID}:predict

Summary:
  Total:        600.0243 secs
  Slowest:      0.3039 secs
  Fastest:      0.0527 secs
  Average:      0.0569 secs
  Requests/sec: 17.5826
  

Response time histogram:
  0.053 [1]     |
  0.078 [10514] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  0.103 [16]    |
  0.128 [4]     |
  0.153 [3]     |
  0.178 [1]     |
  0.203 [0]     |
  0.229 [2]     |
  0.254 [1]     |
  0.279 [5]     |
  0.304 [3]     |


Latency distribution:
  10% in 0.0546 secs
  25% in 0.0551 secs
  50% in 0.0559 secs
  75% in 0.0571 secs
  90% in 0.0596 secs
  95% in 0.0613 secs
  99% in 0.0686 secs

Details (average, fastest, slowest):
  DNS+dialup:   0.0000 secs, 0.0527 secs, 0.3039 secs
  DNS-lookup:   0.0000 secs, 0.0000 secs, 0.0116 secs
  req write:    0.0000 secs, 0.0000 secs, 0.0002 secs
  resp wait:    0.0567 secs, 0.0526 secs, 0.3038 secs
  resp read:    0.0001 secs, 0.0001 secs, 0.0696 secs

Status code distribution:
  [200] 10550 responses

Vertex 커스텀 대시보드

MONITORING → Dashboard로 이동하여 Vertex 커스텀 대시보드를 선택합니다. 10분을 입력하거나 시작 및 중지 시간을 지정합니다. 시간대가 올바른지 확인합니다.

4102b1d0438c78e3.png

예측 지연 시간의 정의를 살펴보면 모델에서 응답을 얻은 후 클라이언트 요청에 응답하는 총 시간을 측정하는 서버 측 측정항목을 확인할 수 있습니다.

  • 총 지연 시간 기간: 요청이 서비스에서 소요된 총 시간으로, 모델 지연 시간에 오버헤드 지연 시간을 더한 값입니다.

반대로 HEY는 다음 매개변수를 고려하는 클라이언트 측 측정항목입니다.

클라이언트 요청 + 총 지연 시간 (모델 지연 시간 포함) + 클라이언트 응답

네트워크 인텔리전스

이제 Network Intelligence에서 보고한 리전 간 네트워크 지연 시간을 살펴보고 Google Cloud Platform에서 보고하는 us-west1에서 us-central1까지의 지연 시간에 대해 알아보겠습니다.

Cloud 콘솔 네트워크 인텔리전스 → 성능 대시보드로 이동하여 아래 스크린샷에 나와 있는 다음 옵션을 선택합니다. 지연 시간이 32~39ms임을 나타냅니다.

aade5f757115721.png

HEY us-west1 기준 요약

테스트 도구별로 총 지연 시간 보고서를 비교하면 HEY에서 보고한 지연 시간이 거의 동일합니다. 리전 간 지연 시간은 지연 시간의 상당 부분을 차지합니다. 다음 일련의 테스트에서 중앙 클라이언트가 어떻게 작동하는지 살펴보겠습니다.

지연 시간 도구

기간

네트워크 인텔리전스: us-west1에서 us-central1로의 지연 시간

약 32~39ms

Cloud Monitoring: 총 예측 지연 시간[99%]

34.58 ms (99p)

Google에서 보고한 총 지연 시간

약 66.58~73.58ms

HEY 클라이언트 측 지연 시간 분포

68ms (99p)

16. HEY (us-central1) 다운로드 및 실행

다음 섹션에서는 central-client에 로그인하여 us-central1에 위치한 온라인 예측에 대해 HEY를 다운로드하고 실행합니다.

Cloud Shell에서 중앙 클라이언트에 로그인하고 HEY를 다운로드합니다.

gcloud compute ssh central-client --project=$projectid --zone=us-central1-a --tunnel-through-iap

OS에서 HEY를 다운로드하고 권한을 업데이트합니다.

wget https://hey-release.s3.us-east-2.amazonaws.com/hey_linux_amd64
chmod +x hey_linux_amd64

OS에서 다음 변수를 만듭니다.

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid
ENDPOINT_ID="insert-your-endpoint-id-here"

예:

ENDPOINT_ID="2706243362607857664"

다음 섹션에서는 vi 편집기 또는 nano를 사용하여 instances.json 파일을 만들고 배포된 모델에서 예측을 얻는 데 사용되는 데이터 문자열을 삽입합니다.

west-client OS에서 아래의 데이터 문자열로 instances.json 파일을 만듭니다.

{"instances": [
  [0.23, 'Ideal', 'E', 'VS2', 61.5, 55.0, 3.95, 3.98, 2.43],
  [0.29, 'Premium', 'J', 'Internally Flawless', 52.5, 49.0, 4.00, 2.13, 3.11]]}

예:

user@west-client:$ more instances.json 
{"instances": [
  [0.23, 'Ideal', 'E', 'VS2', 61.5, 55.0, 3.95, 3.98, 2.43],
  [0.29, 'Premium', 'J', 'Internally Flawless', 52.5, 49.0, 4.00, 2.13, 3.11]]}

user@west-client:$

사전 테스트

OS에서 curl을 실행하여 모델과 예측 엔드포인트가 제대로 작동하는지 확인합니다. 상세 로그의 PSC 엔드포인트 IP와 성공을 나타내는 HTTP/2 200을 확인하세요.

curl -v -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://us-central1-aiplatform.googleapis.com/v1/projects/${projectid}/locations/us-central1/endpoints/${ENDPOINT_ID}:predict -d @instances.json

예를 들어 예측 및 있습니다.

user@central-client:~$ curl -v -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://us-central1-aiplatform.googleapis.com/v1/projects/${projectid}/locations/us-central1/endpoints/${ENDPOINT_ID}:predict -d @instances.json
Note: Unnecessary use of -X or --request, POST is already inferred.
*   Trying 100.100.10.10:443...
* Connected to us-central1-aiplatform.googleapis.com (100.100.10.10) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN, server accepted to use h2
* Server certificate:
*  subject: CN=upload.video.google.com
*  start date: Jul 31 08:22:19 2023 GMT
*  expire date: Oct 23 08:22:18 2023 GMT
*  subjectAltName: host "us-central1-aiplatform.googleapis.com" matched cert's "*.googleapis.com"
*  issuer: C=US; O=Google Trust Services LLC; CN=GTS CA 1C3
*  SSL certificate verify ok.
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* Using Stream ID: 1 (easy handle 0x559b57adc2c0)
> POST /v1/projects/new-test-project-396322/locations/us-central1/endpoints/2706243362607857664:predict HTTP/2
> Host: us-central1-aiplatform.googleapis.com
> user-agent: curl/7.74.0
> accept: */*
> authorization: Bearer ya29.c.b0Aaekm1KWqq-CIXuL6f1cx9d9jHHquQq9tlSV1oVZ1y3TACi82JFFZRwsagVY7MMovycsU4PLkt9MDMkNngxZE5RzXcS-AoaUaQf1tPT9-_JMTlFI6wCcR7Yr9MeRF5AZblr_k52ZZgEZKeYGcrXoGiqGQcAAwFtHiEVAkUhLuyukteXbMoep1JM9E0zFblJj7Z0yOCMJYBH-6XHcIDYnOKpStMVBR2wcTDbnFrCE08HXbvRnQVcENatTBoI9FzSVL1ORwqUiCcdfnTSjpIXcyD-W82d6ZHjGX_RUhfnH7RPfOJqkuU8pOovwoCjq_jvM_wJUfPuQnBKHp5rxbYxPE349DMBql62po2SWFguuFo-a2eoUnb8-FQeBZqan65zgV0lexR73gZlm071y9grlXv3fmJUo7vlj5W-7_-FJXaWWg8iWc6rmjYeO1Wz2h_8qnmojkX9xSUciI6JfmwdgMWwtvwJb63ppSmdwf8oagrYiQlpMzgRI6rekbRzg-1WOBeOf5nRg5vtxUMSc9iRaoarO5XwFX8vt7rxOUBvbXYVWmo3bsdhzsS9VopMwgMlxgcIJg7bq7_F3iapB-nRjfjfhZWpR83cWIkI2Wb9f89inpsxtYjZbbzdWkZvRB8FYSsY8F8tcpiVoWWyQWZiph9z7O59fF9irWY2gtUnbFcJJ_ZcYztjlMQaR45y42ZflkM3Qn668bzge3Y3hmVI1s6ZSmxxq6m27hoMwVn21R07Y613jwljmaFJ5V8MwkR6yvFhYngrh_JrhRUQtSSMh02Rz25wMfv7g8Fiqymr-12viM4btIFjXZBM3XFqzvso_rw1omI1yYWofmbaBYggpegpJBzSeqVUZe791agjVtiMUkyjXFy__9gI0Qk9ZUarI4p25SvS4I1hX4YyBk6ol32Z5zIsVr1Seff__aklm6M2Mlkumd7nurm46hjOIoOhFpfFxrQ6yivnhYapBOJMYirgbZvigvI3dom1fnmt0-ktmRxp69w7Uzzy
> content-type: application/json
> content-length: 158
> 
* Connection state changed (MAX_CONCURRENT_STREAMS == 100)!
* We are completely uploaded and fine
< HTTP/2 200 
< x-vertex-ai-internal-prediction-backend: harpoon
< date: Sun, 20 Aug 2023 22:25:31 GMT
< content-type: application/json; charset=UTF-8
< vary: X-Origin
< vary: Referer
< vary: Origin,Accept-Encoding
< server: scaffolding on HTTPServer2
< cache-control: private
< x-xss-protection: 0
< x-frame-options: SAMEORIGIN
< x-content-type-options: nosniff
< accept-ranges: none
< 
{
  "predictions": [
    "$479.0",
    "$586.0"
  ],
  "deployedModelId": "3587550310781943808",
  "model": "projects/884291964428/locations/us-central1/models/6829574694488768512",
  "modelDisplayName": "diamonds-cpr",
  "modelVersionId": "1"
}
* Connection #0 to host us-central1-aiplatform.googleapis.com left intact

HEY 실행

OS에서 HEY를 실행하여 10분 기준 테스트를 사용 설정합니다.

./hey_linux_amd64 -c 1 -z 10m -m POST -D instances.json  -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://us-central1-aiplatform.googleapis.com/v1/projects/$projectid/locations/us-central1/endpoints/${ENDPOINT_ID}:predict

17. Hey Validation (us-central1)

이제 us-central1의 컴퓨팅 인스턴스에서 Hey를 실행했으므로 다음과 같은 결과를 평가합니다.

  • HEY 결과
  • Vertex 커스텀 대시보드
  • 네트워크 인텔리전스

HEY 결과

OS에서 10분 실행을 기준으로 HEY 결과를 검증해 보겠습니다.

초당 요청 44.9408개

0.0353초 내에 99% | 35 ms

200 상태 코드가 있는 26965 응답

devops_user_1_deepakmichael_alto@central-client:~$ ./hey_linux_amd64 -c 1 -z 10m -m POST -D instances.json  -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://us-central1-aiplatform.googleapis.com/v1/projects/$projectid/locations/us-central1/endpoints/${ENDPOINT_ID}:predict

Summary:
  Total:        600.0113 secs
  Slowest:      0.3673 secs
  Fastest:      0.0184 secs
  Average:      0.0222 secs
  Requests/sec: 44.9408
  

Response time histogram:
  0.018 [1]     |
  0.053 [26923] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  0.088 [25]    |
  0.123 [4]     |
  0.158 [0]     |
  0.193 [1]     |
  0.228 [9]     |
  0.263 [1]     |
  0.298 [0]     |
  0.332 [0]     |
  0.367 [1]     |


Latency distribution:
  10% in 0.0199 secs
  25% in 0.0205 secs
  50% in 0.0213 secs
  75% in 0.0226 secs
  90% in 0.0253 secs
  95% in 0.0273 secs
  99% in 0.0353 secs

Details (average, fastest, slowest):
  DNS+dialup:   0.0000 secs, 0.0184 secs, 0.3673 secs
  DNS-lookup:   0.0000 secs, 0.0000 secs, 0.0079 secs
  req write:    0.0000 secs, 0.0000 secs, 0.0007 secs
  resp wait:    0.0220 secs, 0.0182 secs, 0.3672 secs
  resp read:    0.0002 secs, 0.0001 secs, 0.0046 secs

Status code distribution:
  [200] 26965 responses

Vertex 커스텀 대시보드

모니터링 → 대시보드로 이동하여 Vertex 커스텀 대시보드를 선택하고 10m을 입력합니다. 또는 시작 및 중지 시간을 설정할 수 있습니다. 시간대가 올바른지 확인합니다.

지난 10분 동안의 예측 지연 시간은 30.533밀리초입니다.

예측 지연 시간의 정의를 살펴보면 모델에서 응답을 얻은 후 클라이언트 요청에 응답하는 총 시간을 측정하는 서버 측 측정항목을 확인할 수 있습니다.

  • 총 지연 시간 기간: 요청이 서비스에서 소요된 총 시간으로, 모델 지연 시간에 오버헤드 지연 시간을 더한 값입니다.

반대로 HEY는 다음 매개변수를 고려하는 클라이언트 측 측정항목입니다.

클라이언트 요청 + 총 지연 시간 (모델 지연 시간 포함) + 클라이언트 응답

네트워크 인텔리전스

이제 Network Intelligence에서 보고한 리전 내 네트워크 지연 시간을 살펴보고 Google Cloud Platform에서 보고하는 us-central1 지연 시간을 살펴보겠습니다.

Cloud 콘솔 네트워크 인텔리전스 → 성능 대시보드로 이동하여 아래 스크린샷에 나와 있는 다음 옵션을 선택하세요. 지연 시간이 0.2~0.8ms임을 나타냅니다.

eaa84848c3185fde.png

HEY us-central1 기준 요약

테스트 도구에서 보고한 총 지연 시간을 비교하면 동일한 리전의 컴퓨팅 (중앙 클라이언트) 및 Vertex 엔드포인트 (모델 및 온라인 예측)로 인해 west-클라이언트보다 지연 시간이 짧습니다.

지연 시간 도구

기간

네트워크 인텔리전스: us-central1 리전 내 지연 시간

약 0.2~0 .8밀리초

Cloud Monitoring: 총 예측 지연 시간[99%]

30.533 ms (99p)

Google에서 보고한 총 지연 시간

약 30.733~31.333밀리초

HEY 클라이언트 측 지연 시간

35 ms (99p)

18. 축하합니다

수고하셨습니다. Cloud Monitoring과 Network Intelligence의 조합을 사용하여 클라이언트 측 예측 기준 지연 시간을 얻을 수 있도록 HEY를 배포하고 검증했습니다. 테스트에 따르면 리전 간에 서비스를 제공할 수 있는 us-central의 예측 엔드포인트를 식별했지만 지연 시간이 관찰되었습니다.

Cosmopup은 튜토리얼이 멋지다고 생각합니다.

e6d3675ca7c6911f.jpeg

19. 삭제

Cloud Shell에서 튜토리얼 구성요소를 삭제합니다.

gcloud compute instances delete central-client --zone=us-central1-a -q

gcloud compute instances delete west-client --zone=us-west1-a -q

gcloud compute instances delete workbench-tutorial --zone=us-central1-a -q

gcloud compute forwarding-rules delete pscvertex --global --quiet 

gcloud compute addresses delete psc-ip --global --quiet

gcloud compute networks subnets delete workbench-subnet --region=us-central1 --quiet 

gcloud compute networks subnets delete us-west1-subnet --region=us-west1 --quiet

gcloud compute networks subnets delete us-central1-subnet --region=us-central1 --quiet

gcloud compute routers delete cloud-router-us-west1-aiml-nat --region=us-west1 --quiet

gcloud compute routers delete cloud-router-us-central1-aiml-nat --region=us-central1 --quiet

gcloud compute firewall-rules delete  ssh-iap-vpc --quiet

gcloud dns record-sets delete *.googleapis.com. --zone=psc-googleapis --type=A --quiet

gcloud dns managed-zones delete psc-googleapis --quiet

gcloud compute networks delete aiml-vpc --quiet

gcloud storage rm -r gs://$projectid-cpr-bucket

Cloud 콘솔에서 다음을 삭제했습니다.

Artifact Registry 폴더

99c17044e2f80919.png

Vertex AI Model Registry에서 모델 배포를 취소합니다.

f5b315f089ae6283.png

Vertex AI 온라인 예측에서 엔드포인트를 삭제합니다.

9b58688a5037de84.png

다음 단계

다음 튜토리얼을 확인하세요.

추가 자료 및 동영상

참조 문서