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

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

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

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

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

סוגי GPU

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

  • 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
  • nvidia-tesla-t4-vws – תחנות עבודה וירטואליות של NVIDIA® Tesla® T4

צירוף מעבדי GPU לאשכול

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

בדוגמאות הבאות מצוין או מונח השימוש בתמונה 2.3-ml-ubuntu כשיוצרים אשכול.

מסוףGoogle Cloud

כדי לצרף מעבדים גרפיים לאשכול Managed Service for Apache Spark:

  1. פותחים את הדף Create cluster.
  2. בקטע Worker configuration, לוחצים על הכרטיסייה GPUs ומציינים את הסוג והמספר של יחידות ה-GPU.
  3. כברירת מחדל, ההגדרות של צומת ה-driver (הראשי) זהות להגדרות של ה-primary worker. בקטע 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

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

  • סוג ה-GPU שרוצים לצרף לצומת
  • מספר יחידות ה-GPU שצריך לצרף לצומת

התקנת מנהלי התקנים של GPU

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

אימות ההתקנה של מנהל ההתקן של ה-GPU

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

nvidia-smi

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

הגדרות אישיות של Spark

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

דוגמה:

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!")

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