vLLM और OpenAI Python SDK टूल की मदद से, Cloud Run जीपीयू पर एलएलएम का अनुमान लगाने का तरीका

1. परिचय

खास जानकारी

Cloud Run में, हाल ही में जीपीयू इस्तेमाल करने की सुविधा जोड़ी गई है. यह सुविधा, Public Preview के तौर पर उपलब्ध है. इसके लिए, आपको इंतज़ार करना पड़ सकता है. अगर आपको इस सुविधा को आज़माना है, तो वेटलिस्ट में शामिल होने के लिए यह फ़ॉर्म भरें. Cloud Run, Google Cloud पर एक कंटेनर प्लैटफ़ॉर्म है. इसकी मदद से, कंटेनर में कोड को आसानी से चलाया जा सकता है. इसके लिए, आपको क्लस्टर मैनेज करने की ज़रूरत नहीं होती.

फ़िलहाल, हम 24 जीबी वीआरएएम वाले Nvidia L4 जीपीयू उपलब्ध कराते हैं. Cloud Run के हर इंस्टेंस के लिए एक जीपीयू होता है. साथ ही, Cloud Run की ऑटो स्केलिंग की सुविधा अब भी लागू होती है. इसमें ज़्यादा से ज़्यादा पांच इंस्टेंस तक स्केल आउट करने की सुविधा शामिल है. साथ ही, अनुरोध न होने पर इंस्टेंस की संख्या को घटाकर शून्य करने की सुविधा भी शामिल है. कोटे में बढ़ोतरी भी की जा सकती है.

जीपीयू का एक इस्तेमाल, ओपन लार्ज लैंग्वेज मॉडल (एलएलएम) को चलाना है. इस ट्यूटोरियल में, एलएलएम को चलाने वाली सेवा को डिप्लॉय करने का तरीका बताया गया है.

यह सेवा, बैकएंड सेवा है. यह प्रोडक्शन सिस्टम के लिए, अनुमान लगाने वाले इंजन vLLM को चलाती है. यह कोडलैब, Google के Gemma 2 का इस्तेमाल करता है. इसमें दो अरब पैरामीटर वाला, निर्देश के मुताबिक फ़ाइन-ट्यून किया गया मॉडल होता है.

आपको क्या सीखने को मिलेगा

  • Cloud Run पर जीपीयू इस्तेमाल करने का तरीका.
  • मॉडल को वापस पाने के लिए, Hugging Face का इस्तेमाल करने का तरीका.
  • Google के Gemma 2 2b instruction-tuned मॉडल को Cloud Run पर डिप्लॉय करने का तरीका. इसके लिए, vLLM को इन्फ़्रेंस इंजन के तौर पर इस्तेमाल करें.
  • वाक्य पूरा करने के लिए, बैकएंड सेवा को कैसे चालू करें.

2. सेटअप और ज़रूरी शर्तें

ज़रूरी शर्तें

  • आपने Cloud Console में लॉग इन किया हो.
  • आपने पहले Cloud Run सेवा को डिप्लॉय किया हो. उदाहरण के लिए, शुरू करने के लिए सोर्स कोड से वेब सेवा डिप्लॉय करने के बारे में जानकारी देने वाला क्विकस्टार्ट पढ़ें.
  • आपके पास Hugging Face खाता होना चाहिए. साथ ही, आपने https://huggingface.co/google/gemma-2-2b-it पर Gemma 2 2b के लाइसेंस को स्वीकार किया हो. ऐसा न करने पर, मॉडल को डाउनलोड नहीं किया जा सकेगा.
  • आपने एक ऐसा ऐक्सेस टोकन बनाया है जिसके पास google/gemma-2-2b-it मॉडल को ऐक्सेस करने की अनुमति है.

Cloud Shell चालू करें

  1. Cloud Console में, Cloud Shell चालू करें d1264ca30785e435.png पर क्लिक करें.

cb81e7c8e34bc8d.png

अगर आपने Cloud Shell को पहली बार शुरू किया है, तो आपको एक इंटरमीडिएट स्क्रीन दिखेगी. इसमें Cloud Shell के बारे में जानकारी दी गई होगी. अगर आपको इंटरमीडिएट स्क्रीन दिखती है, तो जारी रखें पर क्लिक करें.

d95252b003979716.png

Cloud Shell से कनेक्ट होने में कुछ ही सेकंड लगेंगे.

7833d5e1c5d18f54.png

इस वर्चुअल मशीन में, डेवलपमेंट के लिए ज़रूरी सभी टूल पहले से मौजूद हैं. यह 5 जीबी की होम डायरेक्ट्री उपलब्ध कराता है और Google Cloud में चलता है. इससे नेटवर्क की परफ़ॉर्मेंस और पुष्टि करने की प्रोसेस बेहतर होती है. इस कोडलैब में ज़्यादातर काम ब्राउज़र से किया जा सकता है.

Cloud Shell से कनेक्ट होने के बाद, आपको दिखेगा कि आपकी पुष्टि हो गई है और प्रोजेक्ट को आपके प्रोजेक्ट आईडी पर सेट कर दिया गया है.

  1. पुष्टि करने के लिए कि आपने पुष्टि कर ली है, Cloud Shell में यह कमांड चलाएं:
gcloud auth list

कमांड आउटपुट

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. यह पुष्टि करने के लिए कि gcloud कमांड को आपके प्रोजेक्ट के बारे में पता है, Cloud Shell में यह कमांड चलाएं:
gcloud config list project

कमांड आउटपुट

[core]
project = <PROJECT_ID>

अगर ऐसा नहीं है, तो इस कमांड का इस्तेमाल करके इसे सेट किया जा सकता है:

gcloud config set project <PROJECT_ID>

कमांड आउटपुट

Updated property [core/project].

3. एपीआई चालू करना और एनवायरमेंट वैरिएबल सेट करना

एपीआई चालू करें

इस कोडलैब का इस्तेमाल करने से पहले, आपको कई एपीआई चालू करने होंगे. इस कोडलैब के लिए, इन एपीआई का इस्तेमाल करना ज़रूरी है. इन एपीआई को चालू करने के लिए, यह कमांड चलाएं:

gcloud services enable run.googleapis.com \
    cloudbuild.googleapis.com \
    secretmanager.googleapis.com \
    artifactregistry.googleapis.com

एनवायरमेंट वैरिएबल सेट अप करना

ऐसे एनवायरमेंट वैरिएबल सेट किए जा सकते हैं जिनका इस्तेमाल इस कोडलैब में किया जाएगा.

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. सेवा खाता बनाना

इस सेवा खाते का इस्तेमाल, Cloud Run सेवा बनाने और Secret Manager से सीक्रेट ऐक्सेस करने के लिए किया जाता है.

सबसे पहले, यह कमांड चलाकर सेवा खाता बनाएं:

gcloud iam service-accounts create $SERVICE_ACCOUNT \
  --display-name="Cloud Run vllm SA to access secret manager"

दूसरा, सेवा खाते को Vertex AI के उपयोगकर्ता की भूमिका असाइन करें.

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \
  --role=roles/secretmanager.secretAccessor

अब Secret Manager में, Hugging Face के ऐक्सेस टोकन के लिए HF_TOKEN नाम का सीक्रेट बनाएं. Cloud Build, बिल्ड के समय इस सीक्रेट को ऐक्सेस करने के लिए सेवा खाते का इस्तेमाल करता है, ताकि Hugging Face से Gemma 2 (2B) मॉडल को डाउनलोड किया जा सके. यहां सीक्रेट और Cloud Build के बारे में ज़्यादा जानें.

printf $HF_TOKEN | gcloud secrets create HF_TOKEN --data-file=-

साथ ही, इमेज बनाते समय Secret Manager में HF_TOKEN सीक्रेट को ऐक्सेस करने की अनुमति, डिफ़ॉल्ट कंप्यूट सेवा खाते को दें.

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 में इमेज बनाना

सबसे पहले, Artifact Registry में एक रिपॉज़िटरी बनाएं.

gcloud artifacts repositories create $AR_REPO_NAME \
  --repository-format docker \
  --location us-central1

इसके बाद, एक Dockerfile बनाएं, जिसमें Secret Manager से सीक्रेट शामिल किया जाएगा. Docker buildx –secrets फ़्लैग के बारे में यहां ज़्यादा जानें.

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"}

अब cloudbuild.yaml फ़ाइल बनाएं

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"

आखिर में, बिल्ड सबमिट करें.

gcloud builds submit --config=cloudbuild.yaml

बिल्ड होने में करीब आठ मिनट लग सकते हैं.

6. सेवा को डिप्लॉय करना

अब इमेज को Cloud Run पर डिप्लॉय किया जा सकता है. इसे लागू होने में करीब पांच मिनट लगेंगे. आपको इमेज को लोड होने के लिए ज़्यादा समय देने के लिए, हेल्थ चेक में शुरुआती देरी को कुछ मिनट तक बढ़ाना होगा. ऐसा न करने पर, आपको हेल्थ चेक से समयसीमा खत्म होने की गड़बड़ी का मैसेज मिलेगा.

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. सेवा को आज़माना

इसे डिप्लॉय करने के बाद, आपके पास दो विकल्प होते हैं. पहला, Cloud Run dev proxy service का इस्तेमाल करें. यह सेवा, आपके लिए आईडी टोकन अपने-आप जोड़ देती है. दूसरा, सेवा के यूआरएल को सीधे कर्ल करें.

Cloud Run की Dev Proxy सेवा का इस्तेमाल करना

Cloud Run की Dev Proxy सेवा का इस्तेमाल करने के लिए, यह तरीका अपनाएं:

सबसे पहले, यह कमांड चलाएं

gcloud run services proxy $SERVICE_NAME --region us-central1

इसके बाद, सेवा को कर्ल करें

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
}'

सेवा के यूआरएल का सीधे तौर पर इस्तेमाल करना

सबसे पहले, डिप्लॉय की गई सेवा का यूआरएल पाएं.

SERVICE_URL=$(gcloud run services describe $SERVICE_NAME --region $REGION --format 'value(status.url)')

Curl the service

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
}'

नतीजे

आपको कुछ ऐसे नतीजे दिखेंगे:

{"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. बधाई हो!

कोडलैब पूरा करने के लिए बधाई!

हमारा सुझाव है कि आप Cloud Run से जुड़ा दस्तावेज़ पढ़ें

हमने क्या-क्या बताया

  • Cloud Run पर जीपीयू इस्तेमाल करने का तरीका.
  • मॉडल को वापस पाने के लिए, Hugging Face का इस्तेमाल करने का तरीका.
  • vLLM को इन्फ़रेंस इंजन के तौर पर इस्तेमाल करके, Cloud Run पर Google के Gemma 2 (2B) मॉडल को डिप्लॉय करने का तरीका.
  • वाक्य पूरा करने के लिए, बैकएंड सेवा को कैसे चालू करें.

9. व्यवस्थित करें

अनचाहे शुल्क से बचने के लिए, Cloud Run को मिटा दें या दूसरे चरण में बनाए गए प्रोजेक्ट को मिटा दें. उदाहरण के लिए, अगर Cloud Run की सेवाओं को मुफ़्त टियर में Cloud Run के लिए तय की गई सीमा से ज़्यादा बार इस्तेमाल किया जाता है, तो अनचाहे शुल्क लग सकते हैं.

Cloud Run सेवा को मिटाने के लिए, Cloud Run Cloud Console पर जाएं. इसके लिए, https://console.cloud.google.com/run पर जाएं और vllm-gemma-2-2b सेवा को मिटाएं. आपके पास vllm-gemma-2-2b सेवा खाता मिटाने का विकल्प भी है.

अगर आपको पूरा प्रोजेक्ट मिटाना है, तो https://console.cloud.google.com/cloud-resource-manager पर जाएं. इसके बाद, दूसरे चरण में बनाया गया प्रोजेक्ट चुनें और मिटाएं को चुनें. प्रोजेक्ट मिटाने पर, आपको Cloud SDK में प्रोजेक्ट बदलने होंगे. gcloud projects list कमांड चलाकर, सभी उपलब्ध प्रोजेक्ट की सूची देखी जा सकती है.