SageMaker Leitfaden zur Fehlerbehebung beim Python-SDK - Amazon SageMaker KI

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

SageMaker Leitfaden zur Fehlerbehebung beim Python-SDK

Sie können das SageMaker Python-SDK verwenden, um mit Amazon SageMaker AI in Ihren Python-Skripten oder Jupyter-Notebooks zu interagieren. Obwohl das SDK einen vereinfachten Arbeitsablauf bietet, können Sie auf verschiedene Ausnahmen oder Fehler stoßen. Dieser Leitfaden zur Fehlerbehebung soll Ihnen helfen, häufig auftretende Probleme zu verstehen und zu lösen, die bei der Arbeit mit dem SageMaker Python-SDK auftreten können. Es behandelt Szenarien im Zusammenhang mit der Erstellung von Schulungsaufträgen, der Verarbeitung von Jobs und Endpunkten sowie allgemeine Verfahren zur Behandlung von Ausnahmen. Wenn Sie die Anleitungen in den folgenden Abschnitten befolgen, können Sie häufig auftretende Probleme effektiv diagnostizieren und beheben.

Das SageMaker Python-SDK fungiert als Wrapper für die SageMaker API-Operationen auf niedriger Ebene. Die IAM-Rolle, die Sie für den Zugriff auf das SDK verwenden, muss auf die zugrunde liegenden Operationen zugreifen können. Das Hinzufügen der SageMaker AI Full Access Policy zu Ihrer IAM-Rolle ist die einfachste Methode, um sicherzustellen, dass Sie über die Berechtigungen zur Verwendung des SageMaker Python-SDK verfügen. Weitere Informationen zur SageMaker AI Full Access Policy finden Sie unter Amazon SageMaker AI Full Access.

Die Bereitstellung detaillierterer Berechtigungen ist zwar weniger praktisch, stellt jedoch einen sicheren Ansatz für die Verwendung des SDK dar. Jeder der folgenden Abschnitte enthält Informationen zu den erforderlichen Berechtigungen.

Erstellen eines Trainingsjobs

Wichtig

Wenn Sie die SageMaker AI-Vollzugriffsrichtlinie nicht zu Ihrer IAM-Rolle hinzufügen, muss sie über Berechtigungen zum Aufrufen der CreateTrainingJobDescribeTrainingJobAND-Operationen verfügen.

Außerdem sind Berechtigungen für Folgendes erforderlich:

  • Greifen Sie auf input/output Daten in S3 zu

  • EC2 Amazon-Instances ausführen

  • CloudWatch Log-Metriken

Wenn Ihr SageMaker Schulungsjob auf Ressourcen in einer Amazon Virtual Private Cloud (Amazon VPC) zugreifen muss, stellen Sie sicher, dass Sie bei der Erstellung des Verarbeitungsjobs die erforderlichen VPC-Einstellungen und Sicherheitsgruppen konfigurieren.

Wenn Sie einen Trainingsjob erstellen, kann es sein, dass Sie auf Ausnahmen stoßen. botocore.exceptions.ClientError ValueError

ValueError

ValueErrorAusnahmen treten auf, wenn es ein Problem mit den Werten oder Parametern gibt, die Sie an eine Funktion übergeben. In der folgenden Liste finden Sie Beispiele für ValueError Ausnahmen und deren Behebung.

  • ValueError: either image_uri or algorithm_arn is required. None was provided:

    • Wenn Sie die AlgorithmEstimator Funktion verwenden, geben Sie die analgorithm_arn.

    • Wenn Sie die Estimator Funktion verwenden, geben Sie die anestimator_arn.

  • ValueError: Unknown input channel: train is not supported by: scikit-decision-trees-15423055-57b73412d2e93e9239e4e16f83298b8f

    Dieser Fehler wird angezeigt, wenn Sie einen ungültigen Eingangskanal angeben. Ein Eingangskanal ist eine Datenquelle oder ein Parameter, den das Modell erwartet.

    Auf der Arten von Algorithmen Seite können Sie zum Modell navigieren, um Informationen zu den Eingangskanälen des Modells zu finden.

    Informationen zu den Eingangskanälen finden Sie auch im Abschnitt Verwendung auf der AWS Marketplace Seite des Algorithmus.

    Gehen Sie wie folgt vor, um Informationen zu den Eingangskanälen eines Algorithmus abzurufen.

    So rufen Sie Informationen zu den Eingangskanälen eines Algorithmus auf
    1. Navigieren Sie zur SageMaker AI-Konsole.

    2. Wählen Sie im linken Navigationsbereich die Option Training aus.

    3. Wählen Sie Algorithmen aus.

    4. Wählen Sie Algorithmus suchen aus.

    5. Suchen Sie Ihren Algorithmus in der resultierenden Liste.

    6. Wählen Sie die Registerkarte Verwendung aus.

    7. Navigieren Sie zur Überschrift Kanalspezifikation.

botocore.exceptions.ClientError

botocore.exceptions.ClientErrorAusnahmen treten auf, wenn ein zugrunde liegender AWS Dienst eine Ausnahme auslöst. Dies kann verschiedene Gründe haben, z. B. falsche Parameter, Berechtigungsprobleme oder Ressourcenbeschränkungen. In der folgenden Liste finden Sie Informationen zu botocore.exceptions.ClientError Ausnahmen und Informationen zu deren Behebung.

  • ResourceLimitExceeded— Ihr AWS Konto hat keinen Zugriff auf die EC2 Amazon-Instances, die für die Ausführung des Schulungsjobs erforderlich sind. Um Zugang zu erhalten, fordern Sie eine Erhöhung des Kontingents an. Informationen zur Kontingenterhöhung finden Sie unter Service Quotas. In der folgenden Liste finden Sie Informationen zu botocore.exceptions.ClientError Ausnahmen.

  • ValidationException— Validierungsausnahmen treten auf, wenn Sie den falschen EC2 Amazon-Instance-Typ für den Schulungsjob verwendet haben. Sie können auch auftreten, wenn die von Ihnen verwendete IAM-Rolle keine Berechtigungen für den Trainingsjob hat.

Aktualisieren eines Trainingsjobs

Wichtig

Wenn Sie die SageMaker AI Managed Policy nicht zu Ihrer IAM-Rolle hinzufügen, müssen Sie der Rolle Zugriff auf die folgenden Berechtigungen gewähren:

  • s3:GetObject – Stellt Berechtigungen zum Lesen der Modellartefakte aus Amazon-S3-Buckets bereit

  • s3:PutObject – Stellt, falls zutreffend, Berechtigungen zum Schreiben von Aktualisierungen der Modellartefakte bereit

  • iam:GetRole – Stellt Berechtigungen zum Abrufen von Informationen über die IAM-Rolle bereit, die für die Ausführung des Trainingsjobs erforderlich sind

  • sagemaker:UpdateTrainingJob— Stellt Berechtigungen zum Ändern der Trainingsjobs mithilfe der UpdateTrainingJobOperation bereit.

  • logs:PutLogEvents— Bietet Berechtigungen zum Schreiben von Protokollen in CloudWatch Amazon-Protokolle während des Aktualisierungsvorgangs.

Wenn Sie einen Trainingsjob aktualisieren, stoßen Sie möglicherweise auf ein botocore.exceptions.ParamValidationError oder einbotocore.exceptions.ClientError.

botocore.exceptions.ClientError

Der ClientError hat die folgende Meldung:

botocore.exceptions.ClientError: An error occurred (ValidationException) when calling the UpdateTrainingJob operation: Invalid UpdateTrainingJobRequest, the request cannot be empty

Wenn dieser Fehler auftritt, müssen Sie zusammen mit dem Namen des Trainingsjobs einen der folgenden Parameter angeben:

  • profiler_rule_configs(Liste) – Eine Liste von Profiler-Regelkonfigurationen. Standardmäßig gibt es keine Profiler-Regelkonfigurationen.

  • profiler_config(dict) — Die Konfiguration für SageMaker AI Profiler sammelt Metriken und sendet sie aus. Standardmäßig gibt es keine Profiler-Konfiguration.

  • resource_config(dict) – Die Konfiguration für die Trainingsjob-Ressourcen. Sie können den Keep-Alive-Zeitraum aktualisieren, wenn der Status „Warm Pool“ lautet. Available Andere Felder können nicht aktualisiert werden.

  • remote_debug_config(dict) – Konfiguration fürRemoteDebug. Das Wörterbuch kann EnableRemoteDebug (bool) enthalten.

botocore.exceptions.ParamValidationError

Das botocore.exceptions.ParamValidationError hat den folgenden Fehler:

botocore.exceptions.ParamValidationError: Parameter validation failed: Invalid type for parameter ProfilerRuleConfigurations, value: {'DisableProfiler': False}, type: <class 'dict'>, valid types: <class 'list'>, <class 'tuple'>

Diese Ausnahme kann auftreten, wenn der Parameter von der update_training_job Funktion nicht im erwarteten Format bereitgestellt wird. Sie erwartet beispielsweise, dass es sich bei dem profiler_rule_configs Parameter um eine Liste handelt. Wenn der Parameter stattdessen als Wörterbuch übergeben wird, wird der Fehler ausgelöst.

Erstellen eines Verarbeitungsauftrags

Wichtig

Wenn Sie die SageMaker AI Managed Policy nicht zu Ihrer IAM-Rolle hinzufügen, müssen Sie der Rolle Zugriff auf die folgenden Berechtigungen gewähren:

  • sagemaker:CreateProcessingJob – Stellt Berechtigungen zum Erstellen eines Processing-Jobs bereit

  • sagemaker:DescribeProcessingJob – Stellt Berechtigungen zum Abrufen von Informationen zu einem Bearbeitungsauftrag bereit

  • s3:GetObject – Stellt Berechtigungen zum Lesen der Modellartefakte aus Amazon-S3-Buckets bereit

  • s3:PutObject – Stellt, falls zutreffend, Berechtigungen zum Schreiben von Aktualisierungen der Modellartefakte bereit

  • logs:PutLogEvents— Bietet Berechtigungen zum Schreiben von Protokollen in CloudWatch Amazon-Protokolle während des Aktualisierungsvorgangs.

Wenn Ihr Verarbeitungsauftrag auf Ressourcen innerhalb einer Amazon Virtual Private Cloud zugreifen muss, müssen Sie dessen security_group_ids und subnets in der von Ihnen erstellten Schätzfunktion angeben. Ein Beispiel dafür, wie Sie auf Ressourcen innerhalb einer Amazon VPC zugreifen können, finden Sie unter Secure Training and Inference with VPC.

Wenn Sie einen Verarbeitungsauftrag erstellen, stoßen Sie möglicherweise auf einValueError, ein oder einUnexpectedStatusException. botocore.exceptions.ClientError

ValueError

Es folgt ein Beispiel für ValueError.

ValueError: code preprocess.py wasn't found. Please make sure that the file exists.

Der Pfad, den Sie angegeben haben, war nicht korrekt. Sie können entweder einen relativen Pfad oder einen absoluten Pfad zu Ihrer Skriptdatei angeben. Weitere Informationen zur Angabe von Pfaden zu Ihren Dateien finden Sie unter sagemaker.processing. RunArgs.

UnexpectedStatusException

Es folgt ein Beispiel für UnexpectedStatusException:

UnexpectedStatusException: Error for Processing job sagemaker-scikit-learn-2024-07-02-14-08-55-993: Failed. Reason: AlgorithmError: , exit code: 1

Der Traceback, der der Ausnahme beigefügt ist, kann Ihnen helfen, die Ursache zu identifizieren:

Traceback (most recent call last): File "/opt/ml/processing/input/code/preprocessing.py", line 51, in <module> df = pd.read_csv(input_data_path) . . . File "pandas/_libs/parsers.pyx", line 689, in pandas._libs.parsers.TextReader._setup_parser_source FileNotFoundError: [Errno 2] File b'/opt/ml/processing/input/census-income.csv' does not exist: b'/opt/ml/processing/input/census-income.csv'

Der Fehler "FileNotFoundError: [Errno 2] File b'/opt/ml/processing/input/census-income.csv' does not exist" weist darauf hin, dass die Eingabedatei census-income.csv nicht im angegebenen Pfad /opt/ml/processing/input/ gefunden wurde. Stellen Sie sicher, dass die Eingabedaten korrekt bereitgestellt wurden und dass das Vorverarbeitungsskript die Daten in den erwarteten Pfad kopiert.

botocore.exceptions.ClientError

Es folgt ein Beispiel für botocore.exceptions.ClientError.

botocore.exceptions.ClientError: An error occurred (ValidationException) when calling the CreateProcessingJob operation: RoleArn: Cross-account pass role is not allowed.

Der "Cross-account pass role is not allowed in create processing job" Fehler tritt auf, wenn Sie versuchen, einen SageMaker Verarbeitungsauftrag mit einer IAM-Rolle von einem anderen AWS Konto aus zu erstellen. Diese Sicherheitsfunktion stellt sicher, dass Rollen und Berechtigungen in jedem Konto verwaltet werden. Beheben Sie das Problem wie folgt:

  1. Vergewissern Sie sich, dass sich die IAM-Rolle im selben Konto wie der Processing-Job befindet. Kontoübergreifende Rollen erfordern eine ausdrückliche Genehmigung

  2. Wenn Sie eine Rolle von einem anderen Konto aus verwenden, aktualisieren Sie dessen Vertrauensrichtlinie, damit das Konto, das den Verarbeitungsauftrag erstellt, die Rolle übernehmen kann.

  3. Stellen Sie sicher, dass die Rolle über die erforderlichen Berechtigungen für die Verarbeitung von Aufträgen verfügt, z. B. sagemaker:CreateProcessingJob oderiam:PassRole.

Erstellen eines Endpunkts

Wichtig

Wenn Sie die SageMaker AI Managed Policy nicht zu Ihrer IAM-Rolle hinzufügen, müssen Sie der Rolle Zugriff auf die folgenden Berechtigungen gewähren:

  • sagemaker:CreateModel – Bietet Berechtigungen zum Erstellen des Modells, das Sie auf dem Endpunkt bereitstellen

  • sagemaker:CreateEndpointConfig – Stellt Berechtigungen zum Erstellen einer Endpunktkonfiguration bereit, die das Verhalten des Endpunkts definiert, z. B. den Instance-Typ und die Anzahl der Instances

  • sagemaker:CreateEndpoint – Stellt Berechtigungen zum Erstellen der Endpunktkonfiguration mithilfe des von Ihnen angegebenen Endpunkts bereit

Darüber hinaus benötigen Sie Berechtigungen, um die Modelle, Endpunkte und Endpunktkonfigurationen zu beschreiben und aufzulisten.

Wenn Sie einen Endpunkt erstellen, stoßen Sie möglicherweise auf ein UnexpectedStatusException oder einbotocore.exceptions.ClientError.

Es folgt ein Beispiel für UnexpectedStatusException:

UnexpectedStatusException: Error hosting endpoint gpt2-large-2024-07-03-15-28-20-448: Failed. Reason: The primary container for production variant AllTraffic did not pass the ping health check. Please check CloudWatch logs for this endpoint.. Try changing the instance type or reference the troubleshooting page https://docs.aws.amazon.com/sagemaker/latest/dg/async-inference-troubleshooting.html

Die Fehlermeldung fordert Sie auf, die CloudWatch Amazon-Protokolle zu überprüfen. Gehen Sie wie folgt vor, um die Protokolle zu überprüfen.

Um die CloudWatch Protokolle zu überprüfen
  1. Navigieren Sie zur Amazon SageMaker AI-Konsole.

  2. Wählen Sie im linken Navigationsbereich die Option Endpunkte aus.

  3. Wählen Sie den Endpunkt aus, der ausgefallen ist.

  4. Wählen Sie auf der Seite mit den Endpunktdetails die Option Anmeldungen anzeigen aus CloudWatch.

Nachdem Sie die Protokolle gefunden haben, suchen Sie nach dem spezifischen Problem. Im Folgenden finden Sie ein Beispiel für ein CloudWatch Protokoll:

NotImplementedError: gptq quantization is not supported for AutoModel, you can try to quantize it with text-generation-server quantize ORIGINAL_MODEL_ID NEW_MODEL_ID

Weitere Informationen zum Lösen des botocore.exceptions.ClientError finden Sie unter Leitlinien zur Behandlung von Ausnahmen.

Aktualisieren eines Endpunkts

Wichtig

Wenn Sie die SageMaker AI Managed Policy nicht zu Ihrer IAM-Rolle hinzufügen, müssen Sie der Rolle Zugriff auf die folgenden Berechtigungen gewähren:

  • sagemaker:UpdateEndpoint – gewährt Berechtigungen zum Aktualisieren eines vorhandenen Endpunkts, beispielsweise zum Ändern des Instance-Typs oder der Anzahl des Endpunkts.

  • sagemaker:UpdateEndpointWeightsAndCapacities – Stellt Berechtigungen zum Erstellen einer Endpunktkonfiguration bereit, die das Verhalten des Endpunkts definiert, z. B. den Instance-Typ und die Anzahl der Instances

  • sagemaker:DescribeEndpoint – Stellt Berechtigungen zur Beschreibung der aktuellen Konfiguration des Endpunkts bereit, was häufig vor dem Update erforderlich ist

Darüber hinaus benötigen Sie möglicherweise Berechtigungen, um die Endpunkte und Endpunktkonfigurationen zu beschreiben und aufzulisten.

Sie können ValueError beispielsweise auf Folgendes stoßen:

ValueError: Endpoint with name 'abc' does not exist; please use an existing endpoint name

Der Fehler weist darauf hin, dass der angegebene Endpunktname mit keinem vorhandenen Endpunkt in Ihrem AWS Konto übereinstimmt. Gehen Sie wie folgt vor, um den Fehler zu beheben:

Um einen Wertfehler zu beheben
  1. Verwenden Sie den folgenden Code, um alle Ihre Endpunkte aufzulisten:

    import sagemaker sagemaker_session = sagemaker.Session() # List all endpoints endpoints = sagemaker_session.sagemaker_client.list_endpoints() print(endpoints)
  2. Stellen Sie sicher, dass der Endpunkt, den Sie für die update_endpoint Funktion angegeben haben, in der Liste aufgeführt ist.

  3. Stellen Sie sicher, dass Sie in der richtigen AWS Region arbeiten. SageMaker KI-Endpunkte sind regionsspezifisch.

  4. Stellen Sie sicher, dass die von Ihnen verwendete IAM-Rolle über Berechtigungen zum Auflisten, Beschreiben oder Aktualisieren der Endgeräte verfügt.

Leitlinien zur Behandlung von Ausnahmen

Wenn Sie keine Informationen zur Behebung Ihres spezifischen Problems finden, können Ihnen die folgenden Codebeispiele als Inspiration für den Umgang mit Ausnahmen dienen.

Das Folgende ist ein allgemeines Beispiel, mit dem Sie die meisten Ausnahmen catch können.

import sagemaker from botocore.exceptions import ParamValidationError, ClientError try: sagemaker.some_api_call(SomeParam='some_param') except ClientError as error: # Put your error handling logic here raise error except ParamValidationError as error: raise ValueError('The parameters you provided are incorrect: {}'.format(error)) except ValueError as error: # Catch generic ValueError exceptions

Es gibt zwei Hauptkategorien von Fehlern:

  • Spezifische Fehler für das SageMaker Python-SDK

  • Spezifische Fehler für den zugrunde liegenden AWS Dienst

Fehler, die für den zugrunde liegenden AWS Dienst spezifisch sind, sind immer botocore.exceptions.ClientError Ausnahmen. Der botocore.exceptions.ClientError hat ein Error Objekt und ein ResponseMetadata Objekt. Im Folgenden wird die Vorlage für einen Client-Fehler dargestellt:

{ 'Error': { 'Code': 'SomeServiceException', 'Message': 'Details/context around the exception or error' }, 'ResponseMetadata': { 'RequestId': '1234567890ABCDEF', 'HostId': 'host ID data will appear here as a hash', 'HTTPStatusCode': 400, 'HTTPHeaders': {'header metadata key/values will appear here'}, 'RetryAttempts': 0 } }

Im Folgenden finden Sie ein Beispiel für die spezifische Fehlerbehandlung, die Sie mit dem durchführen könnenbotocore.exceptions.ClientError:

try: sagemaker.some_api_call(SomeParam='some_param') except botocore.exceptions.ClientError as err: if err.response['Error']['Code'] == 'InternalError': # Generic error # We grab the message, request ID, and HTTP code to give to customer support print('Error Message: {}'.format(err.response['Error']['Message'])) print('Request ID: {}'.format(err.response['ResponseMetadata']['RequestId'])) print('Http code: {}'.format(err.response['ResponseMetadata']['HTTPStatusCode'])) raise err else if err.response['Error']['Code'] == 'ValidationException': raise ValueError(err.response['Error']['Message'])

Weitere Informationen darüber, wie Sie mit ClientError Ausnahmen umgehen können, finden Sie unter Fehlerantworten analysieren und Ausnahmen von AWS-Services abfangen.