Ajuste de modelos mediante implementaciones de API sin servidor en Microsoft Foundry (clásico)

Solo se aplica a:portal Foundry (clásico). Este artículo no está disponible para el nuevo portal de Foundry. Obtenga más información sobre el nuevo portal.

Nota

Los vínculos de este artículo pueden abrir contenido en la nueva documentación de Microsoft Foundry en lugar de la documentación de Foundry (clásico) que está viendo ahora.

Importante

Los elementos marcados (versión preliminar) de este artículo se encuentran actualmente en versión preliminar pública. Esta versión preliminar se proporciona sin un contrato de nivel de servicio y no se recomienda para cargas de trabajo de producción. Es posible que algunas características no se admitan o que tengan funcionalidades restringidas. Para obtener más información, vea Supplemental Terms of Use for Microsoft Azure Previews.

Obtenga información sobre cómo implementar modelos optimizados mediante implementaciones de API sin servidor en Microsoft Foundry. En esta guía completa se muestra cómo ajustar modelos de lenguaje grandes (LLM) a sus conjuntos de datos específicos e implementarlos con infraestructura sin servidor, ofreciendo un rendimiento mejorado, rentabilidad, latencia reducida y salidas adaptadas.

Rentabilidad: el ajuste fino de Foundry puede ser más rentable, especialmente para implementaciones a gran escala, gracias a los precios de pago por uso.

Variedad de modelos: la implementación de api sin servidor de Foundry ofrece compatibilidad con modelos propietarios y de código abierto, lo que proporciona a los usuarios la flexibilidad de seleccionar los modelos que mejor se adapten a sus necesidades sin restringirse a un solo tipo.

Personalización y control: Foundry proporciona una mayor personalización y control sobre el proceso de ajuste preciso, lo que permite a los usuarios adaptar modelos de forma más precisa a sus requisitos específicos.

En este artículo se explica cómo ajustar los modelos que se implementan mediante implementaciones de API sin servidor en Foundry.

Requisitos previos

  • Un proyecto de fundición.

  • Los controles de acceso basados en roles de Azure (Azure RBAC) se utilizan para conceder acceso a las operaciones en el portal de Foundry. Para realizar los pasos descritos en este artículo, se debe asignar a la cuenta de usuario el rol Owner o Contributor para la suscripción de Azure. Para obtener más información sobre los permisos, consulte Control de acceso basado en roles en el portal de Foundry.

Comprobación del registro del proveedor de suscripciones

Compruebe que su suscripción está registrada en el proveedor de recursos Microsoft.Network.

  1. Inicie sesión en el portal Azure.
  2. Seleccione la suscripción que desea usar.
  3. En Configuración en el menú de la barra lateral, seleccione Proveedores de recursos.
  4. Seleccione Microsoft. Network y elija Register si no está registrado.

Encuentra modelos con compatibilidad para ajuste fino

El catálogo de modelos Foundry ofrece soporte para el ajuste fino de varios tipos de modelos, incluidas las finalizaciones de chat y las generaciones de texto. Para obtener una lista de modelos y regiones que admiten el ajuste preciso, consulte Disponibilidad de regiones para modelos en API sin servidor.

Las tareas de ajuste preciso solo están disponibles para los usuarios cuya suscripción de Azure pertenece a una cuenta de facturación en una región en la que el proveedor de modelos pone la oferta a disposición. Si la oferta está disponible en la región pertinente, el usuario debe tener un recurso de proyecto en la región de Azure donde el modelo esté disponible para la implementación o ajuste, según corresponda.

Acceda al portal de Foundry para ver todos los modelos que admiten ajuste fino.

  1. Inicie sesión en Microsoft Foundry. Asegúrese de que el interruptor New Foundry está desactivado. Estos pasos hacen referencia a Foundry (clásico).

  2. Si aún no estás en tu proyecto, selecciónalo.

  3. Vaya al catálogo de modelos.

  4. Seleccione el filtro Tareas de ajuste fino .

    Captura de pantalla de las opciones de filtro de ajuste del catálogo de modelos.

  5. Seleccione Todo o seleccione una tarea específica.

Preparación de los datos para la optimización

Prepare los datos de entrenamiento y validación para ajustar el modelo. Los datos de entrenamiento y validación constan de ejemplos de entrada y salida para saber cómo desea que se realice el modelo.

Asegúrese de que todos los ejemplos de entrenamiento siguen el formato esperado para la inferencia. Para ajustar los modelos de forma eficaz, asegúrese de un conjunto de datos diverso manteniendo el equilibrio de datos, incluidos varios escenarios, y refinando periódicamente los datos de entrenamiento para alinearse con las expectativas del mundo real. Estas acciones, en última instancia, conducen a respuestas de modelo más precisas y equilibradas.

Propina

Los distintos tipos de modelo requieren datos de entrenamiento en diferentes formatos.

Formato de archivo de ejemplo

El tipo de archivo admitido es JSON Lines (JSONL). Los archivos se cargan en el almacén de datos predeterminado y están disponibles en el proyecto.

    {"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "Is Xbox better than PlayStation?"}, {"role": "assistant", "content": "I apologize, but I cannot provide personal opinions. My primary job is to assist you with any issues related to your Xbox device. Do you have any Xbox-related issues that need addressing?"}]}
    {"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "Can I play PC games on my Xbox?"}, {"role": "assistant", "content": "While Xbox consoles don't natively support PC games, they can play an array of Xbox games, many of which are also available on PC. Can I assist you with finding games compatible with your Xbox device?"}]}
    {"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "I'm having trouble connecting my Xbox to the Wi-Fi."}, {"role": "assistant", "content": "No worries, let's go through the network settings on your Xbox. Can you please tell me what happens when you try to connect it to the Wi-Fi?"}]}

Utilice el asistente de optimización de modelos

El portal de Foundry proporciona un asistente para modelos personalizados para crear y entrenar de forma interactiva un modelo optimizado para el recurso de Azure.

Selección del modelo base

  1. Seleccione Ajuste preciso en el menú de la barra lateral y, después, elija + Ajustar modelo.
  2. Seleccione el modelo que desea ajustar en la lista en Modelos base y, a continuación, seleccione Siguiente.

Elección de los datos de entrenamiento

El siguiente paso consiste en elegir los datos de entrenamiento preparados existentes o cargar nuevos datos de entrenamiento preparados que se usarán al personalizar el modelo. El panel Datos de entrenamiento muestra los conjuntos de datos cargados previamente existentes y también proporciona opciones para cargar nuevos datos de entrenamiento.

Seleccione + Agregar datos de entrenamiento.

  • Si los datos de entrenamiento ya se han cargado en el servicio, seleccione Archivos existentes en este recurso.
    • Seleccione el archivo en la lista desplegable que se muestra.
  • Para cargar nuevos datos de entrenamiento, use una de las siguientes opciones:
    • Seleccione Cargar archivos para cargar datos de entrenamiento desde un archivo local.
    • Seleccione Azure blob u otras ubicaciones web compartidas para importar datos de entrenamiento desde Azure Blob u otra ubicación web compartida.
  • Para usar un conjunto de datos listo para usarse para un ajuste rápido, elija de la lista de Seleccionar datos.

Para archivos de datos de gran tamaño, se recomienda importar desde un almacén de blobs de Azure. Para obtener más información sobre Azure Blob Storage, consulte ¿Qué es Azure Blob Storage?

Elección de los datos de validación

El siguiente paso proporciona opciones para configurar el modelo para usar los datos de validación en el proceso de entrenamiento. Si no desea usar datos de validación, elija Enviar para continuar con las opciones avanzadas del modelo. De lo contrario, si tiene un conjunto de datos de validación, elija los datos de validación preparados existentes o cargue nuevos datos de validación preparados para usarlos al personalizar el modelo.

Seleccione + Agregar datos de validación. El panel Datos de validación muestra los conjuntos de datos de entrenamiento y validación cargados previamente existentes y proporciona opciones por las que puede cargar nuevos datos de validación.

  • Si los datos de validación ya se han cargado en el servicio, seleccione Archivos existentes en este recurso.
    • Seleccione el archivo de la lista que se muestra en el panel Datos de validación .
  • Para cargar nuevos datos de validación, use una de las siguientes opciones:
    • Seleccione Cargar archivos para cargar datos de validación desde un archivo local.
    • Seleccione Azure blob u otras ubicaciones web compartidas para importar datos de validación desde Azure Blob u otra ubicación web compartida.

Para archivos de datos de gran tamaño, se recomienda importar desde un almacén de blobs de Azure. Los archivos grandes pueden ser inestables cuando se cargan a través de formularios de varias partes porque las solicitudes son atómicas y no se pueden reintentar ni reanudar.

Nota

  • De forma similar a los archivos de datos de entrenamiento, los archivos de datos de validación se deben formatear como archivos JSONL, codificados en UTF-8 con una marca de orden de bytes (BOM). El archivo debe ser inferior a 512 MB.

Configuración de parámetros de tarea

El Asistente para ajustar modelos muestra los parámetros para entrenar el modelo optimizado en el panel Parámetros de tarea. Los parámetros siguientes están disponibles:

Nombre Tipo Descripción
Tamaño del lote (1-32) entero Tamaño del lote que se va a usar para el entrenamiento. El tamaño del lote es el número de ejemplos de entrenamiento utilizados para realizar una sola pasada hacia adelante y hacia atrás. En general, los tamaños de lote más grandes tienden a funcionar mejor para conjuntos de datos más grandes. El valor predeterminado y el valor máximo de esta propiedad son específicos de un modelo base. Un tamaño de lote mayor significa que los parámetros del modelo se actualizan con menos frecuencia, pero con una varianza menor.
Multiplicador de velocidad de aprendizaje (0,0-10,0) número Multiplicador de velocidad de aprendizaje que se va a usar para el entrenamiento. La tasa de aprendizaje de ajuste fino es la tasa de aprendizaje original utilizada para el preentrenamiento multiplicada por este valor. Las tasas de aprendizaje más grandes tienden a mejorar con tamaños de lote más grandes. Se recomienda experimentar con valores en el intervalo de 0,02 a 0,2 para ver lo que genera los mejores resultados. Una tasa de aprendizaje más pequeña podría ser útil para evitar el sobreajuste.
Número de épocas (1-10) entero Número de épocas en las que entrenar el modelo. Una época hace referencia a un ciclo completo a través del conjunto de datos de entrenamiento.

Seleccione Valor predeterminado para usar los valores predeterminados para el trabajo de ajuste preciso o seleccione Personalizado para mostrar y editar los valores de hiperparámetros. Cuando se seleccionan los valores predeterminados, determinamos el valor correcto de forma algorítmica en función de los datos de entrenamiento.

Después de configurar las opciones avanzadas, seleccione Enviar.

Comprobación del estado del modelo personalizado

La pestaña de Ajuste fino muestra información sobre tu modelo personalizado. La pestaña incluye información sobre el estado y el ID del trabajo afinado para tu modelo personalizado. Cuando se completa el trabajo, la pestaña muestra el identificador de archivo del archivo de resultados. Es posible que tenga que seleccionar Actualizar para ver un estado actualizado para el trabajo de entrenamiento del modelo.

Captura de pantalla del panel de proyectos en ejecución.

Después de iniciar un trabajo de ajuste preciso, puede tardar algún tiempo en completarse. Puede que tu trabajo esté en cola detrás de otros en el sistema. El entrenamiento del modelo puede tardar minutos o horas en función del tamaño del modelo y del conjunto de datos. Estas son algunas de las tareas que se van a realizar en la pestaña Modelos :

  • Compruebe el estado del trabajo de ajuste para el modelo personalizado en la columna Estado de la pestaña Modelos personalizados .
  • En la columna nombre del modelo, seleccione el nombre del modelo para ver más información sobre el modelo personalizado. Puede ver el estado del trabajo de ajuste fino, los resultados del entrenamiento, los eventos de entrenamiento y los hiperparámetros empleados en el trabajo.
  • Seleccione Actualizar para actualizar la información de la página.

Captura de pantalla del panel de detalles de ajuste.

Escenarios empresariales admitidos para el ajuste fino

Se admiten varios escenarios empresariales para el ajuste fino de la implementación de API sin servidor. En la tabla siguiente se describen las configuraciones admitidas para las redes de almacenamiento de usuarios y la autenticación para garantizar un funcionamiento sin problemas en escenarios empresariales:

Nota

  • Para cambiar la autenticación de conexiones de datos mediante Foundry, seleccione la conexión del almacén de datos donde esté guardado su conjunto de datos y vaya a los detalles de acceso>Método de autenticación.
  • La autenticación de almacenamiento se puede cambiar en la página de >Configuraciones> y Ajustes de Azure Storage, >permitir el acceso a la clave de cuenta de almacenamiento.
  • La red de almacenamiento se puede cambiar en la página de Networking de Azure Storage >.
Redes de almacenamiento Autenticación de almacenamiento Autenticación de conexión de datos Soporte técnico
Acceso a la red pública = Habilitado Clave de cuenta habilitada Clave SAS/Clave de cuenta Sí, experiencia de usuario y SDK
Acceso a la red pública = Habilitado Clave de cuenta deshabilitada Autenticación basada en Entra (sin credenciales) Sí, experiencia de usuario y SDK

Nota: para la experiencia de usuario, es posible que tenga que agregar "Storage Blob Data Reader" o "Storage Blob Data Contributor" para su identificador de usuario en la cuenta de almacenamiento. También podría ser necesario cambiar la autenticación de la conexión para usar la clave de la cuenta o el token SAS.
Habilitado desde redes virtuales seleccionadas y direcciones IP Clave de cuenta habilitada Clave de cuenta Sí, experiencia de usuario y SDK

Nota: para la experiencia del usuario, la dirección IP del proceso que ejecuta el explorador debe estar en la lista seleccionada.
Habilitado desde redes virtuales seleccionadas y direcciones IP Clave de cuenta habilitada SAS Sí, experiencia de usuario y SDK

Nota: para la experiencia del usuario, la dirección IP del proceso que ejecuta el explorador debe estar en la lista seleccionada.
Habilitado desde redes virtuales seleccionadas y direcciones IP Clave de cuenta deshabilitada Autenticación basada en Entra (sin credenciales) Sí, experiencia de usuario y SDK.

Nota: para la experiencia del usuario, es posible que tenga que agregar lector de datos de Storage Blob o colaborador de datos de Storage Blob para el identificador de usuario en la cuenta de almacenamiento o cambiar la autenticación de la conexión para usar el token de SAS o la clave de cuenta. Asegúrese también de que la dirección IP del proceso que ejecuta el explorador debe estar en la lista seleccionada.
Acceso a la red pública = Deshabilitado Clave de cuenta habilitada Clave de cuenta de SAS Sí, experiencia de usuario y SDK.

Nota: para que la carga y el envío de datos de la experiencia del usuario funcionen, es necesario tener acceso al área de trabajo desde dentro de la red virtual que tenga acceso adecuado al almacenamiento.
Acceso a la red pública = Deshabilitado Clave de cuenta deshabilitada Autenticación basada en Entra (sin credenciales) Sí, experiencia de usuario y SDK.

Nota: para que la carga y el envío de datos de la experiencia del usuario funcionen, es necesario tener acceso al área de trabajo desde dentro de la red virtual que tenga acceso adecuado al almacenamiento.

Los escenarios anteriores también deben funcionar en un área de trabajo de red virtual administrada. Para obtener información sobre cómo configurar el Hub de Foundry de red virtual administrada, consulte Configuración de una red administrada para el Hub de Foundry.

El uso de claves administradas por el cliente (CMK) no es un escenario empresarial compatible con la implementación de API sin servidor.

Problemas de ajuste con configuraciones de red únicas en el área de trabajo y el almacenamiento suelen apuntar a un problema de configuración de red.


Despliegue de un modelo afinado

Después de que el trabajo de ajuste se realice correctamente, implemente el modelo personalizado desde la pestaña Ajuste preciso . Debe implementar el modelo personalizado para que esté disponible para su uso con llamadas de finalización.

Importante

Después de implementar un modelo personalizado y finalizar con el punto de conexión, recuerde limpiar los puntos de conexión inactivos. La eliminación de una implementación inactiva no elimina ni afecta al modelo personalizado subyacente y el modelo personalizado se puede volver a implementar en cualquier momento. Como se describe en Precios de Foundry, cada modelo personalizado (ajustado) implementado incurre en un costo de hospedaje por hora, independientemente de si se realizan finalizaciones o llamadas de finalizaciones de chat al modelo.

Para más información sobre el planeamiento y la administración de costos con Foundry, consulte la guía de Planeamiento y administración de los costos del servicio Foundry.

Nota

Solo se permite una implementación para un modelo personalizado. Se muestra un mensaje de error si selecciona un modelo personalizado ya implementado. Para implementar el modelo personalizado, seleccione el modelo personalizado que se va a implementar y, a continuación, seleccione Implementar modelo.

Se abre el cuadro de diálogo Implementar modelo . En el cuadro de diálogo, escriba el nombre de la implementación y seleccione Implementar para iniciar la implementación del modelo personalizado.

También puede implementar un modelo optimizado a través de la pestaña Modelos y puntos de conexión ; para ello, seleccione el botón Implementar modelo y, a continuación, seleccione Implementar modelo ajustado en la lista desplegable.

Captura de pantalla del panel de control para gestionar implementaciones de ajuste fino.

A continuación, seleccione el modelo optimizado que desea implementar y seleccione Implementar.

Implementación entre regiones

El ajuste preciso admite la implementación de un modelo ajustado en una región diferente a la de la ubicación en la que originalmente se ha ajustado el modelo. También puede desplegar en una suscripción o región diferente.

Las únicas limitaciones son que la nueva región también debe admitir el ajuste preciso y, al implementar una suscripción cruzada, la cuenta que genera el token de autorización para la implementación debe tener acceso a las suscripciones de origen y de destino.

La implementación entre suscripciones o regiones se puede realizar a través de Python.

Uso de un modelo personalizado implementado

Una vez implementado el modelo personalizado, puede usarlo como cualquier otro modelo implementado. Puede usar el portal Playgrounds in Foundry para experimentar con la nueva implementación. Puede seguir usando los mismos parámetros con el modelo personalizado, como la temperatura y la max_tokens, como puede con otros modelos implementados.

Limpieza de los modelos ajustados

Puede eliminar un modelo ajustado de la lista de modelos de ajuste fino de Foundry o de la página de detalles del modelo. Para eliminar el modelo ajustado de la página Ajuste de la configuración,

  1. Seleccione Ajuste fino en el menú de la barra lateral del proyecto Foundry.
  2. Seleccione el botón Eliminar para eliminar el modelo ajustado.

Nota

No se puede eliminar un modelo personalizado si tiene una implementación existente. Primero debe eliminar la implementación del modelo antes de eliminar el modelo personalizado.

Creación de un cliente para consumir el modelo

En las secciones siguientes se explica cómo ajustar un modelo en Python. Para encontrar un ejemplo de cuaderno de este código, consulte Fine-tuning LLM with model as a service.

  1. Instale las dependencias para empezar a ajustar el modelo.
%pip install azure-ai-ml
%pip install azure-identity

%pip install mlflow
%pip install azureml-mlflow
  1. Cree el cliente para consumir el modelo. El código siguiente usa una dirección URL de punto de conexión y una clave que se almacenan en variables de entorno. Reemplace <SUBSCRIPTION_ID>, <RESOURCE_GROUP_NAME> y <WORKSPACE_NAME> por sus propios valores.
from azure.ai.ml import MLClient
from azure.identity import (
    DefaultAzureCredential,
    InteractiveBrowserCredential,
)

try:
    credential = DefaultAzureCredential()
    credential.get_token("https://management.azure.com/.default")
except Exception as ex:
    credential = InteractiveBrowserCredential()

try:
    workspace_ml_client = MLClient.from_config(credential=credential)
except:
    workspace_ml_client = MLClient(
        credential,
        subscription_id="<SUBSCRIPTION_ID>",
        resource_group_name="<RESOURCE_GROUP_NAME>",
        workspace_name="<PROJECT_NAME OR WORKSPACE_NAME>",
    )

# The models, fine tuning pipelines and environments are available in various AzureML system registries,
# Example: Phi family of models are in "azureml", Llama family of models are in "azureml-meta" registry.
registry_ml_client = MLClient(credential, registry_name="azureml")

# Get AzureML workspace object.
workspace = workspace_ml_client._workspaces.get(workspace_ml_client.workspace_name)
workspace.id

Encuentra modelos con compatibilidad para ajuste fino

El catálogo de modelos Foundry ofrece soporte para el ajuste fino de varios tipos de modelos, incluidas las finalizaciones de chat y las generaciones de texto. Para obtener una lista de modelos y regiones que admiten el ajuste preciso, consulte Disponibilidad de regiones para modelos en API sin servidor.

Las tareas de ajuste preciso solo están disponibles para los usuarios cuya suscripción de Azure pertenece a una cuenta de facturación en una región en la que el proveedor de modelos pone la oferta a disposición. Si la oferta está disponible en la región pertinente, el usuario debe tener un recurso de proyecto en la región de Azure donde el modelo esté disponible para la implementación o ajuste, según corresponda.

En este ejemplo se usa un modelo phi-4-mini-instruct . En este fragmento de código, la propiedad de ID del modelo se pasa como entrada al trabajo de ajuste fino. También está disponible como el campo Id. de recurso en la página de detalles del modelo en el catálogo de modelos de Foundry.

model_name = "Phi-4-mini-instruct"
model_to_finetune = registry_ml_client.models.get(model_name, label="latest")
print(
    "\n\nUsing model name: {0}, version: {1}, id: {2} for fine tuning".format(
        model_to_finetune.name, model_to_finetune.version, model_to_finetune.id
    )
)

Preparación de los datos para la optimización

Prepare los datos de entrenamiento y validación para ajustar el modelo. Los datos de entrenamiento y validación constan de ejemplos de entrada y salida para saber cómo desea que se realice el modelo.

Asegúrese de que todos los ejemplos de entrenamiento siguen el formato esperado para la inferencia. Para ajustar los modelos de forma eficaz, asegúrese de un conjunto de datos diverso manteniendo el equilibrio de datos, incluidos varios escenarios, y refinando periódicamente los datos de entrenamiento para alinearse con las expectativas del mundo real. Estas acciones, en última instancia, conducen a respuestas de modelo más precisas y equilibradas.

Propina

Los distintos tipos de modelo requieren un formato diferente de datos de entrenamiento.

Formato de archivo de ejemplo

El tipo de archivo admitido es JSON Lines (JSONL). Los archivos se cargan en el almacén de datos predeterminado y están disponibles en el proyecto.

    {"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "Is Xbox better than PlayStation?"}, {"role": "assistant", "content": "I apologize, but I cannot provide personal opinions. My primary job is to assist you with any issues related to your Xbox device. Do you have any Xbox-related issues that need addressing?"}]}
    {"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "Can I play PC games on my Xbox?"}, {"role": "assistant", "content": "While Xbox consoles don't natively support PC games, they can play an array of Xbox games, many of which are also available on PC. Can I assist you with finding games compatible with your Xbox device?"}]}
    {"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "I'm having trouble connecting my Xbox to the Wi-Fi."}, {"role": "assistant", "content": "No worries, let's go through the network settings on your Xbox. Can you please tell me what happens when you try to connect it to the Wi-Fi?"}]}

Creación de entradas de datos de entrenamiento

Este fragmento de código muestra cómo definir un conjunto de datos de entrenamiento.

from azure.ai.ml.constants import AssetTypes
from azure.ai.ml.entities import Data

dataset_version = "1"
train_dataset_name = "chat_training_small"
try:
    train_data_asset = workspace_ml_client.data.get(
        train_dataset_name, version=dataset_version
    )
    print(f"Dataset {train_dataset_name} already exists")
except:
    print("creating dataset")
    train_data = Data(
        path=f"./train.jsonl",
        type=AssetTypes.URI_FILE,
        description="Training dataset",
        name=train_dataset_name,
        version="1",
    )
    train_data_asset = workspace_ml_client.data.create_or_update(train_data)

Creación de datos de validación

El siguiente paso proporciona opciones para configurar el modelo para usar los datos de validación en el proceso de entrenamiento. Si no desea usar datos de validación, puede omitir este paso y continuar con la sección siguiente. De lo contrario, si tiene un conjunto de datos de validación, puede elegir los datos de validación preparados existentes o cargar nuevos datos de validación preparados para usarlos al personalizar el modelo.

from azure.ai.ml.entities import Data

dataset_version = "1"
validation_dataset_name = "chat_validation_small"
try:
    validation_data_asset = workspace_ml_client.data.get(
        validation_dataset_name, version=dataset_version
    )
    print(f"Dataset {validation_dataset_name} already exists")
except:
    print("creating dataset")
    validation_data = Data(
        path=f"./validation.jsonl",
        type=AssetTypes.URI_FILE,
        description="Validation dataset",
        name=validation_dataset_name,
        version="1",
    )
    validation_data_asset = workspace_ml_client.data.create_or_update(validation_data)

Creación de una suscripción de Marketplace para los modelos de asociados

Este paso es necesario para todos los modelos que no son de Microsoft. Un ejemplo de un modelo de Microsoft es la familia phi de modelos.

model_id_to_subscribe = "/".join(model_to_finetune.id.split("/")[:-2])
print(model_id_to_subscribe)

normalized_model_name = model_name.replace(".", "-")

from azure.ai.ml.entities import MarketplaceSubscription

subscription_name = f"{normalized_model_name}-sub"

marketplace_subscription = MarketplaceSubscription(
    model_id=model_id_to_subscribe,
    name=subscription_name,
)

# note: this will throw exception if the subscription already exists or subscription is not required (for example, if the model is not in the marketplace like Phi family)
try:
    marketplace_subscription = (
        workspace_ml_client.marketplace_subscriptions.begin_create_or_update(
            marketplace_subscription
        ).result()
    )
except Exception as ex:
    print(ex)

Envía el trabajo de ajuste fino usando el modelo y los datos como entradas

Se requiere el siguiente conjunto de parámetros para ajustar el modelo.

  • model: modelo base para ajustar
  • training_data: datos de entrenamiento para ajustar el modelo base
  • validation_data: datos de validación para ajustar el modelo base
  • task: tarea de ajuste fino para realizar, por ejemplo, CHAT_COMPLETION para trabajos de ajuste fino para la finalización de chat
  • outputs: nombre del modelo registrado de salida

Los parámetros siguientes son opcionales:

  • hyperparameters: parámetros que controlan el comportamiento de ajuste preciso en tiempo de ejecución
  • name: nombre del trabajo de afinación
  • experiment_name: nombre del experimento para el trabajo de ajuste preciso
  • display_name: nombre para mostrar de la tarea de ajuste fino
from azure.ai.ml.finetuning import FineTuningTaskType, create_finetuning_job
import uuid

guid = uuid.uuid4()
short_guid = str(guid)[:8]
display_name = f"{model_name}-display-name-{short_guid}-from-sdk"
name = f"{model_name}t-{short_guid}-from-sdk"
output_model_name_prefix = f"{model_name}-{short_guid}-from-sdk-finetuned"
experiment_name = f"{model_name}-from-sdk"

finetuning_job = create_finetuning_job(
    task=FineTuningTaskType.CHAT_COMPLETION,
    training_data=train_data_asset.id,
    validation_data=validation_data_asset.id,
    hyperparameters={
        "per_device_train_batch_size": "1",
        "learning_rate": "0.00002",
        "num_train_epochs": "1",
    },
    model=model_to_finetune.id,
    display_name=display_name,
    name=name,
    experiment_name=experiment_name,
    tags={"foo_tag": "bar"},
    properties={"my_property": "my_value"},
    output_model_name_prefix=output_model_name_prefix,
created_job = workspace_ml_client.jobs.create_or_update(finetuning_job)
workspace_ml_client.jobs.get(created_job.name)

status = workspace_ml_client.jobs.get(created_job.name).status

import time

while True:
    status = workspace_ml_client.jobs.get(created_job.name).status
    print(f"Current job status: {status}")
    if status in ["Failed", "Completed", "Canceled"]:
        print("Job has finished with status: {0}".format(status))
        break
    else:
        print("Job is still running. Checking again in 30 seconds.")
        time.sleep(30)
finetune_model_name = created_job.outputs["registered_model"]["name"]
finetune_model_name

Despliegue de un modelo afinado

Una vez que el trabajo de ajuste se realiza correctamente, puede implementar el modelo personalizado.

Importante

Después de implementar un modelo personalizado y finalizar con el punto de conexión, recuerde limpiar los puntos de conexión inactivos. La eliminación de una implementación inactiva no elimina ni afecta al modelo personalizado subyacente y el modelo personalizado se puede volver a implementar en cualquier momento. Como se describe en Precios de Foundry, cada modelo personalizado (ajustado) implementado incurre en un costo de hospedaje por hora, independientemente de si se realizan finalizaciones o llamadas de finalizaciones de chat al modelo.

Para más información sobre el planeamiento y la administración de costos con Foundry, consulte las instrucciones de Planeamiento y administración de costos para los centros de Foundry.

# Deploy the model as a serverless endpoint

endpoint_name = f"{normalized_model_name}-ft-{short_guid}"  # Name must be unique
model_id = f"azureml://locations/{workspace.location}/workspaces/{workspace._workspace_id}/models/{finetune_model_name}/versions/1"

Escenarios empresariales admitidos para el ajuste fino

Se admiten varios escenarios empresariales para el ajuste fino de la implementación de API sin servidor. En la tabla siguiente se describen las configuraciones admitidas para las redes de almacenamiento de usuarios y la autenticación para garantizar un funcionamiento sin problemas en escenarios empresariales:

Nota

  • Para cambiar la autenticación de conexiones de datos mediante Foundry, seleccione la conexión del almacén de datos donde esté guardado su conjunto de datos y vaya a los detalles de acceso>Método de autenticación.
  • La autenticación de almacenamiento se puede cambiar en la página de Azure Storage >Configuración>configuraciones>Permitir acceso a la clave de la cuenta de almacenamiento.
  • La red de almacenamiento se puede cambiar en la página de >Networking de Azure Storage.
Redes de almacenamiento Autenticación de almacenamiento Autenticación de conexión de datos Soporte técnico
Acceso a la red pública = Habilitado Clave de cuenta habilitada SAS/Clave de cuenta Sí, experiencia de usuario y SDK
Acceso a la red pública = Habilitado Clave de cuenta deshabilitada Autenticación basada en Entra (sin credenciales) Sí, experiencia de usuario y SDK

Nota: para la experiencia de usuario, es posible que tenga que agregar lector de datos de Storage Blob o Colaborador de datos de Storage Blob para el identificador de usuario en la cuenta de almacenamiento o cambiar la autenticación de la conexión para usar la clave de cuenta o el token de SAS.
Habilitado desde redes virtuales seleccionadas y direcciones IP Clave de cuenta habilitada Clave de cuenta Sí, experiencia de usuario y SDK

Nota: para la experiencia del usuario, la dirección IP del proceso que ejecuta el explorador debe estar en la lista seleccionada.
Habilitado desde redes virtuales seleccionadas y direcciones IP Clave de cuenta habilitada SAS Sí, experiencia de usuario y SDK

Nota: para la experiencia del usuario, la dirección IP del proceso que ejecuta el explorador debe estar en la lista seleccionada.
Habilitado desde redes virtuales seleccionadas y direcciones IP Clave de cuenta deshabilitada Autenticación basada en Entra (sin credenciales) Sí, experiencia de usuario y SDK.

Nota: para UX, es posible que tenga que agregar Storage Blob Data Reader o Storage Blob Data Contributor para el ID de usuario en la cuenta de almacenamiento, o cambiar la autenticación de la conexión para usar la clave de cuenta/SAS token. Asegúrese también de que la dirección IP del proceso que ejecuta el explorador debe estar en la lista seleccionada.
Acceso a la red pública = Deshabilitado Clave de cuenta habilitada Clave de SAS/Cuenta Sí, experiencia de usuario y SDK.

Nota: para que la carga y el envío de datos de la experiencia del usuario funcionen, es necesario tener acceso al área de trabajo desde dentro de la red virtual que tenga acceso adecuado al almacenamiento.
Acceso a la red pública = Deshabilitado Clave de cuenta deshabilitada Autenticación basada en Entra (sin credenciales) Sí, experiencia de usuario y SDK.

Nota: para que la carga y el envío de datos de la experiencia del usuario funcionen, es necesario tener acceso al área de trabajo desde dentro de la red virtual que tenga acceso adecuado al almacenamiento.

Los escenarios anteriores también deben funcionar en un área de trabajo de red virtual administrada. Para obtener información sobre cómo configurar el centro de Foundry de red virtual administrada, consulte Configuración de una red administrada para centros de Foundry.

El uso de claves administradas por el cliente (CMK) no es un escenario empresarial compatible con la implementación de API sin servidor.

Problemas de ajuste con configuraciones de red únicas en el área de trabajo y el almacenamiento suelen apuntar a un problema de configuración de red.

Implementación interregional

El ajuste adecuado admite la implementación de un modelo ajustado en una región diferente a la de la ubicación en la que se ajustaba originalmente el modelo. También puede desplegar en una suscripción o región diferente.

Las únicas limitaciones son que la nueva región también debe admitir el ajuste preciso y, al implementar una suscripción cruzada, la cuenta que genera el token de autorización para la implementación debe tener acceso a las suscripciones de origen y de destino.

La implementación entre suscripciones o regiones se puede realizar a través de Python.


# Create Cross region FT deployment client
from azure.ai.ml.entities import ServerlessEndpoint
from azure.ai.ml import MLClient
from azure.identity import (
    DefaultAzureCredential,
    InteractiveBrowserCredential,
)

try:
    credential = DefaultAzureCredential()
    credential.get_token("https://management.azure.com/.default")
except Exception as ex:
    credential = InteractiveBrowserCredential()
try:
    workspace_ml_client = MLClient.from_config(credential=credential)
except:
    workspace_ml_client = MLClient(
        credential,
        subscription_id="<TARGET_SUBSCRIPTION_ID>",
        resource_group_name="<TARGET_RESOURCE_GROUP_NAME>",
        workspace_name="<TARGET_PROJECT_NAME>",
    )

workspace = workspace_ml_client._workspaces.get(workspace_ml_client.workspace_name)
workspace_region = workspace.location
model_to_finetune.tags
supported_regions = model_to_finetune.tags["maas-finetuning-deploy-regions"]
supported_regions
if workspace_region in supported_regions:
    print(f"Creating endpoint in the region:{workspace_region}")
    serverless_endpoint = ServerlessEndpoint(name=endpoint_name, model_id=model_id)
    created_endpoint = workspace_ml_client.serverless_endpoints.begin_create_or_update(
        serverless_endpoint
    ).result()
else:
    raise ValueError(
        f"For the model : {model_to_finetune}, the target region: {workspace_region} is not supported for deployment, the supported regions: {supported_regions}"
    )

Uso de un modelo personalizado implementado

Una vez implementado el modelo personalizado, puede usarlo como cualquier otro modelo implementado. Puede seguir usando los mismos parámetros con el modelo personalizado, como temperature y max_tokens, como puede con otros modelos implementados.

endpoint = workspace_ml_client.serverless_endpoints.get(endpoint_name)
endpoint_keys = workspace_ml_client.serverless_endpoints.get_keys(endpoint_name)
auth_key = endpoint_keys.primary_key

import requests

url = f"{endpoint.scoring_uri}/v1/chat/completions"

payload = {
    "max_tokens": 1024,
    "messages": [
        {
            "content": "This script is great so far. Can you add more dialogue between Amanda and Thierry to build up their chemistry and connection?",
            "role": "user",
        }
    ],
}
headers = {"Content-Type": "application/json", "Authorization": f"{auth_key}"}

response = requests.post(url, json=payload, headers=headers)

response.json()

Limpieza de los modelos ajustados

Una vez que hayas terminado con tu modelo, ejecuta el siguiente código para depurar tu modelo ajustado.

workspace_ml_client.serverless_endpoints.begin_delete(endpoint_name).result()

Consideraciones de costo y cuota para los modelos implementados como una implementación de API sin servidor

La cuota se administra en cada implementación. Cada implementación tiene un límite de velocidad de 200 000 tokens por minuto y 1000 solicitudes de API por minuto. Sin embargo, actualmente limitamos una implementación por modelo por proyecto. Póngase en contacto con Microsoft Azure soporte técnico si los límites de velocidad actuales no son suficientes para sus escenarios.

Costo de los modelos de Microsoft

Puede encontrar la información de precios en la pestaña Pricing y terms del Asistente para implementación al implementar modelos de Microsoft (como modelos Phi-3) como una implementación de API sin servidor.

Costo de los modelos que no son de Microsoft

Los modelos no Microsoft implementados como una implementación de API sin servidor se ofrecen a través de Azure Marketplace e integrados con Foundry para su uso. Puede encontrar Azure Marketplace precios al implementar o ajustar estos modelos.

Cada vez que un proyecto se suscribe a una oferta determinada de Azure Marketplace, se crea un nuevo recurso para realizar un seguimiento de los costos asociados a su consumo. El mismo recurso se usa para realizar un seguimiento de los costos asociados con la inferencia y el ajuste preciso; sin embargo, hay varios medidores disponibles para realizar un seguimiento de cada escenario de forma independiente.

Para obtener más información sobre cómo realizar un seguimiento de los costos, consulte Supervisión de los costos de los modelos ofrecidos a través de Azure Marketplace.

Captura de pantalla que muestra distintos recursos correspondientes a diferentes ofertas de modelo y sus medidores asociados.

Cuaderno de ejemplo

Puede usar este cuaderno de muestra para crear un trabajo de ajuste fino independiente para mejorar la capacidad de un modelo para resumir diálogos entre dos personas utilizando el conjunto de datos Samsum.

Los datos de entrenamiento son el conjunto de datos de ultrachat_200k, que se divide en cuatro divisiones adecuadas para el ajuste fino supervisado (sft) y la clasificación de generación (gen). El cuaderno emplea los modelos de IA de Azure disponibles para la tarea de finalización de chat. Si desea utilizar un modelo diferente al que se emplea en el cuaderno, puede reemplazar el nombre del modelo.

El cuaderno incluye la configuración de requisitos previos, la selección de un modelo para ajustar, crear conjuntos de datos de entrenamiento y validación, configurar y enviar el trabajo de ajuste y, por último, crear una implementación sin servidor mediante el modelo optimizado para la inferencia de ejemplo.

CLI de ejemplo

Además, puede usar este sample CLI para crear un trabajo de ajuste fino independiente para mejorar la capacidad de un modelo para resumir diálogos entre dos personas que usan un conjunto de datos.

type: finetuning

name: "Phi-3-mini-4k-instruct-with-amlcompute"
experiment_name: "Phi-3-mini-4k-instruct-finetuning-experiment"
display_name: "Phi-3-mini-4k-instruct-display-name"
task: chat_completion
model_provider: custom
model: 
  path: "azureml://registries/azureml/models/Phi-3-mini-4k-instruct/versions/14"
  type: mlflow_model
training_data: train.jsonl
validation_data:
  path: validation.jsonl
  type: uri_file
hyperparameters:
  num_train_epochs: "1"
  per_device_train_batch_size: "1"
  learning_rate: "0.00002"
properties:
  my_property: "my_value"
tags:
  foo_tag: "bar"
outputs:
  registered_model:
    name: "Phi-3-mini-4k-instruct-finetuned-model"
    type: mlflow_model 

Los datos de entrenamiento usados son los mismos que se muestran en el cuaderno del SDK. La CLI emplea los modelos de IA de Azure disponibles para la tarea de finalización del chat. Si prefiere usar un modelo diferente al del ejemplo de la CLI, puede actualizar los argumentos, como model path, en consecuencia.

Filtrado de contenido

Los modelos de implementación de API sin servidor están protegidos por Seguridad del contenido de Azure AI. Cuando se despliega en puntos de conexión en tiempo real, puede optar por no utilizar esta funcionalidad.

Con Seguridad del contenido de Azure AI habilitado, tanto la solicitud como la finalización pasan a través de un conjunto de modelos de clasificación destinados a detectar y evitar la salida de contenido perjudicial. El sistema de filtrado de contenido detecta y toma medidas en categorías específicas de contenido potencialmente perjudicial tanto en solicitudes de entrada como en finalizaciones de salida.

Para obtener más información sobre Seguridad del contenido de Azure AI, consulte el filtrado de contenido en el portal de Foundry.