1. Giriş
Genel Bakış
Cloud Run kısa süre önce GPU desteği sunmaya başladı. Bekleme listesine genel önizleme olarak sunulur. Özelliği denemek istiyorsanız bekleme listesine katılmak için bu formu doldurun. Cloud Run, Google Cloud üzerinde yer alan ve küme yönetmenizi gerektirmeden kodunuzu bir container'da kolayca çalıştırmanızı sağlayan bir container platformudur.
Bugün kullanıma sunduğumuz GPU'lar, 24 GB vRAM'e sahip Nvidia L4 GPU'lardır. Cloud Run örneği başına bir GPU vardır ve Cloud Run otomatik ölçeklendirmesi geçerli olmaya devam eder. 5 örneğe kadar ölçeklendirme (kota artışıyla) ve istek olmadığında sıfır örneğe ölçeklendirme dahildir.
GPU'ların kullanım alanlarından biri, kendi açık büyük dil modellerinizi (LLM) çalıştırmaktır. Bu eğitim, LLM çalıştıran bir hizmetin dağıtımında size yol gösterir.
Hizmet, üretim sistemleri için bir çıkarım motoru olan vLLM'yi çalıştıran bir arka uç hizmetidir. Bu codelab'de, Google'ın talimat ayarlı 2 milyar parametreye sahip Gemma 2 modeli kullanılır.
Neler öğreneceksiniz?
- Cloud Run'da GPU'ları kullanma.
- Bir model almak için Hugging Face nasıl kullanılır?
- Çıkarım motoru olarak vLLM'yi kullanarak Google'ın Gemma 2 2b talimatına göre ayarlanmış modelini Cloud Run'da dağıtma.
- Cümle tamamlama için arka uç hizmetini çağırma.
2. Kurulum ve Gereksinimler
Ön koşullar
- Cloud Console'a giriş yaptınız.
- Daha önce bir Cloud Run hizmeti dağıttınız. Örneğin, başlamak için kaynak kodundan web hizmeti dağıtma başlıklı makaledeki adımları uygulayabilirsiniz.
- Hugging Face hesabınız var ve https://huggingface.co/google/gemma-2-2b-it adresinden Gemma 2 2b lisansını kabul ettiniz; Aksi takdirde modeli indiremezsiniz.
- google/gemma-2-2b-it modeline erişimi olan bir erişim jetonu oluşturdunuz.
Cloud Shell'i etkinleştirme
- Cloud Console'da, Cloud Shell'i etkinleştir simgesini tıklayın.
Cloud Shell'i ilk kez başlatıyorsanız ne olduğunu açıklayan bir ara ekran gösterilir. Ara bir ekran görüntülendiyse Devam'ı tıklayın.
Temel hazırlık ve Cloud Shell'e bağlanmak yalnızca birkaç dakika sürer.
Gereken tüm geliştirme araçları bu sanal makinede yüklüdür. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud'da çalışarak ağ performansını ve kimlik doğrulamasını büyük ölçüde iyileştirir. Bu codelab'deki çalışmalarınızın tamamı olmasa bile büyük bir kısmı tarayıcıyla yapılabilir.
Cloud Shell'e bağlandıktan sonra kimliğinizin doğrulandığını ve projenin proje kimliğinize ayarlandığını göreceksiniz.
- Kimlik doğrulamanızın tamamlandığını onaylamak için Cloud Shell'de aşağıdaki komutu çalıştırın:
gcloud auth list
Komut çıkışı
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
- gcloud komutunun projenizi bildiğini onaylamak için Cloud Shell'de aşağıdaki komutu çalıştırın:
gcloud config list project
Komut çıkışı
[core] project = <PROJECT_ID>
Doğru değilse aşağıdaki komutla ayarlayabilirsiniz:
gcloud config set project <PROJECT_ID>
Komut çıkışı
Updated property [core/project].
3. API'leri Etkinleştirin ve Ortam Değişkenlerini Ayarlayın
API'leri etkinleştir
Bu codelab'i kullanmaya başlamadan önce etkinleştirmeniz gereken birkaç API vardır. Bu codelab'de aşağıdaki API'lerin kullanılması gerekir. Bu API'leri şu komutu çalıştırarak etkinleştirebilirsiniz:
gcloud services enable run.googleapis.com \ cloudbuild.googleapis.com \ secretmanager.googleapis.com \ artifactregistry.googleapis.com
Ortam değişkenlerini ayarlama
Bu codelab'de kullanılacak ortam değişkenlerini ayarlayabilirsiniz.
HF_TOKEN=<YOUR_HUGGING_FACE_TOKEN> PROJECT_ID=<YOUR_PROJECT_ID> REGION=us-central1 SERVICE_NAME=vllm-gemma-2-2b-it AR_REPO_NAME=vllm-gemma-2-2b-it-repo SERVICE_ACCOUNT=vllm-gemma-2-2b-it SERVICE_ACCOUNT_ADDRESS=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
4. Hizmet hesabı oluşturma
Bu hizmet hesabı, Cloud Run hizmetini derlemek ve Secret Manager'dan bir gizli anahtara erişmek için kullanılır.
Öncelikle şu komutu çalıştırarak hizmet hesabını oluşturun:
gcloud iam service-accounts create $SERVICE_ACCOUNT \ --display-name="Cloud Run vllm SA to access secrete manager"
Ardından, hizmet hesabına Vertex AI Kullanıcısı rolünü verin.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role=roles/secretmanager.secretAccessor
Şimdi Hugging Face Access Token'ınız için Secret Manager'da HF_TOKEN adında bir gizli anahtar oluşturun. Cloud Build, Gemma 2 (2B) modelini Hugging Face'den çekmek amacıyla derleme zamanında bu gizli anahtara erişmek için hizmet hesabını kullanır. Gizli anahtarlar ve Cloud Build hakkında daha fazla bilgiyi buradan edinebilirsiniz.
printf $HF_TOKEN | gcloud secrets create HF_TOKEN --data-file=-
Ayrıca hizmet hesabına, Secret Manager'da HF_TOKEN gizli anahtarı için erişim izni verin.
gcloud secrets add-iam-policy-binding HF_TOKEN \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role='roles/secretmanager.secretAccessor'
5. Artifact Registry'de görüntü oluşturun
Öncelikle Artifact Registry'de depo oluşturun.
gcloud artifacts repositories create $AR_REPO_NAME \ --repository-format docker \ --location us-central1
Ardından, Secret Manager'daki gizli anahtarı içerecek bir Dockerfile
oluşturun. Docker buildx –secrets flag hakkında daha fazla bilgiyi burada bulabilirsiniz.
FROM vllm/vllm-openai:latest ENV HF_HOME=/model-cache RUN --mount=type=secret,id=HF_TOKEN HF_TOKEN=$(cat /run/secrets/HF_TOKEN) \ huggingface-cli download google/gemma-2-2b-it ENV HF_HUB_OFFLINE=1 ENTRYPOINT python3 -m vllm.entrypoints.openai.api_server \ --port ${PORT:-8000} \ --model ${MODEL_NAME:-google/gemma-2-2b-it} \ ${MAX_MODEL_LEN:+--max-model-len "$MAX_MODEL_LEN"}
Şimdi bir cloudbuild.yaml dosyası oluşturun
steps: - name: 'gcr.io/cloud-builders/docker' id: build entrypoint: 'bash' secretEnv: ['HF_TOKEN'] args: - -c - | SECRET_TOKEN="$$HF_TOKEN" docker buildx build --tag=${_IMAGE} --secret id=HF_TOKEN . availableSecrets: secretManager: - versionName: 'projects/${PROJECT_ID}/secrets/HF_TOKEN/versions/latest' env: 'HF_TOKEN' images: ["${_IMAGE}"] substitutions: _IMAGE: 'us-central1-docker.pkg.dev/${PROJECT_ID}/vllm-gemma-2-2b-it-repo/vllm-gemma-2-2b-it' options: dynamicSubstitutions: true machineType: "E2_HIGHCPU_32"
Son olarak, bir derleme gönderin.
gcloud builds submit --config=cloudbuild.yaml
Derleme yaklaşık 8 dakika sürebilir.
6. Hizmeti dağıtma
Artık görüntüyü Cloud Run'a dağıtmaya hazırsınız.
gcloud beta run deploy $SERVICE_NAME \ --image=us-central1-docker.pkg.dev/$PROJECT_ID/$AR_REPO_NAME/$SERVICE_NAME \ --service-account $SERVICE_ACCOUNT_ADDRESS \ --cpu=8 \ --memory=32Gi \ --gpu=1 --gpu-type=nvidia-l4 \ --region us-central1 \ --no-allow-unauthenticated \ --max-instances 5 \ --no-cpu-throttling
Dağıtım 5 dakika kadar sürebilir.
7. Hizmeti test etme
Dağıtımdan sonra, sizin için otomatik olarak kimlik jetonu ekleyen Cloud Run geliştirici proxy hizmetini kullanabilir veya hizmet URL'sini doğrudan curl hale getirebilirsiniz.
Cloud Run geliştirici proxy hizmetini kullanma
Cloud Run geliştirici proxy hizmetini kullanmak için şu adımları uygulayabilirsiniz:
İlk olarak aşağıdaki komutu çalıştırın
gcloud run services proxy $SERVICE_NAME --region us-central1
Sonra, hizmeti kıvırın
curl -X POST http://localhost:8080/v1/completions \ -H "Content-Type: application/json" \ -d '{ "model": "google/gemma-2-2b-it", "prompt": "Cloud Run is a", "max_tokens": 128, "temperature": 0.90 }'
Hizmet URL'sini doğrudan kullanma
Öncelikle dağıtılan hizmetin URL'sini alın.
SERVICE_URL=$(gcloud run services describe $SERVICE_NAME --region $REGION --format 'value(status.url)')
Hizmeti çalıştırma
curl -X POST $SERVICE_URL/v1/completions \ -H "Authorization: bearer $(gcloud auth print-identity-token)" \ -H "Content-Type: application/json" \ -d '{ "model": "google/gemma-2-2b-it", "prompt": "Cloud Run is a", "max_tokens": 128, "temperature": 0.90 }'
Sonuçlar
Aşağıdakine benzer sonuçlar görmeniz gerekir:
{"id":"cmpl-e0e6924d4bfd4d918383c87cba5e25ac","object":"text_completion","created":1723853023,"model":"google/gemma-2-2b","choices":[{"index":0,"text":" serverless compute platform that lets you write your backend code in standard languages, such as Java, Go, PHP and Python.\n\nYou can deploy your function as a REST API that scales on demand and allows you to add additional security features such as HTTPS.\n\nTo write code for an Android app with Cloud Run, you need to use the GraalVM. This is because while Node.js is a more commonly known node-based platform, GraalVM is a virtual machine (VM) to run native code in the Cloud Run environment.\n\nNow you need graal.vm/java-11-jre.jar, the","logprobs":null,"finish_reason":"length","stop_reason":null}],"usage":{"prompt_tokens":5,"total_tokens":133,"completion_tokens":128}}
8. Tebrikler!
Tebrikler, codelab'i tamamladınız.
Cloud Run belgelerini incelemenizi öneririz.
İşlediklerimiz
- Cloud Run'da GPU'ları kullanma.
- Bir model almak için Hugging Face nasıl kullanılır?
- Çıkarım motoru olarak vLLM'yi kullanarak Google'ın Gemma 2 (2B) modelini Cloud Run'da dağıtma.
- Cümle tamamlama için arka uç hizmetini çağırma.
9. Temizleme
Yanlışlıkla yapılan ücretleri önlemek için (örneğin, Cloud Run hizmetleri yanlışlıkla ücretsiz katmandaki aylık Cloud Run çağırma tahsisinizden daha fazla kez çağrıldıysa) Cloud Run'ı silebilir veya 2. adımda oluşturduğunuz projeyi silebilirsiniz.
Cloud Run hizmetini silmek için https://console.cloud.google.com/run adresinden Cloud Run Cloud Console'a gidip vllm-gemma-2-2b
hizmetini silin. vllm-gemma-2-2b
hizmet hesabını da silmek isteyebilirsiniz.
Projenin tamamını silmeyi tercih ederseniz https://console.cloud.google.com/cloud-resource-manager adresine gidip 2. adımda oluşturduğunuz projeyi, ardından Sil'i seçebilirsiniz. Projeyi silerseniz Cloud SDK'nızdaki projeleri değiştirmeniz gerekir. gcloud projects list
komutunu çalıştırarak mevcut tüm projelerin listesini görüntüleyebilirsiniz.