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, Verarbeitungsaufträgen 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, aber ein sicherer Ansatz für die Verwendung des SDK. Jeder der folgenden Abschnitte enthält Informationen zu den erforderlichen Berechtigungen.

Einen Ausbildungsjob erstellen

Wichtig

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

Außerdem sind Berechtigungen für Folgendes erforderlich:

  • Greifen Sie in S3 auf Eingabe-/Ausgabedaten zu

  • EC2 Amazon-Instances ausführen

  • CloudWatch Metriken protokollieren

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, stoßen Sie möglicherweise auf Ausnahmen botocore.exceptions.ClientError oder ValueError Ausnahmen.

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 über die Eingangskanäle eines Algorithmus zu erhalten.

    Um Informationen über die Eingangskanäle eines Algorithmus zu erhalten
    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 Hintergrundinformationen zu botocore.exceptions.ClientError Ausnahmen und Informationen, wie Sie sie beheben können.

  • ResourceLimitExceeded— Ihr AWS Konto hat keinen Zugriff auf die EC2 Amazon-Instances, die für die Ausführung des Schulungsjobs erforderlich sind. Um Zugriff zu erhalten, fordern Sie eine Erhöhung des Kontingents an. Informationen zu Kontingenterhöhungen 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 Schulungsjob hat.

Einen Schulungsjob aktualisieren

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— Bietet Berechtigungen zum Lesen der Modellartefakte aus Amazon S3 S3-Buckets

  • 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 des UpdateTrainingJobVorgangs 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 einen botocore.exceptions.ParamValidationError oder einenbotocore.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, löst er den Fehler aus.

Einen Verarbeitungsjob erstellen

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 Verarbeitungsauftrags bereit

  • sagemaker:DescribeProcessingJob— Stellt Berechtigungen zum Abrufen von Informationen über einen Verarbeitungsjob bereit

  • s3:GetObject— Bietet Berechtigungen zum Lesen der Modellartefakte aus Amazon S3 S3-Buckets

  • 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 dem von Ihnen erstellten Kalkulator 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

Im Folgenden finden Sie ein Beispiel für einenValueError:

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 zum Angeben von Pfaden zu Ihren Dateien finden Sie unter sagemaker.processing. RunArgs.

UnexpectedStatusException

Das Folgende ist ein Beispiel für einUnexpectedStatusException:

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

Im Folgenden finden Sie 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. Gehen Sie wie folgt vor, um das Problem zu beheben:

  1. Stellen Sie sicher, dass sich die IAM-Rolle in demselben Konto befindet wie der Verarbeitungsauftrag. Für kontoübergreifende Rollen ist eine ausdrückliche Genehmigung erforderlich

  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 Instanztyp und die Anzahl der Instanzen

  • 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.

Im Folgenden finden Sie ein Beispiel für einenUnexpectedStatusException:

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

In der Fehlermeldung werden Sie aufgefordert, 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 in der linken Navigationsleiste Endpoints 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

Hinweise zur Lösung von finden Sie botocore.exceptions.ClientError unterHinweise zur Behandlung von Ausnahmen.

Einen Endpunkt aktualisieren

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— Bietet Berechtigungen zum Aktualisieren eines vorhandenen Endpunkts, z. B. zum Ändern des Instanztyps oder der Anzahl der Instanzen des Endpunkts

  • sagemaker:UpdateEndpointWeightsAndCapacities— Stellt Berechtigungen zum Erstellen einer Endpunktkonfiguration bereit, die das Verhalten des Endpunkts definiert, z. B. den Instanztyp und die Anzahl der Instanzen

  • 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 z. ValueError B. 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 Endgeräte 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 Endpunkte verfügt.

Hinweise 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 zur Behandlung von ClientError Ausnahmen finden Sie unter Fehlerantworten analysieren und Ausnahmen abfangen von AWS-Services.