為 Ray 任務提供檔案和 Python 程式庫 - AWS Glue

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

為 Ray 任務提供檔案和 Python 程式庫

本節提供的資訊有助於您搭配 AWS Glue Ray 任務使用 Python 程式庫。您可以使用預設包含於所有 Ray 任務的某些常見程式庫。您還可以為自己的 Ray 任務提供專屬 Python 程式庫。

Ray 任務隨附的模組

您可以使用下列提供的套件,在 Ray 任務中執行資料整合工作流程。這些套件預設可在 Ray 任務中使用。

AWS Glue version 4.0

在 AWS Glue 4.0 中,Ray (Ray2.4 執行期) 環境提供下列套件:

  • boto3 == 1.26.133

  • ray == 2.4.0

  • pyarrow == 11.0.0

  • pandas == 1.5.3

  • numpy == 1.24.3

  • fsspec == 2023.4.0

此清單包含將隨 ray[data] == 2.4.0 一併安裝的所有套件。Ray Data 支援開箱即用。

為 Ray 任務提供檔案

您可以使用 --working-dir 參數為 Ray 任務提供檔案。為此參數提供指向 Amazon S3 上託管之 .zip 檔案的路徑。在 .zip 檔案中,您的檔案必須包含在單一頂層目錄中。頂層不應具有其他任何檔案。

在指令碼開始執行之前,您的檔案將會分發至每個 Ray 節點。請考慮這可能會如何影響每個 Ray 節點的可用磁碟空間。可用磁碟空間是由任務組態中設定的 WorkerType 決定。如果您想大規模提供任務資料,此機制並非適合的解決方案。如需有關為任務提供資料的詳細資訊,請參閱 連線至 Ray 任務中的資料

您的檔案將可供存取,如同目錄透過 working_dir 參數提供給 Ray 一樣。例如,若要讀取 .zip 檔案頂層目錄中名為 sample.txt 的檔案,則可呼叫:

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

如需有關 working_dir 的詳細資訊,請參閱 Ray 文件。此功能的運作方式與 Ray 的原生功能類似。

Ray 任務的其他 Python 模組

PyPI 中的其他模組

Ray 任務會使用 Python Package Installer (pip3),安裝 Ray 指令碼使用的其他模組。您可以使用 --pip-install 參數與逗號分隔的 Python 模組清單來新增新模組或變更現有模組的版本。

例如,若要更新或新增 scikit-learn 模組,請使用以下鍵值對:

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

如果您有自訂模組或自訂修補程式,則可使用 --s3-py-modules 參數從 Amazon S3 分發專屬程式庫。您的分發內容可能需要重新封裝並重建才能上傳。遵循 在 Ray 任務中包含 Python 程式碼 中的指引操作。

來自 Amazon S3 的自訂分發

自訂發行版本應遵守 Ray 封裝相依性的準則。您可在下一節中找到關於如何建立這些發行版本的資訊。如需有關 Ray 如何設定相依性的詳細資訊,請參閱 Ray 文件中的 Environment Dependencies (環境相依性)。

若要在評估其內容後加入自訂分發套件,請將您的分發套件上傳至可供任務 IAM 角色使用的儲存貯體。在您的參數組態中,指定 Python zip 封存的 Amazon S3 路徑。如果您提供多個分發套件,請用逗號加以分隔。例如:

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

限制

Ray 任務不支援在任務環境中編譯原生程式碼。如果您的 Python 相依性遞移地依賴於原生的編譯程式碼,則可能會受此限制。Ray 任務可執行提供的二進位檔案,但必須在 ARM64 上針對 Linux 進行編譯。這表示您可使用 aarch64manylinux wheel 的內容。您可將 wheel 重新封裝為 Ray 標準,以編譯形式提供原生相依性。這通常表示會移除 dist-info 資料夾,讓封存的根僅具有一個資料夾。

您無法使用此參數升級 rayray[data] 的版本。若要使用新版本的 Ray,您需要在我們發行相關支援後變更任務上的執行期欄位。如需有關支援的 Ray 版本的詳細資訊,請參閱 AWS Glue 版本

在 Ray 任務中包含 Python 程式碼

Python 軟體基金會提供封裝 Python 檔案的標準化行為,以便在不同的執行階段使用。Ray 引入了您應留意的封裝標準限制。AWS Glue 不會指定超出 Ray 規定的封裝標準。下列說明提供關於封裝簡易 Python 套件的標準指引。

將檔案封裝於 .zip 封存。目錄應位於封存的根目錄中。封存的根層級不應具有其他檔案,否則會導致發生非預期的行為。根目錄為套件,其名稱用於在匯入時參照您的 Python 程式碼。

若您透過 --s3-py-modules 使用此表單提供分發套件給 Ray 任務,將可從 Ray 指令碼中的套件匯入 Python 程式碼。

您的套件可提供包含一些 Python 檔案的單一 Python 模組,或者您可以將眾多模組整併封裝。重新封裝諸如 PyPI 的程式庫等相依性時,請在這些套件中檢查是否有隱藏的檔案和中繼資料目錄

警告

某些作業系統行為會讓您難以正確遵循這些封裝指示。

  • OSX 可能會將 __MACOSX 等隱藏檔案新增至頂層的 zip 檔案。

  • Windows 可能會自動將您的檔案新增至 zip 內的資料夾中,而在無意間建立巢狀資料夾。

下列程序假設您正在與 Amazon Linux 2,或是提供 Info-Zip zipzipinfo 公用程式分發套件之類似作業系統中的檔案互動。我們建議您使用這些工具來防止意外行為。

封裝 Python 檔案以供在 Ray 中使用

  1. 使用您的套件名稱建立臨時目錄,然後確認您的工作目錄是其父目錄。您可使用下列命令來執行此作業:

    cd parent_directory mkdir temp_dir
  2. 將檔案複製到臨時目錄中,然後確認您的目錄結構。此目錄的內容將作為您的 Python 模組直接存取。您可使用下列命令來執行此作業:

    ls -AR temp_dir # my_file_1.py # my_file_2.py
  3. 使用 zip 壓縮您的臨時資料夾。您可使用下列命令來執行此作業:

    zip -r zip_file.zip temp_dir
  4. 確認檔案已正確封裝。zip_file.zip 現應可在您的工作目錄中找到。您可使用下列命令來檢查:

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

重新封裝 Python 套件以供在 Ray 中使用。

  1. 使用您的套件名稱建立臨時目錄,然後確認您的工作目錄是其父目錄。您可使用下列命令來執行此作業:

    cd parent_directory mkdir temp_dir
  2. 解壓縮套件並將內容複製到臨時目錄中。移除與先前封裝標準相關的檔案,只留下模組內容。使用下列命令確認檔案結構看起來正確無誤:

    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. 使用 zip 壓縮您的臨時資料夾。您可使用下列命令來執行此作業:

    zip -r zip_file.zip temp_dir
  4. 確認檔案已正確封裝。zip_file.zip 現應可在您的工作目錄中找到。您可使用下列命令來檢查:

    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