המרת קידוד של סרטונים באמצעות 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, נדרשת ההרשאה serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק Service Usage' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים

    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. כברירת מחדל, בפרויקטים חדשים מוקצה אוטומטית מכסת GPU של 3 יחידות לאחר הפריסה הראשונית. אם אתם צריכים להגדיל את המכסה, אתם יכולים לבקש Total Nvidia L4 GPU allocation without zonal redundancy, per project per region מכסה נוספת ל-Cloud Run Admin API בדף Quotas and system limits.

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

כדי לקבל את ההרשאות שדרושות להשלמת המדריך, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-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

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