Skip to content

feature: add helper method to generate pipeline adjacency list #3128

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jun 17, 2022
Merged

feature: add helper method to generate pipeline adjacency list #3128

merged 1 commit into from
Jun 17, 2022

Conversation

nmadan
Copy link
Member

@nmadan nmadan commented May 23, 2022

Issue #, if available:

Description of changes: Added a helper method to create adjacency list representing the step dependency DAG within a sagemaker pipeline

Testing done: unit tests

Merge Checklist

Put an x in the boxes that apply. You can also fill these out after creating the PR. If you're unsure about any of them, don't hesitate to ask. We're here to help! This is simply a reminder of what we are going to look for before merging your pull request.

General

  • I have read the CONTRIBUTING doc
  • I certify that the changes I am introducing will be backword compatible, and I have discussed concerns about this, if any, with the Python SDK team
  • I used the commit message format described in CONTRIBUTING
  • I have passed the region in to all S3 and STS clients that I've initialized as part of this change.
  • I have updated any necessary documentation, including READMEs and API docs (if appropriate)

Tests

  • I have added tests that prove my fix is effective or that my feature works (if appropriate)
  • I have added unit and/or integration tests as appropriate to ensure backward compatibility of the changes
  • I have checked that my tests are not configured for a specific region or account (if appropriate)
  • I have used unique_name_from_base to create resource names in integ tests (if appropriate)

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

@nmadan nmadan requested review from qidewenwhen and navaj0 May 23, 2022 23:40
@sagemaker-bot
Copy link
Collaborator

We identified new issues on unchanged lines of code. Navigate to the Amazon CodeGuru Reviewer console to view the recommendations to fix them.

root_prop = Properties(path=root_path)
root_prop.__dict__["Outcome"] = Properties(f"{root_path}.Outcome")
root_prop = Properties(step_name=name)
root_prop.__dict__["Outcome"] = Properties(step_name=name, path="Outcome")
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Recommendation generated by Amazon CodeGuru Reviewer. Leave feedback on this recommendation by replying to the comment or by reacting to the comment using emoji.

Modifying object.__dict__ directly or writing to an instance of a class __dict__ attribute directly is not recommended. Inside every module is a __dict__ object.dict attribute which contains its symbol table. If you modify object.__dict__, then the symbol table is changed. Also, direct assignment to the __dict__ attribute is not possible.

Learn more

@sagemaker-bot
Copy link
Collaborator

AWS CodeBuild CI Report

  • CodeBuild project: sagemaker-python-sdk-unit-tests
  • Commit ID: ce7f47f
  • Result: SUCCEEDED
  • Build Logs (available for 30 days)

Powered by github-codebuild-logs, available on the AWS Serverless Application Repository

@codecov-commenter
Copy link

codecov-commenter commented May 24, 2022

Codecov Report

Merging #3128 (f83d2d1) into master (f5a9e28) will increase coverage by 0.08%.
The diff coverage is 96.58%.

@@            Coverage Diff             @@
##           master    #3128      +/-   ##
==========================================
+ Coverage   89.62%   89.71%   +0.08%     
==========================================
  Files         200      200              
  Lines       17391    17565     +174     
==========================================
+ Hits        15587    15758     +171     
- Misses       1804     1807       +3     
Impacted Files Coverage Δ
src/sagemaker/workflow/properties.py 90.36% <87.50%> (+0.75%) ⬆️
src/sagemaker/workflow/functions.py 97.22% <90.00%> (-2.78%) ⬇️
src/sagemaker/workflow/conditions.py 97.95% <93.54%> (-2.05%) ⬇️
src/sagemaker/workflow/steps.py 96.84% <96.00%> (+0.12%) ⬆️
src/sagemaker/workflow/_utils.py 96.12% <100.00%> (ø)
src/sagemaker/workflow/callback_step.py 97.95% <100.00%> (-0.05%) ⬇️
src/sagemaker/workflow/clarify_check_step.py 97.48% <100.00%> (-0.02%) ⬇️
src/sagemaker/workflow/condition_step.py 100.00% <100.00%> (ø)
src/sagemaker/workflow/emr_step.py 100.00% <100.00%> (ø)
src/sagemaker/workflow/entities.py 97.43% <100.00%> (+0.21%) ⬆️
... and 7 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update f5a9e28...f83d2d1. Read the comment docs.

@sagemaker-bot
Copy link
Collaborator

AWS CodeBuild CI Report

  • CodeBuild project: sagemaker-python-sdk-pr
  • Commit ID: ce7f47f
  • Result: SUCCEEDED
  • Build Logs (available for 30 days)

Powered by github-codebuild-logs, available on the AWS Serverless Application Repository

@sagemaker-bot
Copy link
Collaborator

AWS CodeBuild CI Report

  • CodeBuild project: sagemaker-python-sdk-slow-tests
  • Commit ID: ce7f47f
  • Result: SUCCEEDED
  • Build Logs (available for 30 days)

Powered by github-codebuild-logs, available on the AWS Serverless Application Repository

@sagemaker-bot
Copy link
Collaborator

AWS CodeBuild CI Report

  • CodeBuild project: sagemaker-python-sdk-local-mode-tests
  • Commit ID: ce7f47f
  • Result: SUCCEEDED
  • Build Logs (available for 30 days)

Powered by github-codebuild-logs, available on the AWS Serverless Application Repository

@sagemaker-bot
Copy link
Collaborator

AWS CodeBuild CI Report

  • CodeBuild project: sagemaker-python-sdk-notebook-tests
  • Commit ID: ce7f47f
  • Result: SUCCEEDED
  • Build Logs (available for 30 days)

Powered by github-codebuild-logs, available on the AWS Serverless Application Repository

@@ -62,7 +63,9 @@ def __init__(
shape_name (str): The botocore service model shape name.
shape_names (str): A List of the botocore service model shape name.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

step_name is missing in the doc string

def __init__(self, path: str, shape_name: str = None, service_name: str = "sagemaker"):
def __init__(
self, step_name: str, path: str, shape_name: str = None, service_name: str = "sagemaker"
):
"""Create a PropertiesList instance representing the given shape.

Args:
path (str): The parent path of the PropertiesList instance.
shape_name (str): The botocore service model shape name.
service_name (str): The botocore service name.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

step_name is missing in the doc string

self.shape_name = shape_name
self.service_name = service_name
self.path = path
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So the self.path is a relative path without the root: f"Steps.{step_name}." while the self._path (from super class) is an absolute path with the root right?
If so can we add some comments or update the attribute name to make it more clear?

if isinstance(depends_on_step, str):
step_dependencies.add(depends_on_step)
elif isinstance(depends_on_step, Step):
step_dependencies.add(depends_on_step.name)
Copy link
Contributor

@qidewenwhen qidewenwhen May 24, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What if a StepCollection is in the depends on list?
This merged commit just supports the StepCollection to be depended on.
Can you add some tests on this as well?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Right. The StepCollection needs to be treated with care.

for step in self.steps:
dependencies[step.name] = step._find_step_dependencies()
return dependencies

Copy link
Contributor

@qidewenwhen qidewenwhen May 24, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This merged commit just supports StepCollection properties.
What if another step is referencing the StepCollection properties? Would the last sub step name be appended in the adjacency list?
Is there a test for this case?

def _find_step_dependencies(self):
"""Find the step names this step is dependent on."""

def _find_dependencies_in_step_arguments(obj):
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Better to move this out. You'll need it when run the pipeline

def _find_property_references_in_step_arguments() -> Set[Properties]:
    ...

if isinstance(depends_on_step, str):
step_dependencies.add(depends_on_step)
elif isinstance(depends_on_step, Step):
step_dependencies.add(depends_on_step.name)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Right. The StepCollection needs to be treated with care.

Comment on lines 325 to 333
def _generate_adjacency_list(self):
"""Generate an adjacency list representing the step dependency DAG in this pipeline."""
adjacency_list = {}
for step in self.steps:
if isinstance(step, Step):
adjacency_list[step.name] = step._find_step_dependencies()
elif isinstance(step, StepCollection):
adjacency_list.update(step._find_step_dependencies())
return adjacency_list
Copy link
Contributor

@navaj0 navaj0 May 25, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggest we create a new class and offload the following task to this class

  • the building of the graph,
  • validation (no cycle), this is the major validation we have to add in the SDK.
  • traversal. We can make it an iterable. The executor simply loop through each of the steps and run them.
class _PipelineGraph:
    def __init__ (self, steps: List[Step]): 
        self.adjacency_list = {}
        ...
    def __iter__():
        ...
    def __next()__() -> List[Step]:
        ...

Copy link
Contributor

@navaj0 navaj0 May 25, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Condition step needs to be treated in a special way.

@sagemaker-bot
Copy link
Collaborator

AWS CodeBuild CI Report

  • CodeBuild project: sagemaker-python-sdk-unit-tests
  • Commit ID: 69f9458
  • Result: SUCCEEDED
  • Build Logs (available for 30 days)

Powered by github-codebuild-logs, available on the AWS Serverless Application Repository

@sagemaker-bot
Copy link
Collaborator

AWS CodeBuild CI Report

  • CodeBuild project: sagemaker-python-sdk-unit-tests
  • Commit ID: b7d72b9
  • Result: SUCCEEDED
  • Build Logs (available for 30 days)

Powered by github-codebuild-logs, available on the AWS Serverless Application Repository

@sagemaker-bot
Copy link
Collaborator

AWS CodeBuild CI Report

  • CodeBuild project: sagemaker-python-sdk-local-mode-tests
  • Commit ID: 69f9458
  • Result: SUCCEEDED
  • Build Logs (available for 30 days)

Powered by github-codebuild-logs, available on the AWS Serverless Application Repository

@sagemaker-bot
Copy link
Collaborator

AWS CodeBuild CI Report

  • CodeBuild project: sagemaker-python-sdk-local-mode-tests
  • Commit ID: b7d72b9
  • Result: SUCCEEDED
  • Build Logs (available for 30 days)

Powered by github-codebuild-logs, available on the AWS Serverless Application Repository

@sagemaker-bot
Copy link
Collaborator

AWS CodeBuild CI Report

  • CodeBuild project: sagemaker-python-sdk-pr
  • Commit ID: b7d72b9
  • Result: FAILED
  • Build Logs (available for 30 days)

Powered by github-codebuild-logs, available on the AWS Serverless Application Repository

@sagemaker-bot
Copy link
Collaborator

AWS CodeBuild CI Report

  • CodeBuild project: sagemaker-python-sdk-notebook-tests
  • Commit ID: 69f9458
  • Result: FAILED
  • Build Logs (available for 30 days)

Powered by github-codebuild-logs, available on the AWS Serverless Application Repository

@sagemaker-bot
Copy link
Collaborator

AWS CodeBuild CI Report

  • CodeBuild project: sagemaker-python-sdk-notebook-tests
  • Commit ID: b7d72b9
  • Result: SUCCEEDED
  • Build Logs (available for 30 days)

Powered by github-codebuild-logs, available on the AWS Serverless Application Repository

@sagemaker-bot
Copy link
Collaborator

AWS CodeBuild CI Report

  • CodeBuild project: sagemaker-python-sdk-unit-tests
  • Commit ID: 608a09c
  • Result: SUCCEEDED
  • Build Logs (available for 30 days)

Powered by github-codebuild-logs, available on the AWS Serverless Application Repository

@sagemaker-bot
Copy link
Collaborator

AWS CodeBuild CI Report

  • CodeBuild project: sagemaker-python-sdk-pr
  • Commit ID: 608a09c
  • Result: SUCCEEDED
  • Build Logs (available for 30 days)

Powered by github-codebuild-logs, available on the AWS Serverless Application Repository

@sagemaker-bot
Copy link
Collaborator

AWS CodeBuild CI Report

  • CodeBuild project: sagemaker-python-sdk-local-mode-tests
  • Commit ID: 608a09c
  • Result: SUCCEEDED
  • Build Logs (available for 30 days)

Powered by github-codebuild-logs, available on the AWS Serverless Application Repository

@sagemaker-bot
Copy link
Collaborator

AWS CodeBuild CI Report

  • CodeBuild project: sagemaker-python-sdk-notebook-tests
  • Commit ID: 608a09c
  • Result: SUCCEEDED
  • Build Logs (available for 30 days)

Powered by github-codebuild-logs, available on the AWS Serverless Application Repository

@sagemaker-bot
Copy link
Collaborator

AWS CodeBuild CI Report

  • CodeBuild project: sagemaker-python-sdk-slow-tests
  • Commit ID: 608a09c
  • Result: SUCCEEDED
  • Build Logs (available for 30 days)

Powered by github-codebuild-logs, available on the AWS Serverless Application Repository

@sagemaker-bot
Copy link
Collaborator

AWS CodeBuild CI Report

  • CodeBuild project: sagemaker-python-sdk-slow-tests
  • Commit ID: 69f9458
  • Result: FAILED
  • Build Logs (available for 30 days)

Powered by github-codebuild-logs, available on the AWS Serverless Application Repository

@sagemaker-bot
Copy link
Collaborator

AWS CodeBuild CI Report

  • CodeBuild project: sagemaker-python-sdk-slow-tests
  • Commit ID: b7d72b9
  • Result: FAILED
  • Build Logs (available for 30 days)

Powered by github-codebuild-logs, available on the AWS Serverless Application Repository

if self.is_duplicate_step_name(steps):
raise ValueError("Pipeline steps cannot have duplicate names.")
self.step_map = PipelineGraph._generate_step_map(steps)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These two could be merged into one.

Comment on lines 570 to 576
step_map[step.name] = step
for inner_step in step.steps:
step_map[inner_step.name] = inner_step
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A StepCollection is literally a list of steps. It is just an abstraction to the users. When building the graph, we just need to take care of the steps inside.

Comment on lines 588 to 591
elif isinstance(step, StepCollection):
step_collection_dependencies = step._find_step_dependencies(self.step_map)
for k, v in step_collection_dependencies.items():
dependency_list[k].update(v)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can skip the parent StepCollection here.

for k, v in step_collection_dependencies.items():
dependency_list[k].update(v)

if isinstance(step, ConditionStep):
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The if else branches in the condition step are already flattened out. So it just need to be treated as a single node.

The condition step itself has condition expressions, which may contain property references.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This comment can be ignored.

@sagemaker-bot
Copy link
Collaborator

AWS CodeBuild CI Report

  • CodeBuild project: sagemaker-python-sdk-slow-tests
  • Commit ID: 302911b
  • Result: FAILED
  • Build Logs (available for 30 days)

Powered by github-codebuild-logs, available on the AWS Serverless Application Repository

@sagemaker-bot
Copy link
Collaborator

AWS CodeBuild CI Report

  • CodeBuild project: sagemaker-python-sdk-unit-tests
  • Commit ID: 302911b
  • Result: SUCCEEDED
  • Build Logs (available for 30 days)

Powered by github-codebuild-logs, available on the AWS Serverless Application Repository

@sagemaker-bot
Copy link
Collaborator

AWS CodeBuild CI Report

  • CodeBuild project: sagemaker-python-sdk-pr
  • Commit ID: 302911b
  • Result: SUCCEEDED
  • Build Logs (available for 30 days)

Powered by github-codebuild-logs, available on the AWS Serverless Application Repository

@sagemaker-bot
Copy link
Collaborator

AWS CodeBuild CI Report

  • CodeBuild project: sagemaker-python-sdk-local-mode-tests
  • Commit ID: 302911b
  • Result: SUCCEEDED
  • Build Logs (available for 30 days)

Powered by github-codebuild-logs, available on the AWS Serverless Application Repository

@sagemaker-bot
Copy link
Collaborator

AWS CodeBuild CI Report

  • CodeBuild project: sagemaker-python-sdk-notebook-tests
  • Commit ID: 302911b
  • Result: SUCCEEDED
  • Build Logs (available for 30 days)

Powered by github-codebuild-logs, available on the AWS Serverless Application Repository

@sagemaker-bot
Copy link
Collaborator

AWS CodeBuild CI Report

  • CodeBuild project: sagemaker-python-sdk-slow-tests
  • Commit ID: 302911b
  • Result: SUCCEEDED
  • Build Logs (available for 30 days)

Powered by github-codebuild-logs, available on the AWS Serverless Application Repository

Comment on lines 566 to 568
step_map.update(
PipelineGraph._generate_step_map(step.if_steps + step.else_steps)
)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The names of steps in if/else branches can't conflict with steps outside. So it is better to do something like

for step in steps:
    if step.name in self.step_map:
        raise ValueError
    self.step_map[step.name] = step
    if isinstance(step, ConditionStep):
        self.generate_step_map(...)
    elif isinstance(step, StepCollection):
        self.generate_step_map(step.steps) 

for k, v in step_collection_dependencies.items():
dependency_list[k].update(v)

if isinstance(step, ConditionStep):
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This comment can be ignored.

return "arn:role"


def test_pipeline_duplicate_step_name(sagemaker_session_mock):
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A couple of more scenarios:

  • duplicate_step_name_in_condition_step
  • duplicate_step_name_in_step_collection

assert "Pipeline steps cannot have duplicate names." in str(error.value)


def test_pipeline_graph_acyclic(sagemaker_session_mock):
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

more scenarios with condition steps

  • test_pipeline_graph_acyclic_with_condition_step
    • CustomStep -> ConditionStep/IfSteps/ElseStep: dependencies are defined via property reference
    • CustomStep -> ConditionStep/IfStep/ElseStep: dependencies are defined via dependsOn attribute
  • test_pipeline_graph_acyclic_with_step_collection
    • CustomStep -> ModelStep -> CustomStep: dependencies are defined via property reference
    • CustomStep -> ModelStep -> CustomStep: dependencies are defined via dependsOn attribute


@property
@abc.abstractmethod
def depends_on(self) -> List[str]:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we make this a protected method

_referenced_steps

"""Return the next Step node from the Topological sort order."""

while self.stack:
return self.step_map.get(self.stack.pop())
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Recommendation generated by Amazon CodeGuru Reviewer. Leave feedback on this recommendation by replying to the comment or by reacting to the comment using emoji.

You are using the get method without a default argument to return the value of a key in a dictionary. We recommended that you use a default argument so that if the value for your key is not found, a default value is returned. If a default value is not provided and the key is not found, then None is returned.

Learn more

@sagemaker-bot
Copy link
Collaborator

AWS CodeBuild CI Report

  • CodeBuild project: sagemaker-python-sdk-unit-tests
  • Commit ID: 43ad3dc
  • Result: SUCCEEDED
  • Build Logs (available for 30 days)

Powered by github-codebuild-logs, available on the AWS Serverless Application Repository

@sagemaker-bot
Copy link
Collaborator

AWS CodeBuild CI Report

  • CodeBuild project: sagemaker-python-sdk-pr
  • Commit ID: 43ad3dc
  • Result: SUCCEEDED
  • Build Logs (available for 30 days)

Powered by github-codebuild-logs, available on the AWS Serverless Application Repository

@sagemaker-bot
Copy link
Collaborator

AWS CodeBuild CI Report

  • CodeBuild project: sagemaker-python-sdk-slow-tests
  • Commit ID: 43ad3dc
  • Result: SUCCEEDED
  • Build Logs (available for 30 days)

Powered by github-codebuild-logs, available on the AWS Serverless Application Repository

@sagemaker-bot
Copy link
Collaborator

AWS CodeBuild CI Report

  • CodeBuild project: sagemaker-python-sdk-local-mode-tests
  • Commit ID: 43ad3dc
  • Result: SUCCEEDED
  • Build Logs (available for 30 days)

Powered by github-codebuild-logs, available on the AWS Serverless Application Repository

@sagemaker-bot
Copy link
Collaborator

AWS CodeBuild CI Report

  • CodeBuild project: sagemaker-python-sdk-notebook-tests
  • Commit ID: 43ad3dc
  • Result: SUCCEEDED
  • Build Logs (available for 30 days)

Powered by github-codebuild-logs, available on the AWS Serverless Application Repository

adjacency_list = PipelineGraph.from_pipeline(pipeline).adjacency_list
assert ordered(adjacency_list) == ordered(
{"CondStep": ["IfStep", "ElseStep"], "IfStep": [], "ElseStep": []}
)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

From visualization perspective, seems it's not able to tell which steps, in adjacency list of "CondStep", are in IF branch and which are in ELSE branch.
Please correct me if I'm wrong

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nic's design doc uses the following adjacency list format:

[
        {"StepName": 'AbaloneProcess',
         "OutBoundEdges": [
            {
                "nextStepName": "AbaloneTrain",
                "edgeLabel": None                <<<<<<<<<<< indicating the IF or ELSE branch
            },
            {
                "nextStepName": "AbaloneEval",
                "edgeLabel": None
            }
         ]
        },
        {"StepName": 'AbaloneMSECond',
         "OutBoundEdges": [
            {
                "nextStepId": "AbaloneRegisterModel",
                "edgeLabel": "true"
            },
            {
                "nextStepId": "AbaloneCreateModel",
                "edgeLabel": "true"
            },
            {
                "nextStepId": "AbaloneMSEFail",
                "edgeLabel": "false"
            }
         ]
        },

Can we also apply it here?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This format can be derived using a combination of the current adjacency list format and the pipeline.steps field.
Same thing applies to the condition step if-else branches. The goal of the adjacency list to give parent-child step relationship info. Nic can use the adjacency list + pipeline.steps to decipher whether the child of a condition step is a if-child or else-child.

@sagemaker-bot
Copy link
Collaborator

AWS CodeBuild CI Report

  • CodeBuild project: sagemaker-python-sdk-unit-tests
  • Commit ID: f83d2d1
  • Result: SUCCEEDED
  • Build Logs (available for 30 days)

Powered by github-codebuild-logs, available on the AWS Serverless Application Repository

@sagemaker-bot
Copy link
Collaborator

AWS CodeBuild CI Report

  • CodeBuild project: sagemaker-python-sdk-local-mode-tests
  • Commit ID: f83d2d1
  • Result: SUCCEEDED
  • Build Logs (available for 30 days)

Powered by github-codebuild-logs, available on the AWS Serverless Application Repository

@sagemaker-bot
Copy link
Collaborator

AWS CodeBuild CI Report

  • CodeBuild project: sagemaker-python-sdk-pr
  • Commit ID: f83d2d1
  • Result: SUCCEEDED
  • Build Logs (available for 30 days)

Powered by github-codebuild-logs, available on the AWS Serverless Application Repository

@sagemaker-bot
Copy link
Collaborator

AWS CodeBuild CI Report

  • CodeBuild project: sagemaker-python-sdk-notebook-tests
  • Commit ID: f83d2d1
  • Result: FAILED
  • Build Logs (available for 30 days)

Powered by github-codebuild-logs, available on the AWS Serverless Application Repository

@sagemaker-bot
Copy link
Collaborator

AWS CodeBuild CI Report

  • CodeBuild project: sagemaker-python-sdk-slow-tests
  • Commit ID: f83d2d1
  • Result: SUCCEEDED
  • Build Logs (available for 30 days)

Powered by github-codebuild-logs, available on the AWS Serverless Application Repository

@sagemaker-bot
Copy link
Collaborator

AWS CodeBuild CI Report

  • CodeBuild project: sagemaker-python-sdk-notebook-tests
  • Commit ID: f83d2d1
  • Result: SUCCEEDED
  • Build Logs (available for 30 days)

Powered by github-codebuild-logs, available on the AWS Serverless Application Repository

@shreyapandit shreyapandit merged commit d573e67 into aws:master Jun 17, 2022
jerrypeng7773 pushed a commit to jerrypeng7773/sagemaker-python-sdk that referenced this pull request Aug 8, 2022
JoseJuan98 pushed a commit to JoseJuan98/sagemaker-python-sdk that referenced this pull request Mar 4, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants