Todos os produtos
Search
Central de documentação

Platform For AI:Deploy model services with custom images

Última atualização: Jun 30, 2026

Se as imagens oficiais do EAS não atenderem aos seus requisitos, use uma imagem personalizada para empacotar um ambiente de execução completo.

Planejamento do registro de imagens

O EAS baixa imagens de um registro ao implantar serviços. Armazene suas imagens no Container Registry ACR e use o endereço VPC para garantir melhor desempenho e segurança.

Importante

Baixar imagens pela internet pública gera riscos de segurança e é significativamente mais lento. Não use acesso pela internet pública para baixar imagens.

ACR Personal Edition

  • Gratuito, mas disponível apenas em uma única região. Baixar imagens entre regiões exige um endereço de internet pública.

  • Use o ACR Personal Edition apenas para testes e certifique-se de que ele esteja na mesma região do serviço EAS.

ACR Enterprise Edition

  • Oferece segurança reforçada, alto desempenho e sincronização global. Os serviços EAS podem baixar imagens com segurança e alta velocidade pela rede privada, tanto na mesma região quanto entre regiões diferentes.

  • Use o ACR Enterprise Edition em ambientes de produção.

Registro de imagens auto-hospedado

  • Se você usar um registro auto-hospedado, como o Harbor, em uma VPC da Alibaba Cloud, o endereço do registro será acessível apenas dentro dessa VPC. Assim como no ACR Enterprise Edition, configure a VPC do serviço EAS para que o registro e o serviço estejam na mesma VPC.

Autenticação no registro de imagens

Para registros privados que exigem autenticação, forneça as credenciais ao implantar o serviço.

No arquivo de configuração JSON, use o parâmetro dockerAuth para especificar as credenciais de autenticação. O valor deve ser a forma codificada em Base64 de username:password.

Por exemplo, para abcd:abcde12345, execute echo -n "abcd:abcde12345" | base64 para obter YWJjZDphYmNkZTEy****, valor a ser usado em dockerAuth.

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

Ao usar um registro de imagens ACR sob a mesma conta Alibaba Cloud e na mesma região, o EAS permite baixar imagens sem credenciais — não é necessário nome de usuário ou senha.

Início rápido: crie e implante uma imagem personalizada

Esta seção demonstra como criar uma imagem de serviço web com Gunicorn e Flask em uma instância ECS da Alibaba Cloud, enviá-la para o ACR e implantá-la como um serviço online no EAS.

Etapa 1: Prepare o ambiente

Antes de começar, verifique se os seguintes recursos estão prontos:

  • Virtual Private Cloud (VPC): Serviços EAS, instâncias ECS e o ACR se comunicam por meio de uma VPC para garantir operações estáveis e seguras de envio e download de imagens.

  • Container Registry (ACR): Armazena e gerencia suas imagens personalizadas. Consulte Enviar e obter imagens para configurar uma instância do ACR Enterprise Edition com os namespaces e repositórios necessários.

  • Ambiente de desenvolvimento: Crie uma instância ECS com a seguinte configuração para compilar sua imagem:

    • Tipo de instância: ecs.u1-c1m2.large

    • Imagem: Alibaba Cloud Linux 3.2104 LTS 64 bits

    • Extensão: Docker Community Edition

    • Rede: Adicione a VPC às configurações de controle de acesso da instância do ACR Enterprise Edition; caso contrário, o envio de imagens para o ACR falhará. Para mais detalhes, consulte Configurar controle de acesso VPC para o ACR.

    Nota

    Você também pode usar um ambiente de desenvolvimento local ou outro ambiente.

    • Ambiente de desenvolvimento local: Instale e execute o Docker para compilar imagens.

    • Ambiente de desenvolvimento DSW: Na coluna Actions da instância DSW, clique em Create Image. O sistema compila uma imagem Docker e a salva no ACR. Durante a implantação, selecione Custom Image para escolher a imagem em uma lista suspensa. Para mais detalhes, consulte Criar uma imagem de instância DSW.

Etapa 2: Prepare os arquivos da aplicação

Crie uma pasta de projeto (por exemplo, my-app) com os seguintes arquivos:

  1. requirements.txt (dependências da aplicação)

    flask
    gunicorn
  2. app.py (código da aplicação web)

    from flask import Flask
    
    app = Flask(__name__)
    
    @app.route('/hello/model')
    def hello_world():
        # Add your model inference or business logic here
        return 'Hello World from Gunicorn!'
    
    # Note: No app.run() needed — Gunicorn starts the app
  1. Dockerfile (instruções de compilação da imagem)

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

Etapa 3: Compile e envie a imagem

  1. Abra um terminal e acesse a pasta do projeto (my-app).

  2. Faça login na instância do ACR. Substitua os espaços reservados no comando pelos valores reais.

    # Example: docker login --username=your_user my-registry.cn-hangzhou.aliyuncs.com
    docker login --username=<username> <ACR registry domain>
  3. Compile a imagem com a tag completa.

    # Example: docker build -t my-registry.cn-hangzhou.aliyuncs.com/my-namespace/flask-app:v1 .
    docker build -t <ACR registry domain>/<namespace>/<repository name>:<tag> .
  4. (Recomendado) Verifique a imagem localmente antes de enviar. Execute o comando abaixo para confirmar se a imagem inicia corretamente antes de enviá-la ao ACR, evitando imagens corrompidas no registro.

    # Replace <port> with the port declared in your Dockerfile's EXPOSE instruction (8000 in this example)
    docker run -p <port>:<port> <ACR registry domain>/<namespace>/<repository name>:<tag>

    Se a aplicação responder normalmente, a imagem está pronta para envio.

  5. Envie a imagem para o ACR.

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

Etapa 4: Implante o serviço

  1. Faça login no PAI console. Selecione uma região no topo da página. Em seguida, escolha o workspace desejado e clique em Elastic Algorithm Service (EAS).

  2. Clique em Deploy Service, selecione Custom Model Deployment > Custom Deployment.

  3. Configure os seguintes parâmetros principais:

    • Deployment Method: Selecione Image-based Deployment.

    • Image Configuration: Selecione Image Address, depois insira o endereço completo da imagem obtido na etapa anterior.

      Como este exemplo usa o ACR sob a mesma conta Alibaba Cloud, o EAS pode baixar a imagem sem credenciais.
    • Command to Run: gunicorn -w 4 -b 0.0.0.0:8000 app:app

      Como funciona : O comando de execução inserido no console EAS substitui a instrução CMD do Dockerfile. Definir o comando de inicialização aqui facilita a depuração e atualizações futuras.
    • Port Number: 8000.

    • Deployment: Recursos de CPU são suficientes para este exemplo. Em Public Resources, selecione ecs.c6.large.

    • VPC: Selecione uma VPC, vSwitch e grupo de segurança.

      Certifique-se de que a VPC selecionada foi adicionada às configurações de controle de acesso da instância do ACR. Caso contrário, o download de imagens falhará devido a problemas de conectividade de rede (um erro comum é ImagePullBackOff ).
  4. Clique em Deploy. Quando o status do serviço mudar para Running, a implantação estará concluída.

Nota

Atualização do endereço da imagem ou configuração do serviço: A configuração JSON na página de detalhes do serviço é somente leitura. Para fazer alterações, use a opção Update na lista de serviços.

Etapa 5: Teste o serviço

Após a implantação do serviço, obtenha o endereço do endpoint e o token, e execute o comando abaixo para testar o serviço Flask:

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

Se a resposta for Hello World from Gunicorn!, o serviço foi implantado e está acessível.

Para mais informações sobre como chamar serviços, consulte Métodos de invocação de serviço.

Conceitos principais e limitações

  • Rede: Os serviços EAS acessam recursos de rede privada por meio de endereços VPC, o que geralmente exige configuração de VPC. Para acessar recursos da internet pública — como instalar dependências de fontes públicas com pip, chamar APIs externas ou baixar imagens pela internet — configure um gateway NAT para a VPC. Para mais detalhes, consulte Acesso do EAS a recursos públicos e privados.

    Nota sobre custos : O gateway NAT é um serviço pago e gera cobranças adicionais.
  • Portas:

    • O mecanismo de serviço EAS reserva as portas 8080 e 9090. Não use essas portas em sua aplicação, pois o serviço falhará ao iniciar devido a conflitos de porta.

    • Quando um serviço inclui vários contêineres, cada contêiner deve escutar em uma porta diferente. Por exemplo, se o contêiner principal usa a porta 8000, o contêiner sidecar não pode usar também a porta 8000, caso contrário o serviço falhará ao iniciar devido a conflitos de porta.

  • Versão do CUDA: A versão do CUDA para um serviço online é determinada pelo tipo de instância e pela imagem base selecionados, e não pode ser alterada enquanto o serviço está em execução. Para mudar a versão do CUDA, reimplemente o serviço e selecione uma imagem ou tipo de instância compatível com a versão desejada.

  • Injeção de sidecar: Para autenticação, autorização e monitoramento, o EAS injeta um contêiner proxy na instância de serviço no modo sidecar. Esse proxy é transparente para sua aplicação, mas consome uma pequena quantidade de recursos. Ele roteia solicitações externas com segurança para a porta de serviço configurada.

  • Suporte a protocolos de API: Implantações baseadas em imagem suportam HTTP, WebSocket e gRPC (HTTP/2) para serviços de API executados dentro do contêiner.

Aplicação em produção

  • Separe a imagem do modelo: Mantenha os arquivos de código e de modelo separados. Empacote o código na imagem, armazene os arquivos de modelo no Object Storage (OSS) ou Network-Attached Storage (NAS), e monte-os no contêiner durante a implantação usando o recurso Montagens de armazenamento na página de implantação do EAS. Isso reduz o tempo de download de imagens durante atualizações de serviço e operações de scale-out.

  • Baixe imagens pela rede privada: Configure uma VPC para seu serviço para que ele possa baixar imagens do ACR usando o endereço VPC, garantindo segurança e desempenho.

  • Pré-instale dependências para reduzir o tempo de cold start: Se seu serviço precisa baixar pacotes Python ou arquivos de modelos grandes a cada reinicialização, os tempos de cold start aumentam significativamente. Inclua o ambiente Python, pacotes (como PyTorch e Transformers) e arquivos de modelo diretamente na imagem para que o contêiner possa atender solicitações imediatamente após a inicialização, sem precisar baixar nada em tempo de execução.

  • Registre imagens como ativos de IA: Se uma imagem personalizada se aplica a vários cenários, use o recurso de imagens do PAI AI Assets para registrá-la e gerenciá-la centralizadamente.

  • Configure verificações de integridade: Defina verificações de integridade para seu serviço para que o EAS reinicie automaticamente instâncias não saudáveis e mantenha a estabilidade do serviço. Para mais detalhes, consulte Configurar verificações de integridade.

  • Ative o dimensionamento automático: Quando a carga de tráfego oscilar significativamente, ative o Dimensionamento automático horizontal para lidar com mudanças de tráfego de forma elástica e econômica.

Perguntas frequentes

P: Falha no download de imagem com ImagePullBackOff

Siga esta ordem para solucionar o problema:

  1. Endereço da imagem: Verifique se o endereço da imagem, namespace e tag estão corretos, e se a imagem foi enviada com sucesso para o registro.

  2. Espaço em disco do sistema: Se você encontrar o erro no space left on device, expanda o disco do sistema.

  3. Conectividade de rede:

  4. Controle de acesso do ACR: Com base no tipo de endereço de imagem usado, verifique se o Controle de acesso à internet ou o Controle de acesso VPC está configurado para o ACR.

  5. Credenciais do registro: Se estiver usando um registro privado que exige autenticação (não sendo o ACR sob sua própria conta), verifique se as credenciais na configuração de imagem estão corretas.

P: Como uso uma imagem do ACR entre regiões?

Por padrão, o EAS pode baixar imagens de repositórios do ACR na mesma região pela rede privada VPC. Se a instância do ACR e o serviço EAS estiverem em regiões diferentes, o acesso pela rede privada não estará disponível. Use uma das seguintes abordagens:

  • Opção 1 (recomendada): Crie uma nova instância do ACR na mesma região do serviço EAS e envie a imagem para esse repositório regional antes de implantar. Isso evita problemas entre regiões.

  • Opção 2: Conecte as VPCs de ambas as regiões usando a Cloud Enterprise Network (CEN) para habilitar o download pela rede privada entre regiões. Para mais detalhes, consulte Acessar uma instância Enterprise Edition entre regiões ou a partir de um data center.

  • Opção 3 (apenas para testes): Baixe imagens por um endereço de internet pública. Certifique-se de que o acesso público esteja ativado para o ACR e que a VPC do serviço EAS tenha um gateway NAT para acesso à internet. Esta opção é lenta e apresenta riscos de segurança — use-a apenas para testes.

P: O que significa "no match for platform in manifest" ao implantar uma imagem personalizada?

Esse erro indica que a arquitetura da imagem (por exemplo, arm64) não corresponde ao ambiente de execução da instância EAS (geralmente amd64/x86_64). Isso ocorre frequentemente ao compilar uma imagem em um Mac com Apple Silicon (ARM) e implantá-la em uma instância EAS (amd64). Para resolver:

  1. Confirme a arquitetura de CPU da instância EAS de destino (a maioria das instâncias EAS usa amd64).

  2. Recompile a imagem localmente para corresponder à arquitetura da instância EAS:

    # Build an amd64 image (compatible with most EAS instances)
    docker build --platform linux/amd64 -t <ACR registry domain>/<namespace>/<repository name>:<tag> .
  3. Envie a nova imagem para o ACR e reimplemente o serviço.

P: O ACK pode se conectar ao registro de imagens dedicado do EAS (imagens oficiais do PAI)?

Não. O registro de imagens dedicado do EAS não suporta conexões diretas do ACK.

Para mais problemas, consulte Perguntas frequentes do EAS.