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

1. परिचय

खास जानकारी

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

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

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

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

आपको इनके बारे में जानकारी मिलेगी

  • Cloud Run पर जीपीयू इस्तेमाल करने का तरीका.
  • किसी मॉडल को वापस पाने के लिए, गले लगाने वाला चेहरा कैसे इस्तेमाल करें.
  • अनुमान इंजन के तौर पर वीएलएलएम का इस्तेमाल करके, Cloud Run पर Google के Gemma 2 2b का निर्देश वाला मॉडल डिप्लॉय करने का तरीका.
  • वाक्य पूरा करने के लिए, बैकएंड सेवा शुरू करने का तरीका.

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

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

  • आपने Cloud Console में लॉग इन किया है.
  • आपने पहले Cloud Run सेवा को डिप्लॉय किया है. उदाहरण के लिए, शुरू करने के लिए सोर्स कोड क्विकस्टार्ट की मदद से वेब सेवा डिप्लॉय करें का पालन करें.
  • आपके पास हगिंग फ़ेस खाता है और आपने 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 का इस्तेमाल पहली बार किया है, तो आपको बीच में आने वाली स्क्रीन दिखेगी. इसमें यह बताया जाएगा कि यह क्या है. अगर आपको बीच के लेवल पर मिलने वाली स्क्रीन दिखती है, तो जारी रखें पर क्लिक करें.

d95252b003979716.png

प्रावधान करने और Cloud Shell से कनेक्ट होने में कुछ ही समय लगेगा.

7833d5e1c5d18f54.png

इस वर्चुअल मशीन में डेवलपमेंट के सभी ज़रूरी टूल मौजूद हैं. इसमें लगातार पांच जीबी की होम डायरेक्ट्री मिलती है और यह 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. Cloud Shell में यह कमांड चलाएं, ताकि यह पुष्टि की जा सके कि gcloud के लिए कमांड को आपके प्रोजेक्ट के बारे में जानकारी है:
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 सेवा बनाने और सीक्रेट मैनेजर से सीक्रेट ऐक्सेस करने के लिए किया जाता है.

सबसे पहले, इस निर्देश को चलाकर सेवा खाता बनाएं:

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

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

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

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

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

और सेवा खाते को सीक्रेट मैनेजर में HF_TOKEN सीक्रेट का ऐक्सेस दें.

gcloud secrets add-iam-policy-binding HF_TOKEN \
    --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \
    --role='roles/secretmanager.secretAccessor'

5. Artifact Registry में इमेज बनाएं

सबसे पहले, Artifact Registry में डेटा स्टोर करने की जगह बनाएं.

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

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

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

बिल्ड करीब 8 मिनट का हो सकता है.

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

अब आप इमेज को Cloud Run पर डिप्लॉय करने के लिए तैयार हैं.

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

डिप्लॉयमेंट में पांच मिनट तक लग सकते हैं.

7. सेवा की जांच करें

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

Cloud Run डेव प्रॉक्सी सेवा का इस्तेमाल करना

Cloud Run डेवलपर प्रॉक्सी सेवा का इस्तेमाल करने के लिए, आप इन चरणों का इस्तेमाल कर सकते हैं:

सबसे पहले, नीचे दिए गए निर्देश को चलाएं

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 -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 पर जीपीयू इस्तेमाल करने का तरीका.
  • किसी मॉडल को वापस पाने के लिए, गले लगाने वाला चेहरा कैसे इस्तेमाल करें.
  • अनुमान इंजन के तौर पर vLLM का इस्तेमाल करके, Cloud Run पर Google के Gemma 2 (2B) मॉडल को डिप्लॉय करने का तरीका.
  • वाक्य पूरा करने के लिए, बैकएंड सेवा शुरू करने का तरीका.

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

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

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

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