Todos los productos
Search
Centro de documentos

Platform For AI:Deploy model services with custom images

Última actualización: Sep 22, 2026

Cuando las imágenes oficiales que proporciona EAS no cumplen con los requisitos de su negocio o entorno, empaquete un entorno de ejecución completo en una imagen personalizada. Esto le permite desplegar servicios de modelos de forma flexible y confiable.

Inicio rápido: compilar y desplegar una imagen personalizada

Compile una imagen de servicio web basada en Gunicorn y Flask en una instancia ECS de Alibaba Cloud. Después, envíela a un repositorio de ACR mediante una red privada y despliéguela como un servicio en línea de EAS.

Paso 1: Preparar el entorno

Antes de empezar, asegúrese de contar con a continuación recursos en la misma región (por ejemplo, China (Hangzhou)):

1.1 VPC

Prepare una VPC, como VPC_HZ. Para crear una, consulte VPCs and vSwitches.

Tanto la instancia ECS como el servicio de EAS usan esta VPC para garantizar que el envío y la extracción de imágenes sean estables y seguros.

1.2 Container Registry (ACR)

Cree una instancia de ACR Enterprise Edition para almacenar y gestionar imágenes personalizadas. Para obtener más información sobre los repositorios de imágenes, consulte Choose an image registry.

A continuación se muestran los pasos principales. Para más detalles, consulte Push and pull images:

  1. Inicie sesión en la consola de Container Registry.

  2. Cree una instancia de Enterprise Edition. Este tema utiliza la región China (Hangzhou) y la edición Basic. Mantenga la configuración predeterminada para los demás parámetros.

  3. Cree un espacio de nombres, como pai-demo.

  4. Cree un repositorio de imágenes, como flask-app. Seleccione Local Repository como origen del código.

  5. Configure el control de acceso de la VPC.

    1. En el panel de navegación izquierdo de la página de administración de la instancia de Enterprise Edition, elija Repository > Access Control.

    2. En la pestaña VPC, haga clic en Add VPC . Seleccione VPC_HZ como VPC.

1.3 Entorno de desarrollo (ECS)

Cree una instancia ECS con las siguientes especificaciones para compilar la imagen.

  • Tipo de instancia: ecs.u1-c1m2.large

  • Imagen: Alibaba Cloud Linux 3.2104 LTS 64-bit

  • Extensión: Docker Community Edition

  • Red: seleccione VPC_HZ (la VPC seleccionada debe agregarse a la lista de control de acceso de la instancia de ACR Enterprise Edition; de lo contrario, no se podrán enviar imágenes al repositorio de ACR).

Nota

También puede usar un entorno de desarrollo local u otro distinto.

  • Entorno de desarrollo local: instale y ejecute Docker para compilar imágenes de manera local.

  • Entorno de desarrollo DSW: en la lista de instancias de DSW, haga clic en Create Image en la columna Actions. El sistema compila una imagen de Docker y la guarda en ACR. Al desplegar el servicio, seleccione Custom Image para elegir una opción de la lista desplegable. Para más detalles, consulte Create a DSW instance image.

Paso 2: Preparar los archivos del proyecto

Inicie sesión en la instancia ECS, cree una carpeta de proyecto como my-app y agregue los tres archivos siguientes:

  1. requirements.txt (dependencias de la aplicación)

    flask
    gunicorn
  2. app.py (código de la aplicación web)

    from flask import Flask
    
    app = Flask(__name__)
    
    @app.route('/hello/model')
    def hello_world():
        # Integrate your model inference or other business logic here
        return 'Hello World from Gunicorn!'
    
    # Note: app.run() is not needed. Gunicorn starts the application.
  3. Dockerfile (instrucciones para compilar la imagen)

    # 1. Use the lightweight official Python image as the base
    FROM python:3.9-slim
    
    # 2. Set the working directory
    WORKDIR /app
    
    # 3. Copy the dependencies file and install. This layer is cached to speed up subsequent builds.
    COPY requirements.txt .
    RUN pip install --no-cache-dir -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
    
    # 4. Copy the application code
    COPY app.py .
    
    # 5. Declare the service port
    EXPOSE 8000
    
    # 6. Define the default container startup command (can be overridden by the Run Command in the EAS console)
    CMD ["gunicorn", "-w", "4", "-b", "0.0.0.0:8000", "app:app"]

Paso 3: Compilar y enviar la imagen

  1. Abra una terminal y vaya a la carpeta del proyecto (my-app).

  2. Inicie sesión en su instancia de ACR. Reemplace los marcadores de posición del comando con sus valores reales.

    Nota

    En la página de detalles del repositorio de ACR encontrará ejemplos de comandos para iniciar sesión, extraer y enviar imágenes. Estos ejemplos usan endpoints públicos; reemplácelos por endpoints privados.

    # Example: docker login --username=your_user my-registry-vpc.cn-hangzhou.aliyuncs.com
    docker login --username=<username> <ACR private endpoint>
  3. Compile la imagen de Docker y asígnele una etiqueta con la ruta completa del repositorio.

    # Example: docker build -t my-registry-vpc.cn-hangzhou.aliyuncs.com/pai-demo/flask-app:v1 .
    # The full image address is <ACR private endpoint>/<namespace>/<repository name>:<tag>
    docker build -t <ACR private endpoint>/<namespace>/<repository name>:<tag> .
  4. (Recomendado) Compruebe la imagen de manera local antes de enviarla. Ejecute el siguiente comando para asegurarse de que la imagen inicia correctamente antes de enviarla al repositorio.

    # Replace <port> with the EXPOSE port in your Dockerfile (8000 in this example)
    docker run -p <port>:<port> <ACR private endpoint>/<namespace>/<repository name>:<tag>

    Si la aplicación responde según lo esperado, la imagen está lista para enviarse.

  5. Envíe la imagen a ACR.

    # Example: docker push my-registry-vpc.cn-hangzhou.aliyuncs.com/pai-demo/flask-app:v1
    docker push <ACR endpoint>/<namespace>/<repository name>:<tag>

Paso 4: Desplegar el servicio

  1. Inicie sesión en la PAI console. Seleccione una región en la parte superior de la página. Luego, seleccione el espacio de trabajo deseado y haga clic en Enter Elastic Algorithm Service (EAS).

  2. Haga clic en Deploy Service y elija Custom Model Deployment > Custom Deployment.

  3. Configure los siguientes parámetros clave:

    • Deployment Method: seleccione Image-based Deployment.

    • Image Configuration: seleccione Image Address e introduzca la dirección completa de la imagen del paso anterior: my-registry-vpc.cn-hangzhou.aliyuncs.com/pai-demo/flask-app:v1.

      Como este ejemplo usa ACR bajo la misma cuenta de Alibaba Cloud, EAS puede extraer la imagen sin credenciales. No se requiere nombre de usuario ni contraseña.
    • Command to Run: gunicorn -w 4 -b 0.0.0.0:8000 app:app

      El campo Run Command de la PAI console anula la instrucción CMD del Dockerfile. Introduzca aquí el comando de inicio para facilitar la depuración y las modificaciones posteriores.
    • Port Number: 8000.

    • Deployment: este ejemplo utiliza recursos de CPU. Seleccione Public Resources y elija ecs.c6.large.

    • VPC: seleccione una VPC (VPC_HZ), un vSwitch y un security group.

      Asegúrese de que la VPC seleccionada se haya agregado a la lista de control de acceso de la instancia de ACR. De lo contrario, la extracción de la imagen fallará por problemas de conectividad de red. Un error común es ImagePullBackOff .
  4. Haga clic en Deploy. El despliegue se completa cuando el estado del servicio cambia a Running.

Nota

Actualizar la dirección de la imagen o la configuración del servicio: la configuración JSON que se muestra en la página de detalles del servicio es de solo lectura y no se puede editar directamente. Para modificarla, use la opción Update en la lista de servicios.

Paso 5: Probar el servicio

Una vez desplegado el servicio, obtain the endpoint and token y ejecute el siguiente comando para probar el servicio Flask:

# Replace <endpoint> and <token> with the actual service endpoint and token
curl <endpoint>/hello/model -H "Authorization: <token>"

Si se devuelve Hello World from Gunicorn!, el servicio se desplegó correctamente y está accesible.

Para obtener más información sobre la invocación de servicios, consulte Service invocation methods.

Conceptos clave y limitaciones

  • Red: los servicios de EAS acceden a los recursos internos mediante endpoints de VPC y, por lo general, requieren configurar una VPC. Si necesita acceder a recursos de Internet (por ejemplo, usar pip para instalar dependencias desde fuentes públicas, llamar a API externas o extraer imágenes por Internet), también debe configurar una puerta de enlace NAT para la VPC. Para más detalles, consulte EAS access to public and private resources.

    Nota sobre costos: La puerta de enlace NAT es un servicio de pago y genera cargos adicionales.
  • Restricciones de puertos:

    • El motor de servicios de EAS utiliza los puertos 8080 y 9090. Su aplicación no debe escuchar en estos puertos. De lo contrario, el servicio no podrá iniciarse debido a conflictos de puertos.

    • Cuando un servicio tiene varios contenedores, cada uno debe escuchar en un puerto distinto. Por ejemplo, si el contenedor principal usa el puerto 8000, el contenedor sidecar no puede usar también el puerto 8000. En caso contrario, el servicio no se iniciará por conflictos de puertos.

  • Versión de CUDA: la versión de CUDA de un servicio en línea depende del tipo de instancia y de la imagen base seleccionados, y no se puede cambiar durante la ejecución. Para cambiar de versión de CUDA, vuelva a desplegar el servicio con una imagen o un tipo de instancia compatible con la versión de destino.

  • Inyección de sidecar: EAS inyecta un contenedor de proxy en cada instancia de servicio como sidecar para la autenticación, la autorización y el monitoreo. Este proxy es transparente, pero consume algunos recursos y reenvía las solicitudes externas al puerto de servicio configurado.

  • Compatibilidad de protocolos de API: el despliegue de imágenes admite los protocolos HTTP, WebSocket y gRPC (HTTP/2) para los servicios de API dentro de la imagen.

Elegir un registro de imágenes

Tipos de registros de imágenes

EAS extrae imágenes de un registro al desplegar servicios. Se recomienda usar Container Registry (ACR) de Alibaba Cloud para almacenarlas. Utilice endpoints de VPC para extraer imágenes y mejorar el rendimiento y la seguridad.

Importante

Extraer imágenes por Internet es inseguro y lento. No utilice endpoints públicos en entornos de producción.

Tipo de registro

Descripción

ACR Personal Edition

  • Es gratuito, pero está limitado a una sola región. La extracción de imágenes entre regiones solo está disponible por Internet.

  • Utilice ACR Personal Edition únicamente para pruebas. Asegúrese de que esté en la misma región que el servicio de EAS.

ACR Enterprise Edition

  • Ofrece mayor seguridad, mejor rendimiento y sincronización global. Admite la extracción de imágenes segura y de alta velocidad dentro de la misma región o entre regiones mediante la red privada.

  • Recomendado para entornos de producción.

Registro autogestionado

Si utiliza un registro autogestionado como Harbor dentro de una VPC de Alibaba Cloud, la dirección del registro solo será accesible dentro de esa VPC. Al igual que con ACR Enterprise Edition, configure una VPC para el servicio de EAS de modo que el registro y el servicio estén en la misma VPC.

Autenticación en el registro de imágenes

Para los registros que requieren autenticación, proporcione las credenciales al desplegar el servicio.

Especifique las credenciales en el archivo de configuración JSON mediante el parámetro dockerAuth. El valor corresponde a la codificación Base64 de username:password.

Por ejemplo, para codificar abcd:abcde12345, ejecute echo -n "abcd:abcde12345" | base64 para obtener YWJjZDphYmNkZTEy****. Use este resultado como valor de dockerAuth.

{"dockerAuth": "YWJjZDphYmNkZTEy****"}
Nota

Cuando utiliza un repositorio de ACR en la misma región y bajo la misma cuenta de Alibaba Cloud, EAS puede extraer imágenes sin credenciales. No se requiere nombre de usuario ni contraseña.

Recomendaciones para producción

  • Separe las imágenes de los modelos: mantenga siempre separados el código y los archivos de los modelos. Empaquete el código en la imagen y almacene los modelos en OSS o NAS. Utilice la función Storage mounts para montar los modelos en el contenedor durante el despliegue en EAS. Así reducirá el tiempo de extracción de imágenes en las actualizaciones y ampliaciones del servicio.

  • Extraiga imágenes por la red privada: por motivos de seguridad y rendimiento, configure una VPC para el servicio de modo que pueda extraer imágenes de ACR a través de un endpoint de VPC.

  • Preinstale las dependencias para optimizar el tiempo de inicio: si el servicio descarga paquetes de Python o archivos de modelos grandes en cada reinicio, el tiempo de arranque en frío aumentará considerablemente. Preinstale el entorno de Python, las dependencias (como PyTorch y Transformers) y los archivos de modelos en la imagen para que el contenedor atienda solicitudes inmediatamente después de iniciar.

  • Registre la imagen como un recurso de IA: si la imagen personalizada aplica a varios escenarios, utilice la función de imágenes de PAI AI Assets para gestionarla como un recurso de IA reutilizable.

  • Configure comprobaciones de estado: establezca comprobaciones de estado para el servicio. EAS reinicia automáticamente las instancias con problemas para mantener la estabilidad del servicio. Para más detalles, consulte Health checks.

  • Habilite el escalado automático: cuando la carga de trabajo presenta fluctuaciones significativas de tráfico, habilite Horizontal auto scaling para gestionar los cambios de tráfico de forma elástica y rentable.

Preguntas frecuentes

P: Error al extraer la imagen (ImagePullBackOff)

Compruebe los siguientes puntos:

  1. Dirección de la imagen: compruebe que la dirección de la imagen, el espacio de nombres y la etiqueta sean correctos, y que la imagen se haya enviado al repositorio.

  2. Espacio en disco del sistema: si aparece el error no space left on device, expand the system disk.

  3. Conectividad de red:

  4. Control de acceso de ACR: según el tipo de dirección de imagen que utilice, compruebe si se configuró Configure internet access control o Configure VPC access control de ACR.

  5. Autenticación en el registro: si utiliza un registro privado que requiere autenticación (distinto de ACR bajo su cuenta), compruebe que las credenciales en Image Configuration sean correctas.

P: ¿Cómo uso imágenes de ACR entre regiones?

De forma predeterminada, EAS puede extraer imágenes de repositorios de ACR en la misma región mediante endpoints privados de VPC. Si la instancia de ACR y el servicio de EAS están en regiones distintas, no hay acceso directo por red privada. Utilice uno de los siguientes métodos:

  • Método 1 (recomendado): cree una instancia de ACR en la misma región que el servicio de EAS, envíe la imagen al repositorio local y luego realice el despliegue. Esto elimina por completo los problemas entre regiones.

  • Método 2: utilice CEN (Cloud Enterprise Network) para conectar VPC de distintas regiones y extraer imágenes por la red privada. Para más detalles, consulte Access an Enterprise Edition instance across regions or from a data center.

  • Método 3 (solo para pruebas): extraiga imágenes por Internet. Habilite el acceso público en ACR y configure una puerta de enlace NAT con acceso a Internet para el servicio de EAS. Este método es lento y presenta riesgos de seguridad. Úselo únicamente para pruebas.

P: El despliegue de la imagen personalizada falla con el mensaje "no match for platform in manifest"

Este error indica que la arquitectura de la imagen (como arm64) no coincide con el entorno de ejecución de la instancia de EAS (normalmente amd64/x86_64). EAS no puede ejecutar esta imagen en el tipo de instancia seleccionado. Suele ocurrir cuando se compila una imagen en una Mac de la serie M (arm64) y se despliega en una instancia de EAS (amd64). Para solucionarlo:

  1. Confirme la arquitectura de CPU de la instancia de EAS de destino (la mayoría de las instancias de EAS usan amd64).

  2. Vuelva a compilar la imagen de manera local para que coincida con la arquitectura de la instancia de EAS:

    # Build an amd64 image (compatible with most EAS instances)
    docker build --platform linux/amd64 -t <ACR endpoint>/<namespace>/<repository name>:<tag> .
  3. Envíe la nueva imagen a ACR y vuelva a desplegar el servicio.

P: ¿Puede ACK conectarse al registro de imágenes exclusivo de EAS (imágenes oficiales de PAI)?

El registro de imágenes exclusivo de EAS no admite conexiones directas de ACK. ACK no puede extraer imágenes del registro de imágenes exclusivo de EAS.

Para resolver otras dudas, consulte EAS FAQ.