本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
為 Ray 任務提供檔案和 Python 程式庫
本節提供將 Python 程式庫與 Ray AWS Glue 任務搭配使用時所需的資訊。您可以使用預設包含於所有 Ray 任務的某些常見程式庫。您還可以為自己的 Ray 任務提供專屬 Python 程式庫。
Ray 任務隨附的模組
您可以使用下列提供的套件,在 Ray 任務中執行資料整合工作流程。這些套件預設可在 Ray 任務中使用。
為 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 任務的其他 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 進行編譯。這表示您可使用 aarch64
manylinux
wheel 的內容。您可將 wheel 重新封裝為 Ray 標準,以編譯形式提供原生相依性。這通常表示會移除 dist-info
資料夾,讓封存的根僅具有一個資料夾。
您無法使用此參數升級 ray
或 ray[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 zip
和 zipinfo
公用程式分發套件之類似作業系統中的檔案互動。我們建議您使用這些工具來防止意外行為。
封裝 Python 檔案以供在 Ray 中使用
-
使用您的套件名稱建立臨時目錄,然後確認您的工作目錄是其父目錄。您可使用下列命令來執行此作業:
cd
parent_directory
mkdirtemp_dir
-
將檔案複製到臨時目錄中,然後確認您的目錄結構。此目錄的內容將作為您的 Python 模組直接存取。您可使用下列命令來執行此作業:
ls -AR
temp_dir
# my_file_1.py # my_file_2.py -
使用 zip 壓縮您的臨時資料夾。您可使用下列命令來執行此作業:
zip -r
zip_file
.ziptemp_dir
-
確認檔案已正確封裝。
現應可在您的工作目錄中找到。您可使用下列命令來檢查:zip_file
.zipzipinfo -1
zip_file
.zip # temp_dir/ # temp_dir/my_file_1.py # temp_dir/my_file_2.py
重新封裝 Python 套件以供在 Ray 中使用。
-
使用您的套件名稱建立臨時目錄,然後確認您的工作目錄是其父目錄。您可使用下列命令來執行此作業:
cd
parent_directory
mkdirtemp_dir
-
解壓縮套件並將內容複製到臨時目錄中。移除與先前封裝標準相關的檔案,只留下模組內容。使用下列命令確認檔案結構看起來正確無誤:
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 -
使用 zip 壓縮您的臨時資料夾。您可使用下列命令來執行此作業:
zip -r
zip_file
.ziptemp_dir
-
確認檔案已正確封裝。
現應可在您的工作目錄中找到。您可使用下列命令來檢查:zip_file
.zipzipinfo -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