La construction des grands modèles de langage (LLM) et des modèles de diffusion sur lesquels repose l'IA générative nécessite une infrastructure colossale. La composante la plus évidente est la puissance de traitement, qui recourt à des centaines, voire des milliers de processeurs graphiques (GPU) ; toutefois, une composante tout aussi essentielle (et souvent négligée) est l'infrastructure de stockage de données. Les ensembles de données d'apprentissage peuvent représenter plusieurs téraoctets, voire plusieurs pétaoctets, et ces données doivent être lues en parallèle par des milliers de processus. En outre, les points de contrôle des modèles doivent être sauvegardés fréquemment durant une session d'apprentissage, et pour les LLM, ces points de contrôle peuvent chacun représenter des centaines de gigaoctets !
Afin de maîtriser les coûts de stockage et l'évolutivité, de nombreuses équipes spécialistes de l'apprentissage automatique ont opté pour des solutions de stockage orienté objet pour l'hébergement de leurs ensembles de données et des points de contrôle. Malheureusement, la plupart des fournisseurs de magasins d'objets appliquent des frais de trafic sortant qui « enferment » les utilisateurs sur leur plateforme. Il est donc très difficile d'exploiter au mieux la capacité des processeurs graphiques de plusieurs fournisseurs de cloud ou de tirer profit d'une tarification plus attrayante ou plus dynamique chez d'autres prestataires, car le transfert des données et des points de contrôle de modèles s'avère trop coûteux. À l'heure où les processeurs graphiques dans le cloud se raréfient et de nouvelles options matérielles apparaissent sur le marché, il est plus important que jamais de préserver votre flexibilité.
En plus des frais de trafic sortant élevés, il existe un obstacle technique à l'entraînement de modèles reposant sur l'apprentissage automatique centré sur les magasins d'objets. La lecture et l'écriture de données entre le stockage d'objets et les clusters de traitement nécessitent un débit élevé, une utilisation efficace de la bande passante du réseau, du déterminisme et de l'élasticité (c'est-à-dire la capacité d'exécuter la session d'apprentissage sur un nombre variable de processeurs graphiques). Le développement d'un logiciel d'apprentissage capable de gérer tous ces paramètres, correctement et de manière fiable, est une tâche ardue.
Aujourd'hui, nous sommes impatients de vous expliquer de quelle manière les outils de MosaicML et Cloudflare R2 peuvent être utilisés conjointement pour relever ces défis. Tout d'abord, les bibliothèques open source StreamingDataset et Composer de MosaicML vous permettent d'importer facilement et en continu des données d'apprentissage, puis de lire/écrire les points de contrôle du modèle dans R2. Tout ce dont vous avez besoin, c'est d'une connexion Internet. Deuxièmement, grâce à la tarification sans frais de trafic sortant de R2, vous pouvez démarrer, arrêter, déplacer et redimensionner les tâches en fonction de la disponibilité des processeurs graphiques et des tarifs pratiqués par les fournisseurs de traitement, sans devoir vous acquitter de frais de transfert de données. La plateforme d'apprentissage MosaicML simplifie à l'extrême l'orchestration de ces tâches d'apprentissage sur plusieurs clouds.
Ensemble, Cloudflare et MosaicML vous offrent la liberté d'entraîner des LLM sur n'importe quelle plateforme de traitement, partout dans le monde, sans frais de transfert. Vous bénéficiez ainsi de sessions d'apprentissage plus rapides et moins coûteuses, sans enfermement propriétaire.
« Grâce à la plateforme d'apprentissage de MosaicML, les clients peuvent utiliser efficacement R2 en tant que solution de stockage back-end durable pour l'apprentissage des LLM sur n'importe quel fournisseur de traitement, sans aucuns frais de trafic sortant. Les entreprises de développement d'IA font face à des coûts de cloud exorbitants et sont à la recherche d'outils capables de leur offrir la rapidité et la flexibilité indispensables pour entraîner leurs meilleurs modèles au meilleur prix ».– Naveen Rao, CEO et cofondateur, MosaicML
Lecture des données depuis R2 avec StreamingDataset
Pour lire des données depuis R2 de manière efficace et déterministe, vous pouvez utiliser la bibliothèque StreamingDataset de MosaicML. Tout d'abord, écrivez vos données d'apprentissage (images, texte, vidéo – tout ce que vous voulez !) dans des fichiers .mds
avec l'API Python fournie :
Une fois que votre ensemble de données a été converti, vous pouvez le transférer vers R2. Nous vous expliquons comment procéder ci-dessous, avec l'outil de ligne de commande awscli
, mais vous pouvez également utiliser wrangler ou tout autre outil compatible S3 de votre choix. Prochainement, StreamingDataset prendra également en charge l'écriture directe dans le cloud vers R2.
import numpy as np
from PIL import Image
from streaming import MDSWriter
# Local or remote directory in which to store the compressed output files
data_dir = 'path-to-dataset'
# A dictionary mapping input fields to their data types
columns = {
'image': 'jpeg',
'class': 'int'
}
# Shard compression, if any
compression = 'zstd'
# Save the samples as shards using MDSWriter
with MDSWriter(out=data_dir, columns=columns, compression=compression) as out:
for i in range(10000):
sample = {
'image': Image.fromarray(np.random.randint(0, 256, (32, 32, 3), np.uint8)),
'class': np.random.randint(10),
}
out.write(sample)
Enfin, vous pouvez transférer les données vers n'importe quel équipement disposant d'un accès en lecture à votre bucket R2. Vous pouvez extraire des échantillons individuels, configurer une boucle au niveau de l'ensemble de données et le transférer vers un chargeur de données standard PyTorch.
$ aws s3 cp --recursive path-to-dataset s3://my-bucket/folder --endpoint-url $S3_ENDPOINT_URL
Dès sa mise en service, StreamingDataset offre des performances élevées, un déterminisme élastique, une capacité de reprise rapide et la prise en charge de plusieurs instances Workers. La solution utilise également des fonctionnalités intelligentes de permutation et de diffusion, afin de s'assurer de minimiser la bande passante de téléchargement. Sur différentes charges de travail telles que les LLM et les modèles de diffusion, nous constatons qu'il n'y a aucun impact sur le débit d'apprentissage (absence de goulet d'étranglement lié au chargeur de données) lors de sessions d'entraînement depuis des magasins d'objets tels que R2. Pour plus d'informations, consultez l'article de blog dans lequel nous annoncions StreamingDataset.
from torch.utils.data import DataLoader
from streaming import StreamingDataset
# Make sure that R2 credentials and $S3_ENDPOINT_URL are set in your environment
# e.g. export S3_ENDPOINT_URL="https://[uid].r2.cloudflarestorage.com"
# Remote path where full dataset is persistently stored
remote = 's3://my-bucket/folder'
# Local working dir where dataset is cached during operation
local = '/tmp/path-to-dataset'
# Create streaming dataset
dataset = StreamingDataset(local=local, remote=remote, shuffle=True)
# Let's see what is in sample #1337...
sample = dataset[1337]
img = sample['image']
cls = sample['class']
# Create PyTorch DataLoader
dataloader = DataLoader(dataset)
Lecture/écriture de points de contrôle de modèles vers R2 avec Composer
L'importation de données en continu dans votre boucle d'apprentissage résout en partie le problème, mais comment charger et sauvegarder les points de contrôle de votre modèle ? Heureusement, si vous utilisez une bibliothèque d'apprentissage telle que Composer, c'est aussi simple que de définir un chemin dans R2.
Composer utilise des transferts asynchrones pour minimiser les délais d'attente lors de la sauvegarde des points de contrôle pendant l'apprentissage. La solution est également compatible, dès sa mise en service, avec les tâches d'apprentissage recourant à plusieurs processeurs graphiques et plusieurs nœuds, et ne nécessite pas de système de fichiers partagé. Cela signifie que vous pouvez passer outre la configuration d'un système EFS/NFS coûteux pour votre cluster de traitement, et ainsi, économiser chaque mois des milliers de dollars (voire davantage) sur les clouds publics. Tout ce dont vous avez besoin, c'est d'une connexion Internet et d'informations d'identification appropriées – vos points de contrôle parviennent en toute sécurité à votre bucket R2, vous offrant ainsi un stockage évolutif et sécurisé pour vos modèles privés.
from composer import Trainer
...
# Make sure that R2 credentials and $S3_ENDPOINT_URL are set in your environment
# e.g. export S3_ENDPOINT_URL="https://[uid].r2.cloudflarestorage.com"
trainer = Trainer(
run_name='mpt-7b',
model=model,
train_dataloader=train_loader,
...
save_folder=s3://my-bucket/mpt-7b/checkpoints,
save_interval='1000ba',
# load_path=s3://my-bucket/mpt-7b-prev/checkpoints/ep0-ba100-rank0.pt,
)
Utiliser MosaicML et R2 pour des sessions d'apprentissage efficaces, n'importe où
L'utilisation des outils mentionnés ci-dessus avec Cloudflare R2 permet aux utilisateurs d'exécuter des charges de travail d'apprentissage sur n'importe quel fournisseur de traitement, avec une liberté de choix totale et des frais de transfert nuls.
À titre de démonstration, sur la Figure X, nous utilisons la plateforme d'apprentissage MosaicML pour exécuter une tâche d'apprentissage de LLM sur Oracle Cloud Infrastructure, avec l'importation de données en continu et le transfert des points de contrôle vers R2. En cours de session, nous suspendons la tâche, puis la reprenons de manière fluide sur un autre ensemble de processeurs graphiques, sur Amazon Web Services. Composer charge les pondérations du modèle à partir du dernier point de contrôle sauvegardé dans R2, et le chargeur de données en continu reprend instantanément avec le lot correct. L'apprentissage se poursuit de manière déterministe. Enfin, nous transférons à nouveau la session vers Google Cloud, afin de la terminer.
Puisque nous entraînons notre LLM sur trois fournisseurs de cloud, les seuls coûts dont nous devons nous acquitter sont les frais de traitement des processeurs graphiques et de stockage de données. Grâce à Cloudflare R2, nous évitons les frais de trafic sortant et l'enfermement propriétaire !
Utilisation de la plateforme d'apprentissage MosaicML avec Cloudflare R2 pour exécuter une tâche d'apprentissage de LLM sur trois fournisseurs de cloud différents, sans frais de trafic sortant.
Utilisation de l'outil de ligne de commande MCLI pour gérer les grappes de traitement et les secrets et transmettre les sessions.
$ mcli get clusters
NAME PROVIDER GPU_TYPE GPUS INSTANCE NODES
mml-1 MosaicML │ a100_80gb 8 │ mosaic.a100-80sxm.1 1
│ none 0 │ cpu 1
gcp-1 GCP │ t4 - │ n1-standard-48-t4-4 -
│ a100_40gb - │ a2-highgpu-8g -
│ none 0 │ cpu 1
aws-1 AWS │ a100_40gb ≤8,16,...,32 │ p4d.24xlarge ≤4
│ none 0 │ cpu 1
oci-1 OCI │ a100_40gb 8,16,...,64 │ oci.bm.gpu.b4.8 ≤8
│ none 0 │ cpu 1
$ mcli create secret s3 --name r2-creds --config-file path/to/config --credentials-file path/to/credentials
✔ Created s3 secret: r2-creds
$ mcli create secret env S3_ENDPOINT_URL="https://[uid].r2.cloudflarestorage.com"
✔ Created environment secret: s3-endpoint-url
$ mcli run -f mpt-125m-r2.yaml --follow
✔ Run mpt-125m-r2-X2k3Uq started
i Following run logs. Press Ctrl+C to quit.
Cloning into 'llm-foundry'...
Un modèle de tâche de MCLI. Spécifiez un nom de session, une image Docker, un ensemble de commandes et un cluster de traitement sur lequel exécuter la session.
### mpt-125m-r2.yaml ###
# set up secrets once with `mcli create secret ...`
# and they will be present in the environment in any subsequent run
integrations:
- integration_type: git_repo
git_repo: mosaicml/llm-foundry
git_branch: main
pip_install: -e .[gpu]
image: mosaicml/pytorch:1.13.1_cu117-python3.10-ubuntu20.04
command: |
cd llm-foundry/scripts
composer train/train.py train/yamls/mpt/125m.yaml \
data_remote=s3://bucket/path-to-data \
max_duration=100ba \
save_folder=s3://checkpoints/mpt-125m \
save_interval=20ba
run_name: mpt-125m-r2
gpu_num: 8
gpu_type: a100_40gb
cluster: oci-1 # can be any compute cluster!
Commencez dès aujourd'hui !
La plateforme MosaicML est un outil inestimable pour transformer vos sessions d'apprentissage, et dans cet article, nous avons exploré comment Cloudflare R2 vous permet d'entraîner des modèles avec vos données, avec n'importe quel fournisseur de traitement – ou tous. En éliminant les frais de trafic sortant, la solution de stockage R2 représente un complément exceptionnellement économique aux fonctionnalités d'apprentissage de MosaicML, offrant une autonomie et un contrôle inégalés. Grâce à cette combinaison, vous pouvez passer d'un fournisseur de services de cloud à un autre, en fonction de l'évolution, dans le temps, des besoins de votre entreprise.
Pour plus d'informations sur l'utilisation de MosaicML pour entraîner des modèles d'IA personnalisés et ultra-performants avec vos données, consultez cette page ou contactez-nous.