翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
制限
以降のセクションでは、パイプラインステップに @step
デコレータを使用する際に注意すべき制限事項について説明します。
関数引数の制限
@step
でデコレートした関数に入力引数を渡すと、以下の制限が適用されます。
DelayedReturn
オブジェクト、(他のタイプのステップの)Properties
オブジェクト、Parameter
、ExecutionVariable
オブジェクトを、@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
でデコレートした関数への入出力としてこのようなオブジェクトを渡すことはできません。例えば、Estimator
、Predictor
、Processor
などの SageMaker Python SDK クライアントクラスはシリアル化できません。
関数のインポート
ステップに必要なライブラリは、関数の外部に配置するのではなく内部にインポートする必要があります。グローバルスコープでインポートすると、関数をシリアル化する際にインポートの衝突が発生するリスクがあります。例えば、sklearn.pipeline.Pipeline
は sagemaker.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
デコレータは、以下のパイプライン機能では使用できません。