Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Los microservicios de inferencia de NVIDIA (NIM) están optimizados y los microservicios de inferencia de IA en contenedores que simplifican y aceleran la forma en que se crean aplicaciones de Inteligencia artificial. Estos modelos están empaquetados previamente, escalables y optimizados para la implementación directa como puntos de conexión seguros en Azure Container Apps. Al usar Azure Container Apps con GPU sin servidor, puede ejecutar estas NIM de forma eficaz sin tener que administrar la infraestructura subyacente.
En este tutorial, aprenderá a implementar un NIM de NVIDIA Llama3 en Azure Container Apps mediante GPU sin servidor.
En este tutorial se usa una instancia premium de Azure Container Registry para mejorar el rendimiento del arranque en frío al trabajar con GPU sin servidor. Si no desea usar una instancia premium de Azure Container Registry, asegúrese de modificar el az acr create
comando de este tutorial para establecer --sku
en basic
.
Prerrequisitos
Recurso | Descripción |
---|---|
Cuenta de Azure | Una cuenta de Azure con una suscripción activa. Si no tiene ninguna, puede crear una gratis. |
CLI de Azure | Instale la CLI de Azure. |
Clave de API de NVIDIA NGC | Puede obtener una clave de API desde el sitio web de NVIDIA GPU Cloud (NGC). |
Configuración
Para iniciar sesión en Azure desde la CLI, ejecute el siguiente comando y siga las indicaciones para completar el proceso de autenticación.
az login
Para asegurarse de que ejecuta la versión más reciente de la CLI, ejecute el comando de actualización.
az upgrade
Luego, instale o actualice la extensión de Azure Container Apps para la CLI.
Si recibe errores sobre los parámetros que faltan al ejecutar comandos az containerapp
en la CLI de Azure o cmdlets desde el módulo Az.App
de PowerShell, asegúrese de que tiene instalada la versión más reciente de la extensión Azure Container Apps.
az extension add --name containerapp --upgrade
Nota:
A partir de mayo de 2024, las extensiones de la CLI de Azure ya no habilitan las características en vista previa de forma predeterminada. Para acceder a las características de la versión preliminar de Container Apps, instale la extensión Container Apps con --allow-preview true
.
az extension add --name containerapp --upgrade --allow-preview true
Ahora que está instalada la extensión o el módulo actual, registre los espacios de nombres Microsoft.App
y Microsoft.OperationalInsights
.
az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights
Configure variables de entorno mediante la nomenclatura del grupo de recursos y la configuración de la ubicación.
RESOURCE_GROUP="my-resource-group" LOCATION="swedencentral"
A continuación, genere un nombre de registro de contenedor único.
SUFFIX=$(head /dev/urandom | tr -dc 'a-z0-9' | head -c 6) ACR_NAME="mygpututorialacr${SUFFIX}"
Por último, establezca variables para asignar un nombre al entorno e identificar el entorno, el tipo de perfil de carga de trabajo, el nombre de la aplicación de contenedor y el contenedor.
CONTAINERAPPS_ENVIRONMENT="my-environment-name" GPU_TYPE="Consumption-GPU-NC24-A100" CONTAINER_APP_NAME="llama3-nim" CONTAINER_AND_TAG="llama-3.1-8b-instruct:latest"
Cree un grupo de recursos de Azure
Cree un grupo de recursos para organizar los servicios relacionados con la implementación de la aplicación contenedora.
az group create \
--name $RESOURCE_GROUP \
--location "$LOCATION"
Cree un Azure Container Registry (ACR).
Nota:
En este tutorial se usa una instancia premium de Azure Container Registry para mejorar el rendimiento del arranque en frío al trabajar con GPU sin servidor. Si no desea usar una instancia premium de Azure Container Registry, modifique el siguiente comando y establezca
--sku
enbasic
.az acr create \ --resource-group $RESOURCE_GROUP \ --name $ACR_NAME \ --location $LOCATION \ --sku premium
Extracción, etiqueta e inserción de la imagen
A continuación, extraiga la imagen de NVIDIA GPU Cloud e inserte en Azure Container Registry.
Nota:
Cada una de las NIC de NVIDIA tiene sus propios requisitos de hardware. Asegúrese de que el tipo de GPU que seleccione admite el NIM de su elección. Llama3 NIM usado en este tutorial puede ejecutarse en GPU NVIDIA A100.
Autentíquese en el registro de contenedor de NVIDIA.
docker login nvcr.io
Después de ejecutar este comando, el proceso de inicio de sesión le pide que escriba un nombre de usuario. Escriba $oauthtoken para el valor de nombre de usuario.
A continuación, se le pedirá una contraseña. Escriba la clave de API de NVIDIA NGC aquí. Una vez autenticado en el registro de NVIDIA, puede autenticarse en el registro de Azure.
Autentíquese en Azure Container Registry.
az acr login --name $ACR_NAME
Extraiga la imagen NIM Llama3.
docker pull nvcr.io/nim/meta/$CONTAINER_AND_TAG
Etiquete la imagen.
docker tag nvcr.io/nim/meta/$CONTAINER_AND_TAG $ACR_NAME.azurecr.io/$CONTAINER_AND_TAG
Inserte la imagen en Azure Container Registry.
docker push $ACR_NAME.azurecr.io/$CONTAINER_AND_TAG
Habilitación del streaming de artefactos (recomendado, pero opcional)
Cuando se ejecuta la aplicación contenedora, extrae el contenedor del registro de contenedor. Cuando tenga imágenes más grandes como en el caso de las cargas de trabajo de IA, esta extracción de imágenes puede tardar algún tiempo. Al habilitar el streaming de artefactos, se reduce el tiempo necesario y la aplicación contenedora puede tardar mucho tiempo en iniciarse si no habilita el streaming de artefactos. Use los siguientes pasos para habilitar el streaming de artefactos.
Nota:
Los comandos siguientes pueden tardar unos minutos en completarse.
Habilite el streaming de artefactos en el registro de contenedor.
az acr artifact-streaming update \ --name $ACR_NAME \ --repository llama-3.1-8b-instruct \ --enable-streaming True
Habilite el streaming de artefactos en la imagen de contenedor.
az acr artifact-streaming create \ --name $ACR_NAME \ --image $CONTAINER_AND_TAG
Creación de la aplicación de contenedor
A continuación, creará una aplicación contenedora con la clave de API de NVIDIA GPU Cloud.
Cree la aplicación de contenedor.
az containerapp env create \ --name $CONTAINERAPPS_ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --location $LOCATION \ --enable-workload-profiles
Agregue el perfil de carga de trabajo de GPU al entorno.
az containerapp env workload-profile add \ --resource-group $RESOURCE_GROUP \ --name $CONTAINERAPPS_ENVIRONMENT \ --workload-profile-type $GPU_TYPE \ --workload-profile-name LLAMA_PROFILE
Cree la aplicación de contenedor.
az containerapp create \ --name $CONTAINER_APP_NAME \ --resource-group $RESOURCE_GROUP \ --environment $CONTAINERAPPS_ENVIRONMENT \ --image $ACR_NAME.azurecr.io/$CONTAINER_AND_TAG \ --cpu 24 \ --memory 220 \ --target-port 8000 \ --ingress external \ --secrets ngc-api-key=<PASTE_NGC_API_KEY_HERE> \ --env-vars NGC_API_KEY=secretref:ngc-api-key \ --registry-server $ACR_NAME.azurecr.io \ --workload-profile-name LLAMA_PROFILE \ --query properties.configuration.ingress.fqdn
Este comando devuelve la dirección URL de la aplicación contenedora. Establezca este valor en un editor de texto para usarlo en un comando siguiente.
Compruebe que la aplicación funciona
Para comprobar una implementación correcta, envíe una solicitud de solicitud POST
a la aplicación.
Antes de ejecutar este comando, asegúrese de reemplazar la dirección URL por la <YOUR_CONTAINER_APP_URL>
dirección URL de la aplicación de contenedor devuelta del comando anterior.
curl -X POST \
'http://<YOUR_CONTAINER_APP_URL>/v1/completions' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"model": "meta/llama-3.1-8b-instruct",
"prompt": [{"role":"user", "content":"Once upon a time..."}],
"max_tokens": 64
}'
Mejora del rendimiento con montajes de volumen (opcional)
Al iniciar y usar el streaming de artefactos con Azure Container Registry, Azure Container Apps sigue extrayendo las imágenes del registro de contenedor al inicio. Esta acción da como resultado un arranque en frío incluso con el streaming de artefactos optimizado.
Para tiempos de inicio en frío aún más rápidos, muchas de las NIM proporcionan una ruta de montaje de volumen para almacenar la imagen en un directorio de caché. Puede usar este directorio de caché para almacenar los pesos del modelo y otros archivos que el NIM necesita para ejecutarse.
Para configurar un montaje de volumen para Llama3 NIM, debe establecer un montaje de volumen en como ./opt/nim/.cache
se especifica en la documentación de NVIDIA Llama-3.1-8b. Para ello, siga los pasos descritos en el tutorial montajes de volúmenes y establezca la ruta de acceso de montaje del volumen en /opt/nim/.cache
.
Limpieza de recursos
Si no va a seguir usando esta aplicación, ejecute el siguiente comando para eliminar el grupo de recursos junto con todos los recursos creados en este tutorial.
Precaución
El siguiente comando elimina el grupo de recursos especificado y todos los recursos contenidos en él. Este comando también elimina los recursos fuera del ámbito de este tutorial que existen en este grupo de recursos.
az group delete --name $RESOURCE_GROUP
Sugerencia
¿Tiene problemas? Háganoslo saber en GitHub abriendo un problema en el repositorio de Azure Container Apps.