Tutorial: Configuración, conexión y comprobación de un módulo de IoT Edge para una GPU
Se aplica a: IoT Edge 1.5 IoT Edge 1.4
Importante
IoT Edge 1.5 LTS e 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
Cuenta de Azure: creación de una cuenta gratuita
Azure IoT Hub: creación de un centro de IoT
Azure IoT Edge
Si aún no tiene un dispositivo IoT Edge y necesita crear uno rápidamente, ejecute el siguiente comando. Use Azure Cloud Shell ubicado en Azure Portal. Cree un nuevo nombre de dispositivo para
<DEVICE-NAME>
y substituya el IoT<IOT-HUB-NAME>
con el suyo.az iot hub device-identity create --device-id <YOUR-DEVICE-NAME> --edge-enabled --hub-name <YOUR-IOT-HUB-NAME>
Para más información sobre cómo crear un dispositivo IoT Edge, consulte Inicio rápido: Implementación del primer módulo IoT Edge en un dispositivo Linux virtual. Más adelante en este tutorial, agregaremos un módulo NVIDIA a nuestro dispositivo IoT Edge.
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 admiten 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.
Vaya a la plantilla de implementación de máquina virtual IoT Edge en GitHub: Azure/iotedge-vm-deploy.
Seleccione el botón Implementar en Azure, que inicia la creación de una máquina virtual personalizada automáticamente en Azure Portal.
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
enStandard_N
significa que es una máquina virtual habilitada para GPU.az vm list-skus --location <YOUR-REGION> --size Standard_N --all --output table
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.
Abra la máquina virtual en Azure Portal y seleccione Extensiones y aplicaciones en el menú de la izquierda.
Seleccione Agregar y elija la Extensión de controlador de GPU de NVIDIA en la lista y, a continuación, seleccione Siguiente.
Seleccione Revisar y crear y, luego, Crear. La implementación puede tardar hasta 30 minutos en completarse.
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.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
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. SeleccioneY
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 ejecutanvidia-smi
sin instalarlo primero, esta lista se imprimirá en la consola.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.
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.
Vaya a su centro de IoT en Azure Portal y elija Dispositivos en el menú Administración de dispositivos.
Seleccione el dispositivo IoT Edge para abrirlo.
Seleccione la pestaña Configurar módulos en la parte superior.
Seleccione el módulo que desea habilitar para el uso de GPU en la lista módulos de IoT Edge.
Se abrirá un panel lateral, elija la pestaña Opciones de creación de contenedores.
Copie esta
HostConfig
cadena JSON y péguela en el cuadro Crear opciones.{ "HostConfig": { "DeviceRequests": [ { "Count": -1, "Capabilities": [ [ "gpu" ] ] } ] } }
Seleccione Actualizar.
Seleccione Revisar + crear. El nuevo objeto
HostConfig
ahora está visible en elsettings
del módulo.Seleccione Crear.
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.
Seleccione el dispositivo IoT Edge en Azure Portal en el menú Dispositivos de su centro de IoT.
Seleccione la pestaña Configurar módulos en la parte superior.
Seleccione + Agregar en el encabezado los módulos de IoT Edge y elija Módulo IoT Edge.
Proporcione un nombre en el campo Nombre del módulo IoT Edge.
En la pestaña Configuración del módulo, agregue
nvidia/digits:6.0
al campo URI de imagen.Seleccione la pestaña Variables de entorno.
Añada el nombre de la variable de entorno
NVIDIA_VISIBLE_DEVICES
con el valor0
. Esta variable controla qué GPU son visibles para la aplicación contenedorizada que se ejecuta en el dispositivo perimetral. La variable de entornoNVIDIA_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 Seleccione Agregar.
Seleccione Revisar y crear. Aparecerán las propiedades del manifiesto de implementación.
Seleccione Crear para crear el módulo.
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.
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
.
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.