המרת קידוד של סרטונים באמצעות FFmpeg ב-Cloud Run jobs עם האצת GPU

במדריך הזה מוסבר איך לבצע טרנסקוד לסרטונים אופליין בעדיפות נמוכה באמצעות משימות Cloud Run.

מטרות

במדריך הזה תלמדו:

עלויות

במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:

כדי להעריך את ההוצאות בהתאם לתחזית השימוש שלכם, אתם יכולים להיעזר במחשבון העלויות.

משתמשים חדשים של Google Cloud ? יכול להיות שאתם זכאים לתקופת ניסיון בחינם.

לפני שמתחילים

  1. נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
  2. התקינו את ה-CLI של Google Cloud.

  3. אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

  4. כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:

    gcloud init
  5. יוצרים או בוחרים Google Cloud פרויקט.

    תפקידים שנדרשים כדי לבחור או ליצור פרויקט

    • Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
    • יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (roles/resourcemanager.projectCreator), שכולל את ההרשאה resourcemanager.projects.create. איך מקצים תפקידים
    • יוצרים Google Cloud פרויקט:

      gcloud projects create PROJECT_ID

      מחליפים את PROJECT_ID בשם של פרויקט Google Cloud שיוצרים.

    • בוחרים את הפרויקט שיצרתם: Google Cloud

      gcloud config set project PROJECT_ID

      מחליפים את PROJECT_ID בשם הפרויקט ב- Google Cloud .

  6. מוודאים שהחיוב מופעל בפרויקט Google Cloud .

  7. התקינו את ה-CLI של Google Cloud.

  8. אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

  9. כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:

    gcloud init
  10. יוצרים או בוחרים Google Cloud פרויקט.

    תפקידים שנדרשים כדי לבחור או ליצור פרויקט

    • Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
    • יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (roles/resourcemanager.projectCreator), שכולל את ההרשאה resourcemanager.projects.create. איך מקצים תפקידים
    • יוצרים Google Cloud פרויקט:

      gcloud projects create PROJECT_ID

      מחליפים את PROJECT_ID בשם של פרויקט Google Cloud שיוצרים.

    • בוחרים את הפרויקט שיצרתם: Google Cloud

      gcloud config set project PROJECT_ID

      מחליפים את PROJECT_ID בשם הפרויקט ב- Google Cloud .

  11. מוודאים שהחיוב מופעל בפרויקט Google Cloud .

  12. מפעילים את ממשקי ה-API של Cloud Run,‏ Artifact Registry ו-Cloud Build:

    תפקידים שנדרשים להפעלת ממשקי API

    כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאה serviceusage.services.enable. איך מקצים תפקידים

    gcloud services enable run.googleapis.com cloudbuild.googleapis.com artifactregistry.googleapis.com
  13. מגדירים את האזור כמשתנה סביבה:
    export REGION=REGION
  14. יוצרים חשבון שירות:
    gcloud iam service-accounts create video-encoding
  15. כדי להשלים את המדריך הזה, צריך לבקש Total Nvidia L4 GPU allocation without zonal redundancy, per project per region בדף Quotas and system limits בקטע Cloud Run Admin API. אפשר גם לפרוס שירות Cloud Run כדי לקבל באופן אוטומטי מענק של מכסת GPU של 3 nvidia-l4 (היתירות האזורית מושבתת) לאזור.

התפקידים הנדרשים

כדי לקבל את ההרשאות שדרושות להשלמת המדריך, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים בפרויקט:

להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.

יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.

מתן התפקידים

המסוף

  1. נכנסים לדף IAM במסוף Google Cloud .

    כניסה לדף IAM
  2. בוחרים את הפרויקט.
  3. לוחצים על Grant access.
  4. בשדה New principals, מזינים את מזהה המשתמש. בדרך כלל מדובר בכתובת האימייל שמשמשת לפריסת שירות Cloud Run.

  5. בוחרים תפקיד מהרשימה Select a role.
  6. כדי להקצות עוד תפקידים, לוחצים על Add another role ומוסיפים אותם.
  7. לוחצים על Save.

gcloud

כדי להקצות לחשבון שלכם את תפקידי ה-IAM הנדרשים בפרויקט:

     gcloud projects add-iam-policy-binding PROJECT_ID \
         --member=PRINCIPAL \
         --role=ROLE
     

מחליפים את:

  • PROJECT_NUMBER עם מספר הפרויקט ב- Google Cloud .
  • PROJECT_ID במזהה הפרויקט ב- Google Cloud .
  • PRINCIPAL עם החשבון שאליו אתם מוסיפים את הקישור. בדרך כלל זו כתובת האימייל שמשמשת לפריסת שירות Cloud Run.
  • ROLE עם התפקיד שאתם מוסיפים לחשבון של כלי הפריסה.

הכנת הבקשה

כדי לאחזר את דוגמת קוד לשימוש:

  1. משכפלים את המאגר לדוגמה ומעבירים אותו למכונה המקומית:

    git clone https://github.com/GoogleCloudPlatform/cloud-run-samples
    
  2. עוברים לספרייה שמכילה את הקוד לדוגמה של Cloud Run:

    cd cloud-run-samples/jobs-video-encoding
    

יצירת קטגוריות ב-Cloud Storage

כדי לאחסן את הסרטונים לעיבוד ולשמור את תוצאות הקידוד, יוצרים את שתי הקטגוריות הבאות ב-Cloud Storage:

  1. יוצרים קטגוריה לאחסון סרטונים לפני העיבוד:

    gcloud storage buckets create gs://preprocessing-PROJECT_ID \
      --location LOCATION
    

    מחליפים את מה שכתוב בשדות הבאים:

    • PROJECT_ID: מזהה הפרויקט.
    • LOCATION: המיקום ב-Cloud Storage.
  2. נותנים לחשבון השירות הרשאת קריאה מהקטגוריה הזו:

    gcloud storage buckets add-iam-policy-binding gs://preprocessing-PROJECT_ID \
      --member="serviceAccount:video-encoding@PROJECT_ID.iam.gserviceaccount.com" \
      --role="roles/storage.objectViewer"
    

    מחליפים את PROJECT_ID במזהה הפרויקט.

  3. יוצרים קטגוריה לאחסון סרטונים שעברו המרה אחרי העיבוד:

    gcloud storage buckets create gs://transcoded-PROJECT_ID \
      --location LOCATION
    

    מחליפים את מה שכתוב בשדות הבאים:

    • PROJECT_ID: מזהה הפרויקט.
    • LOCATION: המיקום ב-Cloud Storage.
  4. נותנים לחשבון השירות הרשאת קריאה וכתיבה בקטגוריה הזו:

    gcloud storage buckets add-iam-policy-binding gs://transcoded-PROJECT_ID \
      --member="serviceAccount:video-encoding@PROJECT_ID.iam.gserviceaccount.com" \
      --role="roles/storage.objectAdmin"
    

    מחליפים את PROJECT_ID במזהה הפרויקט.

פריסת משימה ב-Cloud Run

יוצרים משימת Cloud Run באמצעות קובץ Dockerfile במאגר לדוגמה ומטמיעים את הקטגוריות שיצרתם:

  1. עוברים לספרייה לדוגמה:

    cd cloud-run-samples/jobs-video-encoding
    

  1. יוצרים Artifact Registry אם מאגר ברירת המחדל של Cloud Run עדיין לא קיים:

    gcloud artifacts repositories create cloud-run-source-deploy \
      --repository-format=docker \
      --location LOCATION
    

    מחליפים את LOCATION בשם המיקום של המאגר.

  2. יוצרים את קובץ האימג' של הקונטיינר:

    gcloud builds submit \
      --tag LOCATION-docker.pkg.dev/PROJECT_ID/cloud-run-source-deploy/IMAGE_NAME \
      --machine-type E2-HIGHCPU-32
    

    מחליפים את מה שכתוב בשדות הבאים:

    • PROJECT_ID: מזהה הפרויקט.
    • LOCATION:שם המיקום של המרשם.
    • IMAGE_NAME: שם קובץ האימג' בקונטיינר, לדוגמה: ffmpeg-image.

    ‫Cloud Run משתמש בסוג מכונה גדול יותר כדי לקצר את משך זמן של תהליך build.

  3. פורסים את המשרה:

    gcloud run jobs create video-encoding-job \
        --image LOCATION-docker.pkg.dev/PROJECT_ID/cloud-run-source-deploy/IMAGE_NAME \
        --region REGION \
        --memory 32Gi \
        --cpu 8 \
        --gpu 1 \
        --gpu-type nvidia-l4 \
        --no-gpu-zonal-redundancy \
        --max-retries 1 \
        --service-account video-encoding@PROJECT_ID.iam.gserviceaccount.com \
        --add-volume=name=input-volume,type=cloud-storage,bucket=preprocessing-PROJECT_ID,readonly=true \
        --add-volume-mount=volume=input-volume,mount-path=/inputs \
        --add-volume=name=output-volume,type=cloud-storage,bucket=transcoded-PROJECT_ID \
        --add-volume-mount=volume=output-volume,mount-path=/outputs
    

    מחליפים את מה שכתוב בשדות הבאים:

    • PROJECT_ID: מזהה הפרויקט.
    • REGION: שם האזור. הערה: צריך לבחור את אותו אזור שבו יש לכם מכסת GPU.
    • IMAGE_NAME: שם קובץ האימג' בקונטיינר, למשל ffmpeg-image.

    אם זו הפעם הראשונה שאתם מבצעים פריסה ממקור בפרויקט הזה, Cloud Run יציג לכם בקשה ליצור מאגר ברירת מחדל של Artifact Registry.

הרצת המשימה

כדי להריץ את העבודה, פועלים לפי השלבים הבאים:

  1. מעלים סרטון לדוגמה לקידוד:

    gcloud storage cp gs://cloud-samples-data/video/cat.mp4 gs://preprocessing-PROJECT_ID
    
  2. מריצים את העבודה:

    gcloud run jobs execute video-encoding-job  \
        --region REGION \
        --wait \
        --args="cat.mp4,encoded_cat.mp4,-vcodec,h264_nvenc,-cq,21,-movflags,+faststart"
    

    הקובץ entrypoint.sh דורש קובץ קלט, קובץ פלט וארגומנטים לשליחה אל FFmpeg.

  3. בודקים את היומנים של Cloud Run כדי לוודא שהסרטון עבר המרה:

    gcloud run jobs logs read video-encoding-job --region REGION
    
  4. מורידים את הסרטון שהקידוד שלו הומר:

    gcloud storage cp gs://transcoded-PROJECT_ID/encoded_cat.mp4 .
    

הסרת המשאבים

כדי להימנע מחיובים נוספים בחשבון Google Cloud , מוחקים את כל המשאבים שהצבתם באמצעות המדריך הזה.

מחיקת המאגר

ב-Cloud Run, החיוב מתבצע רק על הזמן שבו המשימה פועלת. עם זאת, יכול להיות שעדיין תחויבו על אחסון קובץ האימג' של הקונטיינר ב-Artifact Registry. כדי למחוק מאגרי Artifact Registry, פועלים לפי השלבים שמפורטים במאמר מחיקת מאגרים במסמכי התיעוד של Artifact Registry.

מחיקת המשרה

העלות של משימות ב-Cloud Run נצברת רק כשמשימת עבודה מופעלת. כדי למחוק את עבודת Cloud Run, מבצעים את אחד מהשלבים הבאים:

המסוף

כדי למחוק משרה:

  1. נכנסים ל-Cloud Run במסוף Google Cloud :

    כניסה ל-Cloud Run

  2. ברשימת המשרות, מאתרים את המשרה שרוצים למחוק ולוחצים על תיבת הסימון שלה כדי לבחור אותה.

  3. לוחצים על Delete. הפעולה הזו תסיים את כל ההרצות של המשימות שנמצאות בתהליך ואת כל המכונות של הקונטיינרים שפועלות.

gcloud

כדי למחוק משימה, מריצים את הפקודה הבאה:

gcloud run jobs delete JOB_NAME

מחליפים את JOB_NAME בשם של המשימה.

מחיקת פרויקט הבדיקה

כשמוחקים פרויקט ב- Google Cloud , החיוב על כל המשאבים באותו פרויקט מופסק. כדי לשחרר את כל Google Cloud המשאבים בפרויקט, פועלים לפי השלבים הבאים:

    כדי למחוק Google Cloud פרויקט:

    gcloud projects delete PROJECT_ID

המאמרים הבאים