نحوه اجرای استنتاج دسته ای در کارهای Cloud Run

۱. مقدمه

نمای کلی

در این آزمایشگاه کد، شما از کارهای Cloud Run برای اجرای استنتاج دسته‌ای با استفاده از Llama 3.2-1b LLM و vLLM متا که توسط Cloud Run Jobs GPU پشتیبانی می‌شود، استفاده خواهید کرد. شما نتایج را مستقیماً با استفاده از Cloud Run volume mounts در Cloud Storage خواهید نوشت.

آنچه یاد خواهید گرفت

  • نحوه انجام استنتاج دسته‌ای با استفاده از Cloud Run Jobs GPU
  • نحوه نوشتن در فضای ذخیره‌سازی ابری با استفاده از نصب‌کننده‌های حجم Cloud Run

۲. قبل از شروع

فعال کردن APIها

قبل از اینکه بتوانید از این codelab استفاده کنید، API های زیر را با اجرای دستور زیر فعال کنید:

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 قرار دارد.

توجه: اگر از یک پروژه جدید استفاده می‌کنید، ممکن است بین فعال کردن API و نمایش سهمیه‌ها در این صفحه، چند دقیقه طول بکشد.

صورت در آغوش گرفته

این آزمایشگاه کد از مدلی که روی Hugging Face میزبانی می‌شود استفاده می‌کند. برای دریافت این مدل، توکن دسترسی کاربر Hugging Face را با مجوز "خواندن" درخواست کنید. بعداً به آن به عنوان YOUR_HF_TOKEN ارجاع خواهید داد.

همچنین برای استفاده از مدل باید با شرایط استفاده موافقت کنید: https://huggingface.co/meta-llama/Llama-3.2-1B

۳. تنظیمات و الزامات

این بخش شامل دستورالعمل‌هایی برای تنظیم منابع زیر است:

  • حساب سرویس IAM و مجوزهای IAM مرتبط.
  • مدیر مخفی، رمز ذخیره توکن چهره در آغوش گرفته شما را دارد.
  • مخزن ذخیره‌سازی ابری برای ذخیره نتیجه استنتاج شما.

برای تنظیم منابع مورد نیاز، مراحل زیر را دنبال کنید:

  1. متغیرهای محیطی را برای این codelab تنظیم کنید:
    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 source deploys استفاده کرده‌اید، از این مرحله صرف نظر کنید.
    gcloud artifacts repositories create cloud-run-source-deploy \
        --repository-format=docker \
        --location=$REGION \
        --project=$PROJECT_ID
    

۴. کار Cloud Run را ایجاد کنید

در این بخش، کدی ایجاد خواهید کرد که کارهای زیر را انجام می‌دهد:

  • مدل Llama را از Hugging Face وارد می‌کند.
  • استنتاج دسته‌ای را روی مدل انجام می‌دهد. این کار از یک پردازنده گرافیکی L4 برای این فرآیند استفاده می‌کند.
  • نتایج را روی دیسک محلی می‌نویسد. این از طریق نصب ولوم‌ها روی فضای ذخیره‌سازی ابری نوشته می‌شود.

برای ایجاد یک کار 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"]
    

۵. استقرار و اجرای کار

در این مرحله، شما با استفاده از Cloud Run source deploy، یک کار 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
    
    تکمیل این کار چند دقیقه طول می‌کشد. می‌توانید وضعیت را با استفاده از لینکی که در خروجی دستور قبلی ارائه شده است، بررسی کنید.

تأیید موفقیت

برای تأیید اجرای موفقیت‌آمیز کار خود، گزارش‌های مربوط به کار را مانند خروجی آخرین دستور مشاهده کنید.

نتایج را در مخزن ذخیره‌سازی ابری بررسی کنید:

در کنسول:

  1. به فضای ذخیره‌سازی ابری بروید.
  2. سطلی را که با inference-codelab شروع می‌شود، انتخاب کنید.
  3. output.txt انتخاب کنید.
  4. برای مشاهده محتوا در مرورگر، روی Authenticated URL کلیک کنید.

محتویات فایل باید چهار دستور و خروجی‌های آنها باشد.

۶. تبریک می‌گویم!

تبریک می‌گویم که آزمایشگاه کد را تمام کردید!

توصیه می‌کنیم مستندات Cloud Run را بررسی کنید.

آنچه ما پوشش داده‌ایم

  • نحوه انجام استنتاج دسته‌ای با استفاده از Cloud Run Jobs GPU
  • نحوه نوشتن در فضای ذخیره‌سازی ابری با استفاده از نصب‌کننده‌های حجم Cloud Run

۷. تمیز کردن

برای حذف کار Cloud Run، به کنسول Cloud Run در آدرس https://console.cloud.google.com/run بروید و کار inference-job حذف کنید.

برای حذف کل پروژه، به مدیریت منابع بروید، پروژه‌ای را که در مرحله ۲ ایجاد کرده‌اید انتخاب کنید و حذف را انتخاب کنید. اگر پروژه را حذف کنید، باید پروژه‌ها را در Cloud SDK خود تغییر دهید. می‌توانید با اجرای gcloud projects list لیست تمام پروژه‌های موجود را مشاهده کنید.