Formats de données courants pour l'entraînement - Amazon SageMaker

Formats de données courants pour l'entraînement

Pour préparer l'entraînement, vous pouvez prétraiter vos données à l'aide de différents services AWS, y compris AWS Glue, Amazon EMR, Amazon Redshift, Amazon Relational Database Service et Amazon Athena. Après le prétraitement, publiez les données dans un compartiment Amazon S3. Pour l'entraînement, les données doivent passer par une série de conversions et de transformations, en particulier :

  • Sérialisation des données d'entraînement (géré par vous)

  • Désérialisation des données d'entraînement (géré par l'algorithme)

  • Sérialisation du modèle d'entraînement (géré par l'algorithme)

  • Désérialisation du modèle entraîné (facultatif, géré par vous)

Lorsque vous utilisez Amazon SageMaker dans la partie entraînement de l'algorithme, veillez à télécharger toutes les données en même temps. Si des données supplémentaires sont ajoutées à cet emplacement, un nouvel appel d'entraînement doit être effectué pour construire un nouveau modèle.

Types de contenu pris en charge par les algorithmes intégrés

Le tableau suivant répertorie quelques-unes des valeurs ContentType et les algorithmes qui les utilisent :

Types de contenu pour les algorithmes intégrés
ContentType Algorithm
application/x-image Algorithme Object Detection, Semantic Segmentation
application/x-recordio

Algorithme de détection d'objets

application/x-recordio-protobuf

Factorization Machines, K-Means, k-NN, Latent Dirichlet Allocation, Linear Learner, NTM, PCA, RCF, Sequence-to-Sequence

application/jsonlines

BlazingText, DeepAR

image/jpeg

Algorithme Object Detection, Semantic Segmentation

image/png

Algorithme Object Detection, Semantic Segmentation

text/csv

IP Insights, K-Means, k-NN, Latent Dirichlet Allocation, Linear Learner, NTM, PCA, RCF, XGBoost

text/libsvm

XGBoost

Pour obtenir un résumé des paramètres pris en charge par chaque algorithme, reportez-vous à la documentation de chaque algorithme ou à ce tableau.

Avec le mode Pipe

Dans le mode Pipe (Tube), votre tâche d'entraînement transmet des données directement à partir d'Amazon Simple Storage Service (Amazon S3). Le streaming peut offrir des temps de démarrage plus rapides pour les tâches d'entraînement et un meilleur débit. Ceci est en contraste avec le mode File (Fichier), dans lequel vos données d'Amazon S3 sont stockées sur les volumes d'instance d'entraînement. Le mode File utilise l'espace disque pour stocker vos artefacts de modèles finaux et votre jeu de données d'entraînement complet. En diffusant vos données directement depuis Amazon S3 en mode Pipe, vous réduisez la taille des volumes Amazon Elastic Block Store de vos instances d'entraînement. En mode Pipe, l'espace disque doit être suffisant pour stocker votre artefact de modèle final. Veuillez consulter AlgorithmSpecification pour obtenir plus de détails sur le mode d'entrée d'entraînement.

Avec le format CSV

De nombreux algorithmes Amazon SageMaker prennent en charge l'entraînement à l'aide de données au format CSV. Afin d'utiliser des données au format CSV pour l'entraînement, dans la spécification de canal de données d'entrée, spécifiez text/csv comme ContentType. Amazon SageMaker exige qu'un fichier CSV ne contienne pas d'enregistrement d'en-tête et que la variable cible se trouve dans la première colonne. Pour exécuter les algorithmes d'apprentissage non supervisés qui n'ont pas de cible, spécifiez le numéro des colonnes d'étiquette dans le type de contenu. Par exemple, dans ce cas 'content_type=text/csv;label_size=0'. Pour obtenir un exemple de bloc-notes utilisant le format CSV, consultez Breast Cancer Prediction. Pour de plus amples informations, veuillez consulter Now use Pipe mode with CSV datasets for faster training on Amazon SageMaker built-in algorithms.

Avec le format RecordIO

Au format recordIO protobuf, SageMaker convertit chaque observation dans le jeu de données en une représentation binaire sous la forme d'un ensemble de nombres à virgule flottante de 4 octets, puis les charge dans le champ des valeurs protobuf. Si vous utilisez Python pour préparer les données, nous vous recommandons vivement d'utiliser ces transformations existantes. Si, toutefois, vous utilisez un autre langage, le fichier de définition protobuf ci-dessous fournit le schéma que vous utilisez pour convertir vos données au format protobuf SageMaker.

Note

Pour obtenir un exemple illustrant la façon de convertir le tableau numPy couramment utilisé au format recordIO protobuf, consultez l'article relatif à présentation des machines de factorisation avec MNIST.

syntax = "proto2"; package aialgs.data; option java_package = "com.amazonaws.aialgorithms.proto"; option java_outer_classname = "RecordProtos"; // A sparse or dense rank-R tensor that stores data as doubles (float64). message Float32Tensor { // Each value in the vector. If keys is empty, this is treated as a // dense vector. repeated float values = 1 [packed = true]; // If key is not empty, the vector is treated as sparse, with // each key specifying the location of the value in the sparse vector. repeated uint64 keys = 2 [packed = true]; // An optional shape that allows the vector to represent a matrix. // For example, if shape = [ 10, 20 ], floor(keys[i] / 20) gives the row, // and keys[i] % 20 gives the column. // This also supports n-dimensonal tensors. // Note: If the tensor is sparse, you must specify this value. repeated uint64 shape = 3 [packed = true]; } // A sparse or dense rank-R tensor that stores data as doubles (float64). message Float64Tensor { // Each value in the vector. If keys is empty, this is treated as a // dense vector. repeated double values = 1 [packed = true]; // If this is not empty, the vector is treated as sparse, with // each key specifying the location of the value in the sparse vector. repeated uint64 keys = 2 [packed = true]; // An optional shape that allows the vector to represent a matrix. // For example, if shape = [ 10, 20 ], floor(keys[i] / 10) gives the row, // and keys[i] % 20 gives the column. // This also supports n-dimensonal tensors. // Note: If the tensor is sparse, you must specify this value. repeated uint64 shape = 3 [packed = true]; } // A sparse or dense rank-R tensor that stores data as 32-bit ints (int32). message Int32Tensor { // Each value in the vector. If keys is empty, this is treated as a // dense vector. repeated int32 values = 1 [packed = true]; // If this is not empty, the vector is treated as sparse with // each key specifying the location of the value in the sparse vector. repeated uint64 keys = 2 [packed = true]; // An optional shape that allows the vector to represent a matrix. // For Exmple, if shape = [ 10, 20 ], floor(keys[i] / 10) gives the row, // and keys[i] % 20 gives the column. // This also supports n-dimensonal tensors. // Note: If the tensor is sparse, you must specify this value. repeated uint64 shape = 3 [packed = true]; } // Support for storing binary data for parsing in other ways (such as JPEG/etc). // This is an example of another type of value and may not immediately be supported. message Bytes { repeated bytes value = 1; // If the content type of the data is known, stores it. // This allows for the possibility of using decoders for common formats // in the future. optional string content_type = 2; } message Value { oneof value { // The numbering assumes the possible use of: // - float16, float128 // - int8, int16, int32 Float32Tensor float32_tensor = 2; Float64Tensor float64_tensor = 3; Int32Tensor int32_tensor = 7; Bytes bytes = 9; } } message Record { // Map from the name of the feature to the value. // // For vectors and libsvm-like datasets, // a single feature with the name `values` // should be specified. map<string, Value> features = 1; // An optional set of labels for this record. // Similar to the features field above, the key used for // generic scalar / vector labels should be 'values'. map<string, Value> label = 2; // A unique identifier for this record in the dataset. // // Whilst not necessary, this allows better // debugging where there are data issues. // // This is not used by the algorithm directly. optional string uid = 3; // Textual metadata describing the record. // // This may include JSON-serialized information // about the source of the record. // // This is not used by the algorithm directly. optional string metadata = 4; // An optional serialized JSON object that allows per-record // hyper-parameters/configuration/other information to be set. // // The meaning/interpretation of this field is defined by // the algorithm author and may not be supported. // // This is used to pass additional inference configuration // when batch inference is used (e.g. types of scores to return). optional string configuration = 5; }

Après avoir créé le tampon du protocole, stockez-le dans un emplacement Amazon S3 accessible par Amazon SageMaker et pouvant être transmis dans le cadre de InputDataConfig dans create_training_job.

Note

Pour tous les algorithmes Amazon SageMaker, l'élément ChannelName dans InputDataConfig doit être défini sur train. Certains algorithmes prennent également en charge des paramètres de validation ou de test input channels. Ils servent généralement à évaluer les performances du modèle en utilisant un ensemble de données d'exclusion. Les ensembles de données d'exclusion ne sont pas utilisés dans l'entraînement initial, mais ils peuvent être utilisés pour ajuster le modèle.

Désérialisation du modèle entraîné

Les modèles Amazon SageMaker sont stockés sous la forme de fichiers model.tar.gz dans le compartiment S3 spécifié dans le paramètre OutputDataConfig S3OutputPath de l'appel create_training_job. Vous pouvez spécifier la plupart de ces artefacts de modèle lors de la création d'un modèle d'hébergement. Vous pouvez également les ouvrir et les consulter dans l'instance de bloc-notes. Lorsque model.tar.gz est décompressé, il contient model_algo-1, qui est un objet sérialisé Apache MXNet. Par exemple, vous utilisez la formule suivante pour charger le modèle des k-moyennes (k-means) en mémoire et l'afficher :

import mxnet as mx print(mx.ndarray.load('model_algo-1'))