במדריך הזה מוסבר איך להמיר סרטונים אופליין בעדיפות נמוכה באמצעות משימות ב-Cloud Run.
מטרות
במדריך הזה תלמדו:
- יוצרים קטגוריות של Cloud Storage כדי לאחסן את הסרטונים לעיבוד ואת תוצאות הקידוד.
- פריסת משימה של Cloud Run באמצעות מעבדי GPU כדי להאיץ את המרת קידוד הווידאו.
- מריצים את המשימה ומוודאים שהמרת הקידוד של הסרטון בוצעה בהצלחה.
עלויות
במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:
בעזרת מחשבון העלויות אתם יכולים להעריך את העלויות בהתאם לשימוש הצפוי.
לפני שמתחילים
- נכנסים לחשבון Google Cloud . אנחנו ממליצים למשתמשים חדשים ב- Google Cloud ליצור חשבון כדי שיוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
יוצרים או בוחרים פרויקט ב- 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 .
-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
יוצרים או בוחרים פרויקט ב- 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 .
מפעילים את ממשקי ה-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 - מגדירים את האזור כמשתנה סביבה:
export REGION=REGION
- יוצרים חשבון שירות:
gcloud iam service-accounts create video-encoding
- כברירת מחדל, פרויקטים חדשים מקבלים באופן אוטומטי מכסה של 3 יחידות GPU בפריסה הראשונית. אם אתם צריכים להגדיל את המכסה, בקשו מכסה של
Total Nvidia L4 GPU allocation without zonal redundancy, per project per regionב-Cloud Run Admin API בדף Quotas and system limits.
התפקידים הנדרשים
כדי לקבל את ההרשאות שדרושות להשלמת המדריך, בקשו מהאדמין לתת לכם את התפקידים הבאים ב-IAM ברמת הפרויקט:
- אדמין של מאגר Artifact Registry (
roles/artifactregistry.repoAdmin) - עריכה ב-Cloud Build (
roles/cloudbuild.builds.editor) - אדמין ב-Cloud Run (
roles/run.admin) - יצירת חשבונות שירות (
roles/iam.serviceAccountCreator) - משתמש בחשבון שירות (
roles/iam.serviceAccountUser)
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
מתן התפקידים
המסוף
-
נכנסים לדף IAM במסוף Google Cloud .
כניסה לדף IAM - בוחרים את הפרויקט.
- לוחצים על Grant access.
-
בשדה New principals, מזינים את מזהה המשתמש. בדרך כלל זו כתובת האימייל שמשמשת לפריסת השירות של Cloud Run.
- בוחרים תפקיד מהרשימה Select a role.
- כדי לתת עוד תפקידים, לוחצים על Add another role ומוסיפים אותם.
- לוחצים על 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 בתפקיד שמוסיפים לחשבון הפריסה.
הכנת האפליקציה
כדי לאחזר את דוגמת הקוד לשימוש:
משכפלים את המאגר לדוגמה ומעבירים אותו למכונה המקומית:
git clone https://github.com/GoogleCloudPlatform/cloud-run-samplesעוברים לספרייה שמכילה את הקוד לדוגמה של Cloud Run:
cd cloud-run-samples/jobs-video-encoding
יצירת קטגוריות של Cloud Storage
כדי לאחסן את הסרטונים לעיבוד ולשמור את תוצאות הקידוד, יוצרים את שתי הקטגוריות הבאות של Cloud Storage:
יוצרים קטגוריה לאחסון סרטונים לפני העיבוד:
gcloud storage buckets create gs://preprocessing-PROJECT_ID \ --location LOCATIONמחליפים את מה שכתוב בשדות הבאים:
- PROJECT_ID: מזהה הפרויקט.
- LOCATION: המיקום ב-Cloud Storage.
נותנים לחשבון השירות גישה לקריאה מהקטגוריה הזו:
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 במזהה הפרויקט.
יוצרים קטגוריה לאחסון סרטונים שעברו המרת קידוד אחרי העיבוד:
gcloud storage buckets create gs://transcoded-PROJECT_ID \ --location LOCATIONמחליפים את מה שכתוב בשדות הבאים:
- PROJECT_ID: מזהה הפרויקט.
- LOCATION: המיקום ב-Cloud Storage.
נותנים לחשבון השירות גישה לקריאה ולכתיבה בקטגוריה הזו:
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 במאגר לדוגמה וטוענים את הקטגוריות שיצרתם:
עוברים לספרייה לדוגמה:
cd cloud-run-samples/jobs-video-encoding
אם מאגר ברירת המחדל של Cloud Run לא קיים, יוצרים מאגר ב-Artifact Registry:
gcloud artifacts repositories create cloud-run-source-deploy \ --repository-format=docker \ --location LOCATIONמחליפים את LOCATION במיקום של המאגר.
יוצרים את קובץ האימג' של הקונטיינר:
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 משתמש בסוג מכונה גדול יותר.
פורסים את המשימה:
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.
הרצת המשימה
כדי להריץ את המשימה:
מעלים סרטון לדוגמה כדי לקודד אותו:
gcloud storage cp gs://cloud-samples-data/video/cat.mp4 gs://preprocessing-PROJECT_IDמריצים את המשימה:
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.בודקים את היומנים של Cloud Run כדי לוודא שהמרת הקידוד של הסרטון בוצעה:
gcloud run jobs logs read video-encoding-job --region REGIONמורידים את הסרטון שהקידוד שלו הומר:
gcloud storage cp gs://transcoded-PROJECT_ID/encoded_cat.mp4 .
הסרת המשאבים
כדי להימנע מחיובים נוספים בחשבון Google Cloud , צריך למחוק את כל המשאבים שפרסתם באמצעות המדריך למתחילים.
מחיקת המאגר
ב-Cloud Run החיוב הוא רק על הזמן שבו המשימה פועלת. עם זאת, יכול להיות שעדיין תחויבו על אחסון קובץ האימג' של הקונטיינר ב-Artifact Registry. כדי למחוק מאגרים של Artifact Registry, פועלים לפי השלבים שמפורטים במאמר מחיקת מאגרים במסמכי התיעוד של Artifact Registry.
מחיקת המשרה
משימות ב-Cloud Run צוברות עלויות רק כשהמשימה מופעלת. כדי למחוק את המשימה ב-Cloud Run, מבצעים את אחת מהפעולות הבאות:
המסוף
כדי למחוק משרה:
נכנסים ל-Cloud Run במסוף Google Cloud :
ברשימת המשימות, מאתרים את המשימה שרוצים למחוק ולוחצים על תיבת הסימון שלה כדי לבחור אותה.
לוחצים על Delete. הפעולה הזו מסיימת את כל הרצות המשימות שמתבצעות ואת כל המכונות של הקונטיינרים שפועלות.
gcloud
כדי למחוק משימה, מריצים את הפקודה הבאה:
gcloud run jobs delete JOB_NAME
מחליפים את JOB_NAME בשם המשימה.
מחיקת פרויקט הבדיקה
מחיקת הפרויקט ב- Google Cloud מפסיקה את החיוב על כל המשאבים באותו פרויקט. כדי לשחרר את כל המשאבים של Google Cloud בפרויקט:
כדי למחוק פרויקט ב- Google Cloud :
gcloud projects delete PROJECT_ID