[英]How to add additional files in Sagemaker Pipeline Processing Step
我想要可以在 preprocess.py 文件中導入的其他文件
但我無法直接導入這些。
想要從helper_functions
目錄導入到預處理中。
我試圖將其添加到 setup.py 文件中,但沒有成功。
package_data={"pipelines.ha_forecast.helper_functions": ["*.py"]},
一種有效的方法是在輸入中添加這個文件夾,如下所示:
inputs = [
ProcessingInput(source=f'{project_name}/{module_name}/helper_functions',
destination="/opt/ml/processing/input/code/helper_functions"),
]
但這是將所需的文件放在我無法再導入的其他目錄中。
這樣做的標准方法是什么?
您必須指定source_dir
。 在您的腳本中,您可以像往常一樣導入模塊。
source_dir (str or PipelineVariable) – 一個目錄的路徑(絕對、相對或 S3 URI),除了入口點文件(默認值:無)之外,還有任何其他訓練源代碼依賴項。 如果 source_dir 是一個 S3 URI,它必須指向一個 tar.gz 文件。 在 Amazon SageMaker 上訓練時會保留此目錄中的結構。
查看Processing 的一般文檔(您必須使用FrameworkProcessor ,而不是像 SKLearnProcessor 這樣的特定文檔)。
PS:答案類似於“ How to install additional packages in sagemaker pipeline ”這個問題。
在指定的文件夾中,必須有腳本(在您的例子中為 preprocess.py)、可能需要的任何其他文件/模塊,最后還有 requirements.txt 文件。
該文件夾的結構將是:
BASE_DIR/
|─ helper_functions/
| |─ your_utils.py
|─ requirements.txt
|─ preprocess.py
在您的 preprocess.py 中,您將以簡單的方式調用腳本:
from helper_functions.your_utils import your_class, your_func
所以,你的代碼變成:
from sagemaker.processing import FrameworkProcessor
from sagemaker.sklearn import SKLearn
from sagemaker.workflow.steps import ProcessingStep
from sagemaker.processing import ProcessingInput, ProcessingOutput
BASE_DIR = your_script_dir_path
sklearn_processor = FrameworkProcessor(
estimator_cls=SKLearn,
framework_version=framework_version,
instance_type=processing_instance_type,
instance_count=processing_instance_count,
base_job_name=base_job_name,
sagemaker_session=pipeline_session,
role=role
)
step_args = sklearn_processor.run(
inputs=[your_inputs],
outputs=[your_outputs],
code="preprocess.py",
source_dir=BASE_DIR,
arguments=[your_arguments],
)
step_process = ProcessingStep(
name="ProcessingName",
step_args=step_args
)
最好將各個步驟的文件夾分開存放,不要重疊。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.