Zephyrnet-Logo

Amazon SageMaker Automatic Model Tuning unterstützt jetzt SageMaker-Trainingsinstanz-Fallbacks

Datum:

Heute Amazon Sage Maker kündigte die Unterstützung von Fallbacks für SageMaker-Trainingsinstanzen an Automatische Modelloptimierung von Amazon SageMaker (AMT) die es Benutzern ermöglichen, alternative Computerressourcenkonfigurationen anzugeben.

Die automatische Modelloptimierung von SageMaker findet die beste Version eines Modells, indem viele Trainingsjobs auf Ihrem Datensatz ausgeführt werden Bereiche von Hyperparametern, die Sie für Ihren Algorithmus angeben. Dann wählt es die Hyperparameterwerte aus, die zu einem Modell führen, das gemessen an a am besten abschneidet Metrisch die du wählst.

Bisher hatten Benutzer nur die Möglichkeit, eine einzelne Instanzkonfiguration anzugeben. Dies kann zu Problemen führen, wenn der angegebene Instanztyp aufgrund hoher Auslastung nicht verfügbar ist. In der Vergangenheit schlugen Ihre Trainingsjobs mit einem InsufficientCapacityError (ICE) fehl. AMT verwendete in vielen Fällen intelligente Wiederholungsversuche, um diese Fehler zu vermeiden, blieb jedoch angesichts anhaltend niedriger Kapazität machtlos.

Diese neue Funktion bedeutet, dass Sie eine Liste von Instanzkonfigurationen in der bevorzugten Reihenfolge angeben können, sodass Ihr AMT-Job bei geringer Kapazität automatisch auf die nächste Instanz in der Liste zurückgreift.

In den folgenden Abschnitten gehen wir diese allgemeinen Schritte zur Überwindung eines ICE durch:

  1. Definieren Sie die HyperParameter-Tuning-Job-Konfiguration
  2. Definieren Sie die Trainingsjobparameter
  3. Erstellen Sie den Hyperparameter-Tuning-Job
  4. Ausbildungsberuf beschreiben

Definieren Sie die HyperParameter-Tuning-Job-Konfiguration

Das HyperParameterTuningJobConfig Objekt beschreibt den Tuning-Job, einschließlich der Suchstrategie, der objektiven Metrik, die zum Bewerten von Trainingsjobs verwendet wird, der Bereiche der zu durchsuchenden Parameter und der Ressourcengrenzen für den Tuning-Job. Dieser Aspekt wurde mit dem heutigen Feature-Release nicht geändert. Trotzdem gehen wir es durch, um ein vollständiges Beispiel zu geben.

Das ResourceLimits Objekt gibt die maximale Anzahl von Trainingsjobs und parallelen Trainingsjobs für diesen Tuning-Job an. In diesem Beispiel machen wir a zufällige Suche Strategie und Angabe von maximal 10 Jobs (MaxNumberOfTrainingJobs) und 5 gleichzeitige Jobs (MaxParallelTrainingJobs) auf einmal.

Das ParameterRanges -Objekt gibt die Bereiche von Hyperparametern an, die dieser Optimierungsjob durchsucht. Wir geben den Namen sowie den Mindest- und Höchstwert des zu suchenden Hyperparameters an. In diesem Beispiel definieren wir die Minimal- und Maximalwerte für die Parameterbereiche Continuous und Integer sowie den Namen des Hyperparameters („eta“, „max_depth“).

AmtTuningJobConfig={
            "Strategy": "Random",
            "ResourceLimits": {
              "MaxNumberOfTrainingJobs": 10,
              "MaxParallelTrainingJobs": 5
            },
            "HyperParameterTuningJobObjective": {
              "MetricName": "validation:rmse",
              "Type": "Minimize"
            },
            "ParameterRanges": {
              "CategoricalParameterRanges": [],
              "ContinuousParameterRanges": [
                {
                    "MaxValue": "1",
                    "MinValue": "0",
                    "Name": "eta"
                }
              ],
              "IntegerParameterRanges": [
                {
                  "MaxValue": "6",
                  "MinValue": "2",
                  "Name": "max_depth"
                }
              ]
            }
          }

Definieren Sie die Trainingsjobparameter

In der Definition des Trainingsjobs definieren wir die Eingaben, die zum Ausführen eines Trainingsjobs mit dem von uns angegebenen Algorithmus erforderlich sind. Nach Abschluss des Trainings speichert SageMaker die resultierenden Modellartefakte in einer Einfacher Amazon-Speicherdienst (Amazon S3) Standort, den Sie angeben.

Zuvor haben wir den Instance-Typ, die Anzahl und die Volume-Größe unter angegeben ResourceConfig Parameter. Wenn die Instanz unter diesem Parameter nicht verfügbar war, wurde ein Insufficient Capacity Error (ICE) ausgegeben.

Um dies zu vermeiden, haben wir jetzt die HyperParameterTuningResourceConfig Parameter unter der TrainingJobDefinition, wo wir eine Liste von Instanzen angeben, auf die zurückgegriffen werden soll. Das Format dieser Instanzen ist das gleiche wie in der ResourceConfig. Der Job durchläuft die Liste von oben nach unten, um eine verfügbare Instanzkonfiguration zu finden. Wenn eine Instanz nicht verfügbar ist, wird anstelle eines Insufficient Capacity Error (ICE) die nächste Instanz in der Liste gewählt, wodurch der ICE überwunden wird.

TrainingJobDefinition={
            "HyperParameterTuningResourceConfig": {
      		"InstanceConfigs": [
            		{
                		"InstanceType": "ml.m4.xlarge",
                		"InstanceCount": 1,
                		"VolumeSizeInGB": 5
            		},
            		{
                		"InstanceType": "ml.m5.4xlarge",
                		"InstanceCount": 1,
                		"VolumeSizeInGB": 5
            		}
        		 ]
    		  },
            "AlgorithmSpecification": {
              "TrainingImage": "433757028032.dkr.ecr.us-west-2.amazonaws.com/xgboost:latest",
              "TrainingInputMode": "File"
            },
            "InputDataConfig": [
              {
                "ChannelName": "train",
                "CompressionType": "None",
                "ContentType": "json",
                "DataSource": {
                  "S3DataSource": {
                    "S3DataDistributionType": "FullyReplicated",
                    "S3DataType": "S3Prefix",
                    "S3Uri": "s3://<bucket>/test/"
                  }
                },
                "RecordWrapperType": "None"
              }
            ],
            "OutputDataConfig": {
              "S3OutputPath": "s3://<bucket>/output/"
            },
            "RoleArn": "arn:aws:iam::340308762637:role/service-role/AmazonSageMaker-ExecutionRole-20201117T142856",
            "StoppingCondition": {
              "MaxRuntimeInSeconds": 259200
            },
            "StaticHyperParameters": {
              "training_script_loc": "q2bn-sagemaker-test_6"
            },
          }

Führen Sie einen Hyperparameter-Tuning-Job aus

In diesem Schritt erstellen und führen wir einen Hyperparameter-Tuning-Job mit der oben definierten Hyperparameter-Tuning-Ressourcenkonfiguration aus.

Wir initialisieren einen SageMaker-Client und erstellen den Job, indem wir die Tuning-Konfiguration, die Definition des Trainingsjobs und einen Jobnamen angeben.

import boto3
sm = boto3.client('sagemaker')     
                    
sm.create_hyper_parameter_tuning_job(
    HyperParameterTuningJobName="my-job-name",
    HyperParameterTuningJobConfig=AmtTuningJobConfig,
    TrainingJobDefinition=TrainingJobDefinition) 

Das Ausführen eines AMT-Jobs mit Unterstützung von SageMaker-Trainingsinstanz-Fallbacks versetzt den Benutzer in die Lage, unzureichende Kapazitäten selbst zu überwinden, wodurch die Wahrscheinlichkeit eines Jobfehlers verringert wird.

Ausbildungsberufe beschreiben

Die folgende Funktion listet alle während des Experiments verwendeten Instanztypen auf und kann verwendet werden, um zu überprüfen, ob eine SageMaker-Trainingsinstanz während der Ressourcenzuweisung automatisch auf die nächste Instanz in der Liste zurückgefallen ist.

def list_instances(name):
    job_list = []
    instances = []
    def _get_training_jobs(name, next=None):
        if next:
            list = sm.list_training_jobs_for_hyper_parameter_tuning_job(
            HyperParameterTuningJobName=name, NextToken=next)
        else:
            list = sm.list_training_jobs_for_hyper_parameter_tuning_job(
            HyperParameterTuningJobName=name)
        for jobs in list['TrainingJobSummaries']:
            job_list.append(jobs['TrainingJobName'])
        next = list.get('NextToken', None)
        if next:
            _get_training_jobs(name, next=next)
            pass
        else:
            pass
    _get_training_jobs(name)


    for job_name in job_list:
        ec2 = sm.describe_training_job(
        TrainingJobName=job_name
        )
        instances.append(ec2['ResourceConfig'])
    return instances

list_instances("my-job-name")  

Die Ausgabe der obigen Funktion zeigt alle Instanzen an, die der AMT-Job verwendet, um das Experiment auszuführen.

Zusammenfassung

In diesem Beitrag haben wir gezeigt, wie Sie jetzt einen Pool von Instanzen definieren können, auf die Ihr AMT-Experiment im Fall von zurückgreifen kann InsufficientCapacityError. Wir haben gesehen, wie man eine Hyperparameter-Tuning-Job-Konfiguration definiert und die maximale Anzahl von Trainingsjobs und maximalen parallelen Jobs angibt. Schließlich sahen wir, wie man das überwindet InsufficientCapacityError mit dem HyperParameterTuningResourceConfig Parameter, der unter der Trainingsjobdefinition angegeben werden kann.

Um mehr über AMT zu erfahren, besuchen Sie Automatische Modelloptimierung von Amazon SageMaker.


Über die Autoren

Doug Mbaya ist Senior Partner Solution Architect mit Fokus auf Daten und Analytik. Doug arbeitet eng mit AWS-Partnern zusammen und hilft ihnen bei der Integration von Daten- und Analyselösungen in die Cloud.

Kruthi Jayasimha Rao ist Partner Solutions Architect im Scale-PSA-Team. Kruthi führt technische Validierungen für Partner durch, um ihnen Fortschritte im Partnerpfad zu ermöglichen.

Bernhard Jollans ist ein Software Development Engineer für Amazon SageMaker Automatic Model Tuning.

spot_img

Neueste Intelligenz

spot_img