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)
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()
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
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
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()
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)
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
def test_save(experiment_obj): description = name() experiment_obj.description = description experiment_obj.save()