Introducción a los Despliegues GlobalBatch en OpenAI: Procesamiento por Lotes

Introducción

Este manual está diseñado para guiar a los desarrolladores y administradores de sistemas en el uso del API de Batch de OpenAI a través de Azure. Abarca desde la preparación de archivos hasta la recuperación de resultados, y proporciona ejemplos tanto en Python como en cURL. La implementación de GlobalBatch permite procesar grupos de solicitudes de manera asíncrona, lo que resulta en una reducción del 50% en costos, límites de tasa significativamente más altos y un tiempo de respuesta claro de 24 horas.

¿Qué es el API Batch de OpenAI?

El API Batch de OpenAI permite enviar solicitudes asíncronas en grupos, lo que es ideal para trabajos que no requieren respuestas inmediatas. Algunos casos de uso incluyen:

  • Evaluaciones de modelos.
  • Clasificación de grandes conjuntos de datos.
  • Integración de contenido en repositorios.

Ventajas del API Batch

  • Eficiencia de costos: Descuento del 50% en comparación con las APIs sincrónicas.
  • Límites de tasa más altos: Más capacidad en comparación con las APIs sincrónicas.
  • Tiempos de finalización rápidos: Cada lote se completa en un plazo de 24 horas, a menudo más rápidamente.

Configuración Inicial

Antes de ejecutar el script, configura tu entorno:

Variables de Entorno

Puedes establecer tu clave API y endpoint utilizando variables de entorno:

export OPENAI_API_KEY='tu_clave_api'
export OPENAI_ENDPOINT='https://tu_endpoint.openai.azure.com/'

Preparación del archivo por lotes

Los lotes comienzan con un archivo .jsonl donde cada línea contiene los detalles de una solicitud individual al API. Los parámetros en el campo body de cada línea son los mismos que los parámetros del endpoint subyacente. Es necesario incluir un valor custom_id único en cada solicitud.

Ejemplo de archivo de entrada

{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "gpt-3.5-turbo", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 1000}}
{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "gpt-3.5-turbo", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 1000}}

Script de Python para Subir y Procesar Archivos

A continuación, se presenta el script que se utilizará para subir un archivo y verificar su estado hasta que se complete el procesamiento:

import time
from openai import AzureOpenAI

# Configuración de la API
api_key = 'tu_clave_api'
azure_endpoint = 'https://tu_endpoint.openai.azure.com/'

# Instanciación del cliente
client = AzureOpenAI(
    api_key=api_key,
    api_version="2024-07-01-preview",
    azure_endpoint=azure_endpoint
)

# 1. Subir un archivo con un propósito de "batch"
file = client.files.create(
    file=open("test.jsonl", "rb"),
    purpose="batch"
)

# Mostrar información del archivo subido
print("Archivo subido. Información del archivo:")
print(file.model_dump_json(indent=2))
file_id = file.id

# Comprobación del estado del archivo
status = "pending"
while status != "processed":
    time.sleep(10)  # Espera 10 segundos antes de la siguiente consulta
    
    # Recupera el estado del archivo
    file_info = client.files.retrieve(file_id)
    status = file_info.status
    print(f"File ID: {file_id}, Status: {status}")

# Obtener el contenido del archivo procesado
if status == "processed":
    output_file_id = file_info.output_file_id
    contenido = client.files.content(output_file_id)
    print("Contenido del archivo de salida:")
    print(contenido.text.strip())
else:
    print("El archivo no fue procesado correctamente.")

Descripción del Script

  1. Instanciación del Cliente: Se crea una instancia del cliente AzureOpenAI con la clave de API y el endpoint.
  2. Subida de Archivo: Se utiliza el método create para subir un archivo con el propósito de «batch».
  3. Verificación del Estado: Se verifica el estado del archivo en un bucle hasta que esté procesado.
  4. Recuperación de Resultados: Se recupera el contenido del archivo procesado y se imprime en la consola.

Uso del Método curl

También puedes interactuar con Azure OpenAI utilizando el método curl desde la línea de comandos. Aquí tienes un ejemplo de cómo subir un archivo y recuperar resultados utilizando curl.

Subir un Archivo con curl

 

curl -X POST "https://tu_endpoint.openai.azure.com/v1/files" \
-H "Authorization: Bearer tu_clave_api" \
-H "Content-Type: application/json" \
--data-binary @test.jsonl

Recuperar Resultados

Después de procesar el archivo, puedes recuperar los resultados usando el siguiente comando:

curl -X GET "https://tu_endpoint.openai.azure.com/v1/files/file-id/results" \
-H "Authorization: Bearer tu_clave_api"

Comprobación del estado de un lote

Posibles estados

  • validating: El archivo de entrada se está validando.
  • failed: El archivo de entrada ha fallado en el proceso de validación.
  • in_progress: El archivo de entrada se ha validado con éxito y el lote está en ejecución.
  • finalizing: El lote ha completado y los resultados se están preparando.
  • completed: El lote ha completado y los resultados están listos.
  • expired: El lote no pudo completarse dentro del plazo de 24 horas.
  • cancelling: El lote se está cancelando.
  • cancelled: El lote ha sido cancelado.

Documentación Adicional

Para más detalles sobre el uso de Azure OpenAI y la gestión de archivos en lotes, puedes consultar la documentación oficial de Microsoft. Esta documentación incluye ejemplos adicionales y explicaciones sobre el uso de la API.

Conclusiones

Este manual proporciona una guía detallada sobre cómo trabajar con Azure OpenAI para subir y procesar archivos. Asegúrate de consultar la documentación oficial de Microsoft sobre Azure OpenAI para obtener información adicional y actualizaciones sobre nuevos modelos y características.

:wq!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *