Cada minuto que su imagen de contenedor de aprendizaje profundo pasa descargando es un minuto que paga y un minuto que su equipo espera. La descarga de la imagen del contenedor es un overhead puro: tiempo de trabajo facturable que no produce ningún progreso en el modelo. Para las imágenes de aprendizaje profundo modernas, ese overhead es de varios minutos en cada trabajo. Hoy, estamos emocionados de anunciar indexación de Seekable OCI (SOCI) para Amazon SageMaker AI Training y trabajos de procesamiento de Amazon SageMaker AI, que elimina la descarga completa de la imagen del contenedor del camino crítico de cada trabajo.

Con la indexación de SOCI, SageMaker AI carga de forma diferida su imagen de contenedor. Sólo fetcha los archivos necesarios para iniciar el contenedor y transmite el resto en segundo plano mientras su código se ejecuta, por lo que su trabajo comienza en segundos en lugar de minutos. Puede adoptarlo apuntando a un contenedor de aprendizaje profundo de AWS (DLC) pre-indexado o agregando un índice a su propia imagen. Ninguno de los enfoques requiere cambios en la definición de su trabajo, punto de entrada o canales de datos. El resultado es un inicio de trabajo más rápido, un costo de trabajo más bajo y más tiempo dedicado a la creación de modelos en lugar de esperar a la infraestructura.

Las imágenes indexadas con SOCI inician contenedores de entrenamiento de Amazon SageMaker AI en segundos, sin impacto en el rendimiento del entrenamiento. Como se muestra en la sección Lo que medimos, esto redujo el tiempo de inactividad de la GPU durante las extracciones de imágenes hasta en un 90 por ciento en nuestras pruebas de referencia.

Esta publicación muestra cómo adoptar la indexación de SOCI: qué es, los resultados que medimos y cómo activarla para sus propios trabajos.

El desafío

Los trabajos de entrenamiento y procesamiento de SageMaker AI se ejecutan dentro de imágenes de contenedor almacenadas en Amazon Elastic Container Registry (Amazon ECR). Antes de que un trabajo pueda ejecutar su código, el servicio descarga la imagen completa en la instancia. Descomprime y escribe cada capa en el disco.

Para imágenes pequeñas, esto tarda segundos. Pero las imágenes de aprendizaje profundo suelen superar los 10 GB o más. Esa descarga agrega minutos a cada trabajo, y usted paga por ella como tiempo de trabajo. El impacto es mayor exactamente donde la velocidad de iteración es más importante: barridos de ajuste de hiperparámetros para cientos de trabajos, experimentos rápidos y trabajos de procesamiento cortos, donde la descarga de la imagen puede dominar el tiempo de ejecución total.

Cómo funciona la indexación de SOCI

Seekable OCI (SOCI) es una tecnología de código abierto que carga de forma diferida las imágenes de contenedor. En lugar de descargar la imagen completa antes de iniciar, el runtime utiliza un índice de SOCI para fetchar solo los archivos necesarios para lanzar el contenedor de inmediato. Luego, transmite el resto en segundo plano mientras su código accede a él.

Un índice de SOCI es metadatos que asigna cada archivo dentro de su imagen. Lo almacena en Amazon ECR como un artifacto compatible con OCI vinculado a su imagen original. Debido a que el índice es un artifacto separado, su resumen de imagen y cualquier firma existente siguen siendo válidos.

SageMaker AI busca un índice automáticamente

Cuando crea un trabajo de entrenamiento o procesamiento, SageMaker AI verifica si la imagen que especificó tiene un índice SOCI y se comporta en consecuencia:

Escenario Qué sucede
La imagen incluye un índice SOCI SageMaker AI carga la imagen de forma diferida y comienza su contenedor antes de que se complete la descarga completa
La imagen no tiene un índice SOCI Descarga estándar, sin cambios en el comportamiento
No se puede leer el índice o la carga diferida no tiene éxito El trabajo vuelve a una descarga estándar y continúa ejecutándose

Como los trabajos siempre vuelven a una descarga estándar cuando es necesario, agregar un índice SOCI nunca impide que su trabajo se ejecute. Solo obtiene una inicialización más rápida. Nunca se arriesga a romper un flujo de trabajo existente.

Lo que medimos

Extraimos las mismas imágenes de contenedores de dos maneras en trabajos de entrenamiento de SageMaker AI reales: descarga estándar y carga diferida con índice SOCI. Luego, ejecutamos trabajos de entrenamiento completos desde ambos para medir el efecto en la velocidad de entrenamiento.

Configuración

  • Ocho imágenes, 1.8–35.4 GB comprimidas.
  • Instancias GPU y CPU ml.g4dn, ml.g5, ml.g6, ml.g6e, ml.g7, ml.g7e, ml.p4d, ml.p5, y ml.m7i, desde xlarge hasta 48xlarge, en la región oeste de EE. UU. (Oregon) (us-west-2) y la región este de EE. UU. (N. Virginia) (us-east-1).
  • Tiempo de descarga medido desde el inicio de la extracción de la imagen hasta que el contenedor esté listo para ejecutarse. Todas las cifras son medianas de ejecuciones repetidas.

Resultado 1: El tiempo de descarga disminuye de minutos a segundos en todos los tamaños de imagen

Tamaño de la imagen (comprimida) Descarga estándar Carga diferida Mejora
1.8 GB 48 s 3-11 s ~8x
13.2 GB 3 min 42 s ~6 s ~34x
35.4 GB 7 min 17 s 3-11 s ~38x

El siguiente gráfico compara el tiempo de descarga de la imagen del contenedor para una extracción de Docker estándar frente a la carga diferida de SOCI en ocho tamaños de imagen, desde 1.8 GB hasta 35.4 GB.

Cada tamaño de imagen muestra dos barras. La barra del tiempo de descarga de Docker (azul) crece constantemente con el tamaño de la imagen, desde 48 segundos en 1.8 GB hasta 7 minutos 17 segundos en 35.4 GB.

Una etiqueta de aceleración sobre cada par muestra la relación entre el tiempo de Docker y el tiempo de SOCI. Las aceleraciones van desde aproximadamente 10x para la imagen más pequeña hasta más de 35x para la más grande.

Gráfico de barras que compara los tiempos de descarga de Docker pull y SOCI lazy-loading en ocho tamaños de imagen, con aceleraciones desde aproximadamente 10x hasta más de 35x

Figura 1: Tiempo de descarga de imagen de contenedor, Docker pull estándar en comparación con SOCI lazy loading, en ocho tamaños de imagen

El tiempo de descarga estándar aumenta con el tamaño de la imagen porque cada archivo se descomprime y escribe. La carga diferida se mantuvo en 3–11 segundos independientemente del tamaño, una mejora de 8x–46x. Cuanto mayor es la imagen, más minutos ahorras.

Resultado 2: El ahorro se mantiene en cada tipo y tamaño de instancia

Al ejecutar la imagen de 13,2 GB en 13 combinaciones de tipo y tamaño de instancia, el tiempo de descarga estándar varió desde 3 min 16 s hasta 4 min 20 s, mientras que la carga diferida se mantuvo en 6-8 s. Eso es aproximadamente 34x más rápido en cada configuración. No necesitas cambiar el tipo o tamaño de la instancia para beneficiarte.

Gráfico que compara la descarga estándar y SOCI lazy loading para una imagen de 13,2 GB en 13 combinaciones de tipo y tamaño de instancia, aproximadamente 34x más rápido en cada una

Figura 2: Tiempo de descarga para una imagen de 13,2 GB en 13 combinaciones de tipo y tamaño de instancia

Resultado 3: El rendimiento del entrenamiento no se ve afectado más allá de una penalización en la primera época

Ejecutamos dos tipos de trabajos de entrenamiento completos desde la imagen extraída con Docker y desde la imagen indexada con SOCI y comparamos cada época:

  • Clasificación de imágenes en ResNet-50 en Imagenette (9,469 imágenes)
    • Imágenes de contenedor: PyTorch (13,2 GB DLC) y TensorFlow (9,9 GB DLC)
    • Instancias: ml.p5.48xlarge, ml.p4d.24xlarge, ml.g7e.48xlarge, ml.g7.48xlarge, ml.g6e.12xlarge, ml.g6e.24xlarge, y ml.g6e.48xlarge.
  • Ajuste fino de modelo de lenguaje grande (LLM): ajuste fino supervisado de parámetros completos (SFT) de Qwen2.5-0.5B en alpaca-cleaned (51,760 ejemplos) con el Hugging Face Trainer.
    • Imagen del contenedor: 9.4 GB Hugging Face PyTorch DLC.
    • Instancias: ml.p5.48xlarge, ml.p4d.24xlarge, ml.g6.48xlarge.

La siguiente gráfica divide la inicialización del trabajo en tiempo de descarga de imagen y tiempo de la primera época de entrenamiento, comparando una extracción estándar de Docker con una imagen indexada por SOCI en configuraciones de GPU y CPU para ambas cargas de trabajo.

Gráfica que divide la inicialización del trabajo en tiempo de descarga de imagen y tiempo de la primera época de entrenamiento, comparando una extracción estándar de Docker con una imagen indexada por SOCI en configuraciones de GPU y CPU

Figura 3: Inicialización del trabajo dividida en tiempo de descarga de imagen y tiempo de la primera época de entrenamiento, extracción estándar de Docker comparada con una imagen indexada por SOCI

  • Desde la segunda época en adelante, el tiempo por época es el mismo (dentro de la variación de ejecución a ejecución) en cada instancia, para ambas cargas de trabajo.
  • Net: cada trabajo finalizó 1-6 min antes. Ese es el ahorro de descarga menos el costo de la primera época de una sola vez, un ahorro fijo por trabajo.

Prueba esto en tu propia carga de trabajo

Estos números son de las dos cargas de trabajo descritas anteriormente. El costo de la primera época depende de tu imagen y de lo que tu código toca al inicio:

  • La carga diferida gana cuando el primer paso de entrenamiento solo necesita una fracción de la imagen, el resto se transmite mientras se entrena.
  • Si tu punto de entrada lee la mayor parte de la imagen antes de que comience el entrenamiento (por ejemplo, escaneando, verificando la suma de comprobación o precargando su contenido), la primera época espera aproximadamente los mismos bytes que una extracción completa habría recuperado. La mejora neta sería pequeña.
  • Los inicios con carga previa todavía salieron adelante en nuestras pruebas:
    • torch.compile y una extensión CUDA construida justo a tiempo (JIT) agregaron 7-15 s a la primera época (ahorro neto todavía 3 min 25 s–3 min 56 s)
    • Un modelo de 6 GB horneado en la imagen transmitió sus pesos en el momento de la carga, agregando 2-3.5 min, pero el trabajo general todavía finalizó 2-2.5 min antes en la imagen indexada.

Empezar

Puedes adoptar el indexado SOCI de dos maneras: usar un contenedor de aprendizaje profundo de AWS preindexado o crear un índice para tu propia imagen personalizada.

Opción 1: Usar un contenedor de aprendizaje profundo de AWS preindexado

AWS publica variantes indexadas por SOCI de varios contenedores de aprendizaje profundo populares, identificados por el sufijo -soci en la etiqueta de la imagen:

763104351884.dkr.ecr.us-east-1.amazonaws.com/pytorch-training:2.9-gpu-py312-cu130-ubuntu22.04-sagemaker-v1-soci

Las variantes preindexadas están disponibles para PyTorch Training, TensorFlow Training, vLLM y SGLang, incluyendo variantes arm64 para algunos frameworks. Para adoptar la carga diferida, actualiza la etiqueta de la imagen en tu definición de trabajo a la variante -soci. Explora la lista completa en la Galería de contenedores de aprendizaje profundo de AWS.

Nota: Si creas tu propia imagen A PARTIR DE una imagen base de DLC, debes crear un índice SOCI para tu imagen final. El índice de la imagen base no se transfiere a las imágenes derivadas.

Opción 2: Crear un índice SOCI para tu propia imagen

Para indexar una imagen personalizada, necesitas un host Linux (como una instancia de Amazon Elastic Compute Cloud (Amazon EC2) que ejecuta Amazon Linux 2023) con containerd, el snapshooter SOCI, y either Finch o nerdctl instalado.

  1. Establece tus variables de entorno.
    ACCOUNT_ID="111122223333"
    REGION="us-east-1"
    REPOSITORY_NAME="my-training-image"
    ORIGINAL_IMAGE_TAG="v1.0"
    SOCI_IMAGE_TAG="v1.0-soci"
    REGISTRY="$ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com"
  2. Instala las herramientas requeridas.
    sudo dnf install -y containerd fuse soci-snapshotter runfinch-finch
    sudo systemctl start soci-snapshotter
    sudo systemctl restart containerd
  3. Autentica en Amazon ECR.
    aws ecr get-login-password --region "$REGION" \
      | sudo nerdctl login -u AWS --password-stdin "$REGISTRY"
  4. Extrae tu imagen original.
    sudo nerdctl pull "$REGISTRY/$REPOSITORY_NAME:$ORIGINAL_IMAGE_TAG"
  5. Crea la imagen indexada por SOCI.
    sudo nerdctl image convert --soci \
      "$REGISTRY/$REPOSITORY_NAME:$ORIGINAL_IMAGE_TAG" \
      "$REGISTRY/$REPOSITORY_NAME:$SOCI_IMAGE_TAG"
  6. Publica la imagen indexada.
    sudo nerdctl push --platform linux/amd64 \
      "$REGISTRY/$REPOSITORY_NAME:$SOCI_IMAGE_TAG"

Esto crea dos artefactos en tu repositorio: el índice SOCI y un manifiesto de índice de imagen compatible con OCI que enlaza tu imagen con el índice. Tu imagen original y su resumen permanecen sin cambios.

Automatiza la creación de índices en CI/CD

Para generar índices automáticamente en cada push, implemente el CFN ECR SOCI Index Builder. Utiliza una regla de Amazon EventBridge para detectar eventos de push de imágenes de Amazon ECR y construir el índice. No se requieren cambios en su pipeline de compilación.

Usar la imagen indexada en su trabajo de SageMaker AI

Haga referencia a su imagen indexada con SOCI exactamente como haría con cualquier otra imagen. No se necesitan cambios en la API. Solo difiere la etiqueta.

Ejemplo de entrenamiento (SDK de Python de SageMaker)

from sagemaker.train import ModelTrainer
from sagemaker.train.configs import Compute

trainer = ModelTrainer(
    training_image="111122223333.dkr.ecr.us-east-1.amazonaws.com/my-training-image:v1.0-soci",
    role="arn:aws:iam::111122223333:role/SageMakerExecutionRole",
    compute=Compute(
        instance_type="ml.g5.12xlarge",
        instance_count=2,
    ),
)

trainer.train()

Verificar que su imagen incluye un índice de SOCI

Antes de lanzar, confirme que su etiqueta se resuelve en una imagen indexada:

aws ecr batch-get-image \
  --repository-name "$REPOSITORY_NAME" \
  --image-ids imageTag="$SOCI_IMAGE_TAG" \
  --accepted-media-types \
  "application/vnd.oci.image.index.v1+json" \
  --query 'images[0].imageManifest' --output text \
  | jq '.manifests[] | {mediaType, artifactType}'

Busque un manifiesto secundario cuyo artifactType comience con application/vnd.amazon.soci.index. junto con su manifiesto de plataforma. Si no está allí, la etiqueta no apunta a una imagen indexada.

Cosas que tener en cuenta

  • Solo repositorios privados de Amazon ECR. Las imágenes en otros registros o extraídas a través de un registro privado de Docker (TrainingRepositoryAccessMode establecido en Vpc) no son elegibles para la carga diferida.
  • La mejora se escala con el tamaño de la imagen. Las imágenes más pequeñas que aproximadamente 4 GB ven mejoras relativamente pequeñas.
  • Revisar suposiciones específicas de Docker. Las imágenes indexadas con SOCI se ejecutan en un runtime basado en containerd. Revise los puntos de entrada y los scripts de configuración para el código que llama a la CLI de Docker, lee /var/run/docker.sock o deriva identificadores de rutas de cgroup. SageMaker AI monta un marcador /.dockerenv para la compatibilidad hacia atrás, pero evite agregar nuevas dependencias en él.
  • La indexación de SOCI para trabajos de SageMaker AI está disponible en todas las regiones de AWS.

Conclusión

Con la indexación de SOCI, puede minimizar el tiempo de descarga de la imagen del contenedor desde sus trabajos de entrenamiento y procesamiento de SageMaker AI. Agregue un índice de SOCI a sus imágenes o cambie a un contenedor preindexado de AWS Deep Learning. De cualquier manera, reduce el tiempo de inicio de minutos a segundos, reduce el costo total del trabajo y acelera su ciclo de iteración de aprendizaje automático (ML). Y sus definiciones de trabajo existentes, llamadas a la API y pipelines de datos siguen siendo exactamente los mismos.

Para obtener más información sobre Amazon SageMaker AI y comenzar a usar la indexación de SOCI, explore los siguientes recursos:

  1. Selecciona un contenedor de Deep Learning indexado por SOCI. Navega por la Galería de contenedores de Deep Learning y agrega -soci a tu etiqueta de imagen. Para obtener orientación específica del framework, consulta Índice SOCI para contenedores de Deep Learning de AWS.
  2. Indexa tu propia imagen personalizada. Sigue el tutorial paso a paso en la Guía de desarrollo de AI de SageMaker, o consulta la guía de inicio de SOCI snapshotter para opciones avanzadas.
  3. Automatiza el indexado en tu pipeline de CI/CD. Despliega el CFN ECR SOCI Index Builder para generar índices automáticamente en cada push de imagen. No se requieren cambios en la pipeline.
  4. Prueba localmente con Finch. Utiliza el tutorial de carga diferida de Finch para validar tu imagen en un runtime basado en containerd antes de enviar un trabajo.
  5. Sumérgete más a fondo en la tecnología. Lee Reducir los tiempos de inicio en frío de los contenedores utilizando el índice SOCI en DLAMI y DLC en el blog de Machine Learning de AWS para benchmarks, o explora Detrás de escena: Carga diferida de imágenes de contenedores con Seekable OCI y AWS Fargate en el blog de Contenedores de AWS para entender el mecanismo de carga diferida en detalle.

Un inicio de contenedor más rápido está solo a un tag de imagen de distancia. Pruébalo en tu próximo trabajo de AI de SageMaker y observa la diferencia.


Acerca de los autores

Kanwaljit Khurmi

Kanwaljit Khurmi

Kanwaljit es Gerente Senior de Arquitectura de Soluciones y Científicos de Datos en Amazon Web Services, especializado en AI y ML. Colabora con los equipos de productos de AWS, ingeniería y clientes para brindar orientación y asistencia técnica para maximizar el valor de sus soluciones de GenAI híbridas en AWS. Kanwaljit se especializa en ayudar a los clientes con aplicaciones de contenedores, ciencia de datos y aprendizaje automático.

Mona Mona

Mona Mona

Mona actualmente trabaja como especialista senior de AI/ML y arquitecto de soluciones en Amazon. Es autora publicada de tres libros y su último libro es AI Agents on AWS. Ha escrito más de 20 blogs sobre AI/ML y tecnología en la nube, y es coautora de un artículo de investigación sobre CORD19 Neural Search que ganó un premio al Mejor Artículo de Investigación en la prestigiosa conferencia AAAI (Asociación para el Avance de la Inteligencia Artificial).

Michael Oguike

Michael es Gerente de Producto para Amazon SageMaker AI. Está impulsado por la aplicación de la tecnología y la AI para resolver problemas del mundo real. En AWS, ayuda a los clientes de diversas industrias a construir, entrenar y implementar modelos de AI/ML a gran escala. Antes de unirse a AWS, Michael diseñó y operó pozos y facilidades de petróleo y gas offshore. Fuera del trabajo, disfruta explorar la ciencia del comportamiento y la psicología a través de libros y podcasts.

Deep Shah

Deep Shah

Deep es Ingeniero de Desarrollo de Software en el equipo de Amazon SageMaker, donde trabaja en la infraestructura que impulsa el entrenamiento de modelos en AWS. Cuando no está escalando sistemas de entrenamiento, disfruta de la carrera de simulación, la lectura y los viajes.

¿Tiene un proyecto de software o plataforma SaaS en mente?

Hable directamente con nuestros arquitectos de software en SoftAndino. Le brindamos asesoría técnica y cotización inmediata sin compromiso.