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

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

لمحة عن هذا الدرس التطبيقي حول الترميز

subjectتاريخ التعديل الأخير: يونيو 4, 2025
account_circleتأليف موظف Google

1. مقدمة

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

  • كيفية إجراء الاستنتاج المجمّع باستخدام وحدة معالجة الرسومات في "وظائف Cloud Run"
  • كيفية الكتابة في 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 باستخدام الإذن "قراءة". ويمكنك الإشارة إليه لاحقًا باسم YOUR_HF_TOKEN.

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

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

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

  • حساب خدمة إدارة الهوية وإمكانية الوصول وأذونات إدارة الهوية وإمكانية الوصول المرتبطة به
  • سرّ "مدير الأسرار" لتخزين رمز 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. امنح حساب الخدمة دور "مُستخدِم سرّ أداة إدارة الأسرار":
    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 beta 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"
  • كيفية الكتابة في Cloud Storage باستخدام عمليات ربط وحدة تخزين في Cloud Run

7. تَنظيم

لحذف وظيفة Cloud Run، انتقِل إلى Cloud Console في Cloud Run على الرابط https://console.cloud.google.com/run وأحذِف وظيفة inference-job.

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