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

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

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

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

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

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

צמתי Dataproc תומכים בסוגי ה-GPU הבאים. כשמצרפים יחידות GPU לאשכול Dataproc, צריך לציין את סוג ה-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 תחנות עבודה וירטואליות
  • nvidia-tesla-t4-vws - NVIDIA® Tesla® T4 Virtual Workstations

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

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

Google Cloud CLI

כדי לצרף מעבדים גרפיים לצומתי העובד הראשיים והמשניים ולאשכול הראשי ב-Dataproc, יוצרים את האשכול באמצעות הדגלים 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 לצומתי העובדים הראשיים והמשניים ולאב בצומת הראשי באשכול Dataproc, ממלאים את השדות InstanceGroupConfig.AcceleratorConfigacceleratorTypeUri ו-acceleratorCount כחלק מבקשת ה-API‏ cluster.create. הערכים האפשריים בשדות האלה:

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

המסוף

כדי לצרף GPU לצומתי העובדים הראשיים והמשניים ולצומת הראשי באשכול Dataproc, מבצעים את השלבים הבאים:

  1. פותחים את הדף Dataproc יצירת אשכול Dataproc ב-Compute Engine.
  2. בוחרים בחלונית Configure nodes.
  3. בקטעים Manager Node,‏ Worker nodes ו-Secondary worker nodes, בקטע CPU platform and GPU > GPUs, מציינים את מספר יחידות ה-GPU ואת סוג ה-GPU של הצמתים.

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

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

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

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

nvidia-smi

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

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

כששולחים עבודה ל-Spark, אפשר להשתמש במאפיין spark.executorEnv של הגדרת Spark, מאפיין סביבת זמן הריצה, עם משתנה הסביבה 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 ב-Dataproc, אפשר להריץ כל אחת מהמשימות הבאות, שמועילות כשמריצים אותן עם 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!")

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