steep-motorcycle-98539
08/08/2023, 10:36 AMreturn ModelOutput(
model_version=model_version,
bst_rounds=training_output.bst_rounds,
classifier=training_output.classifier
)
And the it is defined as
ModelOutput = NamedTuple(
"ModelOutput",
model_version=ModelVersion,
bst_rounds=int,
classifier=Classifier
)
It got error when packaging
Transformer for type <class 'tuple'> is restricted currently
However, it used to work when I set the ModelOutput as below, my changes is just add a new filed to the existing tuple. Anyone knows this issue? Thanks in advance
ModelOutput = NamedTuple(
"ModelOutput",
model_version=ModelVersion,
bst_rounds=int
)
FYI, there is another structure in our code that gets to work
TrainingOutput = NamedTuple(
"TrainingOutput",
classifier=Classifier,
model_pickle=FlyteFile[TypeVar("pkl")],
model_bst=FlyteFile[TypeVar("bst")],
feature_importance=PNGImageFile,
bst_rounds=int
)
tall-lock-23197
helpful-church-28990
08/10/2023, 5:54 PM"Exception when executing Tuples are not a supported type for individual values in Flyte - got a tuple
steep-motorcycle-98539
08/11/2023, 2:35 AM@workflow
def train_register_model(
config: Config,
all_data: DataSlicer,
stage: str,
last_best_rounds: int,
validate_on_service_type: bool) -> ModelOutput:
"""This workflow trains an xgb classifier and create a new model
version on Merlin.
Creation of a Merlin model version implies the registration of the
model and log the artifacts/metadata on Mlflow.
"""
training_output: TrainingOutput = train_classifier(
config=config, all_data=all_data, stage=stage, last_best_rounds=last_best_rounds
)
offline_metrics: Dict = compute_offline_metric(
model=training_output.classifier,
all_data=all_data,
stage=stage,
config=config,
on_service_type=validate_on_service_type,
)
metadata: Metadata = create_metadata(
config=config, all_data=all_data, metrics=offline_metrics, stage=stage
)
model_version: ModelVersion = create_pyfunc_model_version(
config=config,
model_pickle=training_output.model_pickle,
model_bst=training_output.model_bst,
feature_importance=training_output.feature_importance,
metadata=metadata,
)
return ModelOutput(
model_version=model_version,
bst_rounds=training_output.bst_rounds,
classifier=training_output.classifier
)
ModelOutput = NamedTuple(
"ModelOutput",
model_version=ModelVersion,
bst_rounds=int,
classifier=Classifier
)
tall-lock-23197
classifier
here? What's its type?tall-lock-23197
helpful-church-28990
08/11/2023, 5:29 AMtall-lock-23197
steep-motorcycle-98539
08/11/2023, 5:34 AMclass Classifier(ABC):
@abstractmethod
def fit(self, *params) -> None:
pass
tall-lock-23197
wf_outputs = typing.NamedTuple("OP2", greet1=str, greet2=str, classifier=Classifier)
works for me. What's ModelVersion
?steep-motorcycle-98539
08/11/2023, 7:53 AMtall-lock-23197
pyflyte run
command and yes, it's working for me. What flytekit version have you installed?tall-lock-23197
import typing
from flytekit import task, workflow
hello_output = typing.NamedTuple("OP", greet=str)
@task
def say_hello() -> hello_output:
return hello_output("hello world")
class Classifier:
def __init__(self) -> None:
pass
wf_outputs = typing.NamedTuple("OP2", greet1=str, greet2=str, classifier=Classifier)
@workflow
def my_wf(classifier: Classifier = Classifier()) -> wf_outputs:
return wf_outputs(say_hello().greet, say_hello().greet, classifier)