목표
이 가이드에서는 Gemma 3 및 Ollama를 사용하여 Cloud Run GPU에서 LLM 추론을 실행하는 방법을 보여주며 목표는 다음과 같습니다.
사전 빌드된 컨테이너를 사용하여 Cloud Run에 Gemma 3 개방형 모델을 배포하는 다른 방법을 알아보려면 Cloud Run에서 Gemma 3 모델 실행을 참조하세요.
비용
이 문서에서는 비용이 청구될 수 있는 Google Cloud구성요소( )를 사용합니다.
프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용합니다.
시작하기 전에
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Cloud Build, Cloud Run, and Cloud Storage APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. - gcloud CLI를 설치하고 초기화합니다.
- 이 튜토리얼을 완료하려면 할당량 및 시스템 한도 페이지의 Cloud Run Admin API 아래에서
Total Nvidia L4 GPU allocation, per project per region할당량을 요청합니다. -
Artifact Registry 관리자(
roles/artifactregistry.admin) -
Cloud Build 편집자(
roles/cloudbuild.builds.editor) -
Cloud Run 관리자(
roles/run.admin) -
프로젝트 IAM 관리자(
roles/resourcemanager.projectIamAdmin) -
서비스 계정 사용자(
roles/iam.serviceAccountUser) -
서비스 사용량 소비자(
roles/serviceusage.serviceUsageConsumer) -
스토리지 관리자(
roles/storage.admin) -
Google Cloud 콘솔에서 IAM 페이지로 이동합니다.
IAM으로 이동 - 프로젝트를 선택합니다.
- 액세스 권한 부여를 클릭합니다.
-
새 주 구성원 필드에 사용자 식별자를 입력합니다. 일반적으로 Cloud Run 서비스를 배포하는 데 사용되는 이메일 주소입니다.
- 역할 선택 목록에서 역할을 선택합니다.
- 역할을 추가로 부여하려면 다른 역할 추가를 클릭하고 각 역할을 추가합니다.
- 저장을 클릭합니다.
- PROJECT_NUMBER를 Google Cloud 프로젝트 번호로 바꿉니다.
- PROJECT_ID를 Google Cloud 프로젝트 ID로 바꿉니다.
- PRINCIPAL을 바인딩을 추가할 계정으로 바꿉니다. 일반적으로 Cloud Run 서비스를 배포하는 데 사용되는 이메일 주소입니다.
- ROLE을 배포자 계정에 추가할 역할로 바꿉니다.
필요한 역할
튜토리얼을 완료하는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 다음 IAM 역할을 부여해 달라고 요청하세요.
역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.
커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.
역할 부여
콘솔
gcloud
프로젝트에서 계정에 필요한 IAM 역할을 부여하려면 다음 안내를 따르세요.
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=PRINCIPAL \ --role=ROLE
다음과 같이 바꿉니다.
gcloud 설정
Cloud Run 서비스에 Google Cloud CLI를 구성하려면 다음 안내를 따르세요.
기본 프로젝트를 설정합니다.
gcloud config set project PROJECT_ID아이콘을 클릭하여 PROJECT_ID 변수를 이 튜토리얼을 위해 만든 프로젝트 이름으로 바꿉니다. 이렇게 하면 이 페이지에서 PROJECT_ID를 참조하는 모든 등록정보에 올바른 값이 이미 입력됩니다.
Cloud Run 명령어에
europe-west1리전을 사용하도록 Google Cloud CLI를 구성합니다.gcloud config set run/region europe-west1
Docker를 사용하여 Ollama 및 Gemma로 컨테이너 이미지 만들기
Ollama 서비스용 디렉터리를 만들고 작업 디렉터리를 이 새 디렉터리로 변경합니다.
mkdir ollama-backend cd ollama-backend다음 콘텐츠로
Dockerfile이라는 파일을 만듭니다.FROM ollama/ollama:latest # Listen on all interfaces, port 8080 ENV OLLAMA_HOST 0.0.0.0:8080 # Store model weight files in /models ENV OLLAMA_MODELS /models # Reduce logging verbosity ENV OLLAMA_DEBUG false # Never unload model weights from the GPU ENV OLLAMA_KEEP_ALIVE -1 # Store the model weights in the container image ENV MODEL gemma3:4b RUN ollama serve & sleep 5 && ollama pull $MODEL # Start Ollama ENTRYPOINT ["ollama", "serve"]
더 빠른 인스턴스 시작을 위해 컨테이너 이미지에 모델 가중치 저장
Gemma 3(4B) 및 비슷한 크기의 모델의 모델 가중치를 컨테이너 이미지에 직접 저장하는 것이 좋습니다.
모델 가중치는 LLM의 동작을 정의하는 수치 매개변수입니다. Ollama는 추론 요청 제공을 시작하기 전 컨테이너 인스턴스 시작 중 이러한 파일을 완전히 읽고 GPU 메모리(VRAM)에 가중치를 로드해야 합니다.
Cloud Run에서 요청 지연 시간을 최소화하려면 빠른 컨테이너 인스턴스 시작이 중요합니다. 컨테이너 인스턴스의 시작 시간이 느리면 서비스가 0에서 1개 인스턴스로 확장하는 데 더 오래 걸리고, 트래픽 급증 중에는 수평 확장하는 데 더 많은 시간이 필요합니다.
빠른 시작을 보장하기 위해 모델 파일을 컨테이너 이미지 자체에 저장합니다. 이렇게 하면 시작 중에 원격 위치에서 파일을 다운로드하는 것보다 빠르고 안정적입니다. Cloud Run의 내부 컨테이너 이미지 저장소는 트래픽 급증을 처리하도록 최적화되어 인스턴스가 시작될 때 컨테이너의 파일 시스템을 빠르게 설정할 수 있습니다.
Gemma 3(4B)의 모델 가중치는 스토리지를 최대 8GB까지 차지합니다. 모델이 클수록 모델 가중치 파일이 더 커지며, 이러한 파일을 컨테이너 이미지에 저장하는 것은 실용적이지 않을 수 있습니다. 절충사항에 관한 개요는 권장사항: GPU를 사용하는 Cloud Run의 AI 추론을 참고하세요.
Cloud Run 서비스 빌드 및 배포
서비스를 빌드하고 Cloud Run에 배포합니다.
gcloud run deploy ollama-gemma \
--source . \
--concurrency 4 \
--cpu 8 \
--set-env-vars OLLAMA_NUM_PARALLEL=4 \
--gpu 1 \
--gpu-type nvidia-l4 \
--max-instances 1 \
--memory 32Gi \
--no-allow-unauthenticated \
--no-cpu-throttling \
--no-gpu-zonal-redundancy \
--timeout=600이 명령어에서 다음과 같은 중요한 플래그에 유의하세요.
--concurrency 4는 환경 변수OLLAMA_NUM_PARALLEL의 값과 일치하도록 설정됩니다.--gpu-type nvidia-l4가 포함된--gpu 1는 서비스의 모든 Cloud Run 인스턴스에 NVIDIA L4 GPU 1개를 할당합니다.--max-instances 1은 확장할 최대 인스턴스 수를 지정합니다. 프로젝트의 NVIDIA L4 GPU(Total Nvidia L4 GPU allocation, per project per region) 할당량보다 작거나 같아야 합니다.--no-allow-unauthenticated는 서비스에 대해 인증되지 않은 액세스를 제한합니다. 서비스를 비공개로 유지하면 서비스 간 통신에 Cloud Run에서 기본 제공하는 Identity and Access Management (IAM) 인증을 사용할 수 있습니다. IAM을 사용하여 액세스 관리를 참고하세요.- GPU를 사용 설정하려면
--no-cpu-throttling가 필요합니다. --no-gpu-zonal-redundancy는 영역 장애 조치 요구사항과 사용 가능한 할당량에 따라 영역 중복 옵션을 설정합니다. 자세한 내용은 GPU 영역 중복 옵션을 참조하세요.
최적의 성능을 위한 동시 실행 설정
이 섹션에서는 권장되는 동시 실행 설정에 대한 컨텍스트를 제공합니다. 최적의 요청 지연 시간을 위해 --concurrency 설정이 Ollama의 OLLAMA_NUM_PARALLEL 환경 변수와 동일한지 확인합니다.
OLLAMA_NUM_PARALLEL는 추론 요청을 동시에 처리하기 위해 각 모델당 사용할 수 있는 요청 슬롯 수를 결정합니다.--concurrency는 Cloud Run이 Ollama 인스턴스에 동시에 전송하는 요청 수를 결정합니다.
--concurrency가 OLLAMA_NUM_PARALLEL을 초과하면 Cloud Run은 Ollama의 모델에 사용 가능한 요청 슬롯보다 더 많은 요청을 보낼 수 있습니다.
이로 인해 Ollama 내에서 요청 큐가 발생하여 큐에 추가된 요청에 대해 요청 지연 시간이 늘어납니다. 또한 대기열에 추가된 요청이 Cloud Run을 수평 확장하고 새 인스턴스를 시작하도록 트리거하지 않으므로 자동 확장의 응답성이 떨어집니다.
Ollama는 또한 하나의 GPU에서 여러 모델을 서빙하도록 지원합니다. Ollama 인스턴스에서 요청 큐를 완전히 방지하려면 여전히 OLLAMA_NUM_PARALLEL와 일치하도록 --concurrency를 설정해야 합니다.
OLLAMA_NUM_PARALLEL을 늘리면 동시 요청 시간이 더 오래 걸릴 수 있습니다.
사용률 최적화
최적의 GPU 사용률을 위해서는 --concurrency를 늘려서 OLLAMA_NUM_PARALLEL 값의 두 배 이내로 유지합니다. 이렇게 하면 Ollama에서 요청이 큐에 추가되지만 사용률을 개선하는 데 도움이 될 수 있습니다. Ollama 인스턴스는 큐의 요청을 즉시 처리할 수 있으며 큐는 트래픽 급증을 흡수하는 데 도움이 됩니다.
curl로 배포된 Ollama 서비스 테스트
이제 Ollama 서비스를 배포했으므로 요청을 보낼 수 있습니다. 하지만 요청을 직접 전송하면 Cloud Run이 HTTP 401 Unauthorized로 응답합니다.
LLM 추론 API는 프런트엔드 애플리케이션과 같이 다른 서비스를 호출하기 위한 것이므로 이는 의도된 것입니다. Cloud Run에서 서비스 간 인증에 대한 자세한 내용은 서비스 간 인증을 참조하세요.
Ollama 서비스에 요청을 전송하려면 Cloud Run 개발자 프록시를 사용하는 등 요청에 유효한 OIDC 토큰이 포함된 헤더를 추가합니다.
프록시를 시작하고
cloud-run-proxy구성요소를 설치하라는 메시지가 표시되면Y를 선택합니다.gcloud run services proxy ollama-gemma --port=9090프록시를 실행 상태로 둔 채 별도의 터미널 탭에서 요청을 전송합니다. 프록시는
localhost:9090에서 실행됩니다.curl http://localhost:9090/api/generate -d '{ "model": "gemma3:4b", "prompt": "Why is the sky blue?" }'이 명령어는 다음과 유사한 스트리밍 출력을 제공합니다.
{"model":"gemma3:4b","created_at":"2025-03-10T03:02:18.641492408Z","response":"That","done":false} {"model":"gemma3:4b","created_at":"2025-03-10T03:02:18.687529153Z","response":"'","done":false} {"model":"gemma3:4b","created_at":"2025-03-10T03:02:18.753284927Z","response":"s","done":false} {"model":"gemma3:4b","created_at":"2025-03-10T03:02:18.812957381Z","response":" a","done":false} {"model":"gemma3:4b","created_at":"2025-03-10T03:02:18.889102649Z","response":" fantastic","done":false} {"model":"gemma3:4b","created_at":"2025-03-10T03:02:18.925748116Z","response":",","done":false} {"model":"gemma3:4b","created_at":"2025-03-10T03:02:18.958391572Z","response":" decept","done":false} {"model":"gemma3:4b","created_at":"2025-03-10T03:02:18.971035028Z","response":"ively","done":false} {"model":"gemma3:4b","created_at":"2025-03-10T03:02:18.989678484Z","response":" tricky","done":false} {"model":"gemma3:4b","created_at":"2025-03-10T03:02:18.999321940Z","response":" question","done":false} ...
삭제
Google Cloud 계정에 추가 비용이 청구되지 않게 하려면 이 튜토리얼에서 배포한 모든 리소스를 삭제합니다.
프로젝트 삭제
이 튜토리얼용으로 새 프로젝트를 만든 경우 이 프로젝트를 삭제합니다. 기존 프로젝트를 사용했고 이 튜토리얼에 추가된 변경사항을 제외하고 보존하려면 튜토리얼을 위해 만든 리소스를 삭제합니다.
비용이 청구되지 않도록 하는 가장 쉬운 방법은 튜토리얼에서 만든 프로젝트를 삭제하는 것입니다.
프로젝트를 삭제하는 방법은 다음과 같습니다.
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
튜토리얼 리소스 삭제
이 튜토리얼에서 배포한 Cloud Run 서비스를 삭제합니다. Cloud Run 서비스는 요청을 수신할 때까지 비용을 청구하지 않습니다.
Cloud Run 서비스를 삭제하려면 다음 명령어를 실행합니다.
gcloud run services delete SERVICE-NAME
SERVICE-NAME를 서비스 이름으로 바꿉니다.
Google Cloud 콘솔에서 Cloud Run 서비스를 삭제할 수도 있습니다.
튜토리얼 설정 중에 추가한
gcloud기본 리전 구성을 삭제합니다.gcloud config unset run/region프로젝트 구성을 삭제합니다.
gcloud config unset project