Cloud Run जॉब पर एक साथ कई अनुमान लगाने की सुविधा को चलाने का तरीका

1. परिचय

खास जानकारी

इस कोडलैब में, Meta के Llama 3.2-1b LLM और Cloud Run Jobs GPU की मदद से काम करने वाले vLLM का इस्तेमाल करके, बैच इन्फ़रेंस चलाने के लिए Cloud Run jobs का इस्तेमाल किया जाएगा. Cloud Run वॉल्यूम माउंट का इस्तेमाल करके, नतीजों को सीधे Cloud Storage में लिखा जाएगा.

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

  • Cloud Run Jobs GPU का इस्तेमाल करके, बैच इन्फ़रेंस कैसे किया जाता है
  • Cloud Run वॉल्यूम माउंट का इस्तेमाल करके, Cloud Storage में डेटा लिखने का तरीका

2. शुरू करने से पहले

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

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

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

जीपीयू कोटा

उन देशों/इलाकों के लिए कोटा बढ़ाने का अनुरोध करें जहां यह सुविधा उपलब्ध है. Cloud Run Admin API के तहत, कोटा nvidia_l4_gpu_allocation_no_zonal_redundancy है.

ध्यान दें: अगर किसी नए प्रोजेक्ट का इस्तेमाल किया जा रहा है, तो एपीआई चालू करने और इस पेज पर कोटा दिखने में कुछ मिनट लग सकते हैं.

Hugging Face

यह कोडलैब, Hugging Face पर होस्ट किए गए मॉडल का इस्तेमाल करता है. यह मॉडल पाने के लिए, "पढ़ें" अनुमति के साथ Hugging Face के उपयोगकर्ता के ऐक्सेस टोकन का अनुरोध करें. बाद में, आपको इसे YOUR_HF_TOKEN के तौर पर इस्तेमाल करना होगा.

मॉडल का इस्तेमाल करने के लिए, आपको इस्तेमाल की शर्तों से भी सहमत होना होगा: https://huggingface.co/meta-llama/Llama-3.2-1B

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

इस सेक्शन में, इन संसाधनों को सेट अप करने के निर्देश दिए गए हैं:

  • आईएएम सेवा खाता और उससे जुड़ी आईएएम अनुमतियां.
  • Hugging Face टोकन को सेव करने के लिए, Secret Manager सीक्रेट का इस्तेमाल करें.
  • Cloud Storage बकेट, जिसमें अनुमान के नतीजे सेव किए जाते हैं.

ज़रूरी संसाधन सेट अप करने के लिए, यह तरीका अपनाएं:

  1. इस कोडलैब के लिए एनवायरमेंट वैरिएबल सेट करें:
    export PROJECT_ID=<your_project_id>
    export REGION=<your_region>
    export HF_TOKEN=<YOUR_HF_TOKEN>
    
    export SERVICE_ACCOUNT=inference-service-account
    export SERVICE_ACCOUNT_EMAIL=${SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com
    export SECRET_ID=hugging-face-token
    export BUCKET_NAME=inference-codelab-${PROJECT_ID}
    
  2. सेवा खाता बनाने के लिए, यह कमांड चलाएं:
    gcloud iam service-accounts create ${SERVICE_ACCOUNT} \
      --display-name="Service account for batch inference codelab"
    
  3. Hugging Face के ऐक्सेस टोकन को सेव करने के लिए, Secret Manager का इस्तेमाल करें:
    gcloud secrets create $SECRET_ID \
          --replication-policy="automatic"
    
    printf $HF_TOKEN | gcloud secrets versions add $SECRET_ID --data-file=-
    
  4. अपने सेवा खाते को Secret Manager Secret Accessor की भूमिका असाइन करें:
    gcloud secrets add-iam-policy-binding $SECRET_ID \
      --member serviceAccount:$SERVICE_ACCOUNT_EMAIL \
      --role='roles/secretmanager.secretAccessor'
    
  5. फ़ाइन-ट्यून किए गए मॉडल को होस्ट करने के लिए बकेट बनाएं:
    gcloud storage buckets create -l us-central1 gs://${BUCKET_NAME}
    
  6. अपने सेवा खाते को बकेट का ऐक्सेस दें:
    gcloud storage buckets add-iam-policy-binding gs://$BUCKET_NAME \
      --member=serviceAccount:$SERVICE_ACCOUNT_EMAIL \
      --role=roles/storage.objectAdmin
    
  7. कंटेनर इमेज को सेव करने के लिए, Artifact Registry में एक डेटाबेस बनाएं. अगर आपने अपने प्रोजेक्ट में Cloud Run के सोर्स डिप्लॉयमेंट का इस्तेमाल पहले भी किया है, तो इस चरण को छोड़ दें.
    gcloud artifacts repositories create cloud-run-source-deploy \
        --repository-format=docker \
        --location=$REGION \
        --project=$PROJECT_ID
    

4. Cloud Run जॉब बनाना

इस सेक्शन में, आपको ऐसा कोड बनाने का तरीका बताया जाएगा जो ये काम करता है:

  • यह Hugging Face से Llama मॉडल इंपोर्ट करता है
  • मॉडल पर बैच इन्फ़रेंस करता है. इस प्रोसेस के लिए, एक L4 GPU का इस्तेमाल किया जाता है.
  • यह कुकी, नतीजों को लोकल डिस्क में सेव करती है. इसे वॉल्यूम माउंट के ज़रिए Cloud Storage में लिखा जाता है.

Cloud Run जॉब और Dockerfile बनाने के लिए, यह तरीका अपनाएं:

  1. फ़ाइन ट्यूनिंग के जॉब कोड को होस्ट करने के लिए, एक डायरेक्ट्री बनाएं:
    mkdir codelab-inference-job
    cd codelab-inference-job
    
  2. main.py नाम की फ़ाइल बनाना
    # SPDX-License-Identifier: Apache-2.0
    from vllm import LLM, SamplingParams
    
    # Sample prompts.
    prompts = [
        "Cloud Run is",
        "The future of AI is",
        "The capital of Germany is",
        "python as a programming language is",
    ]
    # Create a sampling params object.
    sampling_params = SamplingParams(temperature=0.8, top_p=0.95)
    
    # Create an LLM.
    llm = LLM(model="meta-llama/Llama-3.2-1B")
    # Generate texts from the prompts. The output is a list of RequestOutput objects
    # that contain the prompt, generated text, and other information.
    outputs = llm.generate(prompts, sampling_params)
    
    # Save the outputs to disk
    with open("/results/output.txt", "w") as f:
        for output in outputs:
            prompt = output.prompt
            generated_text = output.outputs[0].text
            f.write(f"Prompt: {prompt!r}, Generated text: {generated_text!r}\n")
    
    print(f"Wrote {len(outputs)} to disk.")
    
  3. Dockerfile बनाएं:
    FROM python:3.12
    ADD main.py .
    RUN python -m pip install --upgrade pip setuptools
    RUN pip install vllm
    CMD ["python", "./main.py"]
    

5. जॉब डिप्लॉय और एक्ज़ीक्यूट करना

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

  1. Cloud Run जॉब बनाएं:
    gcloud run jobs deploy inference-job \
      --region $REGION \
      --source . \
      --gpu=1 \
      --set-secrets HF_TOKEN=${SECRET_ID}:latest \
      --add-volume name=results,type=cloud-storage,bucket=${BUCKET_NAME} \
      --add-volume-mount volume=results,mount-path=/results \
      --service-account $SERVICE_ACCOUNT_EMAIL
    
    यह कमांड, सोर्स से इमेज बनाती है और जॉब को डिप्लॉय करती है. इस प्रोसेस को पूरा होने में कुछ समय लगेगा.
  2. जॉब को लागू करना:
    gcloud run jobs execute inference-job --region $REGION --async
    
    इस प्रोसेस को पूरा होने में कुछ मिनट लगते हैं. पिछली कमांड के आउटपुट में दिए गए लिंक का इस्तेमाल करके, स्थिति देखी जा सकती है.

पुष्टि हो गई

यह पुष्टि करने के लिए कि आपका काम पूरा हो गया है, काम के लॉग देखें. ये लॉग, आखिरी कमांड के आउटपुट में दिखते हैं.

Cloud Storage बकेट में नतीजे देखें:

कंसोल में:

  1. Cloud Storage पर जाएं.
  2. inference-codelab से शुरू होने वाला बकेट चुनें.
  3. output.txt चुनें.
  4. ब्राउज़र में कॉन्टेंट देखने के लिए, पुष्टि किया गया यूआरएल पर क्लिक करें.

फ़ाइल में चार प्रॉम्प्ट और उनके आउटपुट होने चाहिए.

6. बधाई हो!

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

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

हमने क्या-क्या कवर किया है

  • Cloud Run Jobs GPU का इस्तेमाल करके, बैच इन्फ़रेंस कैसे किया जाता है
  • Cloud Run वॉल्यूम माउंट का इस्तेमाल करके, Cloud Storage में डेटा लिखने का तरीका

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

Cloud Run जॉब को मिटाने के लिए, Cloud Run Cloud Console पर जाएं. इसके लिए, https://console.cloud.google.com/run पर जाएं. इसके बाद, inference-job जॉब को मिटाएं.

पूरे प्रोजेक्ट को मिटाने के लिए, संसाधन मैनेज करें पर जाएं. इसके बाद, दूसरे चरण में बनाया गया प्रोजेक्ट चुनें और मिटाएं को चुनें. प्रोजेक्ट मिटाने पर, आपको Cloud SDK में प्रोजेक्ट बदलने होंगे. gcloud projects list कमांड चलाकर, सभी उपलब्ध प्रोजेक्ट की सूची देखी जा सकती है.