המרת קידוד של סרטונים באמצעות 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 .

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

    • בחירת פרויקט: כדי לבחור פרויקט לא נדרש תפקיד IAM ספציפי – אתם יכולים לבחור כל פרויקט שקיבלתם בו תפקיד.
    • יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד "יצירת פרויקטים" (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 .

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

    • בחירת פרויקט: כדי לבחור פרויקט לא נדרש תפקיד IAM ספציפי – אתם יכולים לבחור כל פרויקט שקיבלתם בו תפקיד.
    • יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד "יצירת פרויקטים" (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). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד "אדמין בממשק 'שימוש בשירות'" (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. כברירת מחדל, פרויקטים חדשים מקבלים באופן אוטומטי מכסה של 3 יחידות GPU בפריסה הראשונית. אם אתם צריכים להגדיל את המכסה, בקשו מכסה של 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 באמצעות קובץ ה-Docker במאגר לדוגמה וטוענים את הקטגוריות שיצרתם:

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

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

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

    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.

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

  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

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