Personalizar un modelo con ajuste preciso

Azure OpenAI Service le permite adaptar nuestros modelos a sus conjuntos de datos personales mediante un proceso conocido como ajuste preciso. Este paso de personalización le permite sacar más provecho del servicio al proporcionarle:

  • Resultados de mayor calidad que los que puede obtener solo con la ingeniería de una solicitud
  • La capacidad de formarse con más ejemplos de los que caben en el límite máximo de contexto de solicitud de un modelo.
  • Ahorro de tokens debido a solicitudes más cortas
  • Solicitudes de baja latencia, especialmente cuando se usan modelos más pequeños.

A diferencia del aprendizaje en pocos pasos, el ajuste preciso mejora el modelo mediante el entrenamiento en muchos más ejemplos de los que pueden caber en una solicitud, lo que le permite lograr mejores resultados en un gran número de tareas. Dado que el ajuste preciso ajusta los pesos del modelo base para mejorar el rendimiento en la tarea específica, no tendrá que incluir tantos ejemplos o instrucciones en la solicitud. Esto significa que se envía menos texto y se procesan menos tokens en cada llamada API, lo que puede ahorrar costos y mejorar la latencia de las solicitudes.

Usaremos LoRA, o aproximación de rango bajo, para ajustar los modelos de forma que se reduzca su complejidad sin afectar significativamente a su rendimiento. Este método funciona aproximando la matriz de alto rango original a una de rango inferior, por lo que solo se ajusta un subconjunto más pequeño de parámetros "importantes" durante la fase de entrenamiento supervisado, lo que hace que el modelo sea más fácil de administrar y eficiente. Para los usuarios, esto hace que el entrenamiento sea más rápido y asequible que otras técnicas.

Requisitos previos

Nota:

Actualmente, debe enviar una aplicación para acceder a Azure OpenAI Service. Para solicitar acceso, complete este formulario.

Models

Los modelos siguientes admiten el ajuste preciso:

  • babbage-002
  • davinci-002
  • gpt-35-turbo (0613)
  • gpt-35-turbo (1106)
  • gpt-35-turbo (0125)

Consulte la página de modelos para comprobar qué regiones admiten actualmente el ajuste preciso.

Revisión del flujo de trabajo de Azure OpenAI Studio

Dedique un momento a revisar el flujo de trabajo de ajuste preciso para usar Azure OpenAI Studio:

  1. Prepare los datos de entrenamiento y validación.
  2. Use el Asistente para crear modelos personalizados en Azure OpenAI Studio para entrenar el modelo personalizado.
    1. Seleccione un modelo base.
    2. Elija los datos de entrenamiento.
    3. Opcionalmente, elija los datos de validación.
    4. Opcionalmente, configure las opciones avanzadas para el trabajo de ajuste preciso.
    5. Revise las opciones y entrene el nuevo modelo personalizado.
  3. Compruebe el estado del modelo con ajuste preciso personalizado.
  4. Implemente el modelo personalizado para su uso.
  5. Use el modelo personalizado.
  6. Opcionalmente, analice el modelo personalizado para mejorar el rendimiento y ajustarlo.

Preparación de los datos de entrenamiento y validación

El conjunto de datos de validación y los datos de entrenamiento consisten en ejemplos de entrada y salida para el rendimiento del modelo.

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

Los datos de entrenamiento y validación que usa deben tener formato como documento de líneas JSON (JSONL). Para gpt-35-turbo-0613, el conjunto de datos de ajuste preciso debe tener el formato conversacional que usa la API de finalizaciones de chat.

Si desea un tutorial detallado del ajuste preciso de un modelo gpt-35-turbo-0613, consulte el tutorial de ajuste preciso de Azure OpenAI

Formato de archivo de ejemplo

{"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?"}]}

Formato de archivo de chat de varios turnos

También se admiten varios turnos de una conversación en una sola línea del archivo de entrenamiento jsonl. Para omitir el ajuste específico de los mensajes del asistente, agregue el par de valores de clave opcional weight. Actualmente, weight se puede establecer en 0 o 1.

{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the capital of France?"}, {"role": "assistant", "content": "Paris", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Paris, as if everyone doesn't know that already.", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'Romeo and Juliet'?"}, {"role": "assistant", "content": "William Shakespeare", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Oh, just some guy named William Shakespeare. Ever heard of him?", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "How far is the Moon from Earth?"}, {"role": "assistant", "content": "384,400 kilometers", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Around 384,400 kilometers. Give or take a few, like that really matters.", "weight": 1}]}

Además del formato JSONL, los archivos de datos de entrenamiento y validación deben codificarse en UTF-8 e incluir una marca de orden de bytes (BOM). El archivo debe tener un tamaño inferior a 512 MB.

Creación de conjuntos de datos de entrenamiento y validación

Cuantos más ejemplos de entrenamiento tenga, mejor. Los trabajos de ajuste preciso no se llevarán a cabo sin al menos 10 ejemplos de entrenamiento, pero un número tan pequeño no es suficiente para influir notablemente en las respuestas del modelo. Es recomendable proporcionar cientos, o incluso miles, de ejemplos de entrenamiento para llevarlos a cabo correctamente.

En general, al duplicar el tamaño del conjunto de datos se puede producir un aumento lineal de la calidad del modelo. Sin embargo, tenga en cuenta que los ejemplos de baja calidad pueden afectar negativamente al rendimiento. Si entrena el modelo en una gran cantidad de datos internos, sin eliminar primero el conjunto de datos solo para los ejemplos de mayor calidad, podría acabar con un modelo que funciona mucho peor de lo esperado.

Uso del Asistente para crear modelos personalizados

Azure OpenAI Studio proporciona el Asistente para crear modelos personalizados, por lo que puede crear y entrenar de forma interactiva un modelo ajustado de forma precisa para el recurso de Azure.

  1. Abra Azure OpenAI Studio en https://oai.azure.com/ e inicie sesión con las credenciales que le permitan obtener acceso al recurso de Azure OpenAI. Durante el flujo de trabajo de inicio de sesión, seleccione el directorio, la suscripción de Azure y el recurso de Azure OpenAI adecuados.

  2. En Azure OpenAI Studio, vaya al panel Administración > Modelos y seleccione Crear un modelo personalizado.

    Captura de pantalla que muestra cómo acceder al Asistente para crear modelo personalizado en Azure OpenAI Studio.

Se abre el Asistente para crear modelos personalizados.

Selección del modelo base

El primer paso para crear un modelo personalizado es elegir un modelo base. El panel Modelo base le permite elegir un modelo base que se utilizará para el modelo personalizado. La elección influye tanto en el rendimiento como en el costo del modelo.

Seleccione un modelo base de la lista desplegable Tipo de modelo base y, a continuación, seleccione Siguiente para continuar.

Puede crear un modelo personalizado a partir de uno de los siguientes modelos base disponibles:

  • babbage-002

  • davinci-002

  • gpt-35-turbo (0613)

  • gpt-35-turbo (1106)

  • O bien, puede realizar el ajuste preciso de un modelo previamente ajustado, con el formato base-model.ft-{jobid}.

Captura de pantalla de las opciones de modelo con un modelo personalizado ajustado.

Para obtener más información sobre los modelos base que se pueden ajustar, consulte Modelos.

Elección de los datos de entrenamiento

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

Captura de pantalla del panel Datos de entrenamiento del asistente para crear modelos personalizados en Azure OpenAI Studio.

En cuanto a los archivos de datos grandes, le recomendamos que los importe desde el almacén de blobs de Azure. Los archivos grandes pueden volverse inestables cuando se cargan a través de formularios multiparte porque las solicitudes son atómicas y no se pueden volver a intentar o reanudar. Para obtener más información acerca de Azure Blob Storage, consulte ¿Qué es Azure Blob Storage?

Nota:

Los archivos de datos de entrenamiento deben tener el formato JSONL, estar codificados en UTF-8 con una marca de orden de bytes (BOM). El archivo debe tener un tamaño inferior a 512 MB.

Carga de los datos de entrenamiento desde un archivo local

Puede cargar un nuevo conjunto de datos de entrenamiento en el servicio desde un archivo local mediante uno de los métodos siguientes:

  • Arrastre y coloque el archivo en el área cliente del panel Datos de entrenamiento y, a continuación, seleccione Cargar archivo.

  • Seleccione Buscar un archivo en el área cliente del panel Datos de entrenamiento, elija el archivo que quiere cargar en el cuadro de diálogo Abrir y, a continuación, seleccione Cargar archivo.

Después de seleccionar y cargar el conjunto de datos de entrenamiento, seleccione Siguiente para continuar.

Captura de pantalla del panel Datos de entrenamiento del asistente para crear modelos personalizados con opciones de archivos locales.

Importación de datos de entrenamiento desde el almacén de blobs de Azure

Puede importar un conjunto de datos de entrenamiento desde un blob de Azure u otra ubicación web compartida proporcionando el nombre y la ubicación del archivo.

  1. Escriba el nombre de archivo del archivo.

  2. Para la ubicación del archivo, proporcione la dirección URL del blob de Azure, la firma de acceso compartido (SAS) de Azure Storage u otro vínculo a una ubicación web compartida accesible.

  3. Seleccione Cargar archivo para importar el conjunto de datos de entrenamiento en el servicio.

Después de seleccionar y cargar el conjunto de datos de entrenamiento, seleccione Siguiente para continuar.

Captura de pantalla del panel Datos de entrenamiento del Asistente para crear modelos personalizados, con opciones de ubicación web compartida y blob de Azure.

Elección de los datos de validación

En el paso siguiente se proporcionan opciones para configurar el modelo que usará los datos de validación en el proceso de entrenamiento. Si no quiere usar datos de validación, puede elegir Siguiente para continuar a las opciones avanzadas del modelo. De lo contrario, si tiene un conjunto de datos de validación, puede elegir los datos de validación que ya están preparados o cargar nuevos datos de validación preparados para usarlos al personalizar el modelo.

En el panel Datos de validación se muestran los conjuntos de datos de entrenamiento y validación existentes cargados previamente, y se proporcionan opciones según las que puede cargar nuevos datos de validación.

Captura de pantalla del panel Datos de validación del asistente para crear modelos personalizados en Azure OpenAI Studio.

En cuanto a los archivos de datos grandes, le recomendamos que los importe desde el almacén de blobs de Azure. Los archivos grandes pueden volverse inestables cuando se cargan a través de formularios multiparte porque las solicitudes son atómicas y no se pueden volver a intentar o reanudar.

Nota:

Al igual que los archivos de datos de entrenamiento, los archivos de datos de validación deben tener el formato JSONL, estar codificados en UTF-8 con una marca de orden de bytes (BOM). El archivo debe tener un tamaño inferior a 512 MB.

Carga de los datos de validación desde un archivo local

Puede cargar un nuevo conjunto de datos de validación en el servicio desde un archivo local mediante uno de los métodos siguientes:

  • Arrastre y coloque el archivo en el área cliente del panel Datos de validación y, a continuación, seleccione Cargar archivo.

  • Seleccione Buscar un archivo en el área cliente del panel Datos de validación, elija el archivo que quiere cargar en el cuadro de diálogo Abrir y, a continuación, seleccione Cargar archivo.

Después de seleccionar y cargar el conjunto de datos de validación, seleccione Siguiente para continuar.

Captura de pantalla del panel Datos de validación del asistente para crear modelos personalizados con opciones de archivos locales.

Importación de datos de validación desde el almacén de blobs de Azure

Puede importar un conjunto de datos de validación desde un blob de Azure u otra ubicación web compartida proporcionando el nombre y la ubicación del archivo.

  1. Escriba el nombre de archivo del archivo.

  2. Para la ubicación del archivo, proporcione la dirección URL del blob de Azure, la firma de acceso compartido (SAS) de Azure Storage u otro vínculo a una ubicación web compartida accesible.

  3. Seleccione Cargar archivo para importar el conjunto de datos de entrenamiento en el servicio.

Después de seleccionar y cargar el conjunto de datos de validación, seleccione Siguiente para continuar.

Captura de pantalla del panel Datos de validación del Asistente para crear modelos personalizados, con opciones de ubicación web compartida y blob de Azure.

Configurar opciones avanzadas

El Asistente para crear modelos personalizados muestra los hiperparámetros para entrenar el modelo con ajuste preciso en el panel Opciones avanzadas. Los siguientes hiperparámetros están disponibles:

Nombre Tipo Descripción
batch_size integer El tamaño del lote a usar para el entrenamiento. El tamaño del lote es el número de ejemplos de entrenamiento usados para entrenar una sola pasada hacia adelante y hacia atrás. En general, hemos comprobado que los tamaños de lote más grandes tienden a funcionar mejor para conjuntos de datos más grandes. El valor predeterminado, así como 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.
learning_rate_multiplier number El multiplicador de la tasa de aprendizaje que se usará para el entrenamiento. La tasa de aprendizaje de ajuste es la tasa de aprendizaje original que se usó 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 rango de 0,02 a 0,2 para ver qué produce los mejores resultados. Una tasa de aprendizaje más pequeña puede ser útil para evitar el sobreajuste.
n_epochs integer El número de épocas para entrenar el modelo. Una época se refiere a un ciclo completo a través del conjunto de datos de entrenamiento.

Captura de pantalla del panel Opciones avanzadas del Asistente para crear modelos personalizados, con las opciones predeterminadas seleccionadas.

Seleccione Predeterminado para usar los valores predeterminados del trabajo de ajuste preciso o seleccione Avanzado 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 Siguiente para revisar las opciones y entrenar el modelo ajustado de forma precisa.

Revisión de las opciones y entrenamiento del modelo

El panel Revisar del asistente muestra información sobre las opciones de configuración.

Captura de pantalla del panel Revisión del asistente para crear modelos personalizados en Azure OpenAI Studio.

Si está listo para entrenar el modelo, seleccione Inicio del trabajo de entrenamiento para iniciar el trabajo de ajuste preciso y volver al panel Modelos.

Comprobación del estado del modelo personalizado

El panel Modelos muestra información sobre el modelo personalizado en la pestaña Modelos personalizados. La pestaña incluye información sobre el estado y el identificador de trabajo del trabajo de ajuste preciso del modelo personalizado. Una vez completado 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 de modelos.

Captura de pantalla de la página Modelos de Azure OpenAI Studio, en la que se muestra un modelo personalizado.

Después de haber iniciado un trabajo de ajuste preciso, puede tardar algo de tiempo en completarse. Es posible que el trabajo esté en cola detrás de otros trabajos del sistema. Entrenar el modelo puede tardar minutos u horas, dependiendo del modelo y del tamaño del conjunto de datos.

Estas son algunas de las tareas que puede realizar en el panel Modelos:

  • Compruebe el estado del trabajo de ajuste preciso del 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 preciso, los resultados de entrenamiento, los eventos de entrenamiento y los hiperparámetros que se han usado en el trabajo.

  • Seleccione Descargar archivo de entrenamiento para descargar los datos de entrenamiento que usó para el modelo.

  • Seleccione Descargar resultados para descargar el archivo de resultados adjunto al trabajo de ajuste preciso del modelo y así analizar el modelo personalizado para el entrenamiento y el rendimiento de validación.

  • Seleccione Actualizar para actualizar la información de la página.

Captura de pantalla de la página Modelos en Azure OpenAI Studio, en la que se muestra un modelo personalizado.

Implementación de un modelo personalizado

Cuando el trabajo de ajuste preciso se haya realizado correctamente, puede implementar el modelo personalizado desde el panel Modelos. Debe implementar el modelo personalizado para poder usarlo con las llamadas de finalización.

Importante

Después de implementar un modelo personalizado, si en cualquier momento la implementación permanece inactiva durante más de quince (15) días, la implementación se eliminará automáticamente. La implementación de un modelo personalizado es inactivasi el modelo se ha implementado hace más de quince (15) días y no se han realizado finalizaciones ni llamadas de finalización de chat durante un período continuo de 15 días.

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 Azure OpenAI Service, cada modelo personalizado (ajustado a sus preferencias) que se implementa incurre en un costo de hospedaje por hora, independientemente de si se realizan finalizaciones o llamadas de finalización de chat al modelo. Para obtener más información sobre cómo planear y administrar los costos con Azure OpenAI, consulte la guía de Planeamiento para administrar los costos Azure OpenAI Service.

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.

Captura de pantalla que muestra cómo implementar un modelo personalizado en Azure OpenAI Studio.

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

Captura de pantalla del cuadro de diálogo Implementar modelo en Azure OpenAI Studio.

Puede supervisar el progreso de la implementación en el panel Implementaciones en Azure OpenAI Studio.

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 implementar en otra suscripción o región.

Las únicas limitaciones son que la nueva región también debe admitir el ajuste preciso y, al implementar entre suscripciones, 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 o REST.

Uso de un modelo personalizado implementado

Cuando su modelo personalizado se implemente, puede usarlo como cualquier otro modelo implementado. Puede usar Área de juegos en Azure OpenAI Studio para experimentar con la nueva implementación. Puede seguir usando los mismos parámetros con el modelo personalizado, como temperature y max_tokens, como puede hacer con otros modelos implementados. Para los modelos babbage-002 y davinci-002 con ajuste preciso, usará el área de juegos Finalizaciones y la API de finalizaciones. Para los modelos gpt-35-turbo-0613 con ajuste preciso, usará el área de juegos Chat y la API de finalización de chat.

Captura de pantalla del panel Área de juegos en Azure OpenAI Studio con secciones resaltadas.

Análisis del modelo personalizado

Azure OpenAI asocia un archivo de resultado denominado results.csv a cada trabajo de ajuste preciso una vez completado. Puede usar el archivo de resultados para analizar el rendimiento de entrenamiento y validación del modelo personalizado. El id. del archivo de resultados aparece en cada modelo personalizado en la columna Id. del archivo de resultados del panel Modelos para Azure OpenAI Studio. Puede usar el id. de archivo para identificar y descargar el archivo de resultados desde el panel Archivos de datos de Azure OpenAI Studio.

El archivo de resultados es un archivo CSV que contiene una fila de encabezado y una fila para cada paso de entrenamiento que realizó el trabajo de ajuste preciso. El archivo de resultados contiene las columnas siguientes:

Nombre de la columna Descripción
step El número del paso de entrenamiento. Un paso de entrenamiento representa un solo paso, hacia delante y hacia atrás, en un lote de datos de entrenamiento.
train_loss La pérdida del lote de entrenamiento.
training_accuracy El porcentaje de terminaciones en el lote de entrenamiento para el que los tokens predichos por el modelo coinciden exactamente con los tokens de terminación reales.
Por ejemplo, si el tamaño del lote se establece en 3 y los datos contienen finalizaciones de tipo [[1, 2], [0, 5], [4, 2]], este valor se establece en 0,67 (2 de 3) si el modelo predijo [[1, 1], [0, 5], [4, 2]].
train_mean_token_accuracy El porcentaje de token del lote de entrenamiento que el modelo predijo correctamente.
Por ejemplo, si el tamaño del lote se establece en 3 y los datos contienen finalizaciones de tipo [[1, 2], [0, 5], [4, 2]], este valor se establece en 0,83 (5 de 6) si el modelo predijo [[1, 1], [0, 5], [4, 2]].
valid_loss La pérdida del lote de validación.
valid_accuracy El porcentaje de terminaciones en el lote de validación para el que los tokens predichos por el modelo coinciden exactamente con los tokens de terminación reales.
Por ejemplo, si el tamaño del lote se establece en 3 y los datos contienen finalizaciones de tipo [[1, 2], [0, 5], [4, 2]], este valor se establece en 0,67 (2 de 3) si el modelo predijo [[1, 1], [0, 5], [4, 2]].
validation_mean_token_accuracy El porcentaje de tokens en el lote de validación que el modelo predijo correctamente.
Por ejemplo, si el tamaño del lote se establece en 3 y los datos contienen finalizaciones de tipo [[1, 2], [0, 5], [4, 2]], este valor se establece en 0,83 (5 de 6) si el modelo predijo [[1, 1], [0, 5], [4, 2]].

También puede ver los datos en el archivo results.csv como trazados de Azure OpenAI Studio. Seleccione el vínculo del modelo entrenado y verá tres gráficos: pérdida, precisión media del token y precisión del token. Si proporcionó datos de validación, ambos conjuntos de datos aparecerán en el mismo trazado.

Intente disminuir la pérdida con el tiempo y aumentar la precisión. Si ve una divergencia entre los datos de entrenamiento y los de validación, puede indicar que existe un sobreajuste. Pruebe un entrenamiento con menos épocas o un multiplicador de velocidad de aprendizaje más pequeño.

Limpieza de implementaciones, modelos personalizados y archivos de entrenamiento

Cuando haya terminado con su modelo personalizado, puede eliminar la implementación y el modelo. También puede eliminar los archivos de entrenamiento y validación que cargó en el servicio, si es necesario.

Eliminar la implementación de modelo

Importante

Después de implementar un modelo personalizado, si en cualquier momento la implementación permanece inactiva durante más de quince (15) días, la implementación se eliminará automáticamente. La implementación de un modelo personalizado es inactivasi el modelo se ha implementado hace más de quince (15) días y no se han realizado finalizaciones ni llamadas de finalización de chat durante un período continuo de 15 días.

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 Azure OpenAI Service, cada modelo personalizado (ajustado a sus preferencias) que se implementa incurre en un costo de hospedaje por hora, independientemente de si se realizan finalizaciones o llamadas de finalización de chat al modelo. Para obtener más información sobre cómo planear y administrar los costos con Azure OpenAI, consulte la guía de Planeamiento para administrar los costos Azure OpenAI Service.

Puede eliminar la implementación del modelo personalizado en el panel Implementaciones en Azure OpenAI Studio. Seleccione la implementación que quiera eliminar y, a continuación, seleccione Eliminar para eliminarla.

Eliminación del modelo personalizado

Puede eliminar un modelo personalizado en el panel Modelos de Azure OpenAI Studio. Seleccione el modelo personalizado que quiera eliminar en la pestaña Modelos personalizados y, a continuación, seleccione Eliminar para eliminarlo.

Nota:

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

Eliminación de los archivos de entrenamiento

Opcionalmente, puede eliminar los archivos de entrenamiento y validación que ha cargado para el entrenamiento y los archivos de resultados generados durante el entrenamiento, en el panel Administración>Archivos de datos en Azure OpenAI Studio. Seleccione el archivo que quiera eliminar y, a continuación, seleccione Eliminar para eliminarlo.

Ajuste preciso continuo

Una vez que haya creado un modelo ajustado, es posible que desee seguir refinando el modelo a lo largo del tiempo a través de un ajuste más preciso. El ajuste continuo es el proceso iterativo de seleccionar un modelo ya ajustado como modelo base y ajustarlo más adelante en nuevos conjuntos de ejemplos de entrenamiento.

Para realizar un ajuste preciso en un modelo que ha ajustado previamente, usaría el mismo proceso que se describe en creación de un modelo personalizado pero, en lugar de especificar el nombre de un modelo base genérico, especificaría el modelo ya optimizado. Un modelo personalizado ajustado tendría un aspecto similar a gpt-35-turbo-0613.ft-5fd1918ee65d4cd38a5dcf6835066ed7

Captura de pantalla de la interfaz de usuario Crear un modelo personalizado con un modelo optimizado resaltado.

También se recomienda incluir el parámetro suffix para facilitar la distinción entre diferentes iteraciones del modelo ajustado. suffix toma una cadena y se establece para identificar el modelo ajustado. Con la API de Python de OpenAI, se admite una cadena de hasta 18 caracteres que se agregará al nombre del modelo optimizado.

Requisitos previos

Nota:

Actualmente, debe enviar una aplicación para acceder a Azure OpenAI Service. Para solicitar acceso, complete este formulario.

Models

Los modelos siguientes admiten el ajuste preciso:

  • babbage-002
  • davinci-002
  • gpt-35-turbo (0613)
  • gpt-35-turbo (1106)
  • gpt-35-turbo (0125)

O bien, puede realizar el ajuste preciso de un modelo previamente ajustado, con el formato base-model.ft-{jobid}.

Captura de pantalla de las opciones de modelo con un modelo personalizado ajustado.

Consulte la página de modelos para comprobar qué regiones admiten actualmente el ajuste preciso.

Revisión del flujo de trabajo del SDK de Python

Dedique un momento a revisar el flujo de trabajo de ajuste preciso para usar el SDK de Python con Azure OpenAI:

  1. Prepare los datos de entrenamiento y validación.
  2. Seleccione un modelo base.
  3. Cargue los datos de entrenamiento.
  4. Entrene el nuevo modelo personalizado.
  5. Compruebe el estado del modelo personalizado.
  6. Implemente el modelo personalizado para usarlo.
  7. Use el modelo personalizado.
  8. Opcionalmente, analice el modelo personalizado para mejorar el rendimiento y ajustarlo.

Preparación de los datos de entrenamiento y validación

El conjunto de datos de validación y los datos de entrenamiento consisten en ejemplos de entrada y salida para el rendimiento del modelo.

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

Los datos de entrenamiento y validación que usa deben tener formato como documento de líneas JSON (JSONL). Para gpt-35-turbo-0613, el conjunto de datos de ajuste preciso debe tener el formato conversacional que usa la API de finalizaciones de chat.

Si desea un tutorial detallado del ajuste preciso de un modelo gpt-35-turbo-0613, consulte el tutorial de ajuste preciso de Azure OpenAI

Formato de archivo de ejemplo

{"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?"}]}

Formato de archivo de chat de varios turnos

También se admiten varios turnos de una conversación en una sola línea del archivo de entrenamiento jsonl. Para omitir el ajuste específico de los mensajes del asistente, agregue el par de valores de clave opcional weight. Actualmente, weight se puede establecer en 0 o 1.

{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the capital of France?"}, {"role": "assistant", "content": "Paris", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Paris, as if everyone doesn't know that already.", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'Romeo and Juliet'?"}, {"role": "assistant", "content": "William Shakespeare", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Oh, just some guy named William Shakespeare. Ever heard of him?", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "How far is the Moon from Earth?"}, {"role": "assistant", "content": "384,400 kilometers", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Around 384,400 kilometers. Give or take a few, like that really matters.", "weight": 1}]}

Además del formato JSONL, los archivos de datos de entrenamiento y validación deben codificarse en UTF-8 e incluir una marca de orden de bytes (BOM). El archivo debe tener un tamaño inferior a 512 MB.

Creación de conjuntos de datos de entrenamiento y validación

Cuantos más ejemplos de entrenamiento tenga, mejor. Los trabajos de ajuste preciso no se llevarán a cabo sin al menos 10 ejemplos de entrenamiento, pero un número tan pequeño no es suficiente para influir notablemente en las respuestas del modelo. Es recomendable proporcionar cientos, o incluso miles, de ejemplos de entrenamiento para llevarlos a cabo correctamente.

En general, al duplicar el tamaño del conjunto de datos se puede producir un aumento lineal de la calidad del modelo. Sin embargo, tenga en cuenta que los ejemplos de baja calidad pueden afectar negativamente al rendimiento. Si entrena el modelo en una gran cantidad de datos internos, sin eliminar primero el conjunto de datos solo para los ejemplos de mayor calidad, podría acabar con un modelo que funciona mucho peor de lo esperado.

Carga de los datos de aprendizaje

El siguiente paso consiste en elegir los datos de entrenamiento que ya están preparados o cargar nuevos datos de entrenamiento que se usarán al personalizar el modelo. Cuando haya preparado los datos de entrenamiento, puede cargar los archivos en el servicio. Hay dos maneras de cargar los datos de entrenamiento:

En cuanto a los archivos de datos grandes, le recomendamos que los importe desde el almacén de blobs de Azure. Los archivos grandes pueden volverse inestables cuando se cargan a través de formularios multiparte porque las solicitudes son atómicas y no se pueden volver a intentar o reanudar. Para obtener más información acerca de Azure Blob Storage, consulte ¿Qué es Azure Blob Storage?

Nota:

Los archivos de datos de entrenamiento deben tener el formato JSONL, estar codificados en UTF-8 con una marca de orden de bytes (BOM). El archivo debe tener un tamaño inferior a 512 MB.

En el siguiente ejemplo de Python se cargan archivos de entrenamiento y validación locales mediante el SDK de Python y se recuperan los identificadores de archivo devueltos.

# Upload fine-tuning files

import os
from openai import AzureOpenAI

client = AzureOpenAI(
  azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"), 
  api_key=os.getenv("AZURE_OPENAI_API_KEY"),  
  api_version="2024-02-01"  # This API version or later is required to access fine-tuning for turbo/babbage-002/davinci-002
)

training_file_name = 'training_set.jsonl'
validation_file_name = 'validation_set.jsonl'

# Upload the training and validation dataset files to Azure OpenAI with the SDK.

training_response = client.files.create(
    file=open(training_file_name, "rb"), purpose="fine-tune"
)
training_file_id = training_response.id

validation_response = client.files.create(
    file=open(validation_file_name, "rb"), purpose="fine-tune"
)
validation_file_id = validation_response.id

print("Training file ID:", training_file_id)
print("Validation file ID:", validation_file_id)

Creación de un modelo personalizado

Después de cargar los archivos de entrenamiento y validación, ya estará listo para iniciar el trabajo de ajuste preciso.

El siguiente código de Python muestra un ejemplo de cómo crear un nuevo trabajo de ajuste preciso con el SDK de Python:

response = client.fine_tuning.jobs.create(
    training_file=training_file_id,
    validation_file=validation_file_id,
    model="gpt-35-turbo-0613" # Enter base model name. Note that in Azure OpenAI the model name contains dashes and cannot contain dot/period characters. 
)

job_id = response.id

# You can use the job ID to monitor the status of the fine-tuning job.
# The fine-tuning job will take some time to start and complete.

print("Job ID:", response.id)
print("Status:", response.id)
print(response.model_dump_json(indent=2))

También puede pasar parámetros opcionales adicionales, como hiperparámetros, para tomar un mayor control del proceso de ajuste preciso. Para el entrenamiento inicial, se recomienda usar los valores predeterminados automáticos que están presentes sin especificar estos parámetros.

Los hiperparámetros admitidos actualmente para el ajuste preciso son:

Nombre Tipo Descripción
batch_size integer El tamaño del lote a usar para el entrenamiento. El tamaño del lote es el número de ejemplos de entrenamiento usados para entrenar una sola pasada hacia adelante y hacia atrás. En general, hemos comprobado que los tamaños de lote más grandes tienden a funcionar mejor para conjuntos de datos más grandes. El valor predeterminado, así como 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.
learning_rate_multiplier number El multiplicador de la tasa de aprendizaje que se usará para el entrenamiento. La tasa de aprendizaje de ajuste es la tasa de aprendizaje original que se usó 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 rango de 0,02 a 0,2 para ver qué produce los mejores resultados. Una velocidad de aprendizaje más pequeña puede ser útil para evitar el sobreajuste.
n_epochs integer El número de épocas para entrenar el modelo. Una época se refiere a un ciclo completo a través del conjunto de datos de entrenamiento.

Para establecer hiperparámetros personalizados con la versión 1.x de la API de Python de OpenAI:

from openai import AzureOpenAI

client = AzureOpenAI(
  azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"), 
  api_key=os.getenv("AZURE_OPENAI_API_KEY"),  
  api_version="2024-02-01"  # This API version or later is required to access fine-tuning for turbo/babbage-002/davinci-002
)

client.fine_tuning.jobs.create(
  training_file="file-abc123", 
  model="gpt-35-turbo-0613", # Enter base model name. Note that in Azure OpenAI the model name contains dashes and cannot contain dot/period characters. 
  hyperparameters={
    "n_epochs":2
  }
)

Comprobación del estado del trabajo de ajuste preciso

response = client.fine_tuning.jobs.retrieve(job_id)

print("Job ID:", response.id)
print("Status:", response.status)
print(response.model_dump_json(indent=2))

Implementación de un modelo personalizado

Cuando el trabajo de ajuste se realiza correctamente, el valor de la variable fine_tuned_model en el cuerpo de la respuesta se establece en el nombre del modelo personalizado. Ya tiene el modelo disponible para la detección de elementos en la API de modelos de lista. Sin embargo, no puede emitir llamadas de finalización al modelo personalizado hasta que implemente este. Debe implementar el modelo personalizado para poder usarlo con las llamadas de finalización.

Importante

Después de implementar un modelo personalizado, si en cualquier momento la implementación permanece inactiva durante más de quince (15) días, la implementación se eliminará automáticamente. La implementación de un modelo personalizado es inactivasi el modelo se ha implementado hace más de quince (15) días y no se han realizado finalizaciones ni llamadas de finalización de chat durante un período continuo de 15 días.

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 Azure OpenAI Service, cada modelo personalizado (ajustado a sus preferencias) que se implementa incurre en un costo de hospedaje por hora, independientemente de si se realizan finalizaciones o llamadas de finalización de chat al modelo. Para obtener más información sobre cómo planear y administrar los costos con Azure OpenAI, consulte la guía de Planeamiento para administrar los costos Azure OpenAI Service.

Puede usar Azure OpenAI o la CLI de Azure para implementar el modelo personalizado.

Nota:

Solo se permite una implementación para un modelo personalizado. Se produce un error si selecciona un modelo personalizado ya implementado.

Implementación de un modelo con ajuste preciso

A diferencia de los comandos de SDK anteriores, la implementación debe realizarse mediante la API del plano de control que requiere una autorización independiente, una ruta de acceso de API diferente y otra versión de API.

variable Definición
token Hay varias maneras de generar un token de autorización. El método más sencillo para las pruebas iniciales es iniciar Cloud Shell desde Azure Portal. A continuación, ejecute az account get-access-token. Puede usar este token como token de autorización temporal para las pruebas de API. Se recomienda su almacenamiento en una nueva variable de entorno
de Azure Identificador de suscripción para el recurso de Azure OpenAI asociado
resource_group Nombre del grupo de recursos para el recurso de Azure OpenAI
resource_name Nombre del recurso de Azure OpenAI
model_deployment_name Nombre personalizado para la nueva implementación de modelos con ajuste preciso. Este es el nombre al que se hará referencia en el código al efectuar llamadas de finalización de chat.
fine_tuned_model Recupere este valor de los resultados del trabajo de ajuste preciso del paso anterior. Tendrá el siguiente aspecto: gpt-35-turbo-0613.ft-b044a9d3cf9c4228b5d393567f693b83. Tendrá que agregar ese valor al archivo JSON deploy_data.
import json
import os
import requests

token= os.getenv("<TOKEN>") 
subscription = "<YOUR_SUBSCRIPTION_ID>"  
resource_group = "<YOUR_RESOURCE_GROUP_NAME>"
resource_name = "<YOUR_AZURE_OPENAI_RESOURCE_NAME>"
model_deployment_name ="gpt-35-turbo-ft" # custom deployment name that you will use to reference the model when making inference calls.

deploy_params = {'api-version': "2023-05-01"} 
deploy_headers = {'Authorization': 'Bearer {}'.format(token), 'Content-Type': 'application/json'}

deploy_data = {
    "sku": {"name": "standard", "capacity": 1}, 
    "properties": {
        "model": {
            "format": "OpenAI",
            "name": <"fine_tuned_model">, #retrieve this value from the previous call, it will look like gpt-35-turbo-0613.ft-b044a9d3cf9c4228b5d393567f693b83
            "version": "1"
        }
    }
}
deploy_data = json.dumps(deploy_data)

request_url = f'https://management.azure.com/subscriptions/{subscription}/resourceGroups/{resource_group}/providers/Microsoft.CognitiveServices/accounts/{resource_name}/deployments/{model_deployment_name}'

print('Creating a new deployment...')

r = requests.put(request_url, params=deploy_params, headers=deploy_headers, data=deploy_data)

print(r)
print(r.reason)
print(r.json())

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 implementar en otra suscripción o región.

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

A continuación se muestra un ejemplo de implementación de un modelo que se ha ajustado en una suscripción o de una región a otra.

import json
import os
import requests

token= os.getenv("<TOKEN>") 

subscription = "<DESTINATION_SUBSCRIPTION_ID>"  
resource_group = "<DESTINATION_RESOURCE_GROUP_NAME>"
resource_name = "<DESTINATION_AZURE_OPENAI_RESOURCE_NAME>"

source_subscription = "<SOURCE_SUBSCRIPTION_ID>"
source_resource_group = "<SOURCE_RESOURCE_GROUP>"
source_resource = "<SOURCE_RESOURCE>"


source = f'/subscriptions/{source_subscription}/resourceGroups/{source_resource_group}/providers/Microsoft.CognitiveServices/accounts/{source_resource}'

model_deployment_name ="gpt-35-turbo-ft" # custom deployment name that you will use to reference the model when making inference calls.

deploy_params = {'api-version': "2023-05-01"} 
deploy_headers = {'Authorization': 'Bearer {}'.format(token), 'Content-Type': 'application/json'}



deploy_data = {
    "sku": {"name": "standard", "capacity": 1}, 
    "properties": {
        "model": {
            "format": "OpenAI",
            "name": <"FINE_TUNED_MODEL_NAME">, # This value will look like gpt-35-turbo-0613.ft-0ab3f80e4f2242929258fff45b56a9ce 
            "version": "1",
            "source": source
        }
    }
}
deploy_data = json.dumps(deploy_data)

request_url = f'https://management.azure.com/subscriptions/{subscription}/resourceGroups/{resource_group}/providers/Microsoft.CognitiveServices/accounts/{resource_name}/deployments/{model_deployment_name}'

print('Creating a new deployment...')

r = requests.put(request_url, params=deploy_params, headers=deploy_headers, data=deploy_data)

print(r)
print(r.reason)
print(r.json())

Para realizar la implementación entre la misma suscripción, pero distintas regiones, solo tendría que tener grupos de recursos y suscripciones son idénticos para las variables de origen y destino, y solo los nombres de recursos de origen y destino tendrían que ser únicos.

Implementación de un modelo con la CLI de Azure

En el siguiente ejemplo se muestra cómo usar la CLI de Azure para implementar el modelo personalizado. Con la CLI de Azure, debe especificar un nombre para la implementación del modelo personalizado. Para obtener más información sobre cómo usar la CLI de Azure para implementar modelos personalizados, consulte az cognitiveservices account deployment.

Para ejecutar este comando de la CLI de Azure en una ventana de la consola, debe reemplazar los siguientes <marcadores de posición> por los valores correspondientes para el modelo personalizado:

Marcador de posición Valor
<YOUR_AZURE_SUBSCRIPTION> El nombre o id. de la suscripción de Azure.
<YOUR_RESOURCE_GROUP> El nombre del grupo de recursos de Azure.
<YOUR_RESOURCE_NAME> El nombre del recurso de Azure OpenAI.
<YOUR_DEPLOYMENT_NAME> El nombre que quiere usar para la implementación del modelo.
<YOUR_FINE_TUNED_MODEL_ID> El nombre del modelo personalizado.
az cognitiveservices account deployment create 
    --resource-group <YOUR_RESOURCE_GROUP>
    --name <YOUR_RESOURCE_NAME>  
    --deployment-name <YOUR_DEPLOYMENT_NAME>
    --model-name <YOUR_FINE_TUNED_MODEL_ID>
    --model-version "1" 
    --model-format OpenAI 
    --sku-capacity "1" 
    --sku-name "Standard"

Uso de un modelo personalizado implementado

Cuando su modelo personalizado se implemente, puede usarlo como cualquier otro modelo implementado. Puede usar Área de juegos en Azure OpenAI Studio para experimentar con la nueva implementación. Puede seguir usando los mismos parámetros con el modelo personalizado, como temperature y max_tokens, como puede hacer con otros modelos implementados. Para los modelos babbage-002 y davinci-002 con ajuste preciso, usará el área de juegos Finalizaciones y la API de finalizaciones. Para los modelos gpt-35-turbo-0613 con ajuste preciso, usará el área de juegos Chat y la API de finalización de chat.

import os
from openai import AzureOpenAI

client = AzureOpenAI(
  azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"), 
  api_key=os.getenv("AZURE_OPENAI_API_KEY"),  
  api_version="2024-02-01"
)

response = client.chat.completions.create(
    model="gpt-35-turbo-ft", # model = "Custom deployment name you chose for your fine-tuning model"
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Does Azure OpenAI support customer managed keys?"},
        {"role": "assistant", "content": "Yes, customer managed keys are supported by Azure OpenAI."},
        {"role": "user", "content": "Do other Azure AI services support this too?"}
    ]
)

print(response.choices[0].message.content)

Análisis del modelo personalizado

Azure OpenAI asocia un archivo de resultado denominado results.csv a cada trabajo de ajuste preciso una vez completado. Puede usar el archivo de resultados para analizar el rendimiento de entrenamiento y validación del modelo personalizado. El id. del archivo de resultados se muestra para cada modelo personalizado; igualmente, puede usar el SDK de Python para recuperar el id. de archivo y descargar el archivo de resultados para su análisis.

En el siguiente ejemplo de Python se recupera el id. del primer archivo de resultados adjunto al trabajo de ajuste preciso del modelo personalizado y, a continuación, se usa el SDK de Python para descargar el archivo en el directorio de trabajo para su análisis.

# Retrieve the file ID of the first result file from the fine-tuning job
# for the customized model.
response = client.fine_tuning.jobs.retrieve(job_id)
if response.status == 'succeeded':
    result_file_id = response.result_files[0]

retrieve = client.files.retrieve(result_file_id)

# Download the result file.
print(f'Downloading result file: {result_file_id}')

with open(retrieve.filename, "wb") as file:
    result = client.files.content(result_file_id).read()
    file.write(result)

El archivo de resultados es un archivo CSV que contiene una fila de encabezado y una fila para cada paso de entrenamiento que realizó el trabajo de ajuste preciso. El archivo de resultados contiene las columnas siguientes:

Nombre de la columna Descripción
step El número del paso de entrenamiento. Un paso de entrenamiento representa un solo paso, hacia delante y hacia atrás, en un lote de datos de entrenamiento.
train_loss La pérdida del lote de entrenamiento.
training_accuracy El porcentaje de terminaciones en el lote de entrenamiento para el que los tokens predichos por el modelo coinciden exactamente con los tokens de terminación reales.
Por ejemplo, si el tamaño del lote se establece en 3 y los datos contienen finalizaciones de tipo [[1, 2], [0, 5], [4, 2]], este valor se establece en 0,67 (2 de 3) si el modelo predijo [[1, 1], [0, 5], [4, 2]].
train_mean_token_accuracy El porcentaje de token del lote de entrenamiento que el modelo predijo correctamente.
Por ejemplo, si el tamaño del lote se establece en 3 y los datos contienen finalizaciones de tipo [[1, 2], [0, 5], [4, 2]], este valor se establece en 0,83 (5 de 6) si el modelo predijo [[1, 1], [0, 5], [4, 2]].
valid_loss La pérdida del lote de validación.
valid_accuracy El porcentaje de terminaciones en el lote de validación para el que los tokens predichos por el modelo coinciden exactamente con los tokens de terminación reales.
Por ejemplo, si el tamaño del lote se establece en 3 y los datos contienen finalizaciones de tipo [[1, 2], [0, 5], [4, 2]], este valor se establece en 0,67 (2 de 3) si el modelo predijo [[1, 1], [0, 5], [4, 2]].
validation_mean_token_accuracy El porcentaje de tokens en el lote de validación que el modelo predijo correctamente.
Por ejemplo, si el tamaño del lote se establece en 3 y los datos contienen finalizaciones de tipo [[1, 2], [0, 5], [4, 2]], este valor se establece en 0,83 (5 de 6) si el modelo predijo [[1, 1], [0, 5], [4, 2]].

También puede ver los datos en el archivo results.csv como trazados de Azure OpenAI Studio. Seleccione el vínculo del modelo entrenado y verá tres gráficos: pérdida, precisión media del token y precisión del token. Si proporcionó datos de validación, ambos conjuntos de datos aparecerán en el mismo trazado.

Intente disminuir la pérdida con el tiempo y aumentar la precisión. Si ve una divergencia entre los datos de entrenamiento y los de validación, puede indicar que existe un sobreajuste. Pruebe un entrenamiento con menos épocas o un multiplicador de velocidad de aprendizaje más pequeño.

Limpieza de implementaciones, modelos personalizados y archivos de entrenamiento

Cuando haya terminado con su modelo personalizado, puede eliminar la implementación y el modelo. También puede eliminar los archivos de entrenamiento y validación que cargó en el servicio, si es necesario.

Eliminar la implementación de modelo

Importante

Después de implementar un modelo personalizado, si en cualquier momento la implementación permanece inactiva durante más de quince (15) días, la implementación se eliminará automáticamente. La implementación de un modelo personalizado es inactivasi el modelo se ha implementado hace más de quince (15) días y no se han realizado finalizaciones ni llamadas de finalización de chat durante un período continuo de 15 días.

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 Azure OpenAI Service, cada modelo personalizado (ajustado a sus preferencias) que se implementa incurre en un costo de hospedaje por hora, independientemente de si se realizan finalizaciones o llamadas de finalización de chat al modelo. Para obtener más información sobre cómo planear y administrar los costos con Azure OpenAI, consulte la guía de Planeamiento para administrar los costos Azure OpenAI Service.

Puede usar varios métodos para eliminar la implementación del modelo personalizado:

Eliminación de un modelo personalizado

Del mismo modo, puede usar varios métodos para eliminar el modelo personalizado:

Nota:

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

Eliminación de los archivos de entrenamiento

Opcionalmente, puede eliminar los archivos de entrenamiento y validación que cargó para el entrenamiento y los archivos de resultados que se crearon durante el entrenamiento, desde su suscripción a Azure OpenAI. Puede usar los métodos siguientes para eliminar los archivos de entrenamiento, validación y resultado:

En el siguiente ejemplo de Python se usa el SDK de Python para eliminar los archivos de entrenamiento, validación y resultado del modelo personalizado:

print('Checking for existing uploaded files.')
results = []

# Get the complete list of uploaded files in our subscription.
files = openai.File.list().data
print(f'Found {len(files)} total uploaded files in the subscription.')

# Enumerate all uploaded files, extracting the file IDs for the
# files with file names that match your training dataset file and
# validation dataset file names.
for item in files:
    if item["filename"] in [training_file_name, validation_file_name, result_file_name]:
        results.append(item["id"])
print(f'Found {len(results)} already uploaded files that match our files')

# Enumerate the file IDs for our files and delete each file.
print(f'Deleting already uploaded files.')
for id in results:
    openai.File.delete(sid = id)

Ajuste preciso continuo

Una vez que haya creado un modelo ajustado, es posible que quiera seguir refinando el modelo a lo largo del tiempo a través de un ajuste más preciso. El ajuste continuo es el proceso iterativo de seleccionar un modelo ya ajustado como modelo base y ajustarlo más adelante en nuevos conjuntos de ejemplos de entrenamiento.

Para realizar un ajuste preciso en un modelo que ha ajustado previamente, usaría el mismo proceso que se describe en creación de un modelo personalizado pero, en lugar de especificar el nombre de un modelo base genérico, especificaría el identificador del modelo ya optimizado. El identificador del modelo ajustado es similar a gpt-35-turbo-0613.ft-5fd1918ee65d4cd38a5dcf6835066ed7

from openai import AzureOpenAI

client = AzureOpenAI(
  azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"), 
  api_key=os.getenv("AZURE_OPENAI_API_KEY"),  
  api_version="2024-02-01"  
)

response = client.fine_tuning.jobs.create(
    training_file=training_file_id,
    validation_file=validation_file_id,
    model="gpt-35-turbo-0613.ft-5fd1918ee65d4cd38a5dcf6835066ed7" # Enter base model name. Note that in Azure OpenAI the model name contains dashes and cannot contain dot/period characters. 
)

job_id = response.id

# You can use the job ID to monitor the status of the fine-tuning job.
# The fine-tuning job will take some time to start and complete.

print("Job ID:", response.id)
print("Status:", response.id)
print(response.model_dump_json(indent=2))

También se recomienda incluir el parámetro suffix para facilitar la distinción entre diferentes iteraciones del modelo ajustado. suffix toma una cadena y se establece para identificar el modelo ajustado. Con la API de Python de OpenAI, se admite una cadena de hasta 18 caracteres que se agregará al nombre del modelo optimizado.

Si no está seguro del identificador del modelo optimizado existente, esta información se puede encontrar en la página Modelos de Azure OpenAI Studio, o puede generar una lista de modelos para un recurso de Azure OpenAI determinado mediante la API de REST.

Requisitos previos

Nota:

Actualmente, debe enviar una aplicación para acceder a Azure OpenAI Service. Para solicitar acceso, complete este formulario.

Models

Los modelos siguientes admiten el ajuste preciso:

  • babbage-002
  • davinci-002
  • gpt-35-turbo (0613)
  • gpt-35-turbo (1106)
  • gpt-35-turbo (0125)

Consulte la página de modelos para comprobar qué regiones admiten actualmente el ajuste preciso.

Revisión del flujo de trabajo de la API REST

Dedique un momento a revisar el flujo de trabajo de ajuste preciso para usar las API REST y Python con Azure OpenAI:

  1. Prepare los datos de entrenamiento y validación.
  2. Seleccione un modelo base.
  3. Cargue los datos de entrenamiento.
  4. Entrene el nuevo modelo personalizado.
  5. Compruebe el estado del modelo personalizado.
  6. Implemente el modelo personalizado para usarlo.
  7. Use el modelo personalizado.
  8. Opcionalmente, analice el modelo personalizado para mejorar el rendimiento y ajustarlo.

Preparación de los datos de entrenamiento y validación

El conjunto de datos de validación y los datos de entrenamiento consisten en ejemplos de entrada y salida para el rendimiento del modelo.

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

Los datos de entrenamiento y validación que usa deben tener formato como documento de líneas JSON (JSONL). Para gpt-35-turbo-0613 y otros modelos relacionados, el conjunto de datos de ajuste preciso debe tener el formato conversacional que usa la API de finalizaciones de chat.

Si desea un tutorial detallado del ajuste preciso de un modelo gpt-35-turbo-0613, consulte el tutorial de ajuste preciso de Azure OpenAI

Formato de archivo de ejemplo

{"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?"}]}

Formato de archivo de chat de varios turnos

También se admiten varios turnos de una conversación en una sola línea del archivo de entrenamiento jsonl. Para omitir el ajuste específico de los mensajes del asistente, agregue el par de valores de clave opcional weight. Actualmente, weight se puede establecer en 0 o 1.

{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the capital of France?"}, {"role": "assistant", "content": "Paris", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Paris, as if everyone doesn't know that already.", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'Romeo and Juliet'?"}, {"role": "assistant", "content": "William Shakespeare", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Oh, just some guy named William Shakespeare. Ever heard of him?", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "How far is the Moon from Earth?"}, {"role": "assistant", "content": "384,400 kilometers", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Around 384,400 kilometers. Give or take a few, like that really matters.", "weight": 1}]}

Además del formato JSONL, los archivos de datos de entrenamiento y validación deben codificarse en UTF-8 e incluir una marca de orden de bytes (BOM). El archivo debe tener un tamaño inferior a 512 MB.

Creación de conjuntos de datos de entrenamiento y validación

Cuantos más ejemplos de entrenamiento tenga, mejor. Los trabajos de ajuste preciso no se llevarán a cabo sin al menos 10 ejemplos de entrenamiento, pero un número tan pequeño no es suficiente para influir notablemente en las respuestas del modelo. Es recomendable proporcionar cientos, o incluso miles, de ejemplos de entrenamiento para llevarlos a cabo correctamente.

En general, al duplicar el tamaño del conjunto de datos se puede producir un aumento lineal de la calidad del modelo. Sin embargo, tenga en cuenta que los ejemplos de baja calidad pueden afectar negativamente al rendimiento. Si entrena el modelo en una gran cantidad de datos internos, sin eliminar primero el conjunto de datos solo para los ejemplos de mayor calidad, podría acabar con un modelo que funciona mucho peor de lo esperado.

Selección del modelo base

El primer paso para crear un modelo personalizado es elegir un modelo base. El panel Modelo base le permite elegir un modelo base que se utilizará para el modelo personalizado. La elección influye tanto en el rendimiento como en el costo del modelo.

Seleccione un modelo base de la lista desplegable Tipo de modelo base y, a continuación, seleccione Siguiente para continuar.

Puede crear un modelo personalizado a partir de uno de los siguientes modelos base disponibles:

  • babbage-002
  • davinci-002
  • gpt-35-turbo (0613)
  • gpt-35-turbo (1106)

O bien, puede realizar el ajuste preciso de un modelo previamente ajustado, con el formato base-model.ft-{jobid}.

Captura de pantalla de las opciones de modelo con un modelo personalizado ajustado.

Para obtener más información sobre los modelos base que se pueden ajustar, consulte Modelos.

Carga de los datos de aprendizaje

El siguiente paso consiste en elegir los datos de entrenamiento que ya están preparados o cargar nuevos datos de entrenamiento que se usarán al realizar el ajuste preciso del modelo. Cuando haya preparado los datos de entrenamiento, puede cargar los archivos en el servicio. Hay dos maneras de cargar los datos de entrenamiento:

En cuanto a los archivos de datos grandes, le recomendamos que los importe desde el almacén de blobs de Azure. Los archivos grandes pueden volverse inestables cuando se cargan a través de formularios multiparte porque las solicitudes son atómicas y no se pueden volver a intentar o reanudar. Para obtener más información acerca de Azure Blob Storage, consulte ¿Qué es Azure Blob Storage?

Nota:

Los archivos de datos de entrenamiento deben tener el formato JSONL, estar codificados en UTF-8 con una marca de orden de bytes (BOM). El archivo debe tener un tamaño inferior a 512 MB.

Cargar datos de entrenamiento

curl -X POST $AZURE_OPENAI_ENDPOINT/openai/files?api-version=2023-12-01-preview \
  -H "Content-Type: multipart/form-data" \
  -H "api-key: $AZURE_OPENAI_API_KEY" \
  -F "purpose=fine-tune" \
  -F "file=@C:\\fine-tuning\\training_set.jsonl;type=application/json"

Cargar datos de validación

curl -X POST $AZURE_OPENAI_ENDPOINT/openai/files?api-version=2023-12-01-preview \
  -H "Content-Type: multipart/form-data" \
  -H "api-key: $AZURE_OPENAI_API_KEY" \
  -F "purpose=fine-tune" \
  -F "file=@C:\\fine-tuning\\validation_set.jsonl;type=application/json"

Creación de un modelo personalizado

Después de cargar los archivos de entrenamiento y validación, ya estará listo para iniciar el trabajo de ajuste preciso. El siguiente código muestra un ejemplo de cómo crear un nuevo trabajo de ajuste preciso con la API de REST:

curl -X POST $AZURE_OPENAI_ENDPOINT/openai/fine_tuning/jobs?api-version=2023-12-01-preview \
  -H "Content-Type: application/json" \
  -H "api-key: $AZURE_OPENAI_API_KEY" \
  -d '{
    "model": "gpt-35-turbo-0613", 
    "training_file": "<TRAINING_FILE_ID>", 
    "validation_file": "'<VALIDATION_FILE_ID>"
}'

También puede pasar parámetros opcionales adicionales, como hiperparámetros, para tomar un mayor control del proceso de ajuste preciso. Para el entrenamiento inicial, se recomienda usar los valores predeterminados automáticos que están presentes sin especificar estos parámetros.

Los hiperparámetros admitidos actualmente para el ajuste preciso son:

Nombre Tipo Descripción
batch_size integer El tamaño del lote a usar para el entrenamiento. El tamaño del lote es el número de ejemplos de entrenamiento usados para entrenar una sola pasada hacia adelante y hacia atrás. En general, hemos comprobado que los tamaños de lote más grandes tienden a funcionar mejor para conjuntos de datos más grandes. El valor predeterminado, así como 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.
learning_rate_multiplier number El multiplicador de la tasa de aprendizaje que se usará para el entrenamiento. La tasa de aprendizaje de ajuste es la tasa de aprendizaje original que se usó 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 rango de 0,02 a 0,2 para ver qué produce los mejores resultados. Una velocidad de aprendizaje más pequeña puede ser útil para evitar el sobreajuste.
n_epochs integer El número de épocas para entrenar el modelo. Una época se refiere a un ciclo completo a través del conjunto de datos de entrenamiento.

Compruebe el estado del modelo personalizado

Después de haber iniciado un trabajo de ajuste preciso, puede tardar algo de tiempo en completarse. Es posible que el trabajo esté en cola detrás de otros trabajos del sistema. Entrenar el modelo puede tardar minutos u horas, dependiendo del modelo y del tamaño del conjunto de datos. En el siguiente ejemplo se usa la API REST para comprobar el estado del trabajo de ajuste preciso. En el ejemplo se recupera información sobre el trabajo mediante el id. de trabajo devuelto del ejemplo anterior:

curl -X GET $AZURE_OPENAI_ENDPOINT/openai/fine_tuning/jobs/<YOUR-JOB-ID>?api-version=2023-12-01-preview \
  -H "api-key: $AZURE_OPENAI_API_KEY"

Implementación de un modelo personalizado

Importante

Después de implementar un modelo personalizado, si en cualquier momento la implementación permanece inactiva durante más de quince (15) días, la implementación se eliminará automáticamente. La implementación de un modelo personalizado es inactivasi el modelo se ha implementado hace más de quince (15) días y no se han realizado finalizaciones ni llamadas de finalización de chat durante un período continuo de 15 días.

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 Azure OpenAI Service, cada modelo personalizado (ajustado a sus preferencias) que se implementa incurre en un costo de hospedaje por hora, independientemente de si se realizan finalizaciones o llamadas de finalización de chat al modelo. Para obtener más información sobre cómo planear y administrar los costos con Azure OpenAI, consulte la guía de Planeamiento para administrar los costos Azure OpenAI Service.

En el siguiente ejemplo de Python se muestra cómo usar la API de REST para crear una implementación de modelos para el modelo personalizado. La API de REST genera un nombre para la implementación del modelo personalizado.

variable Definición
token Hay varias maneras de generar un token de autorización. El método más sencillo para las pruebas iniciales es iniciar Cloud Shell desde Azure Portal. A continuación, ejecute az account get-access-token. Puede usar este token como token de autorización temporal para las pruebas de API. Se recomienda su almacenamiento en una nueva variable de entorno
de Azure Identificador de suscripción para el recurso de Azure OpenAI asociado
resource_group Nombre del grupo de recursos para el recurso de Azure OpenAI
resource_name Nombre del recurso de Azure OpenAI
model_deployment_name Nombre personalizado para la nueva implementación de modelos con ajuste preciso. Este es el nombre al que se hará referencia en el código al efectuar llamadas de finalización de chat.
fine_tuned_model Recupere este valor de los resultados del trabajo de ajuste preciso del paso anterior. Tendrá el siguiente aspecto: gpt-35-turbo-0613.ft-b044a9d3cf9c4228b5d393567f693b83. Tendrá que agregar ese valor al archivo JSON deploy_data.
curl -X POST "https://management.azure.com/subscriptions/<SUBSCRIPTION>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.CognitiveServices/accounts/<RESOURCE_NAME>/deployments/<MODEL_DEPLOYMENT_NAME>api-version=2023-05-01" \
  -H "Authorization: Bearer <TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{
    "sku": {"name": "standard", "capacity": 1},
    "properties": {
        "model": {
            "format": "OpenAI",
            "name": "<FINE_TUNED_MODEL>",
            "version": "1"
        }
    }
}'

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 implementar en otra suscripción o región.

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

A continuación se muestra un ejemplo de implementación de un modelo que se ha ajustado en una suscripción o de una región a otra.

curl -X PUT "https://management.azure.com/subscriptions/<SUBSCRIPTION>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.CognitiveServices/accounts/<RESOURCE_NAME>/deployments/<MODEL_DEPLOYMENT_NAME>api-version=2023-05-01" \
  -H "Authorization: Bearer <TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{
    "sku": {"name": "standard", "capacity": 1},
    "properties": {
        "model": {
            "format": "OpenAI",
            "name": "<FINE_TUNED_MODEL>", 
            "version": "1",
            "source": "/subscriptions/{sourceSubscriptionID}/resourceGroups/{sourceResourceGroupName}/providers/Microsoft.CognitiveServices/accounts/{sourceAccount}" 
        }
    }
}'

Para realizar la implementación entre la misma suscripción, pero distintas regiones, solo tendría que tener grupos de recursos y suscripciones son idénticos para las variables de origen y destino, y solo los nombres de recursos de origen y destino tendrían que ser únicos.

Implementación de un modelo con la CLI de Azure

En el siguiente ejemplo se muestra cómo usar la CLI de Azure para implementar el modelo personalizado. Con la CLI de Azure, debe especificar un nombre para la implementación del modelo personalizado. Para obtener más información sobre cómo usar la CLI de Azure para implementar modelos personalizados, consulte az cognitiveservices account deployment.

Para ejecutar este comando de la CLI de Azure en una ventana de la consola, debe reemplazar los siguientes <marcadores de posición> por los valores correspondientes para el modelo personalizado:

Marcador de posición Valor
<YOUR_AZURE_SUBSCRIPTION> El nombre o id. de la suscripción de Azure.
<YOUR_RESOURCE_GROUP> El nombre del grupo de recursos de Azure.
<YOUR_RESOURCE_NAME> El nombre del recurso de Azure OpenAI.
<YOUR_DEPLOYMENT_NAME> El nombre que quiere usar para la implementación del modelo.
<YOUR_FINE_TUNED_MODEL_ID> El nombre del modelo personalizado.
az cognitiveservices account deployment create 
    --resource-group <YOUR_RESOURCE_GROUP>
    --name <YOUR_RESOURCE_NAME>  
    --deployment-name <YOUR_DEPLOYMENT_NAME>
    --model-name <YOUR_FINE_TUNED_MODEL_ID>
    --model-version "1" 
    --model-format OpenAI 
    --sku-capacity "1" 
    --sku-name "Standard"

Uso de un modelo personalizado implementado

Cuando su modelo personalizado se implemente, puede usarlo como cualquier otro modelo implementado. Puede usar Área de juegos en Azure OpenAI Studio para experimentar con la nueva implementación. Puede seguir usando los mismos parámetros con el modelo personalizado, como temperature y max_tokens, como puede hacer con otros modelos implementados. Para los modelos babbage-002 y davinci-002 con ajuste preciso, usará el área de juegos Finalizaciones y la API de finalizaciones. Para los modelos gpt-35-turbo-0613 con ajuste preciso, usará el área de juegos Chat y la API de finalización de chat.

curl $AZURE_OPENAI_ENDPOINT/openai/deployments/<deployment_name>/chat/completions?api-version=2023-05-15 \
  -H "Content-Type: application/json" \
  -H "api-key: $AZURE_OPENAI_API_KEY" \
  -d '{"messages":[{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Does Azure OpenAI support customer managed keys?"},{"role": "assistant", "content": "Yes, customer managed keys are supported by Azure OpenAI."},{"role": "user", "content": "Do other Azure AI services support this too?"}]}'

Análisis del modelo personalizado

Azure OpenAI asocia un archivo de resultado denominado results.csv a cada trabajo de ajuste preciso una vez completado. Puede usar el archivo de resultados para analizar el rendimiento de entrenamiento y validación del modelo personalizado. El id. del archivo de resultados se muestra para cada modelo personalizado; igualmente, puede usar la API de REST para recuperar el id. de archivo y descargar el archivo de resultados para su análisis.

En el siguiente ejemplo de Python se usa la API de REST para recuperar el id. del primer archivo de resultados adjunto al trabajo de ajuste preciso del modelo personalizado y, a continuación, se descarga el archivo en el directorio de trabajo para su análisis.

curl -X GET "$AZURE_OPENAI_ENDPOINT/openai/fine_tuning/jobs/<JOB_ID>?api-version=2023-12-01-preview" \
  -H "api-key: $AZURE_OPENAI_API_KEY")
curl -X GET "$AZURE_OPENAI_ENDPOINT/openai/files/<RESULT_FILE_ID>/content?api-version=2023-12-01-preview" \
    -H "api-key: $AZURE_OPENAI_API_KEY" > <RESULT_FILENAME>

El archivo de resultados es un archivo CSV que contiene una fila de encabezado y una fila para cada paso de entrenamiento que realizó el trabajo de ajuste preciso. El archivo de resultados contiene las columnas siguientes:

Nombre de la columna Descripción
step El número del paso de entrenamiento. Un paso de entrenamiento representa un solo paso, hacia delante y hacia atrás, en un lote de datos de entrenamiento.
train_loss La pérdida del lote de entrenamiento.
training_accuracy El porcentaje de terminaciones en el lote de entrenamiento para el que los tokens predichos por el modelo coinciden exactamente con los tokens de terminación reales.
Por ejemplo, si el tamaño del lote se establece en 3 y los datos contienen finalizaciones de tipo [[1, 2], [0, 5], [4, 2]], este valor se establece en 0,67 (2 de 3) si el modelo predijo [[1, 1], [0, 5], [4, 2]].
train_mean_token_accuracy El porcentaje de token del lote de entrenamiento que el modelo predijo correctamente.
Por ejemplo, si el tamaño del lote se establece en 3 y los datos contienen finalizaciones de tipo [[1, 2], [0, 5], [4, 2]], este valor se establece en 0,83 (5 de 6) si el modelo predijo [[1, 1], [0, 5], [4, 2]].
valid_loss La pérdida del lote de validación.
valid_accuracy El porcentaje de terminaciones en el lote de validación para el que los tokens predichos por el modelo coinciden exactamente con los tokens de terminación reales.
Por ejemplo, si el tamaño del lote se establece en 3 y los datos contienen finalizaciones de tipo [[1, 2], [0, 5], [4, 2]], este valor se establece en 0,67 (2 de 3) si el modelo predijo [[1, 1], [0, 5], [4, 2]].
validation_mean_token_accuracy El porcentaje de tokens en el lote de validación que el modelo predijo correctamente.
Por ejemplo, si el tamaño del lote se establece en 3 y los datos contienen finalizaciones de tipo [[1, 2], [0, 5], [4, 2]], este valor se establece en 0,83 (5 de 6) si el modelo predijo [[1, 1], [0, 5], [4, 2]].

También puede ver los datos en el archivo results.csv como trazados de Azure OpenAI Studio. Seleccione el vínculo del modelo entrenado y verá tres gráficos: pérdida, precisión media del token y precisión del token. Si proporcionó datos de validación, ambos conjuntos de datos aparecerán en el mismo trazado.

Intente disminuir la pérdida con el tiempo y aumentar la precisión. Si ve una divergencia entre los datos de entrenamiento y los de validación, puede indicar que existe un sobreajuste. Pruebe un entrenamiento con menos épocas o un multiplicador de velocidad de aprendizaje más pequeño.

Limpieza de implementaciones, modelos personalizados y archivos de entrenamiento

Cuando haya terminado con su modelo personalizado, puede eliminar la implementación y el modelo. También puede eliminar los archivos de entrenamiento y validación que cargó en el servicio, si es necesario.

Eliminar la implementación de modelo

Puede usar varios métodos para eliminar la implementación del modelo personalizado:

Eliminación de un modelo personalizado

Del mismo modo, puede usar varios métodos para eliminar el modelo personalizado:

Nota:

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

Eliminación de los archivos de entrenamiento

Opcionalmente, puede eliminar los archivos de entrenamiento y validación que cargó para el entrenamiento y los archivos de resultados que se crearon durante el entrenamiento, desde su suscripción a Azure OpenAI. Puede usar los métodos siguientes para eliminar los archivos de entrenamiento, validación y resultado:

Ajuste preciso continuo

Una vez que haya creado un modelo ajustado, es posible que quiera seguir refinando el modelo a lo largo del tiempo a través de un ajuste más preciso. El ajuste continuo es el proceso iterativo de seleccionar un modelo ya ajustado como modelo base y ajustarlo más adelante en nuevos conjuntos de ejemplos de entrenamiento.

Para realizar un ajuste preciso en un modelo que ha ajustado previamente, usaría el mismo proceso que se describe en creación de un modelo personalizado pero, en lugar de especificar el nombre de un modelo base genérico, especificaría el identificador del modelo ya optimizado. El identificador del modelo ajustado es similar a gpt-35-turbo-0613.ft-5fd1918ee65d4cd38a5dcf6835066ed7

curl -X POST $AZURE_OPENAI_ENDPOINT/openai/fine_tuning/jobs?api-version=2023-12-01-preview \
  -H "Content-Type: application/json" \
  -H "api-key: $AZURE_OPENAI_API_KEY" \
  -d '{
    "model": "gpt-35-turbo-0613.ft-5fd1918ee65d4cd38a5dcf6835066ed7", 
    "training_file": "<TRAINING_FILE_ID>", 
    "validation_file": "<VALIDATION_FILE_ID>",
    "suffix": "<additional text used to help identify fine-tuned models>"
}'

También se recomienda incluir el parámetro suffix para facilitar la distinción entre diferentes iteraciones del modelo ajustado. suffix toma una cadena y se establece para identificar el modelo ajustado. El sufijo puede contener hasta 40 caracteres (a-z, A-Z, 0-9 y _) que se agregarán al nombre del modelo ajustado.

Si no está seguro del identificador del modelo optimizado, esta información se puede encontrar en la página Modelos de Azure OpenAI Studio, o puede generar una lista de modelos para un recurso de Azure OpenAI determinado mediante la API de REST.

Solución de problemas

¿Cómo se habilita el ajuste preciso? ¿Está atenuada la opción para crear un modelo personalizado en Azure OpenAI Studio?

Para acceder correctamente al ajuste preciso, necesita Colaborador de OpenAI de Cognitive Services asignado. Incluso alguien con permisos de administrador de servicios de alto nivel necesitaría esta cuenta establecida explícitamente para acceder al ajuste preciso. Para más información, consulte las instrucciones de control de acceso basado en rol.

¿Por qué se produjo un error en la carga?

Si se produce un error en la carga de archivos, puede ver el mensaje de error en "archivos de datos" en Azure OpenAI Studio. Mantenga el mouse sobre la zona que pone "error" (en la columna de estado) y aparecerá una explicación del error.

Captura de pantalla del mensaje de error de ajuste preciso.

Mi modelo con ajuste preciso no parece haber mejorado

  • Mensaje de sistema que falta: tiene que proporcionar un mensaje de sistema cuando realice un ajuste preciso; posiblemente querrá proporcionar ese mismo mensaje de sistema cuando use el modelo con ajuste preciso. Si proporciona un mensaje de sistema diferente, es posible que vea resultados diferentes a aquellos para los que realizó el ajuste.

  • Datos insuficientes: mientras que 10 es el mínimo para que se ejecute la canalización, necesita cientos de puntos de datos, o incluso miles, para enseñar al modelo una nueva aptitud. Con muy pocos puntos de datos se corre el riesgo de un sobreajuste y una generalización deficiente. El modelo con ajuste preciso puede funcionar bien en los datos de entrenamiento pero de manera deficiente en otros datos porque ha memorizado los ejemplos de entrenamiento en lugar de los patrones de aprendizaje. Para obtener los mejores resultados, planee preparar un conjunto de datos con cientos o miles de puntos de datos.

  • Datos incorrectos: un conjunto de datos mal mantenido o no representativo producirá un modelo de baja calidad. El modelo puede aprender patrones inexactos o sesgados del conjunto de datos. Por ejemplo, si está entrenando un bot de chat para el servicio al cliente, pero solo proporciona datos de entrenamiento para un escenario (por ejemplo, devoluciones de artículos), no sabrá cómo responder en otros escenarios. O, si los datos de entrenamiento son incorrectos (contiene respuestas incorrectas), el modelo aprenderá a proporcionar resultados incorrectos.

Pasos siguientes