Proporcionar archivos y bibliotecas de Python a los trabajos de Ray - AWS Glue

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Proporcionar archivos y bibliotecas de Python a los trabajos de Ray

En esta sección, se proporciona información que se necesita para utilizar las bibliotecas de Python con los trabajos de Ray de AWS Glue. Puede utilizar determinadas bibliotecas comunes incluidas de forma predeterminada en todos los trabajos de Ray. También puede proporcionar sus propias bibliotecas de Python en su trabajo de Ray.

Módulos incluidos con los trabajos de Ray

Puede aplicar flujos de trabajo de integración de datos en un trabajo de Ray con los siguientes paquetes proporcionados. Estos paquetes están disponibles de manera predeterminada en trabajos de Ray.

AWS Glue version 4.0

En AWS Glue 4.0, el entorno de Ray (tiempo de ejecución Ray2.4) proporciona los siguientes paquetes:

  • boto3 == 1.26.133

  • ray == 2.4.0

  • pyarrow == 11.0.0

  • pandas == 1.5.3

  • numpy == 1.24.3

  • fsspec == 2023.4.0

Esta lista incluye todos los paquetes que se instalarían con ray[data] == 2.4.0. Ray Data se admite de fábrica.

Proporcionar archivos a su trabajo de Ray

Puede proporcionar archivos a su trabajo de Ray con el parámetro --working-dir. Proporcione este parámetro con una ruta a un archivo .zip alojado en Amazon S3. Dentro del archivo .zip, los archivos deben estar contenidos en un único directorio de nivel superior. No debe haber ningún otro archivo en el nivel superior.

Los archivos se distribuirán a cada nodo de Ray antes de que el script comience a ejecutarse. Considere cómo esto podría repercutir en el espacio en disco disponible para cada nodo de Ray. El espacio en disco disponible viene determinado por el WorkerType establecido en la configuración del trabajo. Si desea proporcionar los datos de su trabajo a escala, este mecanismo no es la solución adecuada. Para obtener más información sobre cómo proporcionar datos a sus trabajos, consulte Conexión a los datos de los trabajos de Ray.

Se podrá acceder a sus archivos como si el directorio se hubiera proporcionado a Ray a través del parámetro working_dir. Por ejemplo, para leer un archivo denominado sample.txt en el directorio de nivel superior del archivo .zip, puede llamar a:

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

Para obtener más información acerca de working_dir, consulte la documentación de Ray. Esta característica se comporta de forma similar a las capacidades nativas de Ray.

Módulos de Python adicionales para trabajos de Ray

Módulos adicionales de PyPI

Los trabajos de Ray utilizan el instalador de paquetes de Python (pip3) para instalar los módulos adicionales que utilizará un script de Ray. Puede utilizar el parámetro --pip-install con una lista de módulos de Python separados por comas para agregar un nuevo módulo o cambiar la versión de un módulo existente.

Por ejemplo, para actualizar o agregar un nuevo módulo scikit-learn, utilice el siguiente par clave-valor:

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

Si tiene módulos o parches personalizados, puede distribuir sus propias bibliotecas desde Amazon S3 con el parámetro --s3-py-modules. Es posible que sea necesario volver a empaquetar y compilar su distribución antes de cargarla. Seguir las directrices en Incluir código Python en los trabajos de Ray.

Distribuciones personalizadas de Amazon S3

Las distribuciones personalizadas deben cumplir con las pautas de empaquetado de Ray para las dependencias. Puede encontrar información sobre la compilación de estas distribuciones en la siguiente sección. Para obtener más información sobre cómo Ray configura las dependencias, consulte Environment Dependencies (Dependencias de entorno) en la documentación de Ray.

Para incluir un distribuible personalizado después de evaluar su contenido, cárguelo en un bucket disponible para el rol de IAM del trabajo. Especifique la ruta de Amazon S3 a un archivo zip de Python en la configuración del parámetro. Si proporciona varios distribuibles, sepárelos con comas. Por ejemplo:

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

Limitaciones

Los trabajos de Ray no admiten la compilación de código nativo en el entorno de trabajo. Esto puede ser una limitación si las dependencias de Python dependen de forma transitiva de código nativo compilado. Los trabajos de Ray pueden ejecutar los binarios proporcionados, pero deben compilarse para Linux en ARM64. Esto significa que quizás pueda utilizar el contenido de las ruedas de aarch64manylinux. Para poder proporcionar las dependencias nativas en un formato compilado, vuelva a empaquetar una rueda según los estándares de Ray. Por lo general, esto significa eliminar las carpetas dist-info para que solo haya una carpeta en la raíz del archivo.

No puede actualizar la versión de ray o ray[data] mediante este parámetro. Para usar una nueva versión de Ray, tendrá que cambiar el campo de tiempo de ejecución de su trabajo una vez que hayamos publicado el soporte para ello. Para obtener más información acerca de las versiones de Ray admitidas, consulte AWS Glue control de versiones.

Incluir código Python en los trabajos de Ray

Python Software Foundation ofrece comportamientos estandarizados para empaquetar archivos de Python para su uso en diferentes entornos de ejecución. Ray introduce limitaciones en los estándares de empaquetado que debe conocer. AWS Glue no especifica estándares de empaquetado más allá de los especificados para Ray. Las siguientes instrucciones proporcionan una guía estándar sobre cómo empaquetar paquetes simples de Python.

Empaquete sus archivos en un archivo .zip. El directorio debe estar en la raíz del archivo. No debe haber ningún otro archivo en el nivel raíz del archivo; de lo contrario, se producirá un comportamiento inesperado. El directorio raíz es el paquete, y su nombre se utiliza para hacer referencia al código de Python al importarlo.

Si proporciona una distribución de esta forma a un trabajo de Ray con --s3-py-modules, podrá importar código de Python del paquete en el script de Ray.

Su paquete puede proporcionar un único módulo de Python con algunos archivos de Python o puede empaquetar varios módulos juntos. Al volver a empaquetar las dependencias, como las bibliotecas de PyPI, compruebe si hay archivos ocultos y directorios de metadatos dentro de esos paquetes.

aviso

Determinados comportamientos del sistema operativo dificultan el seguimiento correcto de estas instrucciones de empaquetado.

  • OSX puede agregar archivos ocultos, como __MACOSX, a su archivo zip en el nivel superior.

  • Windows puede agregar sus archivos a una carpeta dentro del zip automáticamente y crear involuntariamente una carpeta anidada.

En los siguientes procedimientos se supone que interactúa con los archivos en Amazon Linux 2 o en un sistema operativo similar que proporciona una distribución de las utilidades zip y zipinfo de Info-ZIP. Recomendamos utilizar estas herramientas para evitar comportamientos inesperados.

Para empaquetar archivos de Python para usarlos en Ray

  1. Cree un directorio temporal con el nombre de su paquete; a continuación, confirme que su directorio de trabajo es el directorio principal. Puede hacer esto con los siguientes comandos:

    cd parent_directory mkdir temp_dir
  2. Copie los archivos en el directorio temporal; a continuación, confirme la estructura del directorio. Se accederá directamente al contenido de este directorio como módulo de Python. Puede hacer esto con el siguiente comando de la :

    ls -AR temp_dir # my_file_1.py # my_file_2.py
  3. Use zip para comprimir la carpeta temporal. Puede hacer esto con los siguientes comandos:

    zip -r zip_file.zip temp_dir
  4. Confirme que el archivo esté correctamente empaquetado. Ahora, zip_file.zip debería encontrarse en su directorio de trabajo. Puede inspeccionarlo con el siguiente comando:

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

Volver a empaquetar un paquete de Python para usarlo en Ray.

  1. Cree un directorio temporal con el nombre de su paquete; a continuación, confirme que su directorio de trabajo es el directorio principal. Puede hacer esto con los siguientes comandos:

    cd parent_directory mkdir temp_dir
  2. Descomprima el paquete y copie el contenido en el directorio temporal. Elimine los archivos relacionados con su estándar de empaquetado anterior y deje solo el contenido del módulo. Confirme que la estructura de archivos sea correcta con el siguiente comando:

    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. Use zip para comprimir la carpeta temporal. Puede hacer esto con los siguientes comandos:

    zip -r zip_file.zip temp_dir
  4. Confirme que el archivo esté correctamente empaquetado. Ahora, zip_file.zip debería encontrarse en su directorio de trabajo. Puede inspeccionarlo con el siguiente comando:

    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