Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

This article is a Private article. Only a writer and users who know the URL can access it.
Please change open range to public in publish setting if you want to share this article with other users.

SageMakerでProcessingJobを使用するPythonラッパーの紹介

Posted at

はじめに

こんにちは。弥生R&D室のsiidaです。R&D室ではSageMakerを使用して機械学習 (ML) のプロジェクトを進めています。SageMakerはMLのための様々な機能が搭載されたサービスであり、データ分析からモデル訓練、ひいてはワークフローの構築まで、SageMakerの中で完結させることができます。

SageMakerにはProcessingJobという機能があり、こちらはコマンドをジョブの形でサーバ上から実行できるというものです。重い計算を実行したり、再現性のある実験を行うために有用な機能ですが、実はPythonラッパーで簡単に実行することができます。今回はそのラッパーについて紹介します。

ProcessingJobのPythonラッパー

ドキュメント

インストール方法

pip install sagameker==2.231.0

使用例

def run_processor(
    processor: ScriptProcessor,
    s3_inputs: list[S3Path],
    s3_out_dir: S3Path,
    run_script: str | Path,
    script_arguments: list[str],
    *,
    job_name_prefix: str = "job",
    timestamp: Optional[str] = None,
):
    if timestamp is None:
        timestamp = get_current_time()

    s3_out_dir = s3_out_dir.joinpath(f"workflow/{job_name_prefix}-{timestamp}")
    processing_job_name = f"{job_name_prefix}-{timestamp}"

    run_script = Path(run_script) if isinstance(run_script, str) else run_script
    uploaded_script_path = upload_script_to_s3(run_script, s3_out_dir)
    print(f"Run script is uploaded to: {uploaded_script_path}")

    processor.run(
        code=uploaded_script_path,
        inputs=[
            ProcessingInput(
                source=s3_input.uri,
                destination=f"{INPUT_DIR}/{get_nearest_parent_dir(s3_input)}",
            )
            for s3_input in s3_inputs
        ],
        outputs=[
            ProcessingOutput(
                source=OUTPUT_DIR,
                destination=s3_out_dir.uri,
            ),
        ],
        arguments=script_arguments if len(script_arguments) else None,
        wait=False,
        job_name=processing_job_name,
    )

簡単に要点を解説すると、

  • ScriptProcessor オブジェクトを渡して
  • ProcessingInput / ProcessingOutput を渡して
  • ScriptProcessor.run() を実行する

というものです。

こちらで掲載したコードは関数部分のみ抜粋したものですが、コマンドラインから動作するサンプルはGithub上で公開しています。

まとめ

  • PythonからProcessingJobの操作が可能です
  • 基本は入出力を定義して実行するだけ

本記事は下記の記事と同じ内容です。 アクセス解析を目的としてマルチポストしています。

弥生では一緒に働く仲間を募集しています。 ぜひエントリーお待ちしております。

0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?