Executar uma prova de conceito de um farm de renderização híbrido


Neste documento, mostramos como executar uma prova de conceito (PoC, na sigla em inglês) para criar um farm de renderização híbrido no Google Cloud. Este documento é um complemento para Criar um farm de renderização híbrido e foi projetado para facilitar a renderização de testes e comparações de animação, filmes, comerciais ou videogames em o Google Cloud.

É possível executar uma PoC para seu farm de renderização híbrido no Google Cloud se restringir o escopo dos testes apenas aos componentes essenciais. Em contraste com a arquitetura de uma solução completa, pense nas seguintes finalidades de uma PoC:

  • Definir como reproduzir seu ambiente de renderização local na nuvem.
  • Avaliar as diferenças no desempenho da renderização e da rede entre os workers de renderização no local e as instâncias na nuvem.
  • Determinar as diferenças de custo entre as cargas de trabalho locais e na nuvem.

As seguintes tarefas são menos importantes, e é possível adiá-las ou eliminá-las de uma PoC:

  • Determinar se e como os recursos serão sincronizados entre suas instalações e a nuvem.
  • Determinar como implantar jobs para os workers de renderização na nuvem usando o software de gerenciamento de filas.
  • Determinar a melhor maneira de se conectar ao Google Cloud.
  • Medir a latência entre suas instalações e os data centers do Google.

Conectividade

Em uma PoC de renderização, não é necessária a conectividade de nível empresarial com o Google. Uma conexão pela internet pública é suficiente. Velocidade de conexão, latência e largura de banda têm importância secundária no desempenho da renderização.

Trate a conectividade como uma PoC separada porque a organização da Interconexão por parceiro ou do Partner Interconnect pode levar algum tempo e pode ser realizada simultaneamente com o teste de renderização.

Objetivos

  • Criar uma instância do Compute Engine e personalizá-la para atuar como um worker de renderização.
  • Criar uma imagem personalizada.
  • Implantar um worker de renderização.
  • Copiar recursos para o worker de renderização.
  • Executar comparativos de mercado de renderização.
  • Copiar renderizadores de teste do worker de renderização para a estação de trabalho local para avaliação.

Custos

Ao estimar o uso projetado, estime a diferença no custo entre workers de renderização locais e baseados na nuvem.

Neste documento, você usará os seguintes componentes faturáveis do Google Cloud:

Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços. Novos usuários do Google Cloud podem estar qualificados para uma avaliação gratuita.

Ao concluir as tarefas descritas neste documento, é possível evitar o faturamento contínuo excluindo os recursos criados. Saiba mais em Limpeza.

Antes de começar

  1. Faça login na sua conta do Google Cloud. Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
  2. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  3. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  4. Instale a CLI do Google Cloud.
  5. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  6. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  7. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  8. Instale a CLI do Google Cloud.
  9. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  10. No Console do Google Cloud, ative o Cloud Shell.

    Ativar o Cloud Shell

    Na parte inferior do Console do Google Cloud, uma sessão do Cloud Shell é iniciada e exibe um prompt de linha de comando. O Cloud Shell é um ambiente shell com a CLI do Google Cloud já instalada e com valores já definidos para o projeto atual. A inicialização da sessão pode levar alguns segundos.

  11. Neste documento, você usa principalmente o Cloud Shell para executar as etapas, mas copiar dados de uma máquina local para o Cloud Storage requer que a CLI do Google Cloud esteja em execução nessa máquina.

Como configurar o ambiente

  • No Cloud Shell, defina a zona do Compute Engine:

    gcloud config set compute/zone [ZONE]
    

    Em que [ZONE] é a zona em que todos os recursos serão criados.

Como implantar uma instância

Para a PoC, convém recriar o hardware do worker de renderização local. O Google Cloud oferece várias plataformas de CPU que podem corresponder ao seu próprio hardware, mas a arquitetura de uma máquina virtual baseada em nuvem é diferente de um blade de renderização bare-metal em um farm de renderização local.

No Google Cloud, os recursos são virtualizados e independentes de outros recursos. As máquinas virtuais (instâncias) são compostas pelos seguintes componentes principais:

  • CPUs virtuais (vCPUs)
  • Memória (RAM)
  • Discos

    • Disco de inicialização e SO convidado
    • Discos de armazenamento extras
  • GPUs NVIDIA Tesla (opcional)

Também é possível controlar outros aspectos dos recursos, como rede, regras de firewall e acesso de usuários. No entanto, para os fins da PoC, você só precisa prestar atenção aos quatro componentes mencionados anteriormente.

Crie uma instância

  1. No Cloud Shell, crie o protótipo da sua instância de worker de renderização:

    gcloud compute instances create [INSTANCE_NAME] \
        --machine-type [MACHINE_TYPE] \
        --image-project [IMAGE_PROJECT] \
        --image-family [IMAGE_FAMILY] \
        --boot-disk-size [SIZE]
    

    Em que:

    • [INSTANCE_NAME] é o nome da instância;
    • [MACHINE_TYPE] é um tipo de máquina predefinido ou um tipo de máquina personalizado que usa o formato custom-[NUMBER_OF_CPUS]-[NUMBER_OF_MB] em que você define o número de vCPUs e a quantidade de memória para o tipo de máquina;
    • [IMAGE_PROJECT] é o projeto de imagem dessa família de imagens;
    • [IMAGE_FAMILY] é uma sinalização opcional que especifica a que família de imagens essa imagem pertence;
    • [SIZE] é o tamanho do disco de inicialização em GB.

    Exemplo:

    gcloud compute instances create render-worker-proto \
        --machine-type custom-24-32768 \
        --image-project centos-cloud \
        --image-family centos-7 \
        --boot-disk-size 100
    

    O comando anterior cria uma instância do CentOS 7 com 24 vCPUs, 32 GB de RAM e um disco de inicialização padrão de 100 GB. A instância é criada na zona que você definiu anteriormente como sua zona do Compute padrão.

É possível optar por criar uma VM de qualquer tamanho, até 96 vCPUs (se precisar de mais, teste os tipos ultramem), mais de 624 GB de RAM ou várias GPUs NVIDIA Tesla. As possibilidades são infinitas, mas tenha cuidado para não superprovisionar. Convém arquitetar um farm de renderização econômico, escalonável e baseado em nuvem, adequado para jobs de qualquer tamanho.

Como acessar uma instância

  1. No Cloud Shell, conecte-se à instância usando SSH:

    gcloud compute ssh [INSTANCE_NAME]
    
  2. Instale e licencie software na instância como você faria com um worker de renderização local.

Como criar sua imagem padrão

A menos que você queira testar um software personalizado que exija algo como um kernel Linux personalizado ou versões mais antigas do sistema operacional, recomendamos começar com uma de nossas imagens de disco públicas e adicionar o software que você vai usar.

Se você optar por importar sua própria imagem, será necessário configurá-la instalando bibliotecas adicionais para permitir que o SO convidado se comunique com o Google Cloud.

Configurar o worker de renderização

  1. No Cloud Shell, na instância criada anteriormente, configure o worker de renderização como faria com o worker local, instalando seu software e bibliotecas.

  2. Interrompa a instância:

    gcloud compute instances stop [INSTANCE_NAME]
    

Criar uma imagem personalizada

  1. No Cloud Shell, determine o nome do disco de inicialização da máquina virtual:

    gcloud compute instances describe [INSTANCE_NAME]
    

    O resultado contém o nome do disco de inicialização da sua instância:

    mode: READ_WRITE
    source:https://www.googleapis.com/compute/v1/projects/[PROJECT]/zones/[ZONE]/disks/[DISK_NAME]
    

    Em que:

    • [PROJECT] é o nome do projeto do Google Cloud;
    • [ZONE] é a zona onde o disco está localizado;
    • [DISK_NAME] é o nome do disco de inicialização vinculado à instância; O nome do disco é geralmente igual ou similar ao nome da instância.
  2. Crie uma imagem na instância:

    gcloud compute images create [IMAGE_NAME] \
        --source-disk [DISK_NAME] \
        --source-disk-zone [ZONE]
    

    Em que:

    • [IMAGE_NAME] é um nome para a nova imagem;
    • [DISK_NAME] é o disco que você usa para criar a nova imagem;
    • [ZONE] é a zona onde o disco está localizado.

Como implantar um worker de renderização

Agora que você tem uma imagem personalizada pronta com o sistema operacional, o software e as bibliotecas necessárias, é possível implantar uma instância do worker de renderização usando a imagem personalizada em vez de usar uma pública.

  • No Cloud Shell, crie uma instância do worker de renderização. Adicione o escopo devstorage.read_write para gravar no Cloud Storage a partir dessa instância.

    gcloud compute instances create [WORKER_NAME] \
        --machine-type [MACHINE_TYPE] \
        --image [IMAGE_NAME] \
        --scopes https://www.googleapis.com/auth/devstorage.read_write \
        --boot-disk-size [SIZE]
    

    Em que [WORKER_NAME] é um nome para o worker de renderização.

Como licenciar o software

É possível usar o servidor de licenças local para fornecer licenças durante uma PoC, porque não é preciso emiti-las novamente para novos servidores baseados em nuvem. Para se conectar com segurança ao servidor de licenças local a partir da instância na nuvem, crie uma regra de firewall que permita tráfego apenas pelas portas necessárias. Essa regra de firewall também permite o tráfego vindo do endereço IP do gateway da Internet local ou do próprio servidor de licenças.

Talvez seja necessário configurar o gateway de Internet da instalação para permitir que o tráfego da instância do Google Cloud chegue ao servidor de licenças local.

Usar o servidor de licenças local

É possível criar uma regra de firewall para permitir o tráfego em sua rede de nuvem privada virtual (VPC, na sigla em inglês).

  • No Cloud Shell, crie a regra de firewall:

    gcloud compute firewall-rules create [RULE_NAME] \
       --direction=INGRESS \
       --priority=1000 \
       --network=default \
       --action=ALLOW \
       --rules=[PROTOCOL]:[PORT] \
       --source-ranges=[IP_ADDRESS]
    

Em que:

  • [RULE_NAME] é o nome da regra de firewall;
  • [PROTOCOL] é o protocolo para o tráfego;
  • [PORT] é a porta em que o tráfego viaja;
  • [IP_ADDRESS] é o endereço IP do servidor de licenças local.

Usar um servidor de licenças baseado em nuvem

Um servidor de licenças baseado em nuvem não exige conectividade com sua rede local e é executado na mesma rede VPC que o worker de renderização. Como a veiculação de licenças é uma tarefa relativamente leve, uma pequena instância com 2 a 4 vCPUs e 6 a 8 GB de RAM consegue processar a carga de trabalho de disponibilização de licenças de serviço para vários workers de renderização.

Dependendo do tipo de software que você precisa licenciar, pode ser necessário criar uma nova chave para suas licenças com um número de ID de hardware exclusivo, como o endereço MAC do servidor de licenças. Outros gerenciadores de licenças podem validar licenças de software de qualquer host conectado à Internet. Como existem muitos, consulte a documentação de licenciamento do produto para ver instruções.

Permitir a comunicação entre instâncias

Os workers de renderização e as instâncias do servidor de licença precisam se comunicar uns com os outros. A regra de firewall default-allow-internal permite que todas as instâncias do projeto se comuniquem entre si. Essa regra de firewall é criada quando você cria um novo projeto. Se você estiver usando um novo projeto, pule esta seção. Se você estiver usando um projeto atual, será necessário testar se a regra de firewall ainda está no projeto do Google Cloud.

  1. No Cloud Shell, verifique se a regra de firewall está no projeto:

    gcloud compute firewall-rules list \
        --filter="name=default-allow-internal"
    

    Em caso afirmativo, você verá a seguinte saída:

    NAME                   NETWORK DIRECTION PRIORITY ALLOW DENY                   DISABLED
    default-allow-internal default INGRESS   65534m   tcp:0-65535,udp:0-65535,icmp False
    

    Caso contrário, a saída não mostrará nada.

  2. Caso precise criar a regra de firewall, use o seguinte comando:

    gcloud compute firewall-rules create default-allow-internal \
        --direction=INGRESS \
        --priority=65534 \
        --network=default \
        --action=ALLOW \
        --rules=tcp:0-65535,udp:0-65535,icmp \
        --source-ranges=0.0.0.0/0
    

Como armazenar recursos

Os pipelines de renderização podem variar muito, mesmo dentro de uma única empresa. Para implementar a PoC rapidamente e com configuração mínima, é possível usar o disco de inicialização da instância do worker de renderização para armazenar recursos. A PoC ainda não pode avaliar a sincronização de dados ou soluções de armazenamento mais avançadas. É possível avaliar essas opções em uma PoC separada.

Há várias opções de armazenamento disponíveis no Google Cloud, mas recomendamos testar uma solução de armazenamento compartilhado escalonável em uma PoC separada.

Se você estiver testando várias configurações do worker de renderização e precisar de um sistema de arquivos compartilhado, poderá criar um volume do Filestore e ativá-lo usando o NFS para os workers de renderização. O Filestore é um serviço de armazenamento de arquivos gerenciado que pode ser ativado para leitura/gravação em várias instâncias, agindo como um servidor de arquivos.

Como enviar dados para o Google Cloud

Para executar uma PoC de renderização, é preciso passar os arquivos de cena, caches e recursos para os workers de renderização. Para conjuntos de dados maiores (mais de 10 GB), use gsutil para copiar os dados para o Cloud Storage e, em seguida, para os workers de renderização. Para conjuntos de dados menores (menos de 10 GB), use a CLI gcloud para copiar dados diretamente para um caminho nos workers de renderização (somente Linux).

Criar um diretório de destino no worker de renderização

  1. No Cloud Shell, conecte-se ao worker de renderização usando o SSH:

    gcloud compute ssh [WORKER_NAME]
    

    Em que [WORKER_NAME] é o nome do worker de renderização.

  2. Crie um diretório de destino para os dados:

    mkdir [ASSET_DIR]
    

    Em que [ASSET_DIR] é um diretório local em qualquer lugar no worker de renderização.

Usar gsutil para copiar grandes quantidades de dados

Se você estiver transferindo grandes conjuntos de dados para o worker de renderização, use gsutil com o Cloud Storage como uma etapa intermediária. Se você estiver transferindo conjuntos de dados menores, pule para a próxima seção e use a CLI gcloud para transferir quantidades menores de dados..

  1. Na estação de trabalho local, crie um bucket do Cloud Storage:

    gsutil mb gs://[BUCKET_NAME_ASSETS]
    

    Em que [BUCKET_NAME_ASSETS] representa o nome do bucket do Cloud Storage para os arquivos ou diretórios que você quer copiar.

  2. Copie os dados do diretório local para o bucket:

    gsutil -m cp -r [ASSETS] gs://[BUCKET_NAME_ASSETS]
    

    Em que [ASSETS] é uma lista de arquivos ou diretórios que serão copiados para o bucket.

  3. Conecte-se ao worker de renderização usando o SSH:

    gcloud compute ssh [WORKER_NAME]
    
  4. Copie o conteúdo do bucket para o worker de renderização:

    gsutil -m cp -r gs://[BUCKET_NAME_ASSETS]/* [ASSET_DIR]
    

Usar a CLI gcloud para copiar pequenas quantidades de dados

Se você estiver transferindo conjuntos de dados menores, será possível copiar diretamente da estação de trabalho local para um worker de renderização do Linux em execução usando a CLI gcloud gcloud.

  • Na estação de trabalho local, copie os dados entre o diretório local e o worker de renderização:

    gcloud compute scp --recurse [ASSETS] [INSTANCE_NAME]:[ASSET_DIR]
    

    Em que:

    • [ASSETS] é uma lista de arquivos ou diretórios que serão copiados para o bucket;
    • [INSTANCE_NAME] é o nome do worker de renderização;
    • [ASSET_DIR] é qualquer caminho local no worker de renderização.

Como executar renderizações de teste

Depois de instalar e licenciar o software de renderização e copiar os dados de cenas, você estará pronto para executar testes de renderização. Esse processo depende inteiramente de como o pipeline de renderização executa os comandos de renderização.

Ferramentas de comparativo de mercado

Se você quiser comparar recursos da nuvem com seu hardware local, use o Perfkit Benchmarker para medir estatísticas de itens como largura de banda de rede e desempenho de disco.

Alguns softwares de processamento têm suas próprias ferramentas de comparativo de mercado, como V-Ray, Octane ou Maxon (links em inglês), que podem ser executados no local e na nuvem para comparar configurações comuns de renderização.

Como receber dados do Google Cloud

Para ver os resultados depois de executar os testes de renderização, é preciso copiar os renderizadores resultantes para a estação de trabalho local. Dependendo do tamanho do conjunto de dados a ser transferido, use gsutil ou a CLI gcloud.

Criar um diretório de destino na estação de trabalho local

  • Na estação de trabalho local, crie um diretório para suas renderizações:

    mkdir [RENDER_DIR]
    

    Em que [RENDER_DIR] é um caminho local no worker de renderização.

Usar gsutil para copiar grandes quantidades de dados

Se você estiver transferindo grandes conjuntos de dados, use gsutil. Caso contrário, pule para a próxima seção para usar a CLI gcloud. Para copiar dados do worker de renderização para um bucket do Cloud Storage, crie um bucket separado para manter as renderizações separadas dos dados de recursos.

  1. Na estação de trabalho local, crie um novo bucket do Cloud Storage:

    gsutil mb gs://[BUCKET_NAME_RENDERS]
    

    Em que [BUCKET_NAME_RENDERS] representa o nome do bucket do Cloud Storage para dados renderizados.

  2. Conecte-se ao worker de renderização usando o SSH:

    gcloud compute ssh [WORKER_NAME]
    
  3. Copie os dados renderizados para o bucket:

    gsutil -m cp -r [RENDERS] gs://[BUCKET_NAME_RENDERS]
    

    Em que:

    • [RENDERS] é uma lista de arquivos ou diretórios que serão copiados para o bucket.
  4. Na área de trabalho local, copie os arquivos do bucket do Cloud Storage para um diretório local:

    gsutil -m cp -r gs://[BUCKET_NAME_RENDERS]/* [RENDER_DIR]
    

Usar a CLI gcloud para copiar pequenas quantidades de dados

Se você estiver copiando conjuntos de dados menores, será possível copiar diretamente do worker de renderização para a estação de trabalho local.

  • Na estação de trabalho local, copie as renderizações no diretório de destino:

    gcloud compute scp --recurse [WORKER_NAME]:[RENDERS] [RENDER_DIR]
    

    Em que [RENDERS] é uma lista de arquivos ou diretórios que serão copiados para a estação de trabalho local.

Limpeza

Para evitar cobranças na sua conta do Google Cloud pelos recursos usados no tutorial, exclua o projeto que os contém ou mantenha o projeto e exclua os recursos individuais.

Exclua o projeto

  1. No Console do Google Cloud, acesse a página Gerenciar recursos.

    Acessar "Gerenciar recursos"

  2. Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
  3. Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.

Excluir recursos individuais

  1. Exclua a instância:
    gcloud compute instances delete INSTANCE_NAME
  2. Excluir o bucket:
    gcloud storage buckets delete BUCKET_NAME

A seguir