Todos os produtos
Search
Central de documentação

Platform For AI:Deploy model services with custom images

Última atualização: Sep 23, 2026

Quando as imagens oficiais fornecidas pelo EAS não atendem aos requisitos de negócios ou do ambiente, é possível empacotar um ambiente de execução completo em uma imagem personalizada para implantar services de modelo de forma flexível e confiável.

Guia de início rápido: crie e implante uma imagem personalizada

Crie uma imagem de service web baseada em Gunicorn e Flask em uma instância ECS do Alibaba Cloud, envie-a para um repositório ACR pela rede privada e implante-a como um service online do EAS.

Etapa 1: Prepare o ambiente

Antes de começar, certifique-se de que os seguintes recursos estão disponíveis na mesma região (como a China (Hangzhou)):

1,1 VPC

Prepare uma VPC, como VPC_HZ. Para criar uma VPC, consulte VPCs and vSwitches.

Tanto a instância ECS quanto o service EAS utilizam essa VPC para garantir que o push e o pull de imagens ocorram de forma estável e segura.

1,2 Container Registry (ACR)

Crie uma instância do ACR Enterprise Edition para armazenar e gerencie imagens personalizadas. Para mais informações sobre repositórios de imagens, consulte Choose an image registry.

Siga as etapas principais abaixo. Para obter detalhes, consulte Push and pull images:

  1. Acesse o console do Container Registry.

  2. Crie uma instância Enterprise Edition. Este tópico usa a região China (Hangzhou) e a edição Basic. Mantenha as configurações padrão para os outros parâmetros.

  3. Crie um namespace como pai-demo.

  4. Crie um repositório de imagens como flask-app. Selecione Local Repository como o source do código.

  5. Configure o controle de acesso da VPC.

    1. No painel de navegação à esquerda da página de gerenciamento da instância Enterprise Edition, escolha Repository > Access Control.

    2. Na aba VPC, clique em Add VPC . Selecione VPC_HZ como a VPC.

1,3 Ambiente de desenvolvimento (ECS)

Crie uma instância ECS com as seguintes especificações para criar a imagem.

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

  • Imagem: Alibaba Cloud Linux 3.2104 LTS 64-bit

  • Extensão: Docker Community Edition

  • Rede: Selecione VPC_HZ (adicione a VPC selecionada à lista de controle de acesso da instância ACR Enterprise Edition; caso contrário, o push de imagens para o repositório ACR falhará).

Nota

Também é possível usar um ambiente de desenvolvimento local ou alternativo.

  • Ambiente de desenvolvimento local: instale e execute o Docker para criar imagens localmente.

  • Ambiente de desenvolvimento DSW: Na lista de instâncias DSW, clique em Create Image na coluna Actions. O sistema cria uma imagem Docker e a salva no ACR. Ao implantar o service, selecione Custom Image e selecione-a na lista suspensa. Para mais detalhes, consulte Create a DSW instance image.

Etapa 2: Prepare os arquivos do projeto

Acesse a instância ECS, crie uma pasta do projeto como my-app e adicione os três arquivos a seguir:

  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():
        # 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 (instruções de criação da imagem)

    # 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"]

Etapa 3: Crie e envie a imagem

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

  2. Faça login na sua instância ACR. Substitua os placeholders no comando pelos seus valores reais.

    Nota

    Na página de detalhes do repositório ACR, há exemplos de comandos de login, pull e push. Os exemplos usam endpoints públicos. Substitua-os por endpoints privados.

    # Example: docker login --username=your_user my-registry-vpc.cn-hangzhou.aliyuncs.com
    docker login --username=<username> <ACR private endpoint>
  3. Crie a imagem Docker e aplique a tag com o caminho completo do repositório.

    # 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) Verifique a imagem localmente antes do push. Execute o comando a seguir para verificar se a imagem inicia corretamente antes de enviá-la ao repositório.

    # 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>

    Se a aplicação responder conforme o esperado, a imagem estará pronta para o push.

  5. Faça o push da imagem para o ACR.

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

Etapa 4: Implante o service

  1. Acesse o PAI console. Selecione uma região na parte superior da página. Em seguida, selecione o workspace desejado e clique em Enter Elastic Algorithm Service (EAS).

  2. Clique em Deploy Service e escolha Custom Model Deployment > Custom Deployment.

  3. Configure os seguintes parâmetros principais:

    • Deployment Method: Selecione Image-based Deployment.

    • Image Configuration: Selecione Image Address e insira o endereço completo da imagem da etapa anterior: my-registry-vpc.cn-hangzhou.aliyuncs.com/pai-demo/flask-app:v1.

      Como este exemplo usa o ACR na mesma conta Alibaba Cloud, o EAS pode fazer o pull da imagem sem credenciais. Não é necessário nome de usuário nem senha.
    • Command to Run: gunicorn -w 4 -b 0.0.0.0:8000 app:app

      O Run Command no console do EAS substitui a instrução CMD no Dockerfile. Para facilitar a depuração e a modificação posterior, defina o comando de inicialização aqui.
    • Port Number: 8000.

    • Deployment: Este exemplo usa recursos de CPU. Selecione Public Resources e escolha ecs.c6.large.

    • VPC: Selecione uma VPC (VPC_HZ), um vSwitch e um grupo de segurança.

      Certifique-se de adicionar a VPC selecionada aqui à lista de controle de acesso da instância ACR. Caso contrário, o pull da imagem falhará devido a problemas de conectividade de rede. Um erro comum é ImagePullBackOff .
  4. Clique em Deploy. A implantação é bem-sucedida quando o status do service muda para Running.

Nota

Atualize o endereço da imagem ou a configuração do service: A configuração JSON exibida na página de detalhes do service é somente leitura e não permite edição direta, então modifique a configuração usando a opção Update na lista de services e atualize os parâmetros.

Etapa 5: Teste o service

Após implantar o service, obtain the endpoint and token e execute o comando a seguir para testar o service Flask:

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

Se o retorno for Hello World from Gunicorn!, o service estará implantado e acessível.

Para mais informações sobre como invocar o service, consulte Service invocation methods.

Principais conceitos e limitações

  • Rede: Os services do EAS acessam recursos internos por meio de endpoints VPC e geralmente exigem a configuração de VPC. Para acessar recursos na Internet (por exemplo, usar pip para instalar dependências de fontes públicas, chamar APIs externas ou fazer pull de imagens pela Internet), configure também um NAT gateway para a VPC. Para mais detalhes, consulte EAS access to public and private resources.

    Nota de custo: O NAT gateway é um service pago e gera cobranças adicionais.
  • Restrições de porta:

    • O mecanismo do service EAS usa as portas 8080 e 9090. A sua aplicação não deve escutar nessas portas. Caso contrário, o service não iniciará devido a conflitos de porta.

    • Quando um service tem vários containers, cada container deve escutar em uma porta diferente. Por exemplo, se o container principal usa a porta 8000, o container sidecar não pode usar a mesma porta 8000. Caso contrário, o service não iniciará devido a conflitos de porta.

  • Versão do CUDA: O tipo de instância e a imagem base selecionados determinam a versão do CUDA para um service online, e não é possível alterá-la em tempo de execução. Para alterar a versão do CUDA, reimplante o service com uma imagem ou tipo de instância que suporte a versão de destino do CUDA.

  • Injeção de sidecar: O EAS injeta um container de proxy em cada instância do service como um sidecar para autenticação, autorização e monitoramento. O proxy é transparente, mas consome alguns recursos e encaminha solicitações externas para a porta configurada do service.

  • Suporte a protocolos de API: A implantação por imagem suporta os protocolos HTTP, WebSocket e gRPC (HTTP/2) para services de API dentro da imagem.

Escolha um registro de imagens

Tipos de registro de imagens

O EAS faz o pull de imagens de um registro de imagens ao implantar services. Recomendamos o Container Registry (ACR) do Alibaba Cloud para armazenamento de imagens. Use endpoints VPC para fazer o pull de imagens, para garantir melhor desempenho e segurança.

Importante

O pull de imagens pela Internet é inseguro e lento. Não use endpoints públicos em produção.

Tipo de registro

Descrição

ACR Personal Edition

  • Gratuita, mas limitada a uma única região. O pull de imagens entre regiões está disponível apenas pela Internet.

  • Use o ACR Personal Edition apenas para testes. Certifique-se de que ele esteja na mesma região do service EAS.

ACR Enterprise Edition

  • Oferece segurança mais robusta, melhor desempenho e sincronização global. Suporta o pull de imagens seguro e de alta velocidade na mesma região ou entre regiões pela rede privada.

  • Recomendada para ambientes de produção.

Registro autogerenciado

Ao usar um registro autogerenciado como o Harbor em uma VPC do Alibaba Cloud, o endereço do registro só será acessível dentro da VPC. Assim como no ACR Enterprise Edition, configure uma VPC para o service EAS de modo que o registro e o service EAS estejam na mesma VPC.

Autenticação no registro de imagens

Se o registro exigir autenticação, forneça as credenciais ao implantar o service.

Especifique as credenciais no arquivo de configuração JSON por meio do parâmetro dockerAuth. O valor corresponde à codificação Base64 de username:password.

Por exemplo, para codificar abcd:abcde12345, execute echo -n "abcd:abcde12345" | base64 para obter YWJjZDphYmNkZTEy****. Use esse resultado como o valor de dockerAuth.

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

Ao usar um repositório ACR na mesma região e sob a mesma conta Alibaba Cloud, o EAS pode fazer o pull de imagens sem credenciais. Não é necessário nome de usuário nem senha.

Recomendações para produção

  • Separe imagens de modelos: Mantenha sempre os arquivos de código e de modelo separados. Empacote o código na imagem e armazene os modelos no OSS ou NAS. Use o recurso Storage mounts para montar os modelos no container durante a implantação do EAS. Essa prática reduz o tempo de pull da imagem durante atualizações e scale-outs do service.

  • Faça o pull de imagens pela rede privada: Para garantir segurança e desempenho, configure uma VPC para o service, para que ele faça o pull de imagens do ACR por meio de um endpoint VPC.

  • Pré-instale dependências para otimizar o tempo de inicialização: Se o service baixar pacotes Python ou arquivos de modelo grandes a cada reinicialização, o tempo de cold start aumenta significativamente. Pré-instale o ambiente Python, as dependências (como PyTorch e Transformers) e os arquivos de modelo na imagem para que o container possa atender às solicitações imediatamente após a inicialização.

  • Registre a imagem como um ativo de IA: Caso a imagem personalizada se aplique a vários cenários, use o recurso de imagem do PAI AI Assets para gerenciá-la como um ativo de IA reutilizável.

  • Configure health checks: Configure verificações de integridade para o service. O EAS reinicia automaticamente instâncias com falha para manter a estabilidade do service. Para mais detalhes, consulte Health checks.

  • Ative o auto scaling: Quando a carga de trabalho apresentar flutuações significativas de tráfego, ative o Horizontal auto scaling para lidar com as variações de tráfego de forma elástica e econômica.

Perguntas frequentes

P: Falha no pull da imagem (ImagePullBackOff)

Verifique os seguintes itens:

  1. Endereço da imagem: Verifique se o endereço da imagem, o namespace e a tag estão corretos, e se você fez o push da imagem para o repositório.

  2. Espaço em disco do sistema: Ao encontrar o erro no space left on device, expand the system disk.

  3. Conectividade de rede:

  4. Controle de acesso do ACR: Dependendo do tipo de endereço de imagem em uso, verifique a configuração do Configure internet access control ou do Configure VPC access control do ACR.

  5. Autenticação do registro: Ao usar um registro privado com exigência de autenticação (diferente do ACR da sua conta), verifique se as credenciais em Image Configuration estão corretas.

P: Como uso imagens do ACR entre regiões?

Por padrão, o EAS faz o pull de imagens de repositórios ACR na mesma região por meio de endpoints privados VPC. Se a instância ACR e o service EAS estiverem em regiões diferentes, não há acesso direto pela rede privada. Use um dos métodos a seguir:

  • Método 1 (recomendado): Crie uma instância ACR na mesma região do service EAS, faça o push da imagem para o repositório local e, em seguida, implante. Isso elimina completamente os problemas entre regiões.

  • Método 2: Use o CEN (Cloud Enterprise Network) para conectar VPCs entre regiões e fazer o pull de imagens pela rede privada. Para mais detalhes, consulte Access an Enterprise Edition instance across regions or from a data center.

  • Método 3 (apenas para testes): Faça o pull de imagens pela Internet. Ative o acesso público para o ACR e configure um NAT gateway com acesso à Internet para o service EAS. Esse método é lento e apresenta riscos de segurança. Use-o apenas para testes.

P: A implantação de imagem personalizada falha com "no match for platform in manifest"

Esse erro indica que a arquitetura ARM da imagem (como arm64) não corresponde ao ambiente de execução da instância EAS (geralmente amd64/x86_64). O EAS não consegue executar essa imagem no tipo de instância selecionado. Isso geralmente ocorre ao compilar uma imagem em um Mac da série M (arm64) e implantá-la em uma instância EAS (amd64). Para corrigir:

  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 que corresponda à arquitetura da instância EAS:

    # Build an amd64 image (compatible with most EAS instances)
    docker build --platform linux/amd64 -t <ACR endpoint>/<namespace>/<repository name>:<tag> .
  3. Faça o push da nova imagem para o ACR e reimplante o service.

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

O registro de imagens dedicado do EAS não oferece suporte a conexões diretas do ACK. O ACK não consegue fazer o pull de imagens do registro de imagens dedicado do EAS.

Para outras dúvidas, consulte EAS FAQ.