Ejecuta pruebas de concepto de granjas de procesamiento híbridas


En este documento, se muestra cómo ejecutar una prueba de concepto (PoC) para compilar una granja de renderización híbrida en Google Cloud. Este documento es un complemento de Compila una granja de renderización híbrida y se diseñó para facilitar la realización de pruebas y comparativas de animaciones, películas, comerciales o videojuegos en Google Cloud.

Puedes ejecutar una PoC de tu granja de renderización híbrida en Google Cloud si reduces el alcance de las pruebas solo a los componentes esenciales. A diferencia de la arquitectura de una solución completa de extremo a extremo, ten en cuenta los siguientes propósitos de una PoC:

  • Determinar cómo reproducir el entorno de renderización local en la nube
  • Medir las diferencias en el rendimiento de las redes y la renderización entre los trabajadores de renderización locales y las instancias de la nube
  • Determinar las diferencias de costo entre las cargas de trabajo locales y en la nube

Las siguientes tareas son de menor importancia y se pueden posponer o incluso eliminar de una PoC:

  • Determinar cómo se sincronizan los activos (si los hay) entre la instalación y la nube
  • Determinar cómo implementar trabajos en los trabajadores de renderización en la nube con un software de administración de colas
  • Determinar la mejor manera de conectarte a Google Cloud
  • Medir la latencia entre tu instalación y los centros de datos de Google

Conectividad

Para una PoC de renderización, no necesitas conectividad de nivel empresarial con Google. Basta con una conexión a través de la Internet pública. Para el rendimiento de la renderización, la velocidad de conexión, la latencia y el ancho de banda son de importancia secundaria.

Puedes considerar a la conectividad como una PoC independiente porque organizar una interconexión dedicada o una interconexión de socio para una PoC puede llevar tiempo y realizarse de manera simultanea con las pruebas de procesamiento.

Objetivos

  • Crear una instancia de Compute Engine y personalizarla para que funcione como un trabajador de renderización
  • Crear una imagen personalizada
  • Implementar un trabajador de procesamiento
  • Copiar los activos al trabajador de procesamiento
  • Realizar comparativas de renderización
  • Copiar los procesadores de prueba del trabajador de renderización a la estación de trabajo local para su evaluación

Costos

Cuando calcules el uso proyectado, calcula la diferencia de costo entre los trabajadores de renderización locales y basados en la nube.

En este documento, usarás los siguientes componentes facturables de Google Cloud:

Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios. Es posible que los usuarios nuevos de Google Cloud califiquen para obtener una prueba gratuita.

Cuando finalices las tareas que se describen en este documento, puedes borrar los recursos que creaste para evitar que continúe la facturación. Para obtener más información, consulta Cómo realizar una limpieza.

Antes de comenzar

  1. Accede a tu cuenta de Google Cloud. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  2. En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  3. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  4. Instala Google Cloud CLI.
  5. Para inicializar la CLI de gcloud, ejecuta el siguiente comando:

    gcloud init
  6. En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  7. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  8. Instala Google Cloud CLI.
  9. Para inicializar la CLI de gcloud, ejecuta el siguiente comando:

    gcloud init
  10. En la consola de Google Cloud, activa Cloud Shell.

    Activar Cloud Shell

    En la parte inferior de la consola de Google Cloud, se inicia una sesión de Cloud Shell en la que se muestra una ventana de línea de comandos. Cloud Shell es un entorno de shell con Google Cloud CLI ya instalada y con valores ya establecidos para el proyecto actual. La sesión puede tardar unos segundos en inicializarse.

  11. En este documento, se usa principalmente Cloud Shell a fin de realizar los pasos, pero para copiar datos de una máquina local a Cloud Storage se requiere que tengas Google Cloud CLI en ejecución en esa máquina.

Configura tu entorno

  • En Cloud Shell, configura la zona de Compute Engine:

    gcloud config set compute/zone [ZONE]
    

    En la que [ZONE] es la zona donde se crean todos los recursos.

Implementa una instancia

Para la PoC, te recomendamos que vuelvas a crear el hardware de trabajador de renderización local. Si bien Google Cloud ofrece varias plataformas de CPU que pueden coincidir con tu hardware, la arquitectura de una máquina virtual basada en la nube es diferente de la de un servidor blade de renderización simple en una granja de renderización local.

En Google Cloud, los recursos se virtualizan y son independientes de otros recursos. Las máquinas virtuales (instancias) poseen los siguientes componentes principales:

  • CPU virtuales
  • Memoria (RAM)
  • Discos

    • Disco de arranque y SO invitado
    • Discos de almacenamiento adicionales
  • GPU NVIDIA Tesla (opcionales)

También puedes controlar otros aspectos de los recursos, como las herramientas de redes, las reglas de firewall y el acceso de los usuarios. Sin embargo, para los propósitos de la PoC, solo debes prestar atención a los cuatro componentes mencionados antes.

Crea una instancia

  1. En Cloud Shell, crea el siguiente prototipo de instancia de trabajador de procesamiento:

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

    En el ejemplo anterior, se ilustra lo siguiente:

    • [INSTANCE_NAME] es el nombre de la instancia.
    • [MACHINE_TYPE] es un tipo predefinido de máquina o un tipo personalizado de máquina con el formato custom-[NUMBER_OF_CPUS]-[NUMBER_OF_MB] en el que debes definir la cantidad de CPU virtuales y de memoria para el tipo de máquina.
    • [IMAGE_PROJECT] es el proyecto de imagen de esa familia de imágenes.
    • [IMAGE_FAMILY] es una marca opcional que especifica la familia de imágenes a la que pertenece esta imagen.
    • [SIZE] es el tamaño del disco de inicio en GB.

    Por ejemplo:

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

    Con el comando anterior, se crea una instancia de CentOS 7 con 24 CPU virtuales, 32 GB de RAM y un disco de arranque estándar de 100 GB. La instancia se crea en la zona que configuraste antes como zona de procesamiento predeterminada.

Puedes crear una VM de cualquier tamaño, con hasta 96 CPU virtuales (si necesitas más, prueba los tipos ultramem), más de 624 GB de RAM o varias GPU NVIDIA Tesla. Las posibilidades son infinitas, pero ten cuidado de no aprovisionar en exceso. Lo ideal es diseñar una granja de renderización rentable, escalable y basada en la nube que sea adecuada para trabajos de cualquier tamaño.

Accede a una instancia

  1. En Cloud Shell, conéctate a tu instancia mediante SSH:

    gcloud compute ssh [INSTANCE_NAME]
    
  2. Instala el software y activa las licencias correspondientes en la instancia como lo harías con un trabajador de renderización local.

Compila una imagen predeterminada

A menos que tengas un software personalizado para realizar pruebas y que requiera elementos como un kernel de Linux personalizado o versiones de SO anteriores, te recomendamos comenzar con una de nuestras imágenes de disco públicas y agregues el software que usarás.

Si eliges importar tu propia imagen, debes configurarla mediante la instalación de bibliotecas adicionales para permitir que el SO invitado se comunique con Google Cloud.

Configura el trabajador de renderización

  1. En Cloud Shell, ve a la instancia que creaste antes y configura el trabajador de renderización tal como lo harías con un trabajador local. Es decir, instala el software y las bibliotecas.

  2. Detén la instancia:

    gcloud compute instances stop [INSTANCE_NAME]
    

Crea una imagen personalizada

  1. En Cloud Shell, determina el nombre del disco de arranque de la VM, como se indica a continuación:

    gcloud compute instances describe [INSTANCE_NAME]
    

    El resultado contendrá el nombre del disco de arranque de la instancia:

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

    En el ejemplo anterior, se ilustra lo siguiente:

    • [PROJECT] es el nombre de tu proyecto de Google Cloud.
    • [ZONE] es la zona en la que se encuentra el disco.
    • [DISK_NAME] es el nombre del disco de arranque conectado a la instancia. El nombre del disco suele ser igual o similar al de la instancia.
  2. Para crear una imagen desde la instancia, usa la siguiente información:

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

    En el ejemplo anterior, se ilustra lo siguiente:

    • [IMAGE_NAME] es el nombre de la imagen nueva.
    • [DISK_NAME] es el disco desde el que deseas crear la imagen nueva.
    • [ZONE] es la zona en la que se encuentra el disco.

Implementa un trabajador de renderización

Ahora que tienes una imagen personalizada lista con el SO, el software y las bibliotecas que necesitas, puedes implementar una instancia de trabajador de renderización con la imagen personalizada, en lugar de usar una imagen pública.

  • En Cloud Shell, crea una instancia de trabajador de renderización. Agrega el permiso devstorage.read_write para poder escribir en Cloud Storage desde esta instancia.

    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]
    

    [WORKER_NAME] es un nombre para el trabajador de renderización.

Licencias de software

Puedes usar el servidor de licencias local para proporcionar licencias durante una PoC, ya que no necesitas volver a emitir licencias para servidores de licencias nuevos basados en la nube. Para conectarte de forma segura al servidor de licencias local desde la instancia de nube, crea una regla de firewall que solo permita el tráfico entre los puertos necesarios. Esta regla de firewall también permite el tráfico de la dirección IP de la puerta de enlace de Internet local o del servidor de licencias.

Es posible que debas configurar la puerta de enlace de Internet de tu instalación para permitir que el tráfico de la instancia de Google Cloud llegue al servidor de licencias local.

Usa tu servidor de licencias local

Para permitir el tráfico en la red de tu nube privada virtual (VPC), crea una regla de firewall.

  • En Cloud Shell, crea la siguiente regla de firewall:

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

En el ejemplo anterior, se ilustra lo siguiente:

  • [RULE_NAME] es un nombre para la regla de firewall.
  • [PROTOCOL] es el protocolo para el tráfico.
  • [PORT] es el puerto por el que viaja el tráfico.
  • [IP_ADDRESS] es la dirección IP del servidor de licencias local.

Usa un servidor de licencias basado en la nube

Un servidor de licencias basado en la nube no requiere conectividad a la red local y se ejecuta en la misma red de VPC que el trabajador de renderización. Debido a que la entrega de licencias es una tarea relativamente liviana, una instancia pequeña (de 2 a 4 CPU virtuales y de 6 a 8 GB de RAM) puede manejar la carga de trabajo de entregar licencias a un grupo de trabajadores de renderización.

Según el tipo de software para el que debas proporcionar licencias, es posible que debas cambiar las claves de las licencias a un número de ID de hardware único, como la dirección MAC del servidor de licencias. Otros administradores de licencias pueden validar licencias de software desde cualquier host conectado a Internet. Hay muchos administradores de licencias, por lo que debes consultar la documentación de licencias de tus productos para obtener instrucciones.

Permite la comunicación entre instancias

Las instancias de servidores de licencias y de trabajadores de renderización deben comunicarse entre sí. La regla de firewall default-allow-internal permite que todas las instancias del proyecto se comuniquen entre sí. Esta regla de firewall se crea en el momento de la creación de un proyecto nuevo. Si usas un proyecto nuevo, puedes omitir esta sección. Si usas un proyecto existente, debes probar si la regla de firewall aún está en el proyecto de Google Cloud.

  1. En Cloud Shell, verifica si la regla de firewall está en el proyecto:

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

    Si la regla de firewall está en tu proyecto, verás el siguiente resultado:

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

    Si la regla de firewall no está en tu proyecto, no se muestra ningún resultado.

  2. Si necesitas crear una regla de firewall, usa el siguiente 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
    

Almacenamiento de activos

Las canalizaciones de procesamiento pueden ser muy diferentes, incluso dentro de una sola empresa. Para implementar la PoC con rapidez y con una configuración mínima, puedes usar el disco de arranque de la instancia de trabajador de renderización para almacenar activos. La PoC aún no debería evaluar la sincronización de datos ni las soluciones de almacenamiento más avanzadas. Puedes evaluar esas opciones en una PoC independiente.

Hay varias opciones de almacenamiento disponibles en Google Cloud, pero recomendamos probar las soluciones de almacenamiento compartido escalables en PoC distintas.

Si quieres probar varias opciones de configuración para los trabajadores de renderización y necesitas un sistema de archivos compartidos, puedes crear un volumen de Filestore y activarlo mediante NFS en los trabajadores de renderización. Filestore es un servicio administrado de almacenamiento de archivos que se puede activar para lectura y escritura en muchas instancias y que actúa como un servidor de archivos.

Transfiere los datos a Google Cloud

Si quieres ejecutar una PoC de renderización, debes transferir los archivos de escena, las memorias caché y los activos a los trabajadores de renderización. En el caso de los conjuntos de datos más grandes (más de 10 GB), puedes usar gsutil para copiarlos a Cloud Storage y después a los trabajadores de renderización. En el caso de los conjuntos más pequeños (menos de 10 GB), puedes usar la CLI de gcloud a fin de copiar los datos directamente en alguna ruta de los trabajadores de renderización (solo para Linux).

Crea un directorio de destino en tu trabajador de renderización

  1. En Cloud Shell, conéctate al trabajador de procesamiento mediante SSH. Para ello, usa el siguiente comando:

    gcloud compute ssh [WORKER_NAME]
    

    En el ejemplo, [WORKER_NAME] es el nombre del trabajador de procesamiento.

  2. Crea un directorio de destino para tus datos, de la siguiente manera:

    mkdir [ASSET_DIR]
    

    En el ejemplo, [ASSET_DIR] es un directorio local en cualquier ubicación del trabajador de procesamiento.

Usa gsutil para copiar grandes cantidades de datos

Si transfieres conjuntos de datos grandes al trabajador de renderización, usa gsutil con Cloud Storage como paso intermedio. Si transfieres conjuntos de datos más pequeños, puedes pasar a la siguiente sección y usar la CLI de gcloud para transferir cantidades de datos más pequeñas.

  1. En tu estación de trabajo local, crea un bucket de Cloud Storage:

    gsutil mb gs://[BUCKET_NAME_ASSETS]
    

    En el ejemplo, [BUCKET_NAME_ASSETS] representa el nombre del depósito de Cloud Storage que contiene los archivos o los directorios que deseas copiar.

  2. Copia los datos del directorio local al bucket:

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

    En el ejemplo, [ASSETS] es una lista de archivos o directorios para copiar en el depósito.

  3. Conéctate al trabajador de procesamiento mediante SSH, de la siguiente manera:

    gcloud compute ssh [WORKER_NAME]
    
  4. Copia el contenido del bucket en el trabajador de procesamiento, como se indica a continuación:

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

Usa la CLI de gcloud para copiar pequeñas cantidades de datos

Si transfieres conjuntos de datos más pequeños, puedes copiarlos directamente desde tu estación de trabajo local a un trabajador de renderización de Linux en ejecución con la CLI de gcloud.

  • En tu estación de trabajo local, copia los datos entre el directorio local y el trabajador de renderización:

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

    En el ejemplo anterior, se ilustra lo siguiente:

    • [ASSETS] es una lista de archivos o directorios para copiar en el depósito.
    • [INSTANCE_NAME] es el nombre del trabajador de procesamiento.
    • [ASSET_DIR] es cualquier ruta de acceso local en el trabajador de procesamiento.

Ejecuta renderizaciones de prueba

Una vez que se instaló el software de renderización, se otorgaron las licencias, y se copiaron los datos de escena, estarás listo para ejecutar pruebas de renderización. Este proceso depende completamente de la forma en que la canalización de renderización ejecute los comandos de renderización.

Herramientas de comparación

Si deseas comparar los recursos de la nube con tu hardware local, puedes usar Perfkit Benchmarker para medir estadísticas como el ancho de banda de red y el rendimiento del disco.

Algunos software de renderización tienen sus propias herramientas de comparación, como V-Ray, Octane o Maxon, que te recomendamos ejecutar de forma local y en la nube para comparar opciones de configuración comunes de renderización.

Obtén los datos desde Google Cloud

Luego de realizar las pruebas de renderización, si quieres ver los resultados, debes copiar las renderizaciones resultantes en tu estación de trabajo local. Según el tamaño del conjunto de datos que quieras transferir, puedes usar gsutil o la CLI de gcloud.

Crea un directorio de destino en tu estación de trabajo local

  • Crea un directorio para los procesamientos en la estación de trabajo local, como se indica a continuación:

    mkdir [RENDER_DIR]
    

    En el ejemplo, [RENDER_DIR] es una ruta de acceso local en el trabajador de procesamiento.

Usa gsutil para copiar grandes cantidades de datos

Si vas a transferir conjuntos grandes de datos, usa gsutil. De lo contrario, pasa a la siguiente sección para usar la CLI de gcloud. Si quieres copiar los datos del trabajador de renderización a un bucket de Cloud Storage, crea un bucket de Cloud Storage independiente para mantener las renderizaciones separadas de los datos de los activos.

  1. En la estación de trabajo local, crea un bucket nuevo de Cloud Storage:

    gsutil mb gs://[BUCKET_NAME_RENDERS]
    

    En el ejemplo anterior, [BUCKET_NAME_RENDERS] representa el nombre del depósito de Cloud Storage para los datos renderizados.

  2. Conéctate al trabajador de renderización mediante SSH:

    gcloud compute ssh [WORKER_NAME]
    
  3. Copia los datos procesados en el bucket, como se indica a continuación:

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

    En el ejemplo anterior, se ilustra lo siguiente:

    • [RENDERS] es una lista de archivos o directorios para copiar en el depósito.
  4. En tu estación de trabajo local, copia los archivos del bucket de Cloud Storage a un directorio local:

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

Usa la CLI de gcloud para copiar pequeñas cantidades de datos

Si copias conjuntos de datos más pequeños, puedes copiarlos directamente desde el trabajador de renderización a tu estación de trabajo local.

  • En la estación de trabajo local, copia las renderizaciones en el directorio de destino:

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

    En el ejemplo anterior, [RENDERS] es una lista de archivos o directorios para copiar en la estación de trabajo local.

Limpia

Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.

Borra el proyecto

  1. En la consola de Google Cloud, ve a la página Administrar recursos.

    Ir a Administrar recursos

  2. En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
  3. En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.

Borra los recursos individuales

  1. Borra la instancia:
    gcloud compute instances delete INSTANCE_NAME
  2. Borra el depósito
    gcloud storage buckets delete BUCKET_NAME

¿Qué sigue?