Fournir des fichiers et des bibliothèques Python aux tâches Ray - AWS Glue

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Fournir des fichiers et des bibliothèques Python aux tâches Ray

Cette section fournit les informations dont vous avez besoin pour utiliser les bibliothèques Python avec les tâches Ray AWS Glue. Vous pouvez utiliser certaines bibliothèques communes incluses par défaut dans toutes les tâches Ray. Vous pouvez également fournir vos propres bibliothèques Python à votre tâche Ray.

Modules fournis avec les tâches Ray

Vous pouvez exécuter des flux de travail d'intégration de données dans une tâche Ray à l'aide des packages fournis suivants. Ces packages sont disponibles par défaut dans les tâches Ray.

AWS Glue version 4.0

Dans AWS Glue 4.0, l'environnement Ray (exécution Ray2.4) fournit les packages suivants :

  • boto3 == 1.26.133

  • ray == 2.4.0

  • pyarrow == 11.0.0

  • pandas == 1.5.3

  • numpy == 1.24.3

  • fsspec == 2023.4.0

Cette liste inclut tous les packages qui seront installés avec ray[data] == 2.4.0. Ray Data est prêt à l'emploi.

Fournir des fichiers à votre tâche Ray

Vous pouvez fournir des fichiers à votre tâche Ray avec le paramètre --working-dir. Fournissez à ce paramètre un chemin d'accès à un fichier .zip hébergé sur Amazon S3. Dans le fichier .zip, vos fichiers doivent être contenus dans un seul répertoire de premier niveau. Aucun autre fichier ne doit se trouver au niveau supérieur.

Vos fichiers sont distribués à chaque nœud Ray avant que votre script ne commence à s'exécuter. Réfléchissez à l'impact que cela peut avoir sur l'espace disque disponible pour chaque nœud Ray. L'espace disque disponible est déterminé par le WorkerType défini dans la configuration de la tâche. Si vous souhaitez fournir vos données de tâche à grande échelle, ce mécanisme n'est pas la bonne solution. Pour plus d'informations sur la fourniture de données à votre tâche, consultez Connexion aux données dans les tâches Ray.

Vos fichiers seront accessibles comme si le répertoire avait été fourni à Ray via le paramètre working_dir. Par exemple, pour lire un fichier nommé sample.txt dans le répertoire de premier niveau de votre fichier .zip, vous pouvez appeler :

@ray.remote def do_work(): f = open("sample.txt", "r") print(f.read())

Pour plus d'informations sur working_dir, consultez Ray documentation. Cette fonctionnalité se comporte de la même manière que les fonctionnalités natives de Ray.

Modules Python supplémentaires pour les tâches Ray

Modules supplémentaires de PyPI

Les tâches Ray utilisent Python Package Installer (pip3) pour installer les modules supplémentaires qui seront utilisés par un script Ray. Vous pouvez utiliser le paramètre --pip-install avec une liste de modules Python séparés par des virgules pour ajouter un nouveau module ou modifier la version d'un module existant.

Par exemple, pour mettre à jour ou ajouter un nouveau module scikit-learn, utilisez la paire clé-valeur suivante :

"--pip-install", "scikit-learn==0.21.3"

Si vous avez des modules ou des correctifs personnalisés, vous pouvez distribuer vos propres bibliothèques depuis Amazon S3 avec le paramètre --s3-py-modules. Avant de charger votre distribution, il peut être nécessaire de la reconditionner et de la recréer. Suivez les lignes directrices indiquées dans Inclure du code Python dans les tâches Ray.

Distributions personnalisées depuis Amazon S3

Les distributions personnalisées doivent respecter les directives d'empaquetage de Ray en ce qui concerne les dépendances. La section suivante explique comment créer ces distributions. Pour plus d'informations sur la façon dont Ray configure les dépendances, consultez Environment Dependencies (Dépendances d'environnement) dans la documentation Ray.

Pour inclure un élément distribuable personnalisé après avoir évalué son contenu, chargez votre élément distribuable dans un compartiment disponible pour le rôle IAM de la tâche. Indiquez le chemin Amazon S3 vers une archive zip Python dans la configuration de vos paramètres. Si vous fournissez plusieurs éléments distribuables, séparez-les par des virgules. Par exemple :

"--s3-py-modules", "s3://s3bucket/pythonPackage.zip"

Limites

Les tâches Ray ne prennent pas en charge la compilation de code natif dans l'environnement de la tâche. Cela peut vous limiter si vos dépendances Python dépendent de manière transitive du code compilé natif. Les tâches Ray peuvent exécuter les binaires fournis, mais elles doivent être compilées pour Linux sur ARM64. Vous pourrez ainsi peut-être utiliser le contenu des roues aarch64manylinux. Vous pouvez fournir vos dépendances natives dans un format compilé en reconditionnant une roue selon les normes Ray. Cela implique généralement de supprimer des dossiers dist-info pour ne laisser qu'un seul dossier à la racine de l'archive.

Vous ne pouvez pas mettre à niveau la version de ray ou de ray[data] en utilisant ce paramètre. Pour utiliser une nouvelle version de Ray, vous devrez modifier le champ d'exécution de votre tâche, une fois que nous aurons mis en place la prise en charge de cette version. Pour de plus amples informations sur les versions de Ray pris en charge, consultez AWS Glue versions.

Inclure du code Python dans les tâches Ray

La Python Software Foundation propose des comportements standardisés pour l'empaquetage de fichiers Python destinés à être utilisés avec différents environnements d'exécution. Ray introduit des limites que vous devez connaître en matière de normes d'empaquetage. AWS Glue ne spécifie pas de normes d'empaquetage autres que celles spécifiées à Ray. Les instructions suivantes fournissent des conseils standards sur l'empaquetage de packages Python simples.

Empaquetez vos fichiers dans une archive .zip. Un répertoire doit se trouver à la racine de l'archive. Il ne doit pas y avoir d'autres fichiers au niveau de la racine de l'archive, sous peine de provoquer un comportement inattendu. Le répertoire racine est le package, et son nom est utilisé pour faire référence à votre code Python lorsque vous l'importez.

Si vous fournissez une distribution sous cette forme à une tâche Ray avec --s3-py-modules, vous pourrez importer du code Python depuis votre package dans votre script Ray.

Votre package peut fournir un seul module Python avec des fichiers Python, ou vous pouvez regrouper plusieurs modules. Lorsque vous reconditionnez des dépendances, telles que les bibliothèques de PyPI, vérifiez la présence de fichiers cachés et de répertoires de métadonnées dans ces packages.

Avertissement

Certains comportements du système d'exploitation font qu'il est difficile de suivre correctement ces instructions d'empaquetage.

  • OSX peut ajouter des fichiers cachés tels que __MACOSX à votre fichier zip au niveau supérieur.

  • Windows peut ajouter automatiquement vos fichiers à un dossier à l'intérieur du fichier zip, créant ainsi involontairement un dossier imbriqué.

Les procédures suivantes supposent que vous interagissez avec vos fichiers sous Amazon Linux 2 ou un système d'exploitation similaire qui fournit une distribution des utilitaires Info-ZIP zip et zipinfo. Nous vous recommandons d'utiliser ces outils pour éviter les comportements inattendus.

Pour empaqueter des fichiers Python à utiliser dans Ray

  1. Créez un répertoire temporaire avec le nom de votre package, puis confirmez que votre répertoire de travail est son répertoire parent. Vous pouvez le faire à l'aide des commandes suivantes :

    cd parent_directory mkdir temp_dir
  2. Copiez vos fichiers dans le répertoire temporaire, puis confirmez la structure de votre répertoire. Le contenu de ce répertoire sera directement accessible en tant que module Python. Vous pouvez le faire à l'aide de la commande suivante :

    ls -AR temp_dir # my_file_1.py # my_file_2.py
  3. Compressez votre dossier temporaire en utilisant zip. Vous pouvez le faire à l'aide des commandes suivantes :

    zip -r zip_file.zip temp_dir
  4. Vérifiez que votre fichier est correctement empaqueté. zip_file.zip doit maintenant se trouver dans votre répertoire de travail. Vous pouvez l'inspecter avec la commande suivante :

    zipinfo -1 zip_file.zip # temp_dir/ # temp_dir/my_file_1.py # temp_dir/my_file_2.py

Pour reconditionner un package Python à utiliser dans Ray.

  1. Créez un répertoire temporaire avec le nom de votre package, puis confirmez que votre répertoire de travail est son répertoire parent. Vous pouvez le faire à l'aide des commandes suivantes :

    cd parent_directory mkdir temp_dir
  2. Décompressez votre package et copiez-en le contenu dans votre répertoire temporaire. Supprimez les fichiers liés à votre ancienne norme d'emballage, en ne laissant que le contenu du module. Vérifiez que la structure de votre fichier semble correcte à l'aide de la commande suivante :

    ls -AR temp_dir # my_module # my_module/__init__.py # my_module/my_file_1.py # my_module/my_submodule/__init__.py # my_module/my_submodule/my_file_2.py # my_module/my_submodule/my_file_3.py
  3. Compressez votre dossier temporaire en utilisant zip. Vous pouvez le faire à l'aide des commandes suivantes :

    zip -r zip_file.zip temp_dir
  4. Vérifiez que votre fichier est correctement empaqueté. zip_file.zip doit maintenant se trouver dans votre répertoire de travail. Vous pouvez l'inspecter avec la commande suivante :

    zipinfo -1 zip_file.zip # temp_dir/my_module/ # temp_dir/my_module/__init__.py # temp_dir/my_module/my_file_1.py # temp_dir/my_module/my_submodule/ # temp_dir/my_module/my_submodule/__init__.py # temp_dir/my_module/my_submodule/my_file_2.py # temp_dir/my_module/my_submodule/my_file_3.py