Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Neste tutorial, você implantará um gerador de imagens de difusão estável usando GPUs sem servidor nos Aplicativos de Contêiner do Azure. Você pode implantar essa solução como um aplicativo do Azure Functions ou como um aplicativo de contêiner padrão, dependendo de suas necessidades.
GPUs sem servidor fornecem acesso sob demanda aos recursos de computação de GPU sem gerenciamento de infraestrutura. Você paga apenas pelo tempo de GPU usado e a solução é dimensionada automaticamente para zero quando ociosa.
Neste tutorial, você aprenderá como:
- Criar um ambiente de Aplicativos de Contêiner com perfis de carga de trabalho de GPU
- Implantar uma API de geração de imagem de IA usando GPUs sem servidor
- Testar a implantação com solicitações de texto para imagem
- Monitorar a utilização da GPU e otimizar o desempenho
- Limpar recursos para evitar custos desnecessários
Pré-requisitos
| Requirement | DESCRIÇÃO |
|---|---|
| Assinatura do Azure | Se você não tiver uma, crie uma conta gratuita. |
| Cota de GPU | Solicite acesso à cota de GPU. A aprovação normalmente leva de um a dois dias úteis. |
| CLI do Azure | Instale a CLI do Azure versão 2.62.0 ou posterior. |
| Azure Developer CLI | Instale a CLI do Desenvolvedor do Azure para implantação simplificada. |
| Área de Trabalho do Docker | Necessário para o desenvolvimento de contêineres locais. Instale o Docker Desktop. |
Importante
Solicite acesso à cota de GPU antes de iniciar este tutorial. Você pode continuar lendo enquanto aguarda a aprovação, mas a implantação requer uma cota aprovada.
Para verificar se as ferramentas estão instaladas corretamente, execute os seguintes comandos:
az --version
azd version
docker --version
Visão geral da arquitetura
Essa solução usa os seguintes serviços do Azure:
| Componente | Propósito |
|---|---|
| Aplicativos de Contêiner do Azure | Hospeda seu aplicativo com suporte a GPU sem servidor |
| Perfil de carga de trabalho de GPU | Fornece computação de GPU NVIDIA T4 para inferência de IA |
| Registro de Contêiner do Azure | Armazena sua imagem de contêiner personalizada |
| Azure Storage | Necessário para o runtime do Azure Functions (implantação do Functions somente) |
| Application Insights | Fornece monitoramento e diagnóstico |
O aplicativo segue um fluxo de solicitação simples. Quando um cliente envia uma solicitação, ela primeiro alcança o ponto de entrada dos Aplicativos de Contêiner. Em seguida, seu aplicativo processa a solicitação e a passa para o modelo de Difusão Estável em execução na GPU. O modelo gera a imagem solicitada com base no prompt e retorna a imagem gerada como uma resposta ao cliente.
Considerações de custo
GPUs sem servidor usam cobrança por segundo. Examine estes fatores de custo antes de implantar:
| Fator | Impacto |
|---|---|
| Tipo de GPU | O NVIDIA T4 custa menos de A100 |
| Réplicas mínimas | Definido como 0 para desenvolvimento (escala para zero quando ocioso) |
| Horário de inicialização a frio | A primeira solicitação leva de 1 a 2 minutos (carregamento de modelo) |
| Duração da solicitação | A geração de imagem normalmente leva de 5 a 15 segundos |
Para obter preços detalhados, consulte os preços dos Aplicativos de Contêiner do Azure.
Obter o código de exemplo
Clone o repositório de exemplo que contém a implementação do Azure Functions:
git clone https://github.com/Azure-Samples/function-on-aca-gpu.git
cd function-on-aca-gpu
O repositório contém:
| File | Propósito |
|---|---|
function_app.py |
Função disparada por HTTP para geração de imagem |
requirements.txt |
Dependências do Python, incluindo a biblioteca de difusores |
Dockerfile |
Definição de imagem de contêiner com suporte à GPU |
host.json |
Configuração do Azure Functions |
azure.yaml |
Configuração de implantação da CLI do Desenvolvedor do Azure |
Implantar usando o portal do Azure
Siga estas etapas para criar um aplicativo de contêiner habilitado para GPU e implantar a solução de geração de imagem usando o portal do Azure.
Criar um ambiente de Aplicativos de Contêiner com GPU
No portal do Azure, pesquise aplicativos de contêiner e selecione-os.
Selecione Criar>Aplicativo de Contêiner.
No separador Informações básicas , configure as seguintes definições:
Configurações Value Subscription Selecione sua Assinatura do Azure. Grupo de recursos Selecione Criar novo e insira rg-gpu-image-genNome do aplicativo de contêiner Inserir ca-image-genOrigem da implantação Selecionar imagem de contêiner Região Selecione Suécia Central Em Ambiente de Aplicativos de Contêiner, selecione Criar novo.
No painel de ambiente Criar Aplicativos de Contêiner , insira
cae-gpu-image-geno nome do ambiente.Selecione Criar para criar o ambiente.
Selecione Avançar: contêiner >.
Configurar o contêiner com GPU
Na guia Contêiner , defina as seguintes configurações:
Configurações Value Nome Inserir gpu-image-gen-containerFonte da imagem Selecione o Hub do Docker ou outros registros Tipo de imagem Selecione Público Servidor de logon do registro Inserir mcr.microsoft.comImagem e etiqueta Inserir k8se/gpu-quickstart:latestPerfil de carga de trabalho Selecionar Consumo – Até 4 vCPUs, 8 GiB de memória GPU Para habilitar a GPU, marque a caixa de seleção Tipo de GPU Selecione Consumption-GPU-NC8as-T4 e clique no link para adicionar o perfil Selecione Avançar: entrada >.
Configurar Ingress
Na guia Entrada , defina as seguintes configurações:
Configurações Value Entrada Selecione Habilitado Tráfego de entrada Selecione Aceitar tráfego de qualquer lugar Porta de destino Inserir 80Selecione Examinar + criar.
Revise suas configurações e selecione Criar.
Aguarde a conclusão da implantação (aproximadamente 5 minutos) e selecione Ir para o recurso.
Verificar a implantação
Na página Visão geral do aplicativo de contêiner, copie a URL do Aplicativo.
Abra a URL em um navegador para acessar a interface de geração de imagem.
Implantar com a CLI do Azure
Você pode implantar usando a CLI do Desenvolvedor do Azure (recomendada para o aplicativo Functions) ou a CLI do Azure (para obter mais controle sobre recursos individuais).
Opção A: Implantar como aplicativo do Azure Functions com azd
A CLI do Desenvolvedor do Azure fornece a experiência de implantação mais rápida para a implementação do Azure Functions.
Navegue até o repositório clonado:
cd function-on-aca-gpuInicialize e implante o aplicativo:
azd upQuando solicitado, forneça os seguintes valores:
Rápido Value Nome do ambiente Insira um nome exclusivo (por exemplo, gpufunc-dev)Localização do Azure Selecione swedencentralAssinatura do Azure Selecione sua assinatura A implantação leva aproximadamente de 15 a 20 minutos.
Quando a implantação for concluída, observe a URL do endpoint exibida na saída.
O azd up comando cria os seguintes recursos:
| Resource | Propósito |
|---|---|
| Grupo de recursos | Contêiner para todos os recursos |
| Grupo de recursos | Contêiner para todos os recursos |
| Ambiente de Aplicativos de Contêiner | Hospeda o aplicativo com o perfil de carga de trabalho de GPU |
| Registro de contêiner | Armazena sua imagem de contêiner personalizada |
| Conta de armazenamento | Necessário para o runtime do Azure Functions |
| Application Insights | Monitoramento e diagnóstico |
| Aplicativo de funções | A API de geração de imagem |
Opção B: implantar como aplicativo de contêiner usando a CLI do Azure
Para obter mais controle sobre a implantação, use a CLI do Azure para criar cada recurso individualmente.
Defina as variáveis de ambiente:
RESOURCE_GROUP="rg-gpu-image-gen" ENVIRONMENT_NAME="cae-gpu-image-gen" LOCATION="swedencentral" CONTAINER_APP_NAME="ca-image-gen" CONTAINER_IMAGE="mcr.microsoft.com/k8se/gpu-quickstart:latest" WORKLOAD_PROFILE_NAME="NC8as-T4" WORKLOAD_PROFILE_TYPE="Consumption-GPU-NC8as-T4"Esse script define os valores de configuração usados durante toda a implantação. O
WORKLOAD_PROFILE_TYPEespecifica a configuração da GPU NVIDIA T4.Crie o grupo de recursos:
az group create \ --name $RESOURCE_GROUP \ --location $LOCATION \ --query "properties.provisioningState" \ --output tsvO comando cria um grupo de recursos no Sweden Central, que dá suporte a perfis de carga de trabalho de GPU. A saída deve ser exibida
Succeeded.Crie o ambiente de Container Apps:
az containerapp env create \ --name $ENVIRONMENT_NAME \ --resource-group $RESOURCE_GROUP \ --location $LOCATION \ --query "properties.provisioningState" \ --output tsvEsse comando cria o ambiente gerenciado que hospeda seus aplicativos de contêiner. A saída deve ser exibida
Succeeded.Adicione o perfil de carga de trabalho de GPU ao seu ambiente:
az containerapp env workload-profile add \ --name $ENVIRONMENT_NAME \ --resource-group $RESOURCE_GROUP \ --workload-profile-name $WORKLOAD_PROFILE_NAME \ --workload-profile-type $WORKLOAD_PROFILE_TYPEEsse comando adiciona o perfil de carga de trabalho da GPU NVIDIA T4 ao seu ambiente. O perfil habilita a computação de GPU para contêineres que o exigem.
Crie o aplicativo de contêiner com suporte para GPU:
az containerapp create \ --name $CONTAINER_APP_NAME \ --resource-group $RESOURCE_GROUP \ --environment $ENVIRONMENT_NAME \ --image $CONTAINER_IMAGE \ --target-port 80 \ --ingress external \ --cpu 8.0 \ --memory 56.0Gi \ --workload-profile-name $WORKLOAD_PROFILE_NAME \ --query properties.configuration.ingress.fqdn \ --output tsvEsse comando cria o aplicativo de contêiner e o atribui ao perfil de carga de trabalho da GPU. Os
--cpuvalores e os--memoryvalores correspondem aos requisitos de perfil T4. O comando gera a URL do aplicativo.Copie a URL de saída para teste na próxima seção.
Testar a API de geração de imagem
Observação
A primeira solicitação leva de um a dois minutos enquanto o modelo é baixado (aproximadamente 5 GB) e é carregado na memória de GPU. As solicitações subsequentes são concluídas em 5 a 15 segundos.
Verifique se o aplicativo está em execução
Abra a URL do aplicativo em um navegador. Você deve ver a interface de geração de imagem.
Gerar uma imagem usando a interface do usuário
No campo de texto, insira um prompt como:
A friendly robot chef cooking pasta in a cozy kitchen, digital art styleSelecione Gerar Imagem.
Aguarde até que a imagem apareça. A primeira geração leva mais tempo devido ao carregamento do modelo.
Gerar uma imagem usando a API (implantação de funções)
Se você implantou a versão do Azure Functions, poderá chamar a API diretamente:
curl -X POST "https://<YOUR-FUNCTION-URL>/api/generate" \
-H "Content-Type: application/json" \
-d '{
"prompt": "A friendly robot chef cooking pasta in a cozy kitchen",
"num_steps": 25
}'
Substitua <YOUR-FUNCTION-URL> pela URL do aplicativo de funções real. O num_steps parâmetro controla a qualidade da imagem (valores mais altos produzem melhores resultados, mas demoram mais).
Formato de resposta esperado:
{
"success": true,
"image": "iVBORw0KGgoAAAANSUhEUgAA...(base64 PNG data)..."
}
A resposta contém uma imagem PNG codificada em base64 que você pode decodificar e salvar.
Monitorar o uso da GPU
O monitoramento ajuda você a entender a utilização da GPU e otimizar os custos.
Exibir o status da GPU no console
No portal do Azure, acesse seu aplicativo de contêiner.
Em Monitoramento, selecione Console.
Selecione sua réplica e contêiner.
Selecione Reconectar e escolha /bin/bash como o comando de inicialização.
Execute o seguinte comando para exibir o status da GPU:
nvidia-smiA saída mostra o uso de memória de GPU, o percentual de utilização e os processos em execução.
Exibir métricas no Azure Monitor
No portal do Azure, acesse seu aplicativo de contêiner.
Em Monitoramento, selecione Métricas.
Adicione métricas para:
- Uso da CPU
- Uso de Memória
- Contagem de réplicas
Para obter opções detalhadas de observabilidade, consulte Monitorar Aplicativos de Contêiner do Azure.
Otimizar o desempenho de início a frio
Para reduzir o tempo de inicialização a frio para cargas de trabalho de produção:
Habilite o streaming de artefatos para acelerar o download de imagens de contêiner.
Defina as réplicas mínimas como 1 para manter uma instância aquecida:
az containerapp update \ --name $CONTAINER_APP_NAME \ --resource-group $RESOURCE_GROUP \ --min-replicas 1Esse comando mantém uma instância sempre em execução, eliminando atrasos de início frio, mas incorrendo em custos contínuos.
Para conhecer mais técnicas de otimização, consulte Como melhorar a inicialização a frio para GPUs serverless.
Resolução de problemas
| Questão | Motivo | Solução |
|---|---|---|
| Erro "Cota de GPU excedida" | Nenhuma cota de GPU aprovada | Solicitar cota de GPU e aguardar aprovação |
| Falha ao iniciar o contêiner | Tempo limite de extração de imagem | Habilitar o streaming de artefatos ou usar uma imagem base menor |
| A primeira solicitação expira no tempo limite | Download do modelo em andamento | Aguarde de 2 a 3 minutos e tente novamente. Esse pequeno atraso é o comportamento esperado. |
| Erro "CUDA sem memória" | O modelo excede a memória de GPU | Reduzir o tamanho do lote ou usar uma variante de modelo menor |
| 502 Gateway Incorreto | Contêiner não pronto | Verificar logs de contêiner; garantir que as sondas de saúde estejam configuradas |
| Geração de imagem lenta | Etapas de inferência insuficientes | Aumentar num_steps parâmetro (valores mais altos = melhor qualidade, mais lento) |
Para visualizar os logs do contêiner para depuração:
az containerapp logs show \
--name $CONTAINER_APP_NAME \
--resource-group $RESOURCE_GROUP \
--follow
Esse comando transmite logs em tempo real do contêiner, ajudando você a identificar problemas de inicialização ou erros de runtime.
Limpar os recursos
Quando terminar com os recursos, exclua-os para evitar encargos contínuos.
No portal do Azure, pesquise Grupos de recursos.
Selecione o grupo de recursos que você criou (por exemplo,
rg-gpu-image-gen).Selecione Excluir grupo de recursos.
Para confirmar a exclusão, insira o nome do grupo de recursos.
Selecione Excluir.
Se você implantou usando a CLI do Desenvolvedor do Azure:
azd down
Se você implantou usando a CLI do Azure:
az group delete --name $RESOURCE_GROUP --yes --no-wait
O sinalizador --no-wait retorna imediatamente enquanto a exclusão continua em segundo plano.