制限 - Amazon SageMaker AI

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

制限

以降のセクションでは、パイプラインステップに @step デコレータを使用する際に注意すべき制限事項について説明します。

関数引数の制限

@step でデコレートした関数に入力引数を渡すと、以下の制限が適用されます。

  • DelayedReturn オブジェクト、(他のタイプのステップの) Properties オブジェクト、ParameterExecutionVariable オブジェクトを、@step でデコレートした関数に引数として渡すことができます。ただし、@step でデコレートした関数は引数としての JsonGet オブジェクトと Join オブジェクトをサポートしていません。

  • @step 関数からパイプライン変数に直接アクセスすることはできません。以下の例ではエラーが発生します。

    param = ParameterInteger(name="<parameter-name>", default_value=10) @step def func(): print(param) func() # this raises a SerializationError
  • パイプライン変数を別のオブジェクトにネストして、@step 関数に渡すことはできません 以下の例ではエラーが発生します。

    param = ParameterInteger(name="<parameter-name>", default_value=10) @step def func(arg): print(arg) func(arg=(param,)) # this raises a SerializationError because param is nested in a tuple
  • 関数の入力と出力はシリアル化されるため、関数からの入出力として渡すことができるデータのタイプには制限があります。詳細については、「リモート関数を呼び出す」の「Data serialization and deserialization」セクションを参照してください。@step でデコレートした関数にも同じ制限が適用されます。

  • boto クライアントを持つオブジェクトはシリアル化できないため、@step でデコレートした関数への入出力としてこのようなオブジェクトを渡すことはできません。例えば、EstimatorPredictorProcessor などの SageMaker Python SDK クライアントクラスはシリアル化できません。

関数のインポート

ステップに必要なライブラリは、関数の外部に配置するのではなく内部にインポートする必要があります。グローバルスコープでインポートすると、関数をシリアル化する際にインポートの衝突が発生するリスクがあります。例えば、sklearn.pipeline.Pipelinesagemaker.workflow.pipeline.Pipeline に上書きされる可能性があります。

関数の戻り値の子メンバーの参照

@step でデコレートした関数の戻り値の子メンバーを参照する場合、以下の制限が適用されます。

  • DelayedReturn オブジェクトがタプル、リスト、またはディクトである場合は、次の例に示されるとおり、子メンバーを [] で参照できます。

    delayed_return[0] delayed_return["a_key"] delayed_return[1]["a_key"]
  • 関数を呼び出す際に基となるタプルまたはリストの正確な長さが不明であるため、タプルの出力またはリストの出力はアンパックできません。以下の例ではエラーが発生します。

    a, b, c = func() # this raises ValueError
  • DelayedReturn オブジェクトを反復処理することはできません。以下の例ではエラーが発生します。

    for item in func(): # this raises a NotImplementedError
  • 任意の子メンバーを '.' で参照することはできません。以下の例ではエラーが発生します。

    delayed_return.a_child # raises AttributeError

サポートされていない既存のパイプライン機能

@step デコレータは、以下のパイプライン機能では使用できません。