Managed Service pour Apache Spark offre la possibilité d'associer des processeurs graphiques (GPU) aux nœuds maîtres et aux nœuds de calcul Compute Engine d'un cluster Managed Service pour Apache Spark. Vous pouvez utiliser ces GPU pour accélérer des charges de travail spécifiques sur vos instances, telles que le machine learning et le traitement de données.
Pour en savoir plus sur ce que vous pouvez faire avec les GPU et sur les types de matériel GPU disponibles, consultez GPU sur Compute Engine.
Avant de commencer
- Les GPU nécessitent des pilotes et des logiciels spécifiques. Ces éléments sont préinstallés dans les images
-mlde Managed Service pour Apache Spark (il est recommandé d'utiliser les images-ml). Ils peuvent être installés manuellement si nécessaire. - Consultez la section sur la tarification des GPU dans Compute Engine pour mieux comprendre le coût d'utilisation des GPU sur vos instances.
- Consultez la section sur les restrictions imposées aux instances utilisant des GPU pour comprendre les spécificités de ces instances par rapport à celles sans GPU.
- Consultez la page des quotas de votre projet pour vous assurer que vous disposez d'un quota de GPU suffisant (
NVIDIA_T4_GPUS,NVIDIA_P100_GPUSouNVIDIA_V100_GPUS). Si les GPU ne figurent pas sur la page "Quotas" ou que vous avez besoin d'un quota de GPU supplémentaire, demandez une augmentation de quota.
Types de GPU
Les nœuds Managed Service pour Apache Spark sont compatibles avec les types de GPU suivants. Vous devez spécifier le type de GPU lorsque vous l'associez à un cluster Managed Service pour Apache Spark.
nvidia-tesla-l4- NVIDIA® Tesla® L4nvidia-tesla-a100- NVIDIA® Tesla® A100nvidia-tesla-p100- NVIDIA® Tesla® P100nvidia-tesla-v100- NVIDIA® Tesla® V100nvidia-tesla-p4- NVIDIA® Tesla® P4nvidia-tesla-t4- NVIDIA® Tesla® T4nvidia-rtx-pro-6000- NVIDIA® RTX® PRO 6000nvidia-tesla-p100-vws- NVIDIA® Tesla® P100 Virtual Workstationsnvidia-tesla-p4-vws- NVIDIA® Tesla® P4 Virtual Workstationsnvidia-tesla-t4-vws- NVIDIA® Tesla® T4 Virtual Workstations
Associer des GPU à un cluster
Pour associer des GPU à un cluster Managed Service pour Apache Spark, vous devez, lorsque vous créez le cluster, spécifier une image -ml (recommandé) ou utiliser une action d'initialisation pour installer des pilotes de GPU.
Les exemples suivants spécifient ou supposent l'utilisation de l'image 2.3-ml-ubuntu lors de la création d'un cluster.
ConsoleGoogle Cloud
Pour associer des GPU à un cluster Managed Service pour Apache Spark, procédez comme suit :
- Ouvrez la page Créer un cluster.
- Dans la section Configuration des nœuds de calcul, cliquez sur l'onglet GPU, puis spécifiez le type et le nombre de GPU.
- Par défaut, les paramètres du nœud pilote (maître) sont identiques à ceux du nœud de calcul principal. Sous Configuration supplémentaire, vous pouvez cliquer sur Nœud pilote pour décocher la case Définir par défaut le nœud pilote sur la même configuration que le nœud de calcul principal et spécifier le type de machine pour le nœud pilote.
gcloud CLI
Pour associer des GPU aux nœuds maîtres, principaux et secondaires dans un cluster Managed Service pour Apache Spark, créez le cluster à l'aide des options gcloud dataproc clusters create
‑‑master-accelerator, ‑‑worker-accelerator et ‑‑secondary-worker-accelerator. Ces indicateurs comprennent les valeurs suivantes :
- Type de GPU à associer à un nœud
- Nombre de GPU à associer au nœud
Le type de GPU est obligatoire, tandis que le nombre de GPU est facultatif (la valeur par défaut correspond à 1 GPU).
Exemple :
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
Pour associer des GPU aux nœuds maîtres, principaux et aux nœuds de calcul secondaires d'un cluster Managed Service pour Apache Spark, remplissez les champs acceleratorTypeUri et acceleratorCount d'InstanceGroupConfig.AcceleratorConfig dans la requête API cluster.create. Ces champs acceptent les valeurs suivantes :
- Type de GPU à associer à un nœud
- Nombre de GPU à associer au nœud
Installer des pilotes de GPU
Pour utiliser les GPU associés aux nœuds Managed Service pour Apache Spark, vous avez besoin de pilotes de GPU.
Au lieu d'utiliser les pilotes de GPU installés dans les images -ml de Managed Service pour Apache Spark, vous pouvez utiliser les actions d'initialisation suivantes pour installer les pilotes de GPU lorsque vous créez un cluster :
Vérifier l'installation du pilote de GPU
Vous pouvez vérifier l'installation du pilote GPU sur un cluster en vous connectant à l'aide de SSH au nœud maître du cluster, puis en exécutant la commande suivante :
nvidia-smi
Si le pilote fonctionne correctement, le résultat affiche la version du pilote et les statistiques du GPU (consultez la section Vérifier l'installation du pilote de GPU).
Configurer Spark
Lorsque vous envoyez une tâche à Spark, vous pouvez utiliser la propriété environnement d'exécution de la configuration Spark spark.executorEnv avec la variable d'environnement LD_PRELOAD pour précharger les bibliothèques nécessaires.
Exemple :
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
Exemple de tâche GPU
Vous pouvez tester les GPU sur Managed Service pour Apache Spark en exécutant l'une des tâches suivantes, ce qui est particulièrement utile avec les GPU :
- Exécutez l'un des exemples de machine learning Spark.
- Exécutez l'exemple suivant avec
spark-shellpour exécuter un calcul matriciel :
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!")
Étape suivante
- Découvrez comment créer une instance Compute Engine avec des GPU associés.
- En savoir plus sur les types de machines GPU