צירוף יחידות 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
  • nvidia-tesla-p4-vws - NVIDIA® Tesla® P4 Virtual Workstations
  • 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 (הצומת הראשי) זהות להגדרות של ה-primary worker. בקטע Additional configuration (הגדרות נוספות), אפשר ללחוץ על Driver node (צומת של מנהל התקן) כדי לבטל את הסימון של התיבה Default driver node to the same as primary worker (צומת ברירת המחדל של מנהל ההתקן זהה לצומת העובד הראשי) ולציין את סוג המכונה לצומת של מנהל ההתקן.

‫CLI של gcloud

כדי לצרף GPU לצומת הראשי ולצומתי העובד הראשי והמשני באשכול 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!")

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