1. Giriş
Genel Bakış
Cloud Run'a kısa süre önce GPU desteği eklendi. Bu özellik, bekleme listesine alınmış bir genel önizleme olarak kullanılabilir. Bu özelliği denemek istiyorsanız bekleme listesine katılmak için bu formu doldurun. Cloud Run, Google Cloud'da bulunan bir container platformudur. Küme yönetmenizi gerektirmeden kodunuzu container'da çalıştırmanızı kolaylaştırır.
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çeklendirme özelliği geçerliliğini korur. Bu kapsamda, 5 örneğe kadar ölçeklendirme (kota artışı mümkündür) ve istek olmadığında sıfır örneğe kadar ölçeklendirme yer alır.
GPU'ların kullanım alanlarından biri, kendi açık büyük dil modellerinizi (LLM'ler) çalıştırmaktır. Bu eğitim, LLM çalıştıran bir hizmeti dağıtma konusunda size yol gösterir.
Bu hizmet, üretim sistemleri için bir çıkarım motoru olan vLLM'yi çalıştıran bir arka uç hizmetidir. Bu codelab'de, 2 milyar parametreli talimatla ayarlanmış Google'ın Gemma 2 modeli kullanılmaktadır.
Neler öğreneceksiniz?
- Cloud Run'da GPU'ları kullanma
- Bir modeli almak için Hugging Face'i kullanma
- vLLM'yi çıkarım motoru olarak kullanarak Google'ın Gemma 2 2b talimat için ayarlanmış modelini Cloud Run'da dağıtma.
- Cümle tamamlama için arka uç hizmeti nasıl çağrılır?
2. Kurulum ve Gereksinimler
Ön koşullar
- Cloud Console'a giriş yapmış olmanız gerekir.
- Daha önce bir Cloud Run hizmeti dağıtmış olmanız gerekir. Örneğin, başlamak için Kaynak koddan web hizmeti dağıtma hızlı başlangıç kılavuzunu inceleyebilirsiniz.
- Hugging Face hesabınız varsa ve https://huggingface.co/google/gemma-2-2b-it adresinde Gemma 2 2b lisansını onayladıysanız modeli indirebilirsiniz. Aksi takdirde modeli indiremezsiniz.
- google/gemma-2-2b-it modeline erişimi olan bir erişim jetonu oluşturmuş olmanız gerekir.
Cloud Shell'i etkinleştirme
- Cloud Console'da Cloud Shell'i etkinleştir 'i
tıklayın.
Cloud Shell'i ilk kez başlatıyorsanız ne olduğunu açıklayan bir ara ekran gösterilir. Ara ekran gösterildiyse Devam'ı tıklayın.
Cloud Shell'in sağlanması ve bağlanması yalnızca birkaç dakikanızı alır.
Bu sanal makineye gereken tüm geliştirme araçları yüklenmiştir. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud'da çalışır. Bu sayede ağ performansı ve kimlik doğrulama önemli ölçüde iyileştirilir. Bu codelab'deki çalışmalarınızın çoğu (belki de tamamı) 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örürsünüz.
- Kimliğinizin doğrulandığı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 projeniz hakkında bilgi sahibi olduğunu doğrulamak için Cloud Shell'de aşağıdaki komutu çalıştırın:
gcloud config list project
Komut çıkışı
[core] project = <PROJECT_ID>
Değilse aşağıdaki komutla ayarlayabilirsiniz:
gcloud config set project <PROJECT_ID>
Komut çıkışı
Updated property [core/project].
3. API'leri etkinleştirme ve ortam değişkenlerini ayarlama
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 aşağıdaki 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 boyunca 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 oluşturmak 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 secret manager"
İkinci olarak, 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 erişim jetonunuz için Secret Manager'da HF_TOKEN adlı bir gizli anahtar oluşturun. Cloud Build, Gemma 2 (2B) modelini Hugging Face'ten çekmek için derleme sırasında bu gizli anahtara erişmek üzere hizmet hesabını kullanır. Gizli diziler ve Cloud Build hakkında daha fazla bilgiyi burada bulabilirsiniz.
printf $HF_TOKEN | gcloud secrets create HF_TOKEN --data-file=-
Ayrıca, görüntüyü oluştururken varsayılan bilgi işlem hizmeti hesabına Secret Manager'daki HF_TOKEN gizli anahtarına erişim izni verin.
PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
--role="roles/secretmanager.secretAccessor"
5. Artifact Registry'de görüntüyü oluşturma
Öncelikle Artifact Registry'de bir depo oluşturun.
gcloud artifacts repositories create $AR_REPO_NAME \ --repository-format docker \ --location us-central1
Ardından, Secret Manager'daki gizli anahtarı içeren bir Dockerfile
oluşturun. Docker buildx –secrets işareti 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. Dağıtım yaklaşık 5 dakika sürer. Durum denetimi için başlangıçtaki gecikmeyi birkaç dakika artırarak resmin yüklenmesi için daha fazla zaman tanımanız gerekir. Aksi takdirde, durum denetiminden "Son Tarih Aşıldı" hatası alırsınız.
gcloud beta run deploy $SERVICE_NAME \ --image=$REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO_NAME/$SERVICE_NAME \ --service-account $SERVICE_ACCOUNT_ADDRESS \ --cpu=8 \ --memory=32Gi \ --gpu=1 \ --port=8000 \ --gpu-type=nvidia-l4 \ --region $REGION \ --no-allow-unauthenticated \ --max-instances 3 \ --no-cpu-throttling \ --no-gpu-zonal-redundancy \ --startup-probe tcpSocket.port=8000,initialDelaySeconds=240,failureThreshold=1,timeoutSeconds=240,periodSeconds=240
7. Hizmeti test etme
Dağıtım tamamlandıktan sonra, sizin için otomatik olarak kimlik jetonu ekleyen Cloud Run geliştirme proxy hizmetini kullanabilir veya hizmet URL'sini doğrudan curl komutuyla çağırabilirsiniz.
Cloud Run geliştirme proxy hizmetini kullanma
Cloud Run geliştirme proxy hizmetini kullanmak için aşağıdaki adımları uygulayabilirsiniz:
Öncelikle aşağıdaki komutu çalıştırın.
gcloud run services proxy $SERVICE_NAME --region us-central1
Ardından 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 kıvı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!
Codelab'i tamamladığınız için tebrikler.
Cloud Run belgelerini incelemenizi öneririz.
İşlediğimiz konular
- Cloud Run'da GPU'ları kullanma
- Bir modeli almak için Hugging Face'i kullanma
- vLLM'yi çıkarım motoru olarak kullanarak Google'ın Gemma 2 (2B) modelini Cloud Run'da dağıtma.
- Cümle tamamlama için arka uç hizmeti nasıl çağrılır?
9. Temizleme
Yanlışlıkla ücretlendirilmemek için (örneğin, Cloud Run hizmetleri ücretsiz katmandaki aylık Cloud Run çağırma tahsisinizden daha fazla sayıda çağrılırsa) Cloud Run'ı 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 gidin ve vllm-gemma-2-2b
hizmetini silin. vllm-gemma-2-2b
hizmet hesabını da silmek isteyebilirsiniz.
Tüm projeyi silmeyi tercih ederseniz https://console.cloud.google.com/cloud-resource-manager adresine gidebilir, 2. adımda oluşturduğunuz projeyi seçip Sil'i tıklayabilirsiniz. Projeyi silerseniz Cloud SDK'nızda projeleri değiştirmeniz gerekir. gcloud projects list
komutunu çalıştırarak kullanılabilir tüm projelerin listesini görüntüleyebilirsiniz.