كيفية تنفيذ الاستنتاج المجمّع في مهام Cloud Run

1. مقدمة

نظرة عامة

في هذا الدرس التطبيقي حول الترميز، ستستخدم مهام Cloud Run لتنفيذ استنتاج مجمّع باستخدام نموذج اللغة الكبير Llama 3.2-1b من Meta وvLLM المستند إلى وحدة معالجة الرسومات في مهام Cloud Run. ستكتب النتائج مباشرةً في Cloud Storage باستخدام عمليات ربط وحدات التخزين في Cloud Run.

أهداف الدورة التعليمية

  • كيفية إجراء استنتاج مجمّع باستخدام وحدة معالجة الرسومات في Cloud Run Jobs
  • كيفية الكتابة إلى Cloud Storage باستخدام عمليات ربط وحدات التخزين في Cloud Run

2. قبل البدء

تفعيل واجهات برمجة التطبيقات

قبل البدء في استخدام هذا الدرس التطبيقي، فعِّل واجهات برمجة التطبيقات التالية من خلال تنفيذ ما يلي:

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

حصة وحدة معالجة الرسومات

طلب زيادة الحصة في منطقة متوافقة الحصة هي nvidia_l4_gpu_allocation_no_zonal_redundancy، ضمن Cloud Run Admin API.

ملاحظة: إذا كنت تستخدم مشروعًا جديدًا، قد يستغرق ظهور الحصص في هذه الصفحة بضع دقائق بعد تفعيل واجهة برمجة التطبيقات.

Hugging Face

يستخدم هذا الدرس التطبيقي حول الترميز نموذجًا مستضافًا على Hugging Face. للحصول على هذا النموذج، اطلب رمز الوصول إلى حساب مستخدم Hugging Face مع إذن "القراءة". ستشير إلى هذا لاحقًا باسم YOUR_HF_TOKEN.

يجب أيضًا الموافقة على بنود الاستخدام لاستخدام النموذج: https://huggingface.co/meta-llama/Llama-3.2-1B

3- الإعداد والمتطلبات

يتضمّن هذا القسم تعليمات حول إعداد المراجع التالية:

  • حساب خدمة إدارة الهوية وإمكانية الوصول وأذونات إدارة الهوية وإمكانية الوصول المرتبطة به
  • سر Secret Manager لتخزين رمز Hugging Face المميّز
  • حزمة 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. استخدِم Secret Manager لتخزين رمز الدخول إلى Hugging Face:
    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

في هذا القسم، ستنشئ الرمز الذي ينفّذ ما يلي:

  • يستورد هذا الرمز نموذج Llama من Hugging Face
  • تُجري استنتاجًا مجمّعًا على النموذج. تستخدم المهمة وحدة معالجة رسومات L4 واحدة في هذه العملية.
  • يكتب النتائج على القرص المحلي. يتمّ كتابة هذا الملفّ في 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. انقر على عنوان URL مصادق عليه لعرض المحتوى في المتصفّح.

يجب أن يتضمّن الملف الطلبات الأربعة ومخرجاتها.

6. تهانينا!

تهانينا على إكمال هذا الدرس العملي.

ننصحك بمراجعة مستندات Cloud Run.

المواضيع التي تناولناها

  • كيفية إجراء استنتاج مجمّع باستخدام وحدة معالجة الرسومات في Cloud Run Jobs
  • كيفية الكتابة إلى Cloud Storage باستخدام عمليات ربط وحدات التخزين في Cloud Run

7. تَنظيم

لحذف مهمة Cloud Run، انتقِل إلى Cloud Run Cloud Console على https://console.cloud.google.com/run واحذف المهمة inference-job.

لحذف المشروع بأكمله، انتقِل إلى إدارة المراجع، واختَر المشروع الذي أنشأته في الخطوة 2، ثم انقر على "حذف". إذا حذفت المشروع، عليك تغيير المشاريع في Cloud SDK. يمكنك الاطّلاع على قائمة بجميع المشاريع المتاحة من خلال تنفيذ gcloud projects list.