צירוף יחידות GPU לאשכולות

‫Managed Service for Apache Spark מאפשר לצרף יחידות לעיבוד גרפי (GPU) לצמתי ה-master וה-worker ב-Compute Engine באשכול Managed Service for Apache Spark. אתם יכולים להשתמש במעבדי ה-GPU האלה כדי להאיץ עומסי עבודה ספציפיים במופעים, כמו למידת מכונה ועיבוד נתונים.

מידע נוסף על האפשרויות לשימוש ב-GPU ועל סוגי חומרת ה-GPU שזמינים אפשר לקרוא במאמר GPU ב-Compute Engine.

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

  • ל-GPU נדרשים דרייברים ותוכנה מיוחדים. הפריטים האלה מותקנים מראש בתמונות של Managed Service for Apache Spark -ml (מומלץ להשתמש בתמונות של -ml), ואפשר להתקין אותם באופן ידני כשצריך.
  • כדאי לקרוא על תמחור של יחידות GPU ב-Compute Engine כדי להבין את העלות של שימוש ביחידות GPU במופעים.
  • כדי להבין איך המקרים האלה פועלים באופן שונה ממקרים ללא GPU, אפשר לקרוא על הגבלות על מקרים עם GPU.
  • כדי לוודא שיש לכם מכסת GPU מספקת (NVIDIA_T4_GPUS, ‏ NVIDIA_P100_GPUS או NVIDIA_V100_GPUS) בפרויקט, כדאי לעיין בדף המכסות של הפרויקט. אם יחידות ה-GPU לא מופיעות בדף המכסות או שאתם צריכים מכסת GPU נוספת, שולחים בקשה להגדלת המכסה.

סוגים של יחידות GPU

השירות Managed Service for Apache Spark תומך בסוגי ה-GPU הבאים. כשמצרפים יחידות GPU לאשכול Managed Service for Apache Spark, צריך לציין את סוג ה-GPU.

  • nvidia-tesla-l4 - NVIDIA® Tesla® L4
  • nvidia-tesla-a100 - NVIDIA® Tesla® A100
  • nvidia-tesla-p100 - NVIDIA® Tesla® P100
  • nvidia-tesla-v100 - NVIDIA® Tesla® V100
  • nvidia-tesla-p4 - NVIDIA® Tesla® P4
  • nvidia-tesla-t4 - NVIDIA® Tesla® T4
  • nvidia-rtx-pro-6000 - NVIDIA® RTX® PRO 6000
  • nvidia-tesla-p100-vws - NVIDIA® Tesla® P100 Virtual Workstations
  • nvidia-tesla-p4-vws - NVIDIA® Tesla® P4 תחנות עבודה וירטואליות
  • nvidia-tesla-t4-vws - NVIDIA® Tesla® T4 Virtual Workstations

צירוף יחידות GPU לאשכול

כדי לצרף יחידות GPU לאשכול Managed Service for Apache Spark, כשיוצרים את האשכול צריך לציין תמונת -ml (מומלץ) או להשתמש בפעולת אתחול כדי להתקין מנהלי התקנים של GPU. בדוגמאות הבאות מצוין או מניחים שימוש בתמונה 2.3-ml-ubuntu כשיוצרים אשכול.

מסוףGoogle Cloud

כדי לצרף יחידות GPU לאשכול Managed Service for Apache Spark, מבצעים את השלבים הבאים:

  1. פותחים את הדף Create cluster.
  2. בקטע Worker configuration (הגדרות של Worker), לוחצים על הכרטיסייה GPUs (מעבדים גרפיים) ומציינים את הסוג והמספר של המעבדים הגרפיים.
  3. כברירת מחדל, ההגדרות של צומת ה-driver (הראשי) זהות להגדרות של העובד הראשי. בקטע Additional configuration (הגדרות נוספות), אפשר ללחוץ על Driver node (צומת של מנהל התקן) כדי לבטל את הסימון של התיבה Default driver node to the same as primary worker (צומת ברירת המחדל של מנהל ההתקן זהה לצומת העובד הראשי) ולציין את סוג המכונה לצומת של מנהל ההתקן.

‫CLI של gcloud

כדי לצרף מעבדים גרפיים לצומת הראשי ולצומתי העובדים הראשיים והמשניים באשכול Managed Service for Apache Spark, צריך ליצור את האשכול באמצעות הדגלים gcloud dataproc clusters create ‑‑master-accelerator, ‑‑worker-accelerator ו- ‑‑secondary-worker-accelerator. הדגלים האלה מקבלים את הערכים הבאים:

  • סוג ה-GPU לצירוף לצומת
  • מספר ה-GPU לצירוף לצומת

חובה לציין את סוג ה-GPU, ומספר ה-GPU הוא אופציונלי (ברירת המחדל היא GPU אחד).

לדוגמה:

gcloud dataproc clusters create cluster-name \
    --image-version=2.3-ml-ubuntu \
    --region=region \
    --master-accelerator type=nvidia-tesla-t4 \
    --worker-accelerator type=nvidia-tesla-t4,count=4 \
    --secondary-worker-accelerator type=nvidia-tesla-t4,count=4 \
    ... other flags

‫API בארכיטקטורת REST

כדי לצרף יחידות GPU לצומת הראשי ולצומתי העובדים הראשיים והמשניים באשכול Managed Service for Apache Spark, ממלאים את השדות InstanceGroupConfig.AcceleratorConfigacceleratorTypeUri ו-acceleratorCount כחלק מבקשת ה-API‏ cluster.create. הערכים האפשריים בשדות האלה הם:

  • סוג ה-GPU לצירוף לצומת
  • מספר ה-GPU לצירוף לצומת

התקנת דרייברים של GPU

כדי להשתמש ב-GPU שמצורפים לצמתים של Managed Service for Apache Spark, צריך להתקין דרייברים של GPU. במקום להשתמש בדרייברים של GPU שמותקנים בתמונות של Managed Service for Apache Spark -ml, אפשר להשתמש בפעולות האתחול הבאות כדי להתקין דרייברים של GPU כשיוצרים אשכול:

אימות ההתקנה של הדרייבר של ה-GPU

כדי לוודא שהתקנתם את מנהל ההתקן של ה-GPU באשכול, מתחברים באמצעות SSH לצומת הראשי של האשכול ומריצים את הפקודה הבאה:

nvidia-smi

אם מנהל ההתקן פועל בצורה תקינה, בתוצאה יוצגו הגרסה של מנהל ההתקן ונתונים סטטיסטיים של ה-GPU (ראו אימות ההתקנה של מנהל ההתקן של ה-GPU).

הגדרות של Spark

כששולחים עבודה ל-Spark, אפשר להשתמש במשתנה הסביבה LD_PRELOAD עם המאפיין spark.executorEnv של הגדרות Spark runtime environment property כדי לטעון מראש את הספריות הנדרשות.

דוגמה:

gcloud dataproc jobs submit spark --cluster=CLUSTER_NAME \
  --region=REGION \
  --class=org.apache.spark.examples.SparkPi \
  --jars=file:///usr/lib/spark/examples/jars/spark-examples.jar \
  --properties=spark.executorEnv.LD_PRELOAD=libnvblas.so,spark.task.resource.gpu.amount=1,spark.executor.resource.gpu.amount=1,spark.executor.resource.gpu.discoveryScript=/usr/lib/spark/scripts/gpu/getGpusResources.sh

דוגמה למשימת GPU

אתם יכולים לבדוק את ה-GPU ב-Managed Service for Apache Spark על ידי הפעלת אחת מהמשימות הבאות, שמרוויחות מהפעלה עם GPU:

  1. מריצים אחת מהדוגמאות של Spark ML.
  2. כדי להריץ חישוב מטריצה, מריצים את הדוגמה הבאה עם spark-shell:
import org.apache.spark.mllib.linalg._
import org.apache.spark.mllib.linalg.distributed._
import java.util.Random

def makeRandomSquareBlockMatrix(rowsPerBlock: Int, nBlocks: Int): BlockMatrix = {
  val range = sc.parallelize(1 to nBlocks)
  val indices = range.cartesian(range)
  return new BlockMatrix(
      indices.map(
          ij => (ij, Matrices.rand(rowsPerBlock, rowsPerBlock, new Random()))),
      rowsPerBlock, rowsPerBlock, 0, 0)
}

val N = 1024 * 4
val n = 2
val mat1 = makeRandomSquareBlockMatrix(N, n)
val mat2 = makeRandomSquareBlockMatrix(N, n)
val mat3 = mat1.multiply(mat2)
mat3.blocks.persist.count
println("Processing complete!")

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