Contenu principal

Cette page a été traduite par traduction automatique. Cliquez ici pour voir la dernière version en anglais.

parpool

Créer un pool parallèle sur le cluster

Description

parpool démarre un pool parallèle de workers en utilisant le profil par défaut. Avec les préférences par défaut, MATLAB® démarre un pool sur la machine locale avec un worker par cœur de processeur physique jusqu'à la limite définie dans le profil par défaut. Pour plus d'informations sur les préférences parallèles, voir Spécifier vos préférences pour le traitement parallèle .

En général, la taille du pool est spécifiée par la propriété PreferredPoolNumWorkers du profil par défaut. Pour tous les facteurs pouvant affecter la taille de votre pool, voir Facteurs qui affectent la taille du pool.

parpool active toutes les fonctionnalités du langage parallèle dans MATLAB en créant un job spécial sur un pool de workers et en connectant le client MATLAB au pool parallèle. Les fonctionnalités linguistiques parallèles incluent parfor, parfeval, parfevalOnAll, spmd et distributed. Si possible, le dossier de travail sur les workers est défini pour correspondre à celui de la session client MATLAB.

exemple

parpool(poolsize) crée et renvoie un pool avec le nombre de workers spécifié. poolsize peut être un entier positif ou une plage spécifiée sous forme de vecteur à 2 éléments d'entiers. Si poolsize est une plage, le pool résultant a une taille aussi grande que possible dans la plage demandée.

La spécification de poolsize remplace toute valeur spécifiée dans la propriété PreferredPoolNumWorkers et démarre un pool contenant exactement ce nombre de workers, même s'il doit attendre qu'ils soient disponibles. La plupart des clusters ont un nombre maximum de workers qu'ils peuvent démarrer. Si le profil spécifie un cluster de Job Scheduler MATLAB, parpool réserve ses workers parmi ceux déjà en cours d'exécution et disponibles sous ce Job Scheduler MATLAB. Si le profil spécifie un planificateur local ou tiers, parpool demande au planificateur de démarrer les workers du pool.

exemple

parpool(resources) ou parpool(resources,poolsize) démarre un pool de workers sur les ressources spécifiées par resources.

exemple

parpool(___,Name,Value) applique les valeurs spécifiées pour certaines propriétés lors du démarrage du pool.

exemple

poolobj = parpool(___) renvoie un objet parallel.Pool à l'espace de travail client représentant le pool sur le cluster. Vous pouvez utiliser l'objet pool pour supprimer le pool par programmation ou pour accéder à ses propriétés. Utilisez delete(pool) pour arrêter le pool parallèle.

exemple

Exemples

réduire tout

Démarrez un pool parallèle en utilisant le profil par défaut pour définir le nombre de workers. Avec les préférences par défaut, le pool par défaut se trouve sur la machine locale.

parpool

Vous pouvez créer des pools sur différents types d’environnements parallèles sur votre machine locale.

  • Démarrez un pool parallèle de workers de processus.

    parpool("Processes")
  • Démarrez un pool parallèle de 4 threads workers.

    parpool("Threads",4)

Pour plus d'informations sur les environnements parallèles, voir Choose Between Thread-Based and Process-Based Environments .

Démarrez un pool parallèle de 16 workers en utilisant un profil appelé myProf.

parpool("myProf",16)

Créez un objet représentant le cluster identifié par le profil par défaut et utilisez cet objet cluster pour démarrer un pool parallèle. La taille du pool est déterminée par le profil par défaut.

c = parcluster
parpool(c)

Démarrez un pool parallèle avec le profil par défaut et transmettez deux fichiers de code aux workers.

parpool(AttachedFiles=["mod1.m","mod2.m"])

Si vous avez accès à plusieurs GPU, vous pouvez effectuer vos calculs sur plusieurs GPU en parallèle à l'aide d'un pool parallèle.

Pour déterminer le nombre de GPU disponibles pour une utilisation dans MATLAB, utilisez la fonction gpuDeviceCount.

availableGPUs = gpuDeviceCount("available")
availableGPUs = 3

Démarrez un pool parallèle avec autant de workers que de GPU disponibles. Pour de meilleures performances, MATLAB attribue par défaut un GPU différent à chaque worker.

parpool("Processes",availableGPUs);
Starting parallel pool (parpool) using the 'Processes' profile ...
Connected to the parallel pool (number of workers: 3).

Pour identifier quel GPU chaque worker utilise, appelez gpuDevice à l'intérieur d'un bloc spmd. Le bloc spmd exécute gpuDevice sur chaque worker.

spmd
    gpuDevice
end

Utilisez des fonctionnalités de langage parallèle, telles que parfor ou parfeval, pour distribuer vos calculs aux workers du pool parallèle. Si vous utilisez des fonctions activées gpuArray dans vos calculs, ces fonctions s'exécutent sur le GPU du worker. Pour plus d'informations, voir Exécuter les fonctions MATLAB sur un GPU. Pour un exemple, voir Run MATLAB Functions on Multiple GPUs .

Lorsque vous avez terminé vos calculs, fermez le pool parallèle. Vous pouvez utiliser la fonction gcp pour obtenir le pool parallèle actuel.

delete(gcp("nocreate"));

Si vous souhaitez utiliser un choix différent de GPU, vous pouvez utiliser gpuDevice pour sélectionner un GPU particulier sur chaque worker, en utilisant l'index du GPU. Vous pouvez obtenir l'index de chaque dispositif GPU de votre système en utilisant la fonction gpuDeviceCount.

Supposons que vous ayez trois GPU disponibles dans votre système, mais que vous souhaitiez n'en utiliser que deux pour un calcul. Obtenir les indices des dispositifs.

[availableGPUs,gpuIndx] = gpuDeviceCount("available")
availableGPUs = 3
gpuIndx = 1×3

     1     2     3

Définissez les indices des appareils que vous souhaitez utiliser.

useGPUs = [1 3];

Démarrez votre pool parallèle. Utilisez un bloc spmd et gpuDevice pour associer chaque worker à l’un des GPU que vous souhaitez utiliser, à l’aide de l’index du périphérique. La fonction spmdIndex identifie l'index de chaque worker.

parpool("Processes",numel(useGPUs));
Starting parallel pool (parpool) using the 'Processes' profile ...
Connected to the parallel pool (number of workers: 2).
spmd
    gpuDevice(useGPUs(spmdIndex));
end

En tant que bonne pratique et pour de meilleures performances, attribuez un GPU différent à chaque worker.

Lorsque vous avez terminé vos calculs, fermez le pool parallèle.

delete(gcp("nocreate"));

Créez un pool parallèle avec le profil par défaut, puis supprimez le pool ultérieurement.

poolobj = parpool;

delete(poolobj)

Trouvez le nombre de workers_dans le pool parallèle actuel.

poolobj = gcp("nocreate"); % If no pool, do not create new one.
if isempty(poolobj)
    poolsize = 0;
else
    poolsize = poolobj.NumWorkers
end

Arguments d'entrée

réduire tout

Taille du pool parallèle, spécifiée sous la forme d'un entier positif ou d'une plage spécifiée sous la forme d'un vecteur à 2 éléments d'entiers. Si poolsize est une plage, le pool résultant a une taille aussi grande que possible dans la plage demandée. Définissez le nombre de workers préféré par défaut dans le profil de cluster.

parpool prend en charge les pools avec jusqu'à 2000 workers. (depuis R2024a)

Exemple : parpool("Processes",2)

Types de données : single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Ressources sur lesquelles démarrer le pool, spécifiées comme "Processes", "Threads", un nom de profil de cluster ou un objet cluster.

Exemple : parpool("Processes")

Exemple : parpool("Threads")

Exemple : parpool("myClusterProfile",16)

Exemple : c = parcluster; parpool(c)

Types de données : char | string | parallel.Cluster

Arguments nom-valeur

réduire tout

Spécifiez des paires d'arguments facultatives comme Name1=Value1,...,NameN=ValueN, où Name est le nom de l'argument et Value est la valeur correspondante. Les arguments nom-valeur doivent apparaître après les autres arguments, mais l'ordre des paires n'a pas d'importance.

Avant R2021a, utilisez des virgules pour séparer chaque nom et valeur, et entourez Name de guillemets.

Exemple : AttachedFiles="myFun.m"

Fichiers à attacher au pool, spécifiés comme un vecteur de caractères, une chaîne de caractères ou un tableau de chaînes de caractères, ou un cell array de vecteurs de caractères.

Avec cette paire d’arguments, parpool démarre un pool parallèle et transmet les fichiers identifiés aux workers du pool. Les fichiers spécifiés ici sont ajoutés à la propriété AttachedFiles spécifiée dans le profil parallèle applicable pour former la liste complète des fichiers joints. Le nom de la propriété AttachedFiles est sensible à la casse et doit apparaître comme indiqué.

Exemple : ["myFun.m","myFun2.m"]

Types de données : char | cell

Drapeau permettant de spécifier si les entrées ajoutées par l'utilisateur sur le chemin client sont ajoutées au chemin de chaque worker au démarrage, spécifiées comme valeur logique.

Types de données : logical

Noms des variables d'environnement à copier de la session client vers les workers, spécifiés sous la forme d'un vecteur de caractères, d'une chaîne de caractères ou d'un tableau de chaînes de caractères, ou d'un cell array de vecteurs de caractères. Les noms spécifiés ici sont ajoutés à la propriété EnvironmentVariables spécifiée dans le profil parallèle applicable pour former la liste complète des variables d'environnement. Toutes les variables répertoriées qui ne sont pas définies ne sont pas copiées vers les workers. Ces variables d’environnement sont définies sur les workers pendant la durée du pool parallèle.

Types de données : char | cell

Drapeau pour spécifier si la prise en charge de spmd est activée sur le pool, spécifiée comme valeur logique. Vous ne pouvez désactiver la prise en charge que sur un cluster de Job Scheduler local ou MATLAB. Les itérations parfor n'impliquent pas de communication entre les workers. Par conséquent, si SpmdEnabled est false, une boucle parfor continue même si un ou plusieurs workers s'arrêtent pendant l'exécution de la boucle.

Types de données : logical

Durée en minutes après laquelle le pool s'arrête s'il est inactif, spécifiée comme un entier supérieur à zéro. Un pool est inactif s'il n'exécute pas de code sur les workers. Par défaut, la valeur de la propriété IdleTimeout est la même que la valeur de vos préférences parallèles. Pour plus d'informations sur les préférences parallèles, voir Spécifier vos préférences pour le traitement parallèle .

Exemple : pool = parpool(IdleTimeout=120)

Arguments de sortie

réduire tout

Accès au pool parallèle depuis le client, renvoyé sous la forme d'un objet parallel.Pool.

Conseils

  • L'indicateur d'état du pool dans le coin inférieur gauche du desktop affiche la connexion de la session client au pool et l'état du pool. Cliquez sur l'icône pour accéder à un menu des actions de pool prises en charge.

    Avec un pool en fonctionnement : The parallel pool status indicator indicating that a pool is running, showing the start parallel pool and parallel preferences menu options. Sans pool en cours d'exécution :The parallel pool status indicator indicating that no pool is running, showing the start parallel pool and parallel preferences menu options.

  • Si vous définissez vos préférences parallèles pour créer automatiquement un pool parallèle lorsque cela est nécessaire, vous n'avez pas besoin d'appeler explicitement la commande parpool. Vous pouvez créer explicitement un pool pour contrôler le moment où vous encourez le temps de configuration, afin que le pool soit prêt pour les constructions de langage parallèles ultérieures.

  • delete(poolobj) ferme le pool parallèle. Sans pool parallèle, spmd et parfor s'exécutent comme un seul thread dans le client, à moins que vos préférences parallèles ne soient définies pour démarrer automatiquement un pool parallèle pour eux.

  • Lorsque vous utilisez l'éditeur MATLAB pour mettre à jour des fichiers sur le client qui sont attachés à un pool parallèle, ces mises à jour se propagent automatiquement aux workers du pool. (Cette mise à jour automatique ne s'applique pas aux fichiers modèles Simulink®. Pour propager les fichiers de modèle mis à jour aux workers, utilisez la fonction updateAttachedFiles)

  • Si possible, le dossier de travail sur les workers est initialement défini pour correspondre à celui de la session client MATLAB. Par la suite, les commandes suivantes entrées dans la fenêtre de commande du client s'exécutent également sur tous les workers du pool :

    Ce comportement vous permet de définir le dossier de travail et le chemin de recherche de commandes sur tous les workers, afin que les activités de pool ultérieures telles que parfor-loops s'exécutent dans le contexte approprié.

    Lors du changement de dossiers ou de l'ajout d'un chemin avec cd ou addpath sur des clients avec des systèmes d'exploitation Windows®, la valeur envoyée aux workers est le chemin UNC du dossier si possible. Pour les clients avec des systèmes d’exploitation Linux®, il s’agit de l’emplacement absolu du dossier.

    Si l’une de ces commandes ne fonctionne pas sur le client, elle n’est pas non plus exécutée sur les workers. Par exemple, si addpath spécifie un dossier auquel le client ne peut pas accéder, la commande addpath n'est pas exécutée sur les workers. Toutefois, si le dossier de travail peut être défini sur le client, mais ne peut pas être défini comme spécifié sur l'un des workers, vous n'obtenez pas de message d'erreur renvoyé à la fenêtre de commande du client.

    Soyez attentif à cette légère différence de comportement dans un environnement à plateforme mixte où le client n'est pas la même plateforme que les workers, où les dossiers locaux ou mappés depuis le client ne sont pas disponibles de la même manière pour les workers, ou où les dossiers se trouvent dans un système de fichiers non partagé. Par exemple, si vous avez un client MATLAB exécuté sur un système d'exploitation Microsoft® Windows tandis que les nœuds de calcul MATLAB s'exécutent tous sur des systèmes d'exploitation Linux, le même argument de addpath ne peut pas fonctionner sur les deux. Dans cette situation, vous pouvez utiliser la fonction pctRunOnAll pour garantir qu'une commande s'exécute sur tous les workers.

    Une autre différence entre le client et les workers est que tous les arguments addpath qui font partie du dossier matlabroot ne sont pas définis sur les workers. L'hypothèse est que la base d'installation MATLAB est déjà incluse dans les chemins des workers. Les règles pour addpath concernant les workers dans le pool sont :

    • Les sous-dossiers du dossier matlabroot ne sont pas envoyés aux workers.

    • Tous les dossiers qui apparaissent avant la première occurrence d'un dossier matlabroot sont ajoutés en haut du chemin sur les workers.

    • Tous les dossiers qui apparaissent après la première occurrence d'un dossier matlabroot sont ajoutés après le groupe de dossiers matlabroot sur les chemins des workers.

    Par exemple, supposons que matlabroot sur le client soit C:\Applications\matlab\ . Avec un pool parallèle ouvert, exécutez la commande suivante pour définir le chemin sur le client et tous les workers :

    addpath("P1",
            "P2",
            "C:\Applications\matlab\T3",
            "C:\Applications\matlab\T4",
            "P5",
            "C:\Applications\matlab\T6",
            "P7",
            "P8");

    Étant donné que T3, T4 et T6 sont des sous-dossiers de matlabroot, ils ne sont pas définis sur les chemins des workers. Ainsi, sur les workers, la partie pertinente du chemin résultant de cette commande est :

    P1
    P2
    <worker original matlabroot folders...>
    P5
    P7
    P8
  • Si vous utilisez Macintosh ou Linux et que vous rencontrez des problèmes lors de la création d'un grand pool parallèle, consultez Recommended System Limits for Macintosh and Linux .

Historique des versions

Introduit dans R2013b

développer tout