Fornitura di file e librerie Python ai processi Ray - AWS Glue

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Fornitura di file e librerie Python ai processi Ray

Questa sezione fornisce le informazioni necessarie per utilizzare le librerie Python con i processi di AWS Glue Ray. In tutti i processi Ray è possibile utilizzare alcune librerie comuni incluse per impostazione predefinita. Puoi anche fornire le tue librerie Python al tuo processo Ray.

Moduli disponibili con i processi Ray

È possibile eseguire flussi di lavoro di integrazione dei dati in un processo Ray con i seguenti pacchetti. Per impostazione predefinita, questi pacchetti sono disponibili nei processi Ray.

AWS Glue version 4.0

In AWS Glue 4.0, l'ambiente Ray (runtime Ray2.4) fornisce i seguenti pacchetti:

  • boto3 == 1.26.133

  • ray == 2.4.0

  • pyarrow == 11.0.0

  • pandas == 1.5.3

  • numpy == 1.24.3

  • fsspec == 2023.4.0

Questo elenco include tutti i pacchetti che verrebbero installati con ray[data] == 2.4.0. Ray Data è supportato immediatamente.

Fornitura di file al processo Ray

Puoi fornire file al tuo processo Ray con il parametro --working-dir. Fornisci a questo parametro un percorso per un file .zip ospitato su Amazon S3. All'interno del file .zip, i file devono essere contenuti in un'unica directory di primo livello. Nessun altro file deve trovarsi al livello superiore.

I file verranno distribuiti su ogni nodo Ray prima dell'inizio dell'esecuzione dello script. Considera come ciò potrebbe influire sullo spazio su disco disponibile per ogni nodo Ray. Lo spazio disponibile su disco è determinato dal WorkerType impostato nella configurazione del processo. Se desideri fornire i tuoi dati del processo su larga scala, questo meccanismo non è la soluzione giusta. Per ulteriori informazioni sulla fornitura di dati al processo, consulta la pagina Connessione ai dati nei processi Ray.

I tuoi file saranno accessibili come se la directory fosse stata fornita a Ray tramite il parametro working_dir. Ad esempio, per leggere un file denominato sample.txt nella directory di primo livello del file .zip, puoi chiamare:

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

Per ulteriori informazioni su working_dir, consulta la documentazione di Ray. Questa funzionalità si comporta in modo simile alle funzionalità native di Ray.

Moduli Python aggiuntivi per i processi Ray

Moduli aggiuntivi di PyPI

I processi Ray utilizzano Python Package Installer (pip3) per installare moduli aggiuntivi da utilizzare con uno script Ray. Puoi utilizzare il parametro --pip-install con un elenco di moduli Python separati da virgole per aggiungere un nuovo modulo o modificare la versione di un modulo esistente.

Ad esempio, per aggiornare o aggiungere un nuovo modulo scikit-learn, utilizza la seguente coppia chiave-valore:

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

Se disponi di moduli o patch personalizzati, puoi distribuire le tue librerie da Amazon S3 con il parametro --s3-py-modules. Prima di caricare la tua distribuzione, potrebbe essere necessario riconfezionarla e ricompilarla. Segui le linee guida riportate nella sezione Inclusione del codice Python nei processi Ray.

Distribuzioni personalizzate da Amazon S3

Le distribuzioni personalizzate devono rispettare le linee guida di Ray sulla creazione di pacchetti per le dipendenze. Le istruzioni per creare queste distribuzioni sono riportate nella sezione successiva. Per ulteriori informazioni su come Ray imposta le dipendenze, consulta Dipendenze dell'ambiente nella documentazione di Ray.

Per includere un distribuibile personalizzato dopo averne valutato il contenuto, caricalo in un bucket accessibile dal ruolo IAM del processo. Nella configurazione dei parametri, specifica il percorso Amazon S3 a un archivio zip Python. Se fornisci più distribuibili, separali con una virgola. Ad esempio:

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

Limitazioni

I processi Ray non supportano la compilazione di codice nativo nell'ambiente del processo. Questo può essere un limite se le tue dipendenze da Python dipendono in modo transitorio dal codice nativo compilato. I processi Ray possono eseguire i binari forniti, ma devono essere compilati per Linux su ARM64. Ciò significa che potresti essere in grado di utilizzare il contenuto dei wheel aarch64manylinux. Puoi fornire le tue dipendenze native in un formato compilato reimpacchettando una ruota secondo gli standard Ray. In genere, ciò significa rimuovere le cartelle dist-info in modo che vi sia una sola cartella alla radice dell'archivio.

Non è possibile aggiornare la versione di ray o ray[data] utilizzando questo parametro. Per utilizzare una nuova versione di Ray, dovrai modificare il campo di runtime del tuo processo dopo che avremo rilasciato il supporto. Per ulteriori informazioni sulle versioni supportate di Ray, consulta la pagina Versioni AWS Glue.

Inclusione del codice Python nei processi Ray

La Python Software Foundation offre comportamenti standardizzati per la creazione di pacchetti di file Python da utilizzare in diversi runtime. Ray introduce delle limitazioni agli standard di confezionamento di cui dovresti essere a conoscenza. AWS Glue non specifica standard di confezionamento oltre a quelli specificati da Ray. Le seguenti istruzioni forniscono una guida standard sulla creazione di pacchetti Python semplici.

Crea un pacchetto dei file in un archivio .zip. Alla root dell'archivio dovrebbe essere presente una directory. Non dovrebbero esserci altri file al livello root dell'archivio, altrimenti si verificherà un comportamento imprevisto. La directory root è il pacchetto e il suo nome viene utilizzato per fare riferimento al codice Python durante l'importazione.

Se fornisci una distribuzione in questo formato a un processo Ray con --s3-py-modules, sarai in grado di importare il codice Python dal tuo pacchetto nello script Ray.

Il tuo pacchetto può fornire un singolo modulo Python con alcuni file Python, oppure puoi confezionare insieme diversi moduli. Quando riconfezioni le dipendenze, come le librerie da PyPI, controlla i file nascosti e le directory di metadati all'interno di quei pacchetti.

avvertimento

Alcuni comportamenti del sistema operativo rendono difficile seguire correttamente queste istruzioni di confezionamento.

  • OSX può aggiungere file nascosti, ad esempio __MACOSX, al file zip di livello superiore.

  • Windows può aggiungere automaticamente i file a una cartella all'interno del file zip, creando involontariamente una cartella annidata.

Le seguenti procedure presuppongono che tu stia interagendo con i tuoi file in Amazon Linux 2 o in un sistema operativo simile che fornisce una distribuzione delle utility zip e zipinfo di Info-ZIP. Ti consigliamo di utilizzare questi strumenti per prevenire comportamenti imprevisti.

Confezionamento di file Python da utilizzare in Ray

  1. Crea una directory temporanea con il nome del tuo pacchetto, quindi verifica che la directory di lavoro sia quella padre. A questo scopo, puoi eseguire il comando seguente:

    cd parent_directory mkdir temp_dir
  2. Copia i file nella directory temporanea, quindi verifica la struttura della directory. Il contenuto di questa directory sarà accessibile direttamente come modulo Python. A questo scopo, puoi eseguire il comando seguente:

    ls -AR temp_dir # my_file_1.py # my_file_2.py
  3. Comprimi la cartella temporanea utilizzando zip. A questo scopo, puoi eseguire il comando seguente:

    zip -r zip_file.zip temp_dir
  4. Verifica che il file sia correttamente confezionato. Ora il zip_file.zip dovrebbe essere disponibile nella tua directory di lavoro. È possibile verificarla con il seguente comando:

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

Riconfezionamento di un pacchetto Python da utilizzare in Ray.

  1. Crea una directory temporanea con il nome del tuo pacchetto, quindi verifica che la directory di lavoro sia quella padre. A questo scopo, puoi eseguire il comando seguente:

    cd parent_directory mkdir temp_dir
  2. Decomprimi il pacchetto e copia il contenuto nella directory temporanea. Rimuovi i file relativi allo standard di confezionamento precedente, lasciando solo il contenuto del modulo. Conferma che la struttura del file sia corretta con il seguente 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. Comprimi la cartella temporanea utilizzando zip. A questo scopo, puoi eseguire il comando seguente:

    zip -r zip_file.zip temp_dir
  4. Verifica che il file sia correttamente confezionato. Ora il zip_file.zip dovrebbe essere disponibile nella tua directory di lavoro. È possibile verificarla con il seguente 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