paint-brush
Avant que l'IA ne prédise votre prochain ami, elle doit d'abord faire cecipar@andrei9735
458 lectures
458 lectures

Avant que l'IA ne prédise votre prochain ami, elle doit d'abord faire ceci

par Andrei7m2025/02/11
Read on Terminal Reader

Trop long; Pour lire

Dans cet article, nous continuerons à travailler sur la prédiction de liens avec l'ensemble de données Twitch.
featured image - Avant que l'IA ne prédise votre prochain ami, elle doit d'abord faire ceci
Andrei HackerNoon profile picture

Dans cet article, nous allons continuer à travailler sur la prédiction de liens avec l'ensemble de données Twitch : nous allons exporter les données graphiques du cluster Neptune DB vers un bucket S3 à l'aide de l'utilitaire neptune-export fourni par AWS. Nous choisirons le profil « neptune_ml » lorsque nous créerons la tâche d'exportation de données et l'utilitaire créera le fichier « training-data-configuration.json » que nous utiliserons plus tard dans le pipeline. Les données exportées seront prêtes pour le codage des fonctionnalités et le traitement des données, qui constitue l'étape suivante requise pour la prédiction de liens.


Lire la première partie ici .

DONNÉES GRAPHIQUES DANS NEPTUNE DB

Nous commençons avec les données graphiques que nous avons dans Neptune DB après avoir téléchargé les listes de sommets et d’arêtes à l’aide de l’API Neptune Bulk Loader (comme décrit dans la partie 1 de ce guide).


Les sommets représentent les utilisateurs. Tous les sommets contiennent le même ensemble de propriétés, et un seul sommet ressemble à ceci :

 {<T.id: 1>: '153', <T.label: 4>: 'user', 'days': 1629, 'mature': True, 'views': 3615, 'partner': False}


Toutes les arêtes ont la même étiquette (« suit »), chaque arête relie 2 utilisateurs. Une arête unique ressemble à ceci :

 {<T.id: 1>: '0', <T.label: 4>: 'follows', <Direction.IN: 'IN'>: {<T.id: 1>: '255', <T.label: 4>: 'user'}, <Direction.OUT: 'OUT'>: {<T.id: 1>: '6194', <T.label: 4>: 'user'}}


Notre objectif est d'exporter les données afin qu'elles puissent être utilisées dans la prochaine partie de notre pipeline de données : le prétraitement et l'encodage des fonctionnalités.

EXÉCUTION DE L'UTILITAIRE NEPTUNE-EXPORT SUR EC2

Nous allons utiliser l'utilitaire neptune-export fourni par AWS pour exporter les données de la base de données. Pour permettre à l'utilitaire d'accéder à la base de données, nous l'exécuterons sur une instance EC2 à l'intérieur du VPC où se trouve le cluster de base de données Neptune. L'utilitaire récupère les données de la base de données, les enregistre dans le stockage local (un volume EBS), puis télécharge les données exportées vers S3.


Bien qu'AWS fournisse un modèle Cloudformation qui déploie une API privée dans votre VPC pour permettre le démarrage du processus d'exportation avec une requête HTTP, nous ne nous concentrerons pas sur ce point cette fois-ci. Comme notre objectif est de démontrer le fonctionnement du pipeline de données (et non de configurer une API), nous utiliserons simplement la console de l'instance EC2 pour interagir avec l'utilitaire neptune-export. À propos, ces commandes de console peuvent être automatisées avec AWS Systems Manager Run Command et Step Functions.


Créons l'instance EC2 sur laquelle nous allons exécuter neptune-export. Pour AMI, nous choisissons Ubuntu 24.04 LTS. Nous devons nous assurer que le cluster Neptune est accessible depuis l'instance EC2. Nous allons donc créer l'instance dans le même VPC où se trouve le cluster Neptune et configurer les groupes de sécurité pour autoriser le trafic réseau entre l'instance et le cluster. Nous devons également attacher un volume EBS de taille suffisante pour contenir les données exportées. Pour l'ensemble de données sur lequel nous travaillons, un volume de 8 Go est suffisant.


Pendant le démarrage de l'instance, nous devons créer un rôle IAM qui autorise l'accès en écriture au compartiment S3 de destination, ainsi que certaines actions RDS, comme indiqué dans la politique ci-dessous. Bien que la première déclaration de la politique soit obligatoire, la seconde n'est nécessaire que si vous exportez des données à partir d'un cluster cloné. L'exportation de données à partir de clusters clonés sera abordée plus loin dans cet article.

 { "Version": "2012-10-17", "Statement": [ { "Sid": "RequiredPart", "Effect": "Allow", "Action": [ "rds:ListTagsForResource", "rds:DescribeDBInstances", "rds:DescribeDBClusters" ], "Resource": "*" }, { "Sid": "OptionalPartOnlyRequiredForExportingFromClonedCluster", "Effect": "Allow", "Action": [ "rds:AddTagsToResource", "rds:DescribeDBClusters", "rds:DescribeDBInstances", "rds:ListTagsForResource", "rds:DescribeDBClusterParameters", "rds:DescribeDBParameters", "rds:ModifyDBParameterGroup", "rds:ModifyDBClusterParameterGroup", "rds:RestoreDBClusterToPointInTime", "rds:DeleteDBInstance", "rds:DeleteDBClusterParameterGroup", "rds:DeleteDBParameterGroup", "rds:DeleteDBCluster", "rds:CreateDBInstance", "rds:CreateDBClusterParameterGroup", "rds:CreateDBParameterGroup" ], "Resource": "*" } ] }

Vous pouvez autoriser l'accès uniquement au cluster cible (au lieu de tous les clusters) en modifiant le champ « Ressource ».


Le rôle doit également avoir une politique de confiance qui permet à EC2 d'assumer le rôle :

 { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

Une fois l’instance EC2 et le rôle prêts, nous attacherons le rôle à l’instance.


Ensuite, nous devons installer l'utilitaire neptune-export sur l'instance. Pour ce faire, nous allons nous connecter à l'instance et utiliser ces commandes pour installer JDK 8 et télécharger l'utilitaire :

 sudo apt update -y sudo apt install -y openjdk-8-jdk curl -O https://s3.amazonaws.com/aws-neptune-customer-samples/neptune-export/bin/neptune-export.jar

Maintenant que nous avons préparé l'instance EC2, le compartiment S3 de destination et attaché le rôle IAM qui permet l'accès en écriture au compartiment S3 de destination à l'instance, nous pouvons commencer à exporter des données. Nous utiliserons cette commande pour lancer le processus, en fournissant les paramètres requis sous forme d'objet JSON :

 java -jar /home/ubuntu/neptune-export.jar nesvc \ --root-path /home/ubuntu/neptune-export \ --json '{ "command": "export-pg", "outputS3Path" : "s3://YOUR_TARGET_S3_BUCKET/neptune-export", "params": { "endpoint" : "YOUR_CLUSTER_ENDPOINT", "profile": "neptune_ml" } }'

Nous n'avons utilisé ici que les paramètres obligatoires, mais vous pouvez facilement étendre la configuration. Vous pouvez choisir la partie du graphique que vous exportez à l'aide du paramètre « filter » : vous pouvez sélectionner les nœuds, les arêtes et leurs propriétés.


Si vous exportez des données à partir d'une base de données active, vous pouvez utiliser les paramètres « cloneCluster » et « cloneClusterReplicaCount » pour que l'utilitaire neptue-export prenne un instantané de la base de données, crée un nouveau cluster Neptune à partir de cet instantané, déploie des réplicas en lecture et les utilise pour exporter les données. En procédant ainsi, vous pouvez vous assurer que la base de données active n'est pas affectée par la charge supplémentaire résultant de l'exportation des données.

La liste complète des paramètres peut être trouvée ici ( https://docs.aws.amazon.com/neptune/latest/userguide/export-parameters.html ).

VISUALISATION DES DONNÉES EXPORTÉES ET ÉTAPES SUIVANTES

Une fois le processus d'exportation terminé, neptune-export imprime certaines statistiques, notamment le nombre de sommets et d'arêtes :

 Source: Nodes: 7126 Edges: 70648 Export: Nodes: 7126 Edges: 70648 Properties: 28504 Details: Nodes: user: 7126 |_ days {propertyCount=7126, minCardinality=1, maxCardinality=1, recordCount=7126, dataTypeCounts=[Integer:7126]} |_ mature {propertyCount=7126, minCardinality=1, maxCardinality=1, recordCount=7126, dataTypeCounts=[Boolean:7126]} |_ views {propertyCount=7126, minCardinality=1, maxCardinality=1, recordCount=7126, dataTypeCounts=[Integer:7126]} |_ partner {propertyCount=7126, minCardinality=1, maxCardinality=1, recordCount=7126, dataTypeCounts=[Boolean:7126]} Edges: (user)-follows-(user): 70648

Ensuite, il télécharge les données exportées vers S3.


Regardons les fichiers créés dans le bucket S3 cible :

















Les répertoires « nodes » et « edges » contiennent des fichiers CSV avec les listes de nœuds et d'arêtes similaires à celles que nous avons utilisées dans la partie 1 lors du téléchargement des données. Pour les grands graphiques, il existe plusieurs fichiers, mais notre ensemble de données est petit et il n'y a qu'un seul fichier dans chaque répertoire. Il existe également le fichier training-data-configuration.json que nous modifierons et utiliserons à l'étape suivante de notre processus.


Si vous effectuez une exportation unique, vous pouvez désormais supprimer l'instance EC2 et le volume EBS en toute sécurité, car seuls les fichiers du compartiment S3 cible seront utilisés à l'étape suivante. Sinon, vous pouvez simplement arrêter l'instance EC2 pour éviter d'être facturé pour le temps d'inactivité (vous serez toujours facturé pour le stockage EBS, sauf si vous le supprimez).


À ce stade, nous avons les données graphiques dans S3 dans le format qui peut être utilisé dans l'étape suivante du processus, et nous sommes prêts à effectuer l'encodage des fonctionnalités et le traitement des données, qui seront abordés dans notre prochain article.