Le chargement et le traitement efficaces des données jouent un rôle déterminant dans l'entraînement des modèles d'apprentissage automatique (ML) et d'apprentissage profond. Cette rubrique compare les performances de chargement des données depuis OssIterableDataset, OssMapDataset et les jeux de données créés avec ossfs et ImageFolder. Les tests s'appuient sur des endpoints internes ainsi que sur des endpoints accélérés fournis par l'accélérateur OSS. Exploitez les résultats présentés ici pour optimiser votre stratégie d'accès aux données.
Description du test
Scénarios de test : évaluer les performances de lecture des données à partir des jeux de données en utilisant des endpoints internes et des endpoints accélérés.
Données de test : les tests de performances portent sur environ 1 To de données, soit 10 000 000 d'images d'une taille moyenne de 100 Ko.
Environnement de test : une instance Elastic Compute Service (ECS) à usage général optimisée pour le réseau g7nex sert de base aux mesures. Elle dispose de 128 vCPU, de 512 Go de mémoire et d'une bande passante interne de 160 Gbit/s.
Jeux de données : OSS Connector for AI/ML permet de créer les jeux de données de type OssIterableDataset et OssMapDataset. Le jeu de données de type ossfs avec ImageFolder est quant à lui généré via ossfs.
Tests de performances
-
Paramètres de test
Paramètre
Valeur/Opération
Description
dataloader batch size
256
Chaque tâche par lot traite 256 échantillons.
dataloader workers
32
32 processus chargent les données en parallèle.
transform
trans = transforms.Compose([ transforms.Resize(256), transforms.CenterCrop(224), transforms.ToTensor(), transforms.Normalize(mean=[0 485, 0 456, 0 406], std=[0 229, 0 224, 0 225]) ]) def transform(object): img = Image.open(io.BytesIO(object.read())).convert('RGB') val = trans(img) return val, object.labelPrétraite les données.
-
Résultats des tests
Jeu de données créé avec
Type de jeu de données
Durée de chargement de 10 millions d'images via l'endpoint interne OSS (s)
Durée de chargement de 10 millions d'images via l'endpoint accéléré (s)
OSS Connector for AI/ML
OssIterableDataset
2182
2107
OssMapDataset
2493
2288
Ossfs avec ImageFolder
178571
39840
Tests de performances optimales
-
Paramètres de test
Paramètre
Valeur/Opération
Description
dataloader batch size
256
Chaque tâche par lot traite 256 échantillons.
dataloader workers
32
32 processus chargent les données en parallèle.
transform
def transform(object): data = object.read() return object.key, object.labelNe prétraite pas les données.
-
Résultats des tests
Jeu de données créé avec
Type de jeu de données
Durée de chargement de 10 millions d'images via l'endpoint interne OSS (s)
Durée de chargement de 10 millions d'images via l'endpoint accéléré (s)
OSS Connector for AI/ML
OssIterableDataset
100
81
OssMapDataset
176
127
Analyse des données de performances
Lors de la lecture des données, OssIterableDataset et OssMapDataset offrent des performances nettement supérieures à celles des jeux de données créés avec ossfs et ImageFolder. Ils se révèlent environ 80 fois plus rapides sans l'accélérateur OSS, et près de 18 fois plus rapides lorsque ce dernier est activé. Ces tests démontrent qu'OSS Connector for AI/ML accélère considérablement le traitement des données et améliore l'efficacité de l'entraînement des modèles.
La lecture des données depuis OssIterableDataset et OssMapDataset avec l'accélérateur OSS activé s'avère environ 1,4 fois plus rapide qu'avec l'accélérateur désactivé. Même sans ce dernier, OSS Connector for AI/ML gère des accès fortement concurrents tout en maintenant une bande passante élevée. Son association avec l'accélérateur OSS permet d'atteindre des niveaux de performances encore plus élevés.
Conclusion
Intégrez OSS Connector for AI/ML dans votre code Python afin de lire les objets OSS en flux continu. Ce connecteur augmente la vitesse de lecture des données et convient à la majorité des scénarios d'entraînement de modèles. Pour obtenir des performances de traitement encore supérieures, associez-le à l'accélérateur OSS.