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

1. 소개

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

빌드할 항목

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

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

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

dd5c102ce1ab0150.png

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

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

학습할 내용

  • Private Service Connect 엔드포인트를 설정하는 방법
  • HEY를 사용하여 온라인 예측에 부하를 생성하는 방법
  • Cloud Monitoring을 사용하여 Vertex AI 측정항목을 만드는 방법
  • 네트워크 인텔리전스를 사용하여 리전 내 및 리전 간 지연 시간을 검증하는 방법

필요한 항목

  • Google Cloud 프로젝트

IAM 권한

Compute 네트워크 관리자

Compute 네트워크 관리자

서비스 디렉터리 편집자

DNS 관리자

네트워크 관리 뷰어

2. 시작하기 전에

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

이 튜토리얼에서는 Cloud Shell에서 gcloud 구성 구현을 지원하기 위해 $variables를 사용합니다.

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

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

3. aiml-vpc 설정

aiml-vpc 만들기

gcloud services enable networkmanagement.googleapis.com

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

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

Cloud Shell 내에서 네트워크 인텔리전스의 네트워크 관리 API를 사용 설정합니다.

gcloud services enable networkmanagement.googleapis.com

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

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

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 내에서 리전 Cloud Router 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 엔드포인트 만들기

다음 섹션에서는 aiml-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에는 다음 역할이 적용됩니다.

계속하기 전에 서비스 계정 API를 해야 합니다.

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

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

Cloud Shell 내에서 역할 compute instance admin으로 서비스 계정을 업데이트합니다.

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. 사용자 관리 서비스 계정 만들기 (Notebook)

다음 섹션에서는 튜토리얼에서 사용되는 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 내에서 private-client 인스턴스를 만듭니다.

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. 모델 및 온라인 예측 배포

다음 섹션에서는 제공된 코드랩,Vertex AI:Sklearn으로 커스텀 예측 루틴을 사용하여 예측을 위한 데이터 전처리 및 후처리에서 섹션 7부터 시작합니다. 이전 단계에서 이미 노트북을 만들었기 때문입니다. 모델이 배포되면 튜토리얼로 돌아와 다음 섹션을 시작합니다.

ee68b7ba0cfd2746.png

10. 온라인 예측을 위한 맞춤 모니터링 대시보드 만들기

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

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

튜토리얼에서는 prediction_latencies 측정항목을 사용합니다. 추가 측정항목은 aiplatform에서 확인할 수 있습니다.

측정항목

설명

prediction/online/prediction_latencies

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

prediction_latencies 측정항목의 차트 만들기

Cloud Console에서 모니터링 → 측정항목 탐색기로 이동합니다.

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 만들기

aiml-vpc에서 비공개 DNS 영역을 만들어 모든 googleapis를 PSC 엔드포인트 IP 주소 100.100.10.10로 확인합니다.

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에서 *. googleapis.com을 PSC IP와 연결하는 A 레코드를 만듭니다.

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

12. 변수 테스트

Hey는 최종 사용자가 네트워크 및 애플리케이션 요구사항에 따라 테스트를 맞춤설정할 수 있도록 지원합니다. 튜토리얼에서는 아래에 자세히 설명된 옵션을 샘플 실행 문자열과 함께 사용합니다.

c == 1 작업자

z == Duration

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 가져오기

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

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

예를 들어 예측에 액세스하는 데 사용된 PSC IP 주소와 성공적인 결과를 확인합니다.

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에서 10분 기준 테스트를 사용 설정하는 HEY를 실행합니다.

./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

99% in 0.0686 secs | 68 ms

상태 코드가 200인 응답 10,550개

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 맞춤 대시보드

모니터링 → 대시보드로 이동하여 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에서 central-client에 로그인하고 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

예를 들어 예측에 액세스하는 데 사용된 PSC IP 주소와 성공적인 결과를 확인합니다.

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에서 10분 기준 테스트를 사용 설정하는 HEY를 실행합니다.

./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

99% in 0.0353 secs | 35 ms

상태 코드가 200인 응답 26,965개

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 맞춤 대시보드를 선택하고 10분을 입력합니다. 또는 시작 및 중지 시간 시간대가 올바른지 확인합니다.

지난 10분간의 예측 지연 시간은 30.533ms입니다.

예측 지연 시간의 정의를 살펴보면 모델에서 응답을 가져온 후 클라이언트 요청에 응답하는 데 걸리는 총시간을 측정하는 서버 측 측정항목이 표시됩니다.

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

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

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

네트워크 인텔리전스

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

Cloud Console 네트워크 인텔리전스 → 성능 대시보드로 이동하여 아래 스크린샷에 자세히 설명된 옵션을 선택합니다. 지연 시간은 0.2~0.8ms입니다.

eaa84848c3185fde.png

HEY us-central1 기준 요약

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

지연 시간 도구

기간

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

~0.2~0 .8ms

Cloud Monitoring: 총 예측 지연 시간[99번째 백분위수]

30.533 ms (99p)

Google에서 보고한 총 지연 시간

약 30.733~31.333ms

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

다음 단계

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

추가 자료 및 동영상

참조 문서