Comment puis-je dépanner la réponse InternalServerError sur Amazon SageMaker ?

Dernière mise à jour : 24/09/2020

Lorsque j'exécute une tâche d'entraînement ou que j'effectue une prédiction dans Amazon SageMaker, la demande échoue avec la réponse "HTTP Error 500: Internal Server Error" ou "InternalServerError: We encountered an internal error. Please try again." Comment puis-je trouver la cause racine de l'erreur ?

Solution

Tâches d'entraînement

Renouvelez la demande. Si TrainingJobStatus affiche toujours Failed, passez en revue FailureReason pour déterminer pourquoi il a échoué. Pour afficher la pile d'erreurs complète, consultez les Amazon CloudWatch logs, comme expliqué dans la section suivante.

Demandes d'inférence

Vérifiez les CloudWatch Logs associés au point de terminaison pour déterminer la cause racine :

1.    Ouvrez la console SageMaker.

2.    Choisissez Training jobs (Tâches d'entraînement) ou Endpoints (points de terminaison), en fonction de l'endroit où l'erreur s'est produite.

3.    Choisissez le nom de la tâche d'entraînement ou du point de terminaison.

4.    Dans la section Monitor (Moniteur) choisissez View logs (Afficher les journaux) pour ouvrir la console CloudWatch.

5.    Dans la console CloudWatch, choisissez le flux de journal pour la tâche d'entraînement ou le point de terminaison :

Pour les tâches d'entraînement, le flux de journaux se trouve dans le groupe de CloudWatch Logs /aws/Sagemaker/TrainingJobs. Le nom du flux commence par le nom de la tâche d'entraînement (par exemple, imageclassfi-job-2020-04-05/xxxxx).

Pour les points de terminaison, le flux de journal se trouve dans le groupe de CloudWatch Logs /aws/sagemaker/endpoints/endpoint_name. Le nom du flux commence par le nom de la variante (par exemple, AllTraffic/i-xxxxxxx).

6.    Passez en revue les journaux pour trouver le message d'erreur détaillé. Pour simplifier ce processus, vous pouvez ajouter du code de débogage dans la tâche d'entraînement ou votre script d'inférence. Par exemple, imprimez l'état de la tâche ou la valeur réelle de votre jeu de données. Ensuite, recherchez ce message imprimé dans les CloudWatch Logs.

Voici un exemple de code d'inférence pour le débogage d'un point de terminaison. Vous pouvez utiliser ce code pour confirmer que vous avez bien appelé la fonction predict (). Le code imprime également la variable de données qui vous montre la valeur réelle qui est passée au point de terminaison. Dans cet exemple, MYDEBUG est le mot-clé que vous souhaitez rechercher dans le flux de journal CloudWatch.

def predict():
    data = None
    print("MYDEBUG: Predict function called")
    # Convert from CSV to pandas
    if flask.request.content_type == 'text/csv':
        data = flask.request.data.decode('utf-8')
        s = StringIO.StringIO(data)
        data = pd.read_csv(s, header=None)
        ## To print the  actual data set
        print( "MYDEBUG: Printing data")
        print( data.head(10) )

7.    Utilisez les informations contenues dans les journaux pour déterminer la cause racine de l'erreur.


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?