我正在我的 sagemaker 管道中创建模型卡步骤,因此我定义了我的 model_card 方法,如下所示:
def create_model_card(model_package_details, bucket):
import sagemaker
model_card_name = "TestingModelCard"
sagemaker_session = sagemaker.session.Session()
Get model package details
mp_details = ModelPackage.from_model_package_arn(
model_package_arn=model_package_details,
sagemaker_session=sagemaker_session,
)
print(f"Model Package ARN: {model_package_details}")
my_card = ModelCard(
name=model_card_name,
status=ModelCardStatusEnum.PENDING_REVIEW,
model_package_details=mp_details,
sagemaker_session=sagemaker_session
)
my_card.create()
return f"Model card {model_card_name} and package arn {model_package_details} created successfully"
现在在我的管道中,按照
[documentation][1]
调用步骤,如下所示:
model_card_pipeline_params = {"model_package_details": model_package_arn_ref, "bucket": default_bucket}
step_delayed_model_card = function_step.step(_func=create_model_card(**model_card_pipeline_params),
security_group_ids=network_config.security_group_ids,
subnets=network_config.subnets,
role=role,
name="CreateModelCard",
instance_type="ml.m5.xlarge")
PS:model_package_details 是模型包 ARN,作为我之前 lambdastep 的输出。 有了这个我收到这个错误
step_delayed_model_card = function_step.step(_func=create_model_card(**model_card_pipeline_params),
File "/home/runner/.local/lib/python3.10/site-packages/pipelines/abalone/pipeline.py", line 302, in create_model_card
mp_details = ModelPackage.from_model_package_arn(
File "/home/runner/.local/lib/python3.10/site-packages/sagemaker/model_card/model_card.py", line 462, in from_model_package_arn
model_package_response = cls.call_describe_model_package(
File "/home/runner/.local/lib/python3.10/site-packages/sagemaker/model_card/model_card.py", line 378, in call_describe_model_package
model_package_response = sagemaker_session.sagemaker_client.describe_model_package(
File "/home/runner/.local/lib/python3.10/site-packages/botocore/client.py", line 553, in _api_call
return self._make_api_call(operation_name, kwargs)
File "/home/runner/.local/lib/python3.10/site-packages/botocore/client.py", line 962, in _make_api_call
request_dict = self._convert_to_request_dict(
File "/home/runner/.local/lib/python3.10/site-packages/botocore/client.py", line 1036, in _convert_to_request_dict
request_dict = self._serializer.serialize_to_request(
File "/home/runner/.local/lib/python3.10/site-packages/botocore/validate.py", line 381, in serialize_to_request
raise ParamValidationError(report=report.generate_report())
File "/home/runner/.local/lib/python3.10/site-packages/botocore/validate.py", line 102, in generate_report
error_messages.append(self._format_error(error))
File "/home/runner/.local/lib/python3.10/site-packages/botocore/validate.py", line 125, in _format_error
f'Invalid type for parameter {name}, value: {param}, '
File "/home/runner/.local/lib/python3.10/site-packages/sagemaker/workflow/entities.py", line 90, in __str__
raise TypeError(
TypeError: Pipeline variables do not support __str__ operation. Please use `.to_string()` to convert it to string type in execution time or use `.expr` to translate it to Json for display purpose in Python SDK.
您遇到的错误是由于尝试在需要字符串的操作中直接使用
SageMaker
管道变量。解决方案是使用 .to_string()
方法将管道变量转换为字符串表示形式,然后再在此类上下文中使用它们。这种调整可以让您有效地使用管道变量,而不会遇到类型错误:
def create_model_card(model_package_details, bucket):
import sagemaker
from sagemaker.workflow.parameters import ParameterString
model_card_name = "TestingModelCard"
sagemaker_session = sagemaker.session.Session()
# Check if model_package_details is a pipeline parameter and convert to string if necessary
if isinstance(model_package_details, ParameterString):
model_package_details_str = model_package_details.to_string()
else:
model_package_details_str = model_package_details
# Use the string representation for operations that require a string
print(f"Model Package ARN: {model_package_details_str}")
mp_details = ModelPackage.from_model_package_arn(
model_package_arn=model_package_details_str, # Use the string version here
sagemaker_session=sagemaker_session,
)
my_card = ModelCard(
name=model_card_name,
status=ModelCardStatusEnum.PENDING_REVIEW,
model_package_details=mp_details,
sagemaker_session=sagemaker_session
)
my_card.create()
return f"Model card {model_card_name} and package arn {model_package_details_str} created successfully"