Share via


Tutorial: Configuración, conexión y comprobación de un módulo de IoT Edge para una GPU

Se aplica a:Marca de verificación de IoT Edge 1.5 IoT Edge 1.5 marca de verificación de IoT Edge 1.4 IoT Edge 1.4

Importante

IoT Edge 1.5 LTS y IoT Edge 1.4 LTS son versiones compatibles. IoT Edge 1.4 LTS finaliza el ciclo de vida el 12 de noviembre de 2024. Si está en una versión anterior, consulte Actualización de IoT Edge.

Este tutorial le muestra cómo construir una máquina virtual (VM) habilitada para GPU. Desde la máquina virtual, verá cómo ejecutar un dispositivo IoT Edge que asigna trabajo desde uno de sus módulos a la GPU.

Usaremos Azure Portal, Azure Cloud Shell y la línea de comandos de la máquina virtual para:

  • Compilar de una máquina virtual compatible con GPU
  • Instalar la extensión de controlador NVIDIA en la máquina virtual
  • Configurar un módulo en un dispositivo IoT Edge para asignar trabajo a una GPU

Prerrequisitos

Creación de máquinas virtuales optimizadas para GPU

Para crear una máquina virtual (VM) optimizada para GPU, es importante elegir el tamaño adecuado. No todos los tamaños de máquina virtual admitirán el procesamiento de GPU. Además, hay diferentes tamaños de máquina virtual para diferentes cargas de trabajo. Para obtener más información, consulte Tamaños de máquina virtual optimizados para GPU o pruebe el selector de máquinas virtuales.

Vamos a crear una máquina virtual de IoT Edge con la plantilla de Azure Resource Manager (ARM) en GitHub y, a continuación, configurarla para que esté optimizada para GPU.

  1. Vaya a la plantilla de implementación de máquina virtual IoT Edge en GitHub: Azure/iotedge-vm-deploy.

  2. Seleccione el botón Implementar en Azure, que inicia la creación de una máquina virtual personalizada automáticamente en Azure Portal.

  3. Rellene los campos Implementación personalizada con sus credenciales y recursos de Azure:

    Propiedad Valor de descripción o ejemplo
    Suscripción Elija la suscripción a la cuenta de Azure.
    Resource group Añada su grupo de recursos de Azure.
    Region East US
    Las máquinas virtuales de GPU no están disponibles en todas las regiones.
    Prefijo de etiqueta DNS Cree un nombre para la máquina virtual.
    Nombre de usuario administrador adminUser
    Como alternativa, cree su propio nombre de usuario.
    Cadena de conexión de dispositivo Copie la cadena de conexión del dispositivo IoT Edge y péguela aquí.
    Tamaño de VM Standard_NV6
    Tipo de autenticación Elija contraseña o clave pública SSH y, después, cree un nombre de par de claves o contraseña si es necesario.

    Sugerencia

    Compruebe qué máquinas virtuales de GPU se admiten en cada región: productos disponibles por región.

    Pruebe este comando de Azure desde Azure Portal para comprobar qué región permite la suscripción de Azure. N en Standard_N significa que es una máquina virtual habilitada para GPU.

    az vm list-skus --location <YOUR-REGION> --size Standard_N --all --output table
    
  4. Seleccione el botón al fondo Revisar y crear y, luego, el botón Crear. La implementación puede tardar un minuto en completarse.

Instalación de la extensión NVIDIA

Ahora que tenemos una máquina virtual optimizada para GPU, vamos a instalar la extensión NVIDIA en la máquina virtual mediante Azure Portal.

  1. Abra la máquina virtual en Azure Portal y seleccione Extensiones y aplicaciones en el menú de la izquierda.

  2. Seleccione Agregar y elija la Extensión de controlador de GPU de NVIDIA en la lista y, a continuación, seleccione Siguiente.

  3. Seleccione Revisar y crear y, luego, Crear. La implementación puede tardar hasta 30 minutos en completarse.

  4. Para confirmar la instalación en Azure Portal, vuelva al menú Extensiones y aplicaciones de la máquina virtual. La nueva extensión denominada NvidiaGpuDriverLinux debe estar en la lista de extensiones y mostrar Aprovisionamiento realizado correctamente en Estado.

  5. Ejecute este comando para enumerar las extensiones para confirmar la instalación mediante Azure Cloud Shell. Reemplace los marcadores de posición <> por sus valores:

    az vm extension list --resource-group <YOUR-RESOURCE-GROUP> --vm-name <YOUR-VM-NAME> -o table
    
  6. Con un módulo NVIDIA, usaremos el programa NVIDIA System Management Interface, también conocido como nvidia-smi.

    Desde el dispositivo, instale el paquete nvidia-smi en función de la versión de Ubuntu. En este tutorial, se instalará nvidia-utils-515 para Ubuntu 20.04. Seleccione Y cuando se le solicite en la instalación.

    sudo apt install nvidia-utils-515
    

    Esta es una lista de todas las versiones nvidia-smi. Si se ejecuta nvidia-smi sin instalarlo primero, esta lista se imprimirá en la consola.

    Captura de pantalla de todas las versiones

  7. Después de la instalación, ejecute este comando para confirmar que se ha instalado:

    nvidia-smi
    

    Aparecerá una tabla de confirmación similar a esta.

    Captura de pantalla de la tabla de controladores de NVIDIA.

Nota:

La extensión NVIDIA es una manera simplificada de instalar los controladores NVIDIA, pero es posible que necesite más personalización. Para más información sobre las instalaciones personalizadas en máquinas virtuales de la serie N, consulte Instalación de controladores de GPU de NVIDIA en máquinas virtuales de la serie N que ejecutan Linux.

Habilitación de un módulo con aceleración de GPU

Hay diferentes maneras de habilitar un módulo de IoT Edge para que use una GPU para el procesamiento. Una manera es configurar un módulo de IoT Edge existente en el dispositivo para que se acelere con GPU. Otra manera es usar un módulo de contenedor prefabricado, por ejemplo, un módulo de NVIDIA DIGITS que ya está optimizado para GPU. Veamos cómo se realizan ambas maneras.

Habilitación de GPU en un módulo existente mediante DeviceRequests

Si tiene un módulo existente en el dispositivo IoT Edge, agregar una configuración mediante DeviceRequests en createOptions el manifiesto de implementación hará que el módulo esté optimizado para GPU. Siga estos pasos para configurar un módulo existente.

  1. Vaya a su centro de IoT en Azure Portal y elija Dispositivos en el menú Administración de dispositivos.

  2. Seleccione el dispositivo IoT Edge para abrirlo.

  3. Seleccione la pestaña Configurar módulos en la parte superior.

  4. Seleccione el módulo que desea habilitar para el uso de GPU en la lista módulos de IoT Edge.

  5. Se abrirá un panel lateral, elija la pestaña Opciones de creación de contenedores.

  6. Copie esta HostConfig cadena JSON y péguela en el cuadro Crear opciones.

     {
         "HostConfig": {
             "DeviceRequests": 
             [
                 {
                     "Count": -1,
                     "Capabilities": [
                         [
                             "gpu"
                         ]
                     ]
                 }
             ]
         }
     }
    
  7. Seleccione Actualizar.

  8. Seleccione Revisar + crear. El nuevo objeto HostConfig ahora está visible en el settings del módulo.

  9. Seleccione Crear.

  10. Para confirmar que la nueva configuración funciona, ejecute este comando en la máquina virtual:

    sudo docker inspect <YOUR-MODULE-NAME>
    

    Debería ver los parámetros para los que especificó para DeviceRequests en la impresión JSON en la consola.

Nota:

Para comprender mejor el parámetro DeviceRequests, vea el código fuente: moby/host_config.go

Habilitación de una GPU en un módulo NVIDIA prefabricado

Vamos a agregar un módulo NVIDIA DIGITS al dispositivo IoT Edge y, después, asignar una GPU al módulo estableciendo sus variables de entorno. Este módulo NVIDIA ya está en un contenedor Docker.

  1. Seleccione el dispositivo IoT Edge en Azure Portal en el menú Dispositivos de su centro de IoT.

  2. Seleccione la pestaña Configurar módulos en la parte superior.

  3. Seleccione + Agregar en el encabezado los módulos de IoT Edge y elija Módulo IoT Edge.

  4. Proporcione un nombre en el campo Nombre del módulo IoT Edge.

  5. En la pestaña Configuración del módulo, agregue nvidia/digits:6.0 al campo URI de imagen.

  6. Seleccione la pestaña Variables de entorno.

  7. Añada el nombre de la variable de entorno NVIDIA_VISIBLE_DEVICES con el valor 0. Esta variable controla qué GPU son visibles para la aplicación contenedorizada que se ejecuta en el dispositivo perimetral. La variable de entorno NVIDIA_VISIBLE_DEVICES se puede establecer en una lista separada por comas de identificadores de dispositivo, que corresponden a las GPU físicas del sistema. Por ejemplo, si hay dos GPU en el sistema con identificadores de dispositivo 0 y 1, la variable se puede establecer en "NVIDIA_VISIBLE_DEVICES=0,1" para que ambas GPU sean visibles para el contenedor. En este artículo, dado que la máquina virtual solo tiene una GPU, usaremos la primera (y solo esa).

    Nombre Tipo Valor
    NVIDIA_VISIBLE_DEVICES Texto 0
  8. Seleccione Agregar.

  9. Seleccione Revisar y crear. Aparecerán las propiedades del manifiesto de implementación.

  10. Seleccione Crear para crear el módulo.

  11. Seleccione Actualizar para actualizar la lista de módulos. El módulo tardará un par de minutos en mostrarse en ejecución en el estado Runtime, por lo que debe actualizar el dispositivo.

  12. Desde el dispositivo, ejecute este comando para confirmar que el nuevo módulo NVIDIA existe y se está ejecutando.

    iotedge list
    

    Debería ver el módulo NVIDIA en una lista de módulos en el dispositivo IoT Edge con un estado de running.

    Captura de pantalla del resultado del comando

Nota:

Para obtener más información sobre el módulo contenedor NVIDIA DIGITS, consulte la Documentación sobre dígitos de aprendizaje profundo.

Limpieza de recursos

Si desea continuar con otros tutoriales de IoT Edge, puede usar el dispositivo que creó para este tutorial. En caso contrario, puede eliminar los recursos de Azure que creó para evitar gastos.

Si ha creado una máquina virtual y un centro de IoT en un nuevo grupo de recursos, puede eliminar dicho grupo. Eso borrará todos los recursos asociados. Vuelva a comprobar el contenido del grupo de recursos para asegurarse de que no haya nada que desee conservar. Si no desea eliminar todo el grupo, puede eliminar recursos individuales en su lugar (máquina virtual, dispositivo o módulo de GPU).

Importante

La eliminación de un grupo de recursos es irreversible.

Use el siguiente comando para quitar el grupo de recursos de Azure. La eliminación de un grupo de recursos puede tardar unos minutos.

az group delete --name <YOUR-RESOURCE-GROUP> --yes

Puede confirmar que se ha eliminado el grupo de recursos mediante la visualización de la lista de grupos de recursos.

az group list

Pasos siguientes

Este artículo le ayudó a configurar la máquina virtual y el dispositivo IoT Edge para que se acelere con GPU. Para ejecutar una aplicación con una configuración similar, pruebe la ruta de aprendizaje para el desarrollo de NVIDIA DeepStream con Microsoft Azure. En el tutorial de Learn se muestra cómo desarrollar aplicaciones de vídeo inteligente optimizadas que pueden consumir varios orígenes de vídeo, imagen y audio.