限制 - Amazon SageMaker

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

限制

以下各节概述了在工作流步骤中使用@step装饰器时应注意的限制。

函数参数限制

当您将输入参数传递给@step装饰函数时,以下限制适用:

  • 你可以将DelayedReturnProperties(其他类型的步骤)和ExecutionVariable对象作为参数传递给@step装饰过的函数。Parameter但是@step装饰过的函数不支持JsonGetJoin对象作为参数。

  • 您不能直接从@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
  • 由于函数的输入和输出是序列化的,因此可以作为函数的输入或输出传递的数据类型存在限制。有关更多详细信息,请参阅的数据序列化和反序列调用远程函数部分。同样的限制也适用于@step装饰函数。

  • 任何具有 boto 客户端的对象都无法序列化,因此您无法将此类对象作为装饰函数的输入或输出传递给装饰函数@step。例如,无法序列化诸如EstimatorPredictor、和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装饰器与以下流水线功能一起使用: