Reducción de los tiempos de arranque en frío de los contenedores utilizando el índice SOCI en DLAMI y DLC

La AMI de aprendizaje profundo y los contenedores de aprendizaje profundo de AWS ahora están habilitados con soporte para índices y instantáneas SOCI. Seekable OCI (SOCI) es una tecnología que permite la gestión eficiente de imágenes de contenedores mediante la descarga selectiva de archivos. Utiliza un sistema de indexación basado en capas para asignar ubicaciones de archivos dentro de las imágenes del contenedor, lo que permite que los contenedores comiencen solo con los archivos necesarios cargados (carga diferida). Este enfoque reduce el uso del ancho de banda de la red y mejora los tiempos de inicio de los contenedores, lo que lo hace particularmente valioso para las organizaciones que administran imágenes de contenedores grandes en entornos de nube.

En esta publicación, analizamos cómo usar SOCI en contenedores y AMI de aprendizaje profundo disponibles públicamente, cuándo usar los distintos modos SOCI proporcionados por la herramienta y cómo usar esta herramienta de manera rápida y eficiente en sus cargas de trabajo actuales.

Fondo

A medida que las organizaciones implementan cargas de trabajo de inteligencia artificial (IA) y aprendizaje automático (ML) a escala, el tiempo de inicio de los contenedores se ha convertido en un cuello de botella en los entornos de producción. Ya sea que se trate de acelerar trabajos de capacitación, atender puntos finales de inferencia o escalar clústeres de GPU automáticamente, el tiempo dedicado a descargar imágenes de contenedores de varios gigabytes afecta directamente el costo, la experiencia del usuario y la eficiencia operativa. Los enfoques tradicionales de implementación de contenedores obligan a los equipos a descargar imágenes completas antes de que puedan comenzar las cargas de trabajo. Este proceso puede tardar varios minutos para iniciar las imágenes que se utilizan habitualmente en producción. Durante el desarrollo, apenas se notan unos minutos de espera. En producción, esos mismos minutos se acumulan rápidamente.

Las organizaciones que implementan infraestructura de aprendizaje profundo a escala generalmente enfrentan varios desafíos críticos:

Tiempos de arranque en frío prolongados. La extracción de imágenes estándar de Docker de 15 a 20 GB puede tardar entre 4 y 6 minutos por instancia, lo que retrasa los trabajos de entrenamiento y los puntos finales de inferencia durante los eventos de escalado. Recursos informáticos desperdiciados. Las instancias de GPU permanecen inactivas durante la extracción de imágenes, consumiendo costosas horas de procesamiento mientras esperan que finalice la inicialización del contenedor. Escalar los cuellos de botella. Cuando los picos de demanda desencadenan el escalado automático, los tiempos de inicio lentos de los contenedores impiden una respuesta rápida, lo que provoca una degradación del rendimiento o la caída de solicitudes. Restricciones de ancho de banda. Las implementaciones a gran escala que extraen imágenes masivas simultáneamente pueden saturar el ancho de banda de la red, creando retrasos en cascada en toda la infraestructura. Productividad del desarrollador. Los científicos de datos y los ingenieros de ML pierden un tiempo valioso esperando a que se inicien los contenedores durante los ciclos iterativos de desarrollo y experimentación.

Mecanismos de arrastre de contenedores

Al extraer un contenedor para sus cargas de trabajo, las AMI de aprendizaje profundo (DLAMI) de AWS y los contenedores de aprendizaje profundo ofrecen tres opciones: extracción estándar de Docker, extracción paralela de SOCI y carga diferida de SOCI a través del índice SOCI. Piense en esto como una escala móvil de compensaciones. Las extracciones de Docker son secuenciales y lentas. La extracción paralela de SOCI proporciona tiempos de inicio más rápidos al fragmentar las descargas a costa de los recursos informáticos. La carga diferida SOCI proporciona una carga de contenedores casi instantánea, pero requiere que los archivos se obtengan a pedido. Puede utilizar la siguiente guía para elegir el mecanismo adecuado para sus cargas de trabajo:

La elección entre los modos de carga diferida y extracción paralela depende de la imagen, las especificaciones de la instancia y la configuración de almacenamiento. La carga diferida requiere que las imágenes tengan un índice SOCI. Sin uno, el sistema vuelve a la tracción estándar. Las instancias con especificaciones más bajas deben utilizar carga diferida para conservar recursos, mientras que las instancias con especificaciones altas con múltiples vCPU y un gran ancho de banda de red se benefician del modo de extracción paralela. El rendimiento del almacenamiento varía: los volúmenes de EBS están limitados por sus IOPS aprovisionadas y el tipo de volumen, lo que potencialmente crea cuellos de botella durante el descomprimido, mientras que el almacén de instancias NVMe ofrece el máximo rendimiento de E/S a costa de la persistencia de los datos en los ciclos de inicio/detención de la instancia.

El siguiente ejemplo muestra los diversos mecanismos basados ​​en vLLM Deep Learning Container:

Mecanismos de extracción de contenedores de aprendizaje profundo

Arquitectura de la solución

El siguiente diagrama muestra la arquitectura para usar SOCI con DLAMI y contenedores de aprendizaje profundo.

Arquitectura de solución que muestra la integración de instantáneas SOCI con DLAMI y contenedores de aprendizaje profundo en Amazon EC2

Comparación del tiempo de inicio del contenedor con la instantánea SOCI

Los siguientes puntos de referencia comparan las extracciones estándar de Docker con la instantánea SOCI en los modos de carga diferida y extracción paralela.

Modo de carga diferida

El modo de carga diferida inicia los contenedores inmediatamente al obtener solo los datos necesarios a pedido, y las capas restantes se cargan en segundo plano según sea necesario.

Requisitos previos

Índice SOCI requerido

Importante: el modo de carga diferida requiere que la imagen del contenedor tenga un índice SOCI almacenado en el registro. Sin un índice SOCI, el tomador de instantáneas volverá al comportamiento de extracción estándar y no verá ninguna mejora en el rendimiento. Los contenedores de aprendizaje profundo (DLC) de AWS con el sufijo de etiqueta -soci vienen con índices SOCI creados previamente y enviados al registro, lo que permite una carga diferida desde el primer momento. Para imágenes personalizadas, debe crear y enviar índices SOCI

Ambiente

Tipo de instancia: g5.2xlarge EBS: Tamaño 500 GiB, IOPS 3000, rendimiento 125 AMI: Base de aprendizaje profundo OSS Controlador Nvidia GPU AMI (Ubuntu 24.04) 20260413 (ami-06abbbf2049359343) Imagen de Docker: public.ecr.aws/deep-learning-containers/vllm:0.19.0-gpu-py312-ec2-soci Tamaño de imagen: 9,72 GB (comprimido), 32,7 GB (uso de disco) Red: Corp

Iniciar contenedor con Docker (no SOCI)

Usamos Docker para iniciar el servidor de inferencia directamente. Como no existe ninguna imagen localmente, Docker extrae la imagen completa antes de iniciar el contenedor.

Tiempo total: 6m59.099s.

#!/bin/bash time docker run –gpus all -d -v ~/.cache/huggingface:/root/.cache/huggingface –env "HUGGING_FACE_HUB_TOKEN=$HUGGING_FACE_HUB_TOKEN" -p 8000:8000 –ipc=host public.ecr.aws/deep-learning-containers/vllm:0.19.0-gpu-py312-ec2-soci –model mistralai/Mistral-7B-v0.1 # salida No se puede encontrar la imagen 'public.ecr.aws/deep-learning-containers/vllm:0.19.0-gpu-py312-ec2-soci' localmente 0.19.0-gpu-py312-ec2-soci: Extracción de contenedores de aprendizaje profundo/vllm 340d44d2921c: Extracción completa… 2001a2421bf1: Extracción completa Resumen: sha256:a6344c96a33ef98a32a27f89b41b8c0529d4fbbba248eb57f811725d415f68fc Estado: Descargada imagen más nueva para public.ecr.aws/deep-learning-containers/vllm:0.19.0-gpu-py312-ec2-soci e12d969eb71517d9a6a23b9b11cfa22ddda26a95f6a0f0d8df00cd5c4fdfe912 real 6m59.099s usuario 0m0.391s sys 0m0.452s

Iniciar contenedor con instantánea SOCI (carga diferida)

Usamos nerdctl con instantánea SOCI para iniciar el contenedor de inferencia. Aunque no existe ninguna imagen localmente, la imagen indexada por SOCI permite a nerdctl extraer solo el índice y las capas necesarias para iniciar el contenedor, lo que permite la carga diferida de las capas restantes. Tiempo total: 21.125s.

#!/bin/bash time sudo nerdctl run –snapshotter soci –gpus all -d -v ~/.cache/huggingface:/root/.cache/huggingface –env "HUGGING_FACE_HUB_TOKEN=$HUGGING_FACE_HUB_TOKEN" -p 8000:8000 –ipc=host public.ecr.aws/deep-learning-containers/vllm:0.19.0-gpu-py312-ec2-soci –model mistralai/Mistral-7B-v0.1 # salida public.ecr.aws/deep-learning-containers/vllm:0.19.0-gpu-py312-ec2-soci: resuelto |++++++++++++++++++++++++++++++++++++++++| index-sha256:a6344c96a33ef98a32a27f89b41b8c0529d4fbbba248eb57f811725d415f68fc: hecho |++++++++++++++++++++++++++++++++++++++++++| manifest-sha256:d91ad3b46204eace6de2fb27c46d9600337fa9c124b4c82fe0f335d391017daa: hecho |++++++++++++++++++++++++++++++++++++++++| config-sha256:886ed36d57c44081a74a0ab052f57366d96ab2c0fe39bb3e2f8a46cc20db8ec2: hecho |++++++++++++++++++++++++++++++++++++++++| transcurrido: 10,5 s total: 48,1 K (4,6 KiB/s) 189307b7899438415f3df4288b3fbb26bcc4cd43678e88ec3b062bc6330e3e3b real 0m21.125s usuario 0m0.004s sys 0m0.011s

Resumen de carga diferida

Al utilizar una instantánea SOCI con carga diferida, el contenedor se inició en 21,125 segundos, en comparación con los 6 minutos y 59,099 segundos del Docker estándar. Esta mejora se logra porque SOCI extrae solo las capas necesarias para iniciar el contenedor, y las capas restantes se cargan según sea necesario.

Modo de extracción paralela

Mientras que el modo de carga diferida inicia los contenedores inmediatamente al obtener solo los datos requeridos bajo demanda, el modo de extracción paralela descarga la imagen completa antes del inicio, pero lo hace con mayor simultaneidad que las extracciones estándar de Docker. Este modo es ideal cuando necesita la imagen completa disponible al inicio o cuando ejecuta cargas de trabajo con uso intensivo de E/S.

Ambiente

Tipo de instancia: g5.4xlarge EBS: 500 GiB gp3, 16000 IOPS, rendimiento de 1000 MB/s AMI: Base de aprendizaje profundo OSS Controlador Nvidia GPU AMI (Ubuntu 24.04) 20260413 (ami-06abbbf2049359343) Imagen de Docker: 763104351884.dkr.ecr.us-east-1.amazonaws.com/sglang:0.5.10-gpu-py312-cu129-ubuntu24.04-sagemaker Tamaño de imagen: 19,32 GB (comprimido), 60,4 GB (uso de disco) Red: Corp

Nota: Usamos una imagen de ECR privada para este punto de referencia porque Amazon CloudFront lidera la ECR pública, lo que limita el ancho de banda de la red y afecta el rendimiento del modo paralelo. La ECR privada se sirve directamente desde Amazon Simple Storage Service (Amazon S3), lo que proporciona un mayor rendimiento.

Habilitar el modo de extracción paralela

La instantánea SOCI en la AMI de aprendizaje profundo tiene por defecto el modo de carga diferida. Para habilitar el modo de extracción paralela, modifique el archivo de configuración en /etc/soci-snapshotter-grpc/config.toml:

# Modo de extracción paralela: mejora significativamente los tiempos de extracción de imágenes para imágenes AI/ML grandes # Estos son valores predeterminados conservadores recomendados por AWS para ECR [pull_modes.parallel_pull_unpack] enable = true # false(predeterminado): carga diferida/true: modo paralelo max_concurrent_downloads = -1 # límite global ilimitado en todas las imágenes max_concurrent_downloads_per_image = 20 # conexiones de descarga por imagen concurrent_download_chunk_size = "16mb" max_concurrent_unpacks = -1 # límite global ilimitado en todas las imágenes max_concurrent_unpacks_per_image = 10 # subprocesos de desempaquetado paralelos por imagen descartar_unpacked_layers = true

Aplique la configuración reiniciando el servicio:

sudo systemctl reiniciar soci-snapshotter.service

Consejo: Puede ajustar max_concurrent_downloads_per_image y max_concurrent_unpacks_per_image según su tipo de instancia y ancho de banda de red. Para obtener una guía de ajuste detallada, consulte Presentación del modo de extracción paralela OCI buscable para Amazon EKS.

Verificar que el modo paralelo esté activo

Supervise los registros de la instantánea SOCI durante la extracción de imágenes para confirmar que el modo paralelo esté habilitado:

journalctl -u soci-snapshotter -f

Busque entradas de registro que indiquen extracción/descompresión paralela:

16 de abril 23:59:08 ip-172-31-86-91 soci-snapshotter-grpc[3108]: {"layerDigest":"sha256:e87500e698966458d9dfc34df84602985c9821f39666619792fe6282aa6df5d4", "level":"info", "msg":"preparando instantánea con extracción/descompresión paralela", "tiempo":"2026-04-16T23:59:08.654819383Z"}

Extraer imagen con Docker (no SOCI)

Docker estándar descarga y extrae capas con simultaneidad limitada.

Tiempo total: 4m 44.163s

time docker pull 763104351884.dkr.ecr.us-east-1.amazonaws.com/sglang:0.5.10-gpu-py312-cu129-ubuntu24.04-sagemaker Resumen: sha256:fd0cf60bbb34a5d30f22595215a633e5d4a7260fc0868aabe3f04b1174b7365d Estado: Descargada imagen más nueva para 763104351884.dkr.ecr.us-east-1.amazonaws.com/sglang:0.5.10-gpu-py312-cu129-ubuntu24.04-sagemaker 763104351884.dkr.ecr.us-east-1.amazonaws.com/sglang:0.5.10-gpu-py312-cu129-ubuntu24.04-sagemaker real 4m44.163s usuario 0m0.339s sys 0m0.423s

Extraer imagen con modo paralelo SOCI

El uso de nerdctl con el modo de extracción paralela SOCI utiliza una mayor concurrencia tanto para las descargas como para las operaciones de descompresión.

Tiempo total: 2m 12.846s

tiempo sudo nerdctl pull –snapshotter soci 763104351884.dkr.ecr.us-east-1.amazonaws.com/sglang:0.5.10-gpu-py312-cu129-ubuntu24.04-sagemaker 763104351884.dkr.ecr.us-east-1.amazonaws.com/sglang:0.5.10-gpu-py312-cu129-ubuntu24.04-sagemaker: resuelto |++++++++++++++++++++++++++++++++++++++++++| manifest-sha256:fd0cf60bbb34a5d30f22595215a633e5d4a7260fc0868aabe3f04b1174b7365d: hecho |++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ config-sha256:5e6a53b7478b0631dd3c4222ab6619dae3a3dd32a565921f10b0b03fdc316d46: hecho |++++++++++++++++++++++++++++++++++++++++| transcurrido: 132,8 s total: 89,3 K (688,0 B/s) real 2m12,846s usuario 0m0,018s sistema 0m0,075s

Resumen de extracción paralela

El uso del modo de extracción paralela SOCI redujo el tiempo de extracción de imágenes de 4 minutos y 44 segundos a 2 minutos y 12 segundos, lo que representa una mejora de 2,2 veces en el rendimiento de extracción.

Conclusión

La instantánea SOCI proporciona mejoras tanto para el inicio del contenedor como para las operaciones de extracción de imágenes:

Modo de carga diferida: logró una mejora de 20 veces en el tiempo de inicio del contenedor (de más de 6 minutos a ~21 segundos) Modo de extracción paralela: logró una mejora de 2,2 veces en el tiempo de extracción de imágenes (de 4 minutos y 44 segundos a 2 minutos y 12 segundos)

Elija el modo de carga diferida cuando necesite el inicio del contenedor más rápido posible, o el modo de extracción paralela cuando necesite que la imagen completa esté disponible antes de que comience su carga de trabajo.

Limpiar

Si lanzó instancias EC2 para probar la instantánea SOCI, finalícelas para evitar incurrir en cargos continuos. Elimine las imágenes de contenedor que envió a Amazon Elastic Container Registry (Amazon ECR) durante las pruebas y elimine los índices SOCI que ya no necesite.

Empezando con SOCI

DLAMI y los contenedores de aprendizaje profundo están disponibles públicamente hoy con una instantánea SOCI y un índice SOCI. Para obtener más información sobre DLAMI y contenedores de aprendizaje profundo disponibles públicamente, puede consultar el índice SOCI DLAMI para seleccionar las imágenes que admiten SOCI y consultar el repositorio de contenedores de aprendizaje profundo para obtener más información sobre las imágenes compatibles con índice SOCI.

Para obtener orientación de configuración detallada y mejores prácticas, consulte la documentación SOCI y la documentación SOCI del contenedor de aprendizaje profundo.

Sobre los autores

Ohad Katz

Ohad Katz

Ohad Katz es un ex ingeniero de desarrollo de sistemas en el equipo de AMI de aprendizaje profundo de AWS (DLAMI).

Yadan Wei

Yadan Wei

Yadan Wei es ingeniero de desarrollo de software en el equipo de contenedores de aprendizaje profundo (DLC) de AWS y crea y mantiene imágenes de contenedores Docker listas para producción que permiten a los clientes entrenar e implementar modelos de aprendizaje profundo en servicios de AWS, incluidos SageMaker, EC2, ECS y EKS.

Nick canción

Nick canción

Nick Song es ingeniero de desarrollo de software en AWS y trabaja en AMI de aprendizaje profundo para ofrecer una infraestructura de aprendizaje profundo optimizada para los clientes.