当前位置:网站首页>Créer des applications distribuées d'une manière simple

Créer des applications distribuées d'une manière simple

2021-09-15 04:28:16 Somenzz

Face à des tâches à forte intensité de calcul,En plus des processus multiples,C'est l'informatique distribuée,Comment utiliser Python Et la mise en œuvre de l'informatique distribuée?Partager aujourd'hui une façon très simple de,C'est grâce à Ray.

Qu'est - ce que Ray

Ray Est basé sur Python Cadre informatique distribué pour,Utiliser un modèle de calcul graphique dynamique,Simple à fournir、Générique API Pour créer des applications distribuées.Facile à utiliser,Vous pouvez utiliser la décoration,Il suffit de modifier très peu de code,Pour faire fonctionner une machine autonome Python Le Code facilite l'informatique distribuée,Actuellement, il est principalement utilisé pour l'apprentissage automatique.

Ray Caractéristiques:

1、Fournit des primitives simples pour la construction et l'exécution d'applications distribuées.

2、Permet à l'utilisateur de paralléliser le Code autonome,Les changements de code sont rares, voire nuls.

3、Ray Core Y compris une application、Un vaste écosystème de bibliothèques et d'outils,Pour soutenir des applications complexes.Par exemple, Tune、RLlib、RaySGD、Serve、Datasets、Workflows.

Installation Ray

La façon la plus simple d'installer la version officielle:

pip install -U ray
pip install 'ray[default]'

Si oui Windows Système,Les exigences doivent être installées Visual C++ runtime

Voir la documentation officielle pour d'autres méthodes d'installation.

Utiliser Ray

.Un décorateur pour l'informatique distribuée:

import ray
ray.init()

@ray.remote
def f(x):
    return x * x

futures = [f.remote(i) for i in range(4)]
print(ray.get(futures)) # [0, 1, 4, 9]

Exécution en premier ray.init(), Ensuite, ajoutez un décorateur avant la fonction pour effectuer la tâche distribuée @ray.remote L'informatique distribuée .Décorateur @ray.remote On peut aussi décorer une catégorie :

import ray
ray.init()

@ray.remote
class Counter(object):
    def __init__(self):
        self.n = 0

    def increment(self):
        self.n += 1

    def read(self):
        return self.n

counters = [Counter.remote() for i in range(4)]
tmp1 = [c.increment.remote() for c in counters]
tmp2 = [c.increment.remote() for c in counters]
tmp3 = [c.increment.remote() for c in counters]
futures = [c.read.remote() for c in counters]
print(ray.get(futures)) # [3, 3, 3, 3]

Bien sûr., L'informatique distribuée décrite ci - dessus est toujours effectuée sur son propre ordinateur , Juste sous forme distribuée . Pendant l'exécution du programme , Vous pouvez entrer http://127.0.0.1:8265/#/ Voir l'exécution des tâches distribuées :

Comment réaliser Ray Et l'informatique en grappes ?Regarde en bas..

Utiliser Ray Cluster

Ray L'un des avantages est la possibilité d'utiliser plusieurs machines dans le même programme .Bien sûr.,Ray Peut fonctionner sur une seule machine , Parce que d'habitude , Tu n'as qu'une seule machine . Mais la vraie force est d'utiliser un groupe de machines Ray.

Ray .Le Cluster se compose d'un noeud d'en - tête et d'un ensemble de noeuds de travail . Vous devez d'abord démarrer le noeud de tête ,Voilà. worker Le noeud donne l'adresse du noeud d'en - tête , Formation de grappes :

Vous pouvez utiliser Ray Cluster Launcher Pour configurer la machine et démarrer plusieurs noeuds Ray Cluster.Vous pouvez AWS、GCP、Azure、Kubernetes、Alicloud、 Déploiement interne et Staroid Utilisez l'initiateur de Cluster même sur votre fournisseur de nœuds personnalisé .

Ray Les Clusters peuvent également profiter de Ray Autoscaler,Il permet Ray Interaction avec les fournisseurs de Cloud , Pour demander ou publier des instances conformément aux spécifications et à la charge de travail de l'application .

Maintenant, Faisons une démonstration rapide Ray Fonction du cluster,C'est pour Docker Pour démarrer deux Ubuntu Conteneur pour simuler un Cluster :

  • Environnement 1: 172.17.0.2 En tant que head Noeud
  • Environnement 2: 172.17.0.3 En tant que worker Noeud,Il peut y en avoir plusieurs. worker Noeud

Étapes spécifiques:

1. Télécharger ubuntu Miroir

docker pull ubuntu

2. Démarrage ubuntu Conteneur,Dépendances d'installation

Démarrer le premier

docker run -it --name ubuntu-01 ubuntu bash

Activez le deuxième

docker run -it --name ubuntu-02 ubuntu bash

Vérifiez leur IP Adresse:

$ docker inspect -f "{{ .NetworkSettings.IPAddress }}" ubuntu-01
172.17.0.2
$ docker inspect -f "{{ .NetworkSettings.IPAddress }}" ubuntu-02
172.17.0.3

Ils sont ensuite montés séparément à l'intérieur du récipient python、pip、ray

apt update && apt install python3 
apt install python3-pip
pip3 install ray

3. Démarrage head Noeuds et worker Noeud

Sélectionnez dans l'un des conteneurs comme head Noeud,Choisissez ici 172.17.0.2,Mise en œuvre:

ray start --head --node-ip-address 172.17.0.2

Le port par défaut est 6379,Vous pouvez utiliser --port Paramètres pour modifier le port par défaut , Les résultats après le démarrage sont les suivants :

Ignorer les avertissements , Vous pouvez voir que ça donne un indice , Si vous voulez lier d'autres noeuds à head,Ça peut être comme ça:

ray start --address='172.17.0.2:6379' --redis-password='5241590000000000'

Exécutez la commande ci - dessus sur un autre noeud ,Prêt à démarrer worker Noeud:

Si vous voulez fermer ,Mise en œuvre:

ray stop

4、Exécution des tâches

Choisissez n'importe quel noeud ,Exécutez le script suivant,Modifier ray.init() Paramètres de la fonction:

from collections import Counter
import socket
import time

import ray

ray.init(address='172.17.0.2:6379', _redis_password='5241590000000000')

print('''This cluster consists o    f
    {} nodes in total
    {} CPU resources in total
'''.format(len(ray.nodes()), ray.cluster_resources()['CPU']))

@ray.remote
def f():
    time.sleep(0.001)
    # Return IP address.
    return socket.gethostbyname(socket.gethostname())

object_ids = [f.remote() for _ in range(10000)]
ip_addresses = ray.get(object_ids)

print('Tasks executed')
for ip_address, num_tasks in Counter(ip_addresses).items():
    print('    {} tasks on {}'.format(num_tasks, ip_address))

Les résultats sont les suivants:

Je vois. 172.17.0.2 Mise en œuvre 4751 Tâches,172.17.0.3 Mise en œuvre 5249 Tâches, Les effets de l'informatique distribuée ont été réalisés .

Les derniers mots

C'est bon. Ray, Vous pouvez ne pas utiliser Python Et le multi - processus pour réaliser l'informatique parallèle . Aujourd'hui, l'apprentissage automatique est principalement axé sur les tâches à forte intensité de calcul , La vitesse serait très lente sans l'informatique distribuée ,Ray Offre une solution simple pour réaliser l'informatique distribuée . La documentation officielle fournit des tutoriels et des exemples très détaillés , Si vous êtes intéressé, vous pouvez aller voir .

Si ça aide, Il vaut mieux faire attention. ,Apprendre tous les jours Python Technique. Si vous avez des questions Laissez un message pour discuter.

Cet article est partagé par Wechat public Number - PythonNuméro sept.(PythonSeven) ,Auteur:somenzz

La source originale et les informations reproduites sont détaillées dans le texte,En cas d'infraction,Veuillez contacter: [email protected] Supprimer.

Date de publication originale: 2021-08-30

Participation à cet articleTencent Cloud Self - media Sharing Plan,Bienvenue à la lecture,Partager ensemble.

版权声明
本文为[Somenzz]所创,转载请带上原文链接,感谢
https://chowdera.com/2021/09/20210914180056982b.html

随机推荐