本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
限制
以下各節概述了您在管道步驟中使用@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由於函數的輸入和輸出是序列化的,因此對可做為函數的輸入或輸出傳遞的資料類型有限制。如需叫用遠端 函數詳細資訊,請參閱 的資料序列化和還原序列化一節。相同的限制適用於
@step
裝飾的函數。任何具有 boto 用戶端的物件都無法序列化,因此您無法將這類物件做為輸入傳遞至 或來自
@step
裝飾函數的輸出。例如,SageMaker Python SDK 用戶端類別,例如Estimator
、Predictor
和Processor
無法序列化。
函數匯入
您應該匯入 步驟所需的程式庫,而不是在函數外部。如果您在全域範圍內匯入它們,則存在在序列化函數時發生匯入衝突的風險。例如, 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
裝飾器搭配下列管道功能: