Inferência do MaxDiffusion em TPUs v6e

Este tutorial mostra como exibir modelos MaxDiffusion na TPU v6e. Neste tutorial, você vai gerar imagens usando o modelo Stable Diffusion XL.

Antes de começar

Prepare-se para provisionar uma TPU v6e com 4 chips:

  1. Faça login na sua Conta do Google. Se ainda não tiver uma, crie uma nova conta.
  2. No console do Google Cloud, selecione ou crie um projeto Google Cloud na página do seletor de projetos.
  3. Ative o faturamento do projeto Google Cloud . O faturamento é obrigatório para todo o uso do Google Cloud .
  4. Instale os componentes da gcloud alfa.
  5. Execute o comando a seguir para instalar a versão mais recente dos componentes gcloud.

    gcloud components update
    
  6. Ative a API TPU usando o comando gcloud a seguir no Cloud Shell. Também é possível ativá-la no console do Google Cloud.

    gcloud services enable tpu.googleapis.com
    
  7. Crie uma identidade de serviço para a VM da TPU.

    gcloud alpha compute tpus tpu-vm service-identity create --zone=ZONE
  8. Crie uma conta de serviço do TPU e conceda acesso aos serviços Google Cloud .

    As contas de serviço permitem que o serviço Google Cloud TPU acesse outros serviços Google Cloud. Recomendamos usar uma conta de serviço gerenciado pelo usuário. Siga estes guias para criar e conceder funções. Os seguintes papéis são necessários:

    • Administrador de TPU: necessário para criar uma TPU
    • Administrador de armazenamento: necessário para acessar o Cloud Storage
    • Logs Writer: necessário para gravar registros com a API Logging.
    • Gravador de métricas do Monitoring: necessário para gravar métricas no Cloud Monitoring
  9. Faça a autenticação com Google Cloud e configure o projeto e a zona padrão para a Google Cloud CLI.

    gcloud auth login
    gcloud config set project PROJECT_ID
    gcloud config set compute/zone ZONE

Capacidade segura

Entre em contato com a equipe de vendas ou de contas do Cloud TPU para solicitar a cota de TPU e fazer perguntas sobre a capacidade.

Provisionar o ambiente do Cloud TPU

É possível provisionar TPUs v6e com o GKE, com o GKE e o XPK ou como recursos em fila.

Pré-requisitos

  • Verifique se o projeto tem cota de TPUS_PER_TPU_FAMILY suficiente, que especifica o número máximo de chips que você pode acessar no projetoGoogle Cloud .
  • Este tutorial foi testado com a seguinte configuração:
    • Python 3.10 or later
    • Versões noturnas do software:
      • 0.4.32.dev20240912 noturno JAX
      • LibTPU noturno 0.1.dev20240912+nightly
    • Versões estáveis do software:
      • JAX + JAX Lib de v0.4.35
  • Verifique se o projeto tem cota suficiente de TPU para:
    • Cota da VM de TPU
    • Quota de endereço IP
    • Cota do Hyperdisk equilibrado
  • Permissões do projeto do usuário

Provisionar um TPU v6e

   gcloud alpha compute tpus queued-resources create QUEUED_RESOURCE_ID \
        --node-id TPU_NAME \
        --project PROJECT_ID \
        --zone ZONE \
        --accelerator-type v6e-4 \
        --runtime-version v2-alpha-tpuv6e \
        --service-account SERVICE_ACCOUNT

Use os comandos list ou describe para consultar o status do recurso em fila.

   gcloud alpha compute tpus queued-resources describe ${QUEUED_RESOURCE_ID}  \
      --project ${PROJECT_ID} --zone ${ZONE}

Para uma lista completa de status de solicitações de recursos em fila, consulte a documentação de Recursos em fila.

Conectar-se à TPU usando SSH

   gcloud compute tpus tpu-vm ssh TPU_NAME

Criar um ambiente da Conda

  1. Crie um diretório para o Miniconda:

    mkdir -p ~/miniconda3
  2. Faça o download do script de instalação do Miniconda:

    wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh
  3. Instale o Miniconda:

    bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3
  4. Remova o script de instalação do Miniconda:

    rm -rf ~/miniconda3/miniconda.sh
  5. Adicione o Miniconda à variável PATH:

    export PATH="$HOME/miniconda3/bin:$PATH"
  6. Atualize ~/.bashrc para aplicar as mudanças à variável PATH:

    source ~/.bashrc
  7. Crie um novo ambiente do Conda:

    conda create -n tpu python=3.10
  8. Ative o ambiente da Conda:

    source activate tpu

Configurar o MaxDiffusion

  1. Clone o repositório MaxDiffusion e navegue até o diretório MaxDiffusion:

    git clone https://github.com/google/maxdiffusion.git && cd maxdiffusion
  2. Alterne para a ramificação mlperf-4.1:

    git checkout mlperf4.1
  3. Instale o MaxDiffusion:

    pip install -e .
  4. Instale as dependências:

    pip install -r requirements.txt
  5. Instale o JAX:

    pip install -U --pre jax[tpu] -f https://storage.googleapis.com/jax-releases/jax_nightly_releases.html -f https://storage.googleapis.com/jax-releases/libtpu_releases.html
  6. Instale dependências extras:

     pip install huggingface_hub==0.25 absl-py flax tensorboardX google-cloud-storage torch tensorflow transformers 

Gerar imagens

  1. Defina variáveis de ambiente para configurar o ambiente de execução da TPU:

    LIBTPU_INIT_ARGS="--xla_tpu_rwb_fusion=false --xla_tpu_dot_dot_fusion_duplicated=true --xla_tpu_scoped_vmem_limit_kib=65536"
  2. Gerar imagens usando o comando e as configurações definidas em src/maxdiffusion/configs/base_xl.yml:

    python -m src.maxdiffusion.generate_sdxl src/maxdiffusion/configs/base_xl.yml run_name="my_run"

    Depois que as imagens forem geradas, limpe os recursos da TPU.

Limpar

Exclua a TPU:

gcloud compute tpus queued-resources delete QUEUED_RESOURCE_ID \
    --project PROJECT_ID \
    --zone ZONE \
    --force \
    --async