def complex_experiment_obj(sagemaker_boto_client):
    description = "{}-{}".format("description", str(uuid.uuid4()))
    boto3.set_stream_logger("", logging.INFO)

    # create experiment
    experiment_obj_name = name()
    experiment_obj = experiment.Experiment.create(
        experiment_name=experiment_obj_name, description=description, sagemaker_boto_client=sagemaker_boto_client
    )

    # create trials
    trial_objs = []
    trial_name1 = name()
    trial_name2 = name()
    trial_name3 = name()

    next_trial1 = trial.Trial.create(
        trial_name=trial_name1, experiment_name=experiment_obj_name, sagemaker_boto_client=sagemaker_boto_client,
    )
    trial_objs.append(next_trial1)
    next_trial2 = trial.Trial.create(
        trial_name=trial_name2, experiment_name=experiment_obj_name, sagemaker_boto_client=sagemaker_boto_client,
    )
    trial_objs.append(next_trial2)
    next_trial3 = trial.Trial.create(
        trial_name=trial_name3, experiment_name=experiment_obj_name, sagemaker_boto_client=sagemaker_boto_client,
    )
    trial_objs.append(next_trial3)

    # create trial components
    trial_component_name = name()
    trial_component_obj = trial_component.TrialComponent.create(
        trial_component_name=trial_component_name, sagemaker_boto_client=sagemaker_boto_client,
    )

    # associate the trials with trial components
    for trial_obj in trial_objs:
        sagemaker_boto_client.associate_trial_component(
            TrialName=trial_obj.trial_name, TrialComponentName=trial_component_obj.trial_component_name
        )
    time.sleep(1.0)
    yield experiment_obj
    experiment_obj.delete_all(action="--force")

    # load experiment and verify experiment got deleted
    with pytest.raises(sagemaker_boto_client.exceptions.ResourceNotFound):
        sagemaker_boto_client.describe_experiment(ExperimentName=experiment_obj_name)
    # load trials and verify trials got deleted
    with pytest.raises(sagemaker_boto_client.exceptions.ResourceNotFound):
        sagemaker_boto_client.describe_trial(TrialName=trial_name1)
    with pytest.raises(sagemaker_boto_client.exceptions.ResourceNotFound):
        sagemaker_boto_client.describe_trial(TrialName=trial_name2)
    with pytest.raises(sagemaker_boto_client.exceptions.ResourceNotFound):
        sagemaker_boto_client.describe_trial(TrialName=trial_name3)
    # load trial component and verify trial component got deleted
    with pytest.raises(sagemaker_boto_client.exceptions.ResourceNotFound):
        sagemaker_boto_client.describe_trial_component(TrialComponentName=trial_component_name)
def training_s3_uri(boto3_session, tempdir, bucket):
    s3_client = boto3_session.client("s3")
    filepath = os.path.join(tempdir, name())
    with open(filepath, "w") as w:
        w.write("Hello World!")
    key = "sagemaker/training-input/{}".format(name())
    s3_client.upload_file(filepath, bucket, key)
    yield "s3://{}/{}".format(bucket, key)
    s3_client.delete_object(Bucket=bucket, Key=key)
Example #3
0
def test_save_load(experiment_obj, sagemaker_boto_client):
    experiment_obj_two = experiment.Experiment.load(experiment_name=experiment_obj.experiment_name,
                                                    sagemaker_boto_client=sagemaker_boto_client)
    assert experiment_obj.experiment_name == experiment_obj_two.experiment_name
    assert experiment_obj.description == experiment_obj_two.description

    experiment_obj.description = name()
    experiment_obj.display_name = name()
    experiment_obj.save()
    experiment_obj_three = experiment.Experiment.load(experiment_name=experiment_obj.experiment_name,
                                                      sagemaker_boto_client=sagemaker_boto_client)
    assert experiment_obj.description == experiment_obj_three.description
    assert experiment_obj.display_name == experiment_obj_three.display_name
def trial_component_obj(sagemaker_boto_client):
    trial_component_obj = trial_component.TrialComponent.create(
        trial_component_name=name(), sagemaker_boto_client=sagemaker_boto_client, tags=TAGS,
    )
    yield trial_component_obj
    time.sleep(0.5)
    trial_component_obj.delete()
def test_create_display_name(sagemaker_boto_client):
    display_name = name()
    tracker_obj = tracker.Tracker.create(display_name=display_name, sagemaker_boto_client=sagemaker_boto_client)
    try:
        assert display_name == tracker_obj.trial_component.display_name
    finally:
        tracker_obj.trial_component.delete()
Example #6
0
def training_job_name(sagemaker_boto_client, training_role_arn, docker_image,
                      training_s3_uri, training_output_s3_uri):
    training_job_name = name()
    sagemaker_boto_client.create_training_job(
        TrainingJobName=training_job_name,
        InputDataConfig=[{
            'ChannelName': 'train',
            'DataSource': {
                'S3DataSource': {
                    'S3Uri': training_s3_uri,
                    'S3DataType': 'S3Prefix'
                }
            }
        }],
        AlgorithmSpecification={
            'TrainingImage': docker_image,
            'TrainingInputMode': 'File',
            'EnableSageMakerMetricsTimeSeries': True
        },
        RoleArn=training_role_arn,
        ResourceConfig={
            'InstanceType': 'ml.m5.large',
            'InstanceCount': 1,
            'VolumeSizeInGB': 10
        },
        StoppingCondition={'MaxRuntimeInSeconds': 900},
        OutputDataConfig={'S3OutputPath': training_output_s3_uri})
    return training_job_name
Example #7
0
def training_job_name(sagemaker_boto_client, training_role_arn, docker_image,
                      training_s3_uri, training_output_s3_uri):
    training_job_name = name()
    sagemaker_boto_client.create_training_job(
        TrainingJobName=training_job_name,
        InputDataConfig=[{
            "ChannelName": "train",
            "DataSource": {
                "S3DataSource": {
                    "S3Uri": training_s3_uri,
                    "S3DataType": "S3Prefix"
                }
            },
        }],
        AlgorithmSpecification={
            "TrainingImage": docker_image,
            "TrainingInputMode": "File",
        },
        RoleArn=training_role_arn,
        ResourceConfig={
            "InstanceType": "ml.m5.large",
            "InstanceCount": 1,
            "VolumeSizeInGB": 10
        },
        StoppingCondition={"MaxRuntimeInSeconds": 900},
        OutputDataConfig={"S3OutputPath": training_output_s3_uri},
    )
    return training_job_name
Example #8
0
def trial_obj(sagemaker_boto_client, experiment_obj):
    trial_obj = trial.Trial.create(
        trial_name=name(),
        experiment_name=experiment_obj.experiment_name,
        sagemaker_boto_client=sagemaker_boto_client)
    yield trial_obj
    time.sleep(0.5)
    trial_obj.delete()
Example #9
0
def experiment_obj(sagemaker_boto_client):
    description = '{}-{}'.format('description', str(uuid.uuid4()))
    boto3.set_stream_logger('', logging.INFO)
    experiment_obj = experiment.Experiment.create(
        experiment_name=name(),
        description=description,
        sagemaker_boto_client=sagemaker_boto_client)
    yield experiment_obj
    time.sleep(0.5)
    experiment_obj.delete()
def processing_job_name(sagemaker_boto_client, training_role_arn, docker_image):
    processing_job_name = name()
    sagemaker_boto_client.create_processing_job(
        ProcessingJobName=processing_job_name,
        ProcessingResources={
            "ClusterConfig": {"InstanceCount": 1, "InstanceType": "ml.m5.large", "VolumeSizeInGB": 10}
        },
        AppSpecification={"ImageUri": docker_image},
        RoleArn=training_role_arn,
    )
    return processing_job_name
def trial_component_with_force_disassociation_obj(trials, sagemaker_boto_client):
    trial_component_obj = trial_component.TrialComponent.create(
        trial_component_name=name(), sagemaker_boto_client=sagemaker_boto_client
    )
    for trial in trials:
        sagemaker_boto_client.associate_trial_component(
            TrialName=trial.trial_name, TrialComponentName=trial_component_obj.trial_component_name
        )
    yield trial_component_obj
    time.sleep(0.5)
    trial_component_obj.delete(force_disassociate=True)
def experiment_obj(sagemaker_boto_client):
    description = "{}-{}".format("description", str(uuid.uuid4()))
    boto3.set_stream_logger("", logging.INFO)
    experiment_name = name()
    experiment_obj = experiment.Experiment.create(
        experiment_name=experiment_name, description=description, sagemaker_boto_client=sagemaker_boto_client, tags=TAGS
    )
    yield experiment_obj
    time.sleep(0.5)
    experiment_obj.delete()
    with pytest.raises(sagemaker_boto_client.exceptions.ResourceNotFound):
        sagemaker_boto_client.describe_experiment(ExperimentName=experiment_name)
Example #13
0
def processing_job_name(sagemaker_boto_client, training_role_arn,
                        docker_image):
    processing_job_name = name()
    sagemaker_boto_client.create_processing_job(
        ProcessingJobName=processing_job_name,
        ProcessingResources={
            'ClusterConfig': {
                'InstanceCount': 1,
                'InstanceType': 'ml.m5.large',
                'VolumeSizeInGB': 10
            }
        },
        AppSpecification={'ImageUri': docker_image},
        RoleArn=training_role_arn)
    return processing_job_name
def test_log_artifact(trial_component_obj, bucket, tempdir, sagemaker_boto_client):
    prefix = name()
    file_contents = 'happy monkey monkey'
    file_path = os.path.join(tempdir, 'foo.txt')
    artifact_name = 'monkey-monkey'
    with open(file_path, 'w') as foo_file:
        foo_file.write(file_contents)

    with tracker.Tracker.load(trial_component_obj.trial_component_name,
                              artifact_bucket=bucket, artifact_prefix=prefix,
                              sagemaker_boto_client=sagemaker_boto_client) as tracker_obj:
        tracker_obj.log_artifact(file_path, name=artifact_name)

    loaded = trial_component.TrialComponent.load(trial_component_name=trial_component_obj.trial_component_name,
                                                 sagemaker_boto_client=sagemaker_boto_client)
    assert 'text/plain' == loaded.output_artifacts[artifact_name].media_type
    assert prefix in loaded.output_artifacts[artifact_name].value
Example #15
0
def test_save(experiment_obj):
    description = name()
    experiment_obj.description = description
    experiment_obj.save()