1. 소개
개요
학습할 내용
- Cloud Run RTX 6000 Pro GPU에 vLLM을 사용하여 Gemma 4 모델을 배포하는 방법
- 에이전트 개발 키트 (ADK)를 사용하여 AI 에이전트를 만들고 Gemma 4를 함께 사용하는 방법
- BigQuery MCP 서버를 사용하여 AI 에이전트에 BigQuery의 구조화된 데이터에 대한 액세스 권한을 부여하는 방법
Gemma 4 는 Google DeepMind의 Apache 2 라이선스 개방형 가중치 모델 제품군입니다. 이 모델은 멀티모달, 다국어, 추론, 효율적인 아키텍처를 제공합니다.
Cloud Run 은 GPU를 지원하는 컨테이너를 위한 서버리스 환경입니다.
에이전트 개발 키트 (ADK) 는 엔터프라이즈 규모로 안정적인 AI 에이전트를 빌드, 디버그, 배포할 수 있는 오픈소스 에이전트 개발 프레임워크입니다.
BigQuery 는 대규모 데이터 세트를 저장, 쿼리, 분석할 수 있는 완전 관리형 서버리스 엔터프라이즈 데이터 웨어하우스입니다.
모델 컨텍스트 프로토콜 (MCP) 은 대규모 언어 모델 (LLM)과 AI 애플리케이션 또는 에이전트가 외부 데이터 소스에 연결되는 방식을 표준화합니다. MCP 서버를 사용하면 도구, 리소스, 프롬프트를 사용하여 작업을 수행하고 백엔드 서비스에서 업데이트된 데이터를 가져올 수 있습니다. BigQuery MCP 서버 는 AI 에이전트에 BigQuery의 데이터를 분석하는 직접적이고 안전한 방법을 제공합니다. 완전 관리형 MCP 서버는 관리 오버헤드를 줄여 지능형 에이전트 개발에 집중할 수 있도록 도와줍니다.
2. 설정 및 요구사항
기본 프로젝트 및 Cloud Run 리전 설정부터 시작합니다.
# set the project
gcloud config set project YOUR_PROJECT_ID
YOUR_PROJECT_ID 를 Google Cloud 프로젝트 ID로 바꿉니다.
# set Cloud Run region
REGION="CLOUD-RUN-REGION"; gcloud config set run/region $REGION && echo $REGION > lab2rgn.txt
CLOUD-RUN-REGION 을 다음 Cloud 리전 중 하나로 바꿉니다.
us-central1asia-southeast1
이 Codelab 전체에서 사용되는 환경 변수는 다음과 같습니다. 환경 파일에 저장하고 '소스'할 수 있습니다. 프로젝트 ID의 값을 올바르게 설정하고 필요에 따라 리전을 설정해야 합니다.
# Model name on HuggingFace Hub
export MODEL_NAME="google/gemma-4-31B-it"
# Cloud Run Service name
export SERVICE_NAME="gemma4-rtx-vllm-codelab"
# Cloud Project and Region for Cloud Run
export GOOGLE_CLOUD_PROJECT=$(gcloud config get project -q)
export GOOGLE_CLOUD_REGION=$(cat lab2rgn.txt 2> /dev/null || gcloud config get run/region -q)
# Service account for Cloud Run service
export SERVICE_ACCOUNT="vllm-service-sa"
export SERVICE_ACCOUNT_EMAIL="${SERVICE_ACCOUNT}@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com"
# GCS Bucket for the model cache.
export MODEL_CACHE_BUCKET="${GOOGLE_CLOUD_PROJECT}-${GOOGLE_CLOUD_REGION}-hf-model-cache"
# Model cache location in GSC bucket
export GCS_MODEL_LOCATION="gs://${MODEL_CACHE_BUCKET}/model-cache/${MODEL_NAME}"
# Uncomment next line if loading gemma-4-31B-it directly from the public cache bucket
# export GCS_MODEL_LOCATION="gs://vertex-model-garden-public-us/gemma4/gemma-4-31B-it"
# VPC Network for Direct VPC Egress
export VPC_NETWORK="vllm-${GOOGLE_CLOUD_REGION}-net"
export VPC_SUBNET="vllm-${GOOGLE_CLOUD_REGION}-subnet"
export SUBNET_RANGE="10.8.0.0/26"
이 Codelab에 필요한 API를 사용 설정합니다. API 변경사항이 적용되는 데 2~3분이 걸릴 수 있습니다.
gcloud services enable --project "${GOOGLE_CLOUD_PROJECT}" \
run.googleapis.com \
cloudbuild.googleapis.com \
artifactregistry.googleapis.com \
iam.googleapis.com \
compute.googleapis.com \
vpcaccess.googleapis.com \
storage.googleapis.com \
bigquery.googleapis.com \
aiplatform.googleapis.com
3. 서비스 계정 만들기
Cloud Run 서비스나 작업을 만들 때 서비스 계정을 지정하지 않으면 Cloud Run에서 Compute Engine 기본 서비스 계정을 사용합니다. 과도한 권한으로 서비스를 실행하지 않도록 Cloud Run 서비스의 별도 서비스 계정을 사용하는 것이 좋습니다.
Cloud Run 서비스의 서비스 계정 만들기
gcloud iam service-accounts create ${SERVICE_ACCOUNT} \
--project "${GOOGLE_CLOUD_PROJECT}" \
--display-name "vLLM Service Account"
4. Cloud Storage 설정
모델 가중치를 저장할 Cloud Storage 버킷을 만듭니다. 이렇게 하면 Cloud Run이 서비스 인스턴스를 시작할 때마다 VPC 직접 연결 이그레스를 사용하여 모델 가중치를 더 빠르게 다운로드할 수 있습니다.
vLLM의 Run:ai Model Streamer 기능과 결합하면 모델 로드 시간이 크게 단축됩니다.
버킷 만들기
Cloud Run 서비스와 동일한 위치에 있는 단일 리전 버킷인지 확인합니다.
gcloud storage buckets create "gs://${MODEL_CACHE_BUCKET}" \
--uniform-bucket-level-access --public-access-prevention \
--project "${GOOGLE_CLOUD_PROJECT}" --location "${GOOGLE_CLOUD_REGION}"
5. 모델 가중치 검색 및 캐싱
다음으로 Gemma 4 모델을 Cloud Storage 버킷에 다운로드합니다. 모델 가중치는 수십 기가바이트이며 먼저 로컬 머신 또는 Cloud Shell에 다운로드하는 것은 불가능할 수 있습니다. 대신 모델 가중치를 저장할 수 있는 충분한 스토리지가 있는 Cloud Build를 사용합니다.
공유 Cloud Storage 버킷에서 모델 가중치 복사
Google Cloud에는 Gemma 4 모델 가중치가 있는 공개적으로 액세스 가능한 Cloud Storage 버킷이 호스팅되어 있습니다.
스토리지 버킷에 복사하려면 다음 명령어를 실행합니다.
gcloud builds submit --project="${GOOGLE_CLOUD_PROJECT}" --region="${GOOGLE_CLOUD_REGION}" --no-source \
--substitutions="_MODEL_NAME=${MODEL_NAME},_GCS_MODEL_LOCATION=${GCS_MODEL_LOCATION}" \
--config=/dev/stdin <<'EOF'
steps:
- name: 'gcr.io/google.com/cloudsdktool/google-cloud-cli:slim'
entrypoint: 'bash'
args:
- '-c'
- |
if [[ "$_GCS_MODEL_LOCATION" == *"vertex-model-garden-public-us"* ]]; then
echo "Using the public cache bucket."
exit 0
fi
gcloud config set storage/parallel_composite_upload_enabled True
gcloud config set storage/parallel_composite_upload_threshold 150M
gcloud config set storage/sliced_object_download_threshold 150M
MODEL_NAME="$_MODEL_NAME"
SHORT_NAME="$${MODEL_NAME#*/}"
gcloud storage cp -r -D "gs://vertex-model-garden-public-us/gemma4/$${SHORT_NAME}" "$_GCS_MODEL_LOCATION"
EOF
6. VPC 직접 연결 이그레스의 네트워킹 구성
VPC 직접 연결 이그레스 구성을 사용하려면 비공개 Google 액세스가 사용 설정된 네트워크와 서브넷을 만들어야 합니다.
이렇게 하면 Cloud Run 서비스가 Cloud Storage를 비롯한 Google API 및 서비스에서 사용하는 외부 IP 주소 집합에 연결할 수 있습니다.
네트워크 만들기
gcloud compute networks create "$VPC_NETWORK" \
--subnet-mode=custom \
--bgp-routing-mode=regional \
--project "$GOOGLE_CLOUD_PROJECT"
서브넷 만들기
gcloud compute networks subnets create "$VPC_SUBNET" \
--network="$VPC_NETWORK" \
--region="$GOOGLE_CLOUD_REGION" \
--range="$SUBNET_RANGE" \
--enable-private-ip-google-access \
--project "$GOOGLE_CLOUD_PROJECT"
7. 서비스 계정 액세스 정책 구성
Cloud Run 서비스 계정에는 만든 스토리지 버킷의 모델 가중치에 액세스할 수 있는 권한이 필요합니다.
gcloud storage buckets add-iam-policy-binding "gs://${MODEL_CACHE_BUCKET}" \
--member "serviceAccount:${SERVICE_ACCOUNT_EMAIL}" \
--role "roles/storage.admin" \
--project "${GOOGLE_CLOUD_PROJECT}"
8. 구성 변수 초기화
vLLM 추론 엔진과 Cloud Run 서비스 모두의 변수를 정의합니다.
# vLLM variables
export MAX_MODEL_LEN="32767" # 32767 to improve concurrency. Keep it empty to use model's maximim context length (256K)
export QUANTIZATION_TYPE="fp8" # Model quantization for faster performance and lower memory usage.
export KV_CACHE_DTYPE="fp8" # KV-cache quantization to save GPU memory.
export GPU_MEM_UTIL="0.95" # Fraction of GPU memory to be used by the vLLM engine.
export TENSOR_PARALLEL_SIZE="1" # Partitioning model across GPUs (1 here as we have only 1 GPU).
export MAX_NUM_SEQS="16" # Max concurrent requests vLLM processes in one batch.
# Cloud Run variables
export CLOUD_RUN_CPU_NUM=20
export CLOUD_RUN_MEMORY_GB=80
export CLOUD_RUN_MAX_INSTANCES=1
export CLOUD_RUN_CONCURRENCY=16
9. Cloud Run에 배포
vLLM 컨테이너 명령줄 준비
vLLM은 대규모 모델을 빠르고 효율적으로 실행하기 위해 많은 매개변수가 필요합니다. 이러한 매개변수는 Cloud Run에 배포된 컨테이너에 인수로 전달됩니다.
CONTAINER_ARGS=(
"vllm"
"serve"
"${GCS_MODEL_LOCATION}"
"--served-model-name" "${MODEL_NAME}"
"--enable-log-requests"
"--enable-chunked-prefill"
"--enable-prefix-caching"
"--generation-config" "auto"
"--enable-auto-tool-choice"
"--tool-call-parser" "gemma4"
"--reasoning-parser" "gemma4"
"--dtype" "bfloat16"
"--quantization" "${QUANTIZATION_TYPE}"
"--kv-cache-dtype" "${KV_CACHE_DTYPE}"
"--max-num-seqs" "${MAX_NUM_SEQS}"
"--gpu-memory-utilization" "${GPU_MEM_UTIL}"
"--tensor-parallel-size" "${TENSOR_PARALLEL_SIZE}"
"--load-format" "runai_streamer"
"--port" "8080"
"--host" "0.0.0.0"
)
if [[ "${MAX_MODEL_LEN}" != "" ]]; then
CONTAINER_ARGS+=("--max-model-len" "${MAX_MODEL_LEN}")
fi
export CONTAINER_ARGS_STR="${CONTAINER_ARGS[*]}"
Cloud Run 서비스 배포
다음 명령어를 실행하여 Cloud Run 서비스를 배포합니다. GPU 유형 (RTX 6000 Pro), 기본 이미지 (pytorch-vllm-serve:gemma4), 서비스를 호출하기 위해 인증해야 함 (--no-allow-unauthenticated)에 유의하세요.
gcloud beta run deploy "${SERVICE_NAME}" \
--image="us-docker.pkg.dev/vertex-ai/vertex-vision-model-garden-dockers/pytorch-vllm-serve:gemma4" \
--project "${GOOGLE_CLOUD_PROJECT}" \
--region "${GOOGLE_CLOUD_REGION}" \
--service-account "${SERVICE_ACCOUNT_EMAIL}" \
--execution-environment gen2 \
--no-allow-unauthenticated \
--cpu="${CLOUD_RUN_CPU_NUM}" \
--memory="${CLOUD_RUN_MEMORY_GB}Gi" \
--gpu=1 \
--gpu-type=nvidia-rtx-pro-6000 \
--no-gpu-zonal-redundancy \
--no-cpu-throttling \
--max-instances ${CLOUD_RUN_MAX_INSTANCES} \
--concurrency ${CLOUD_RUN_CONCURRENCY} \
--network ${VPC_NETWORK} \
--subnet ${VPC_SUBNET} \
--vpc-egress all-traffic \
--set-env-vars "MODEL_NAME=${MODEL_NAME}" \
--set-env-vars "GOOGLE_CLOUD_PROJECT=${GOOGLE_CLOUD_PROJECT}" \
--set-env-vars "GOOGLE_CLOUD_REGION=${GOOGLE_CLOUD_REGION}" \
--port=8080 \
--timeout=3600 \
--cpu-boost \
--startup-probe tcpSocket.port=8080,initialDelaySeconds=240,failureThreshold=40,timeoutSeconds=10,periodSeconds=15 \
--command "bash" \
--args="^;^-c;${CONTAINER_ARGS_STR}"
배포하는 데 몇 분 정도 걸립니다. 완료되면 규모 축소 (트래픽 없음, 비용 없음)를 포함한 자동 확장 기능이 있는 서버리스 인프라를 사용하여 Gemma 4를 제공하는 GPU 기반 환경이 제공됩니다.
10. 서비스 테스트
배포되면 vLLM OpenAI 호환 API를 사용하여 Gemma 4 모델과 상호작용할 수 있습니다.
서비스 URL 가져오기
배포된 Cloud Run 서비스의 URL을 검색합니다.
SERVICE_URL=$(gcloud run services describe $SERVICE_NAME --project "${GOOGLE_CLOUD_PROJECT}" --region "${GOOGLE_CLOUD_REGION}" --format 'value(status.url)')
echo "Service URL: $SERVICE_URL"
추론 실행
curl을 사용하여 모델에 프롬프트를 보냅니다.
curl -s "$SERVICE_URL/v1/chat/completions" \
-H "Authorization: Bearer $(gcloud auth print-identity-token)" \
-H "Content-Type: application/json" \
-d '{
"model": "'"${MODEL_NAME}"'",
"messages": [
{"role": "user", "content": "Why is the sky blue?"}
],
"chat_template_kwargs": {
"enable_thinking": true
},
"skip_special_tokens": false
}' | jq -r '.choices[0].message.content'
11. 에이전트 개발 키트를 사용하여 데이터 에이전트 만들기
에이전트 코드 작성
Cloud Shell 터미널 또는 로컬 터미널에서 에이전트 앱의 루트 디렉터리를 만듭니다.
mkdir data_agent
Cloud Shell 편집기 또는 다른 텍스트 편집기를 열고 data_agent 디렉터리에 agent.py를 만듭니다.
data_agent/
agent.py
agent.py
import os
import subprocess
from google.adk.agents import LlmAgent
from google.adk.models.lite_llm import LiteLlm
from google.adk.tools.mcp_tool.mcp_toolset import MCPToolset
from google.adk.tools.mcp_tool.mcp_session_manager import StreamableHTTPConnectionParams
import google.auth
from google.auth.transport.requests import Request
from google.oauth2 import id_token
# Fetch Application Default Credentials (ADC)
application_default_credentials, project_id = google.auth.default()
application_default_credentials.refresh(Request())
# Retrieve Google Cloud project to use.
project_id = os.getenv("GOOGLE_CLOUD_PROJECT", project_id)
if not project_id:
raise ValueError("GOOGLE_CLOUD_PROJECT environment variable is not set.")
if os.getenv("GOOGLE_GENAI_USE_ENTERPRISE", "").lower() not in ["true", "1"]:
# Using Cloud Run for hosting LLM with LiteLLM wrapper
api_base = os.getenv(
"API_BASE",
os.environ.get("OPENAI_API_BASE", "")
).rstrip("/")
if not api_base:
raise ValueError("API_BASE environment variable is not set")
if not api_base.endswith("/v1"):
api_base += "/v1"
model_name = os.getenv("MODEL_NAME")
if not model_name:
raise ValueError("MODEL_NAME environment variable is not set")
# Format required by LiteLLM for OpenAI-compatible APIs
model_name=f"openai/{model_name}"
# To access the model's Cloud Run service,
# we need an identity token.
try:
model_service_token_string = id_token.fetch_id_token(Request(), api_base)
except Exception as e:
# Fallback with using gcloud CLI to get the identity token
model_service_token_string = subprocess.check_output(
f"gcloud auth print-identity-token -q",
shell=True
).decode().strip()
# Gemma 4 in vLLM requires additional parameters in the request body.
extra_body={
"chat_template_kwargs": {
"enable_thinking": True
},
"skip_special_tokens": False
}
# Configure the model with LiteLLM and an OpenAI-compatible endpoint
custom_model = LiteLlm(
model=model_name,
base_url=api_base,
api_key=model_service_token_string,
extra_body=extra_body
)
model = custom_model
else:
# Gemini API in Agent Platform fallback
model = "gemini-3.5-flash-lite"
# Initialize the MCP Toolset with the connection parameters
bigquery_toolset = MCPToolset(
connection_params=StreamableHTTPConnectionParams(
url="https://bigquery.googleapis.com/mcp",
headers={
"Authorization": f"Bearer {application_default_credentials.token}",
"x-goog-user-project": project_id, # This is used for billing
},
tool_filter=[
'get_dataset_info',
'list_table_ids',
'get_table_info',
# Using readonly is a security measure to prevent accidental data modification.
'execute_sql_readonly',
]
)
)
# Configure the agent
system_instruction = f"""
You are a helpful assistant that can answer questions about data in BigQuery.
To answer the user's question, use data you have access to by using tools `list_table_ids` and `get_table_info`.
Your data is in `bigquery-public-data.new_york_citibike` dataset
(Citi Bike trips and stations in the NYC area.
It includes trip records starting from September 2013 and is updated daily.)
Plan of action:
0. ALWAYS start by analyzing dataset.
1. Analyze your data, investigate schema and dimensions by querying distrinct values of columns using `execute_sql_readonly`.
Output information about tables, columns, their data types and sets of values (for dimensions).
Note which columns can be joined or used in aggregations/filters, and what type conversion may be needed for joining or aggregating.
DO NOT MAKE ASSUMPTIONS ABOUT DATA (structure, type, values, relationships) BASED ON YOUR PRIOR KNOWLEDGE. ALWAYS VERIFY YOUR ASSUMPTIONS.
2. Understand and interpret the user's question.
3. Formulate a plan to answer the user's question.
4. Write a SQL query to retrieve relevant data in necessary form.
This is where you must pay extra attention to column types and dimensions' sets of values.
5. Retrieve data by generating BigQuery SQL and using `execute_sql_readonly`.
Always use Dry Run to verify SQL correctness.
Use `{project_id}` to run BigQuery queries (`project_id` parameter of `execute_sql_readonly`).
Do not use LaTeX in your responses. When giving a final answer, use Markdown.
"""
root_agent = LlmAgent(
model=model,
name="data_agent",
instruction=system_instruction,
description="A helpful assistant that can answer questions using NYC Citibike data.",
tools=[bigquery_toolset]
)
ADK에는 배포를 위한 __init__.py 및 requirements.txt도 필요합니다.
__init__.py에는 에이전트 가져오기가 있어야 합니다.requirements.txt는 Python 종속 항목을 나열합니다. 에이전트 개발 키트의google-adk, ADK가 Gemini 이외의 모델을 사용하는 데 활용하는 LiteLLM 라이브러리의litellm, 모델 컨텍스트 프로토콜 클라이언트의mcp입니다.
이러한 명령어는 __init__.py 및 requirements.txt를 만드는 데 도움이 됩니다.
echo "from . import agent" > data_agent/__init__.py
echo -e "google-adk==2.4.*\nlitellm\nmcp==1.29.*" > data_agent/requirements.txt
최종 폴더 구조는 다음과 같습니다.
data_agent/
__init__.py
agent.py
requirements.txt
에이전트를 로컬에서 사용해 보기
에이전트 개발 키트에는 에이전트를 테스트하기 위한 대화형 터미널 인터페이스인 adk CLI 도구가 함께 제공됩니다. 이는 빠른 테스트, 스크립팅된 상호작용, CI/CD 파이프라인에 유용합니다. 제공하는 기능 중 하나는 adk web(ADK 웹 인터페이스)으로, 에이전트를 대화형으로 개발하고 디버그하는 간단한 방법입니다. ADK 웹은 프로덕션 배포에 사용하기 위한 것이 아니지만 에이전트를 매우 간단하게 사용해 볼 수 있습니다.
이 명령어는 포트 8080에서 로컬 웹 서버를 시작하는 adk web을 실행합니다.
export API_BASE=$(gcloud run services describe $SERVICE_NAME \
--project $GOOGLE_CLOUD_PROJECT \
--region $GOOGLE_CLOUD_REGION \
--format 'value(status.url)')
# If Gemma 4 deployment failed, use Gemini fallback
if [[ "${API_BASE}" == "" ]]; then
export GOOGLE_GENAI_USE_ENTERPRISE=true
else
export GOOGLE_GENAI_USE_ENTERPRISE=false
fi
uv tool run --with litellm,"mcp==1.29.*" --from "google-adk[mcp]==2.4.*" adk web --allow_origins="*" --port 8080 .
서비스가 시작되면 로컬 ADK 웹페이지(http://localhost:8080/)를 엽니다.
Google Cloud Shell을 사용하는 경우 웹 미리보기 버튼을 클릭합니다.
ADK 웹 UI에서 에이전트에게 액세스할 수 있는 데이터에 관해 질문합니다.
What data do you have?
에이전트 코드는 Cloud Run에 배포된 Gemma 4 모델을 사용합니다. 모델은 BigQuery MCP 도구를 사용하여 citibike 데이터 세트를 탐색합니다. Citibike 데이터 세트에서 사용 가능한 테이블과 필드의 개요를 제공합니다.
12. Cloud Run에 에이전트 배포
이 명령어는 ADK CLI를 사용하여 Cloud Run에 에이전트를 배포합니다.
export API_BASE=$(gcloud run services describe $SERVICE_NAME \
--project $GOOGLE_CLOUD_PROJECT \
--region $GOOGLE_CLOUD_REGION \
--format 'value(status.url)')
# If Gemma 4 deployment failed, use Gemini fallback
if [[ "${API_BASE}" == "" ]]; then
export GOOGLE_GENAI_USE_ENTERPRISE=true
else
export GOOGLE_GENAI_USE_ENTERPRISE=false
fi
uv tool run --from google-adk==2.4.0 \
adk deploy cloud_run \
--with_ui \
--project $GOOGLE_CLOUD_PROJECT \
--region $GOOGLE_CLOUD_REGION \
--service_name gemma4-data-agent \
--app_name data_agent \
data_agent \
-- \
--allow-unauthenticated \
--max-instances 1 \
--set-env-vars GOOGLE_GENAI_USE_ENTERPRISE=${GOOGLE_GENAI_USE_ENTERPRISE},MODEL_NAME="${MODEL_NAME}",API_BASE="${API_BASE}",GOOGLE_CLOUD_PROJECT="${GOOGLE_CLOUD_PROJECT}"
에이전트 사용해 보기
에이전트 배포에 --with_ui 옵션을 사용했습니다. ADK 웹 인터페이스를 사용하여 에이전트를 배포했습니다.
- 웹브라우저에서 에이전트 URL을 엽니다.
adk deploy명령어가 반환했으며gcloud run services명령어를 실행하여 URL을 검색할 수도 있습니다.
gcloud run services describe gemma4-data-agent \
--project $GOOGLE_CLOUD_PROJECT \
--region $GOOGLE_CLOUD_REGION \
--format 'value(status.url)'
- 에이전트에게 사용 가능한 Citibike 데이터에 대해 추론하도록 요청합니다.
We have budget for 3 coffee trucks.
We want to find the best city bike stations to place our coffee trucks.
에이전트는 BigQuery MCP 서버를 사용하여 Citibike 데이터 세트를 탐색하고, 몇 가지 SQL 쿼리를 실행하고, 3개의 citibike 스테이션 목록을 반환해야 합니다.
13. 수고하셨습니다
축하합니다. Codelab을 완료했습니다.
Cloud Run 문서를 검토하는 것이 좋습니다.
학습한 내용
- Cloud Run RTX 6000 Pro GPU에 Gemma 4 모델을 배포하는 방법
- 더 빠른 서비스 시작을 위해 Cloud Storage로 VPC 직접 연결 이그레스 및 vLLM 모델 스트리밍을 구성하는 방법
- Gemma 4 LLM 및 BigQuery MCP 서버를 사용하는 에이전트 개발 키트로 AI 에이전트를 만들고 배포하는 방법
14. 정리
이 튜토리얼에서 사용된 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 프로젝트를 삭제하거나 개별 리소스를 삭제하면 됩니다.
옵션 1: 리소스 삭제
Cloud Run 서비스 삭제
gcloud run services delete gemma4-data-agent \
--project "${GOOGLE_CLOUD_PROJECT}" \
--region "${GOOGLE_CLOUD_REGION}" \
--quiet
gcloud run services delete $SERVICE_NAME \
--project "${GOOGLE_CLOUD_PROJECT}" \
--region "${GOOGLE_CLOUD_REGION}" \
--quiet
서비스 계정 삭제
gcloud iam service-accounts delete \
${SERVICE_ACCOUNT_EMAIL} \
--project "${GOOGLE_CLOUD_PROJECT}" \
--quiet
Cloud Storage 버킷 삭제
gcloud storage rm --recursive gs://$MODEL_CACHE_BUCKET
VPC 네트워크 및 서브넷 삭제
gcloud compute networks subnets delete $VPC_SUBNET \
--region "${GOOGLE_CLOUD_REGION}" \
--project "${GOOGLE_CLOUD_PROJECT}" \
--quiet
gcloud compute networks delete $VPC_NETWORK \
--project "${GOOGLE_CLOUD_PROJECT}" \
--quiet
옵션 2: 프로젝트 삭제
전체 프로젝트를 삭제하려면 리소스 관리로 이동하여 2단계에서 만든 프로젝트를 선택하고 삭제를 선택합니다. 프로젝트를 삭제하면 Cloud SDK에서 프로젝트를 변경해야 합니다. gcloud projects list를 실행하여 사용 가능한 모든 프로젝트의 목록을 볼 수 있습니다. 명령줄을 사용하려면 다음 명령어를 사용할 수도 있습니다.
gcloud projects delete ${GOOGLE_CLOUD_PROJECT}