Desenvolva com GPUs

Nesta página, você verá um exemplo de fluxo de trabalho do desenvolvedor para a criação de pipelines usando GPUs.

Para mais informações sobre o uso de GPUs com o Dataflow, leia Suporte do Dataflow para GPUs. Para informações e exemplos sobre como ativar GPUs nos jobs do Dataflow, leia Como usar GPUs e Como processar imagens de satélite do Landsat com GPUs.

O uso do Apache Beam com GPUs NVIDIA permite criar pipelines de processamento de dados em grande escala que lidam com pré-processamento e inferência. Ao usar GPUs para desenvolvimento local, considere as seguintes informações:

  • Muitas vezes, os fluxos de trabalho de processamento de dados usam bibliotecas adicionais que você precisa instalar no ambiente de inicialização e no ambiente de execução nos workers do Dataflow. Essa configuração adiciona etapas ao fluxo de trabalho de desenvolvimento para configurar requisitos do pipeline ou para usar contêineres personalizados no Dataflow. Talvez você queira um ambiente de desenvolvimento local que imite o ambiente de produção o mais próximo possível.

  • Se você está usando uma biblioteca que usa GPUs NVIDIA implicitamente e o código não requer mudanças para ser compatível com GPUs, não é necessário alterar o fluxo de trabalho de desenvolvimento para configurar requisitos de pipeline ou criar contêineres personalizados.

  • Algumas bibliotecas não alternam de maneira transparente entre o uso da CPU e da GPU e, portanto, exigem versões específicas e caminhos de código diferentes. Para replicar o ciclo de vida do desenvolvimento de código de execução de código nesse cenário, mais etapas são necessárias.

  • Ao executar experimentos locais, é útil replicar o ambiente do worker do Dataflow o mais próximo possível. Dependendo da biblioteca, pode ser necessário uma máquina com GPU e as bibliotecas de GPU necessárias instaladas. Esse tipo de máquina pode não estar disponível no seu ambiente local. É possível emular o ambiente de execução do Dataflow usando um contêiner em execução em uma máquina virtual do Google Cloud equipada com GPU.

  • É improvável que tenha um pipeline composto inteiramente de transformações que exigem uma GPU. Um pipeline típico tem um estágio de ingestão que usa uma das muitas fontes fornecidas pelo Apache Beam. Esse estágio é seguido por transformações de manipulação ou modelagem de dados, que alimentam uma transformação de GPU.

O fluxo de trabalho em dois estágios a seguir mostra como criar um pipeline usando GPUs. Esse fluxo cuida dos problemas relacionados a GPUs e não GPUs separadamente e encurta o ciclo de feedback.

  1. Criar um pipeline

    Crie um pipeline que possa ser executado no Dataflow Substitua as transformações que exigem GPUs pelas transformações que não usam GPUs, mas que são funcionalmente as mesmas:

    1. Crie todas as transformações que envolvem o uso da GPU, como a ingestão e manipulação de dados.

    2. Crie um stub para a transformação da GPU com uma simples passagem ou alteração de esquema.

  2. Testar localmente

    Teste a parte da GPU do código do pipeline no ambiente que imita o ambiente de execução do worker do Dataflow. As etapas a seguir descrevem um dos métodos para executar este teste:

    1. Crie uma imagem do Docker com todas as bibliotecas necessárias.

    2. Inicie o desenvolvimento do código da GPU.

    3. Inicie o ciclo de execução do código usando uma máquina virtual do Google Cloud com a imagem do Docker. Para descartar incompatibilidades da biblioteca, execute o código da GPU em um processo local do Python separadamente do pipeline do Apache Beam. Em seguida, execute todo o pipeline no executor direto ou inicie o pipeline no Dataflow.

Como usar uma VM com um sistema operacional otimizado para contêineres

Para um ambiente mínimo, use uma máquina virtual (VM) otimizada para contêineres. Para mais informações, consulte Criar uma VM com GPUs anexadas.

O fluxo geral é o seguinte:

  1. Crie uma VM.

  2. Conecte-se à VM e execute os seguintes comandos:

    cos-extensions install gpu
    sudo mount --bind /var/lib/nvidia /var/lib/nvidia
    sudo mount -o remount,exec /var/lib/nvidia /var/lib/nvidia/bin/nvidia-smi
    
  3. Confirme se as GPUs estão disponíveis:

    ./nvidia-smi
    
  4. Inicie um contêiner do Docker com drivers de GPU da VM ativada como volumes. Exemplo:

    docker run --rm -it --entrypoint /bin/bash
    --volume /var/lib/nvidia/lib64:/usr/local/nvidia/lib64
    --volume /var/lib/nvidia/bin:/usr/local/nvidia/bin
    --privileged gcr.io/bigdatapivot/image_process_example:latest
    

Para ver um Dockerfile de amostra, consulte Como criar uma imagem de contêiner personalizada. Certifique-se de adicionar ao Dockerfile todas as dependências necessárias para o pipeline.

Para mais informações sobre como usar uma imagem do Docker pré-configurada para uso da GPU, consulte Como usar uma imagem atual configurada para uso da GPU.

Ferramentas úteis ao trabalhar com sistemas otimizados para contêineres

  • Para configurar a CLI do Docker para usar docker-credential-gcr como auxiliar de credencial para conjunto padrão de registros do Google Container (GCR), use:

    docker-credential-gcr configure-docker
    

    Para mais informações sobre como configurar credenciais do Docker, consulte docker-credential-gcr.

  • Para copiar arquivos, como o código de pipeline, para ou de uma VM, use toolbox. Essa técnica é útil ao usar uma imagem personalizada de otimização total. Exemplo:

    toolbox /google-cloud-sdk/bin/gsutil cp gs://bucket/gpu/image_process/* /media/root/home/<userid>/opencv/
    

    Para saber mais, consulte Como depurar problemas de nós usando a caixa de ferramentas.

A seguir