Automatización de la personalización de modelos en Amazon Bedrock con el flujo de trabajo de AWS Step Functions

Los modelos de lenguaje de gran tamaño se han vuelto indispensables para generar respuestas inteligentes y matizadas en una amplia variedad de casos de uso comerciales. Sin embargo, las empresas suelen tener datos y casos de uso únicos que requieren personalizar los modelos de lenguaje de gran tamaño más allá de sus capacidades predeterminadas. La roca madre del Amazonas es un servicio completamente administrado que ofrece una selección de modelos de base (FM) de alto rendimiento de empresas de IA líderes como AI21 Labs, Anthropic, Cohere, Meta, Mistral AI, Stability AI y Amazon a través de una única API, junto con un amplio conjunto de capacidades que necesita para crear aplicaciones de IA generativas con seguridad, privacidad e IA responsable. Para permitir una personalización de modelos segura y escalable, Servicios web de Amazon (AWS) anunció su apoyo a Personalización de modelos en Amazon Bedrock en AWS re:Invent 2023. Esto permite a los clientes entrenar previamente modelos seleccionados utilizando sus propios datos patentados para adaptar las respuestas del modelo a su contexto comercial. La calidad del modelo personalizado depende de múltiples factores, incluida la calidad de los datos de entrenamiento y los hiperparámetros utilizados para personalizar el modelo. Esto requiere que los clientes realicen múltiples iteraciones para desarrollar el mejor modelo personalizado para sus necesidades.

Para abordar este desafío, AWS Anunciado integración nativa entre La roca madre del Amazonas y Funciones de pasos de AWSEsto permite a los clientes organizar flujos de trabajo repetibles y automatizados para personalizar los modelos de Amazon Bedrock.

En esta publicación, demostraremos cómo Step Functions puede ayudar a superar los puntos críticos clave en la personalización de modelos. Aprenderá a configurar un flujo de trabajo de muestra que organiza el entrenamiento, la evaluación y el monitoreo de modelos. La automatización de estas tareas complejas a través de un marco repetible reduce los plazos de desarrollo y libera todo el valor de Amazon Bedrock para sus necesidades únicas.

Arquitectura

Para esta demostración, utilizaremos un caso de uso de resumen con Cohere Command Light Model en Amazon Bedrock. Sin embargo, este flujo de trabajo se puede utilizar para el caso de uso de resumen de otros modelos al pasar el ID del modelo base y los valores requeridos. hiperparámetros y realizar cambios menores específicos del modelo en el flujo de trabajo. Consulte Amazon Bedrock guía del usuario para obtener la lista completa de modelos compatibles para la personalización. Toda la infraestructura necesaria se implementará utilizando Modelo de aplicación sin servidor de AWS (SAM).

A continuación se presenta un resumen de la funcionalidad de la arquitectura:

  • El usuario carga los datos de entrenamiento en formato JSON Line en un Servicio de almacenamiento simple de Amazon (Amazon S3) Los datos de entrenamiento y validación se almacenan en el depósito de datos de validación. Estos datos deben estar en el depósito de datos de validación. Línea JSON formato.
  • La función de paso CustomizeBedrockModel La máquina de estados se inicia con los parámetros de entrada, como el modelo a personalizar, los hiperparámetros, las ubicaciones de los datos de entrenamiento y otros parámetros que se analizan más adelante en esta publicación.
    • El flujo de trabajo invoca Amazon Bedrock CreateModelCustomizationJob API sincrónica para ajustar el modelo base con los datos de entrenamiento del depósito S3 y los hiperparámetros pasados.
    • Una vez creado el modelo personalizado, el flujo de trabajo invoca Amazon Bedrock CreateProvisionedModelThroughput API para crear un rendimiento aprovisionado sin compromiso.
    • La máquina de estados principal llama a la máquina de estados secundaria para evaluar el rendimiento del modelo personalizado con respecto al modelo base.
    • La máquina de estados secundaria invoca el modelo base y el modelo personalizado aprovisiona el rendimiento con los mismos datos de validación del depósito de validación S3 y almacena los resultados de la inferencia en el depósito de inferencia.
    • Un AWS Lambda Se llama a la función para evaluar la calidad del resumen realizado por el modelo personalizado y el modelo base utilizando la métrica BERTScore. Si el modelo personalizado tiene un rendimiento inferior al del modelo base, se elimina el rendimiento aprovisionado.
    • Se envía un correo electrónico de notificación con el resultado.

Prerrequisitos

  • Crear una cuenta de AWS Si aún no tienes uno.
  • Acceso a la cuenta de AWS a través de la consola de administración de AWS y la Interfaz de línea de comandos de AWS (AWS CLI). El Gestión de identidad y acceso de AWS (IAM) El usuario que utilice debe tener permisos para realizar las llamadas de servicio de AWS necesarias y administrar los recursos de AWS mencionados en esta publicación. Al otorgar permisos al usuario de IAM, siga las instrucciones principio del mínimo privilegio.
  • Git instalado.
  • Modelo de aplicación sin servidor de AWS (AWS SAM) instalado.
  • Estibador Debe estar instalado y funcionando.
  • Debe habilitar el acceso al modelo Cohere Command Light en la consola de Amazon Bedrock en la región de AWS donde va a ejecutar la plantilla de AWS SAM. Personalizaremos el modelo en esta demostración. Sin embargo, el flujo de trabajo se puede ampliar con cambios menores específicos del modelo para admitir la personalización de otros modelos compatibles. Consulte Amazon Bedrock guía del usuario Para obtener la lista completa de modelos compatibles para la personalización, no debe tener unidades de modelo reservadas para el modelo base para ejecutar esta demostración.

Preparación de la demostración

Los recursos de esta demostración se aprovisionarán en la región de AWS del este de EE. UU. (N. Virginia) (us-east-1). Recorreremos las siguientes fases para implementar nuestro flujo de trabajo de personalización de modelos:

  1. Implementar la solución utilizando la plantilla AWS SAM
  2. Subir datos de entrenamiento propietarios al depósito S3
  3. Ejecute el flujo de trabajo de Step Functions y monitoree
  4. Ver el resultado del entrenamiento del modelo de base
  5. Limpiar

Paso 1: Implementar la solución utilizando la plantilla AWS SAM

Consulte el repositorio de GitHub para obtener las instrucciones más recientes. Ejecute los pasos a continuación para implementar el flujo de trabajo de Step Functions mediante la plantilla de AWS SAM. Puede

  1. Crea un nuevo directorio, navega hasta ese directorio en una terminal y clona el repositorio de GitHub:
git clone https://github.com/aws-samples/amazon-bedrock-model-customization.git

  1. Cambiar el directorio al directorio de la solución:
cd amazon-bedrock-model-customization

  1. Ejecutar el build.sh para crear la imagen del contenedor.
  1. Cuando se le solicite, ingrese los siguientes valores de parámetros:
image_name=model-evaluation
repo_name=bedrock-model-customization
aws_account={your-AWS-account-id}
aws_region={your-region}

  1. Desde la línea de comandos, use AWS SAM para implementar los recursos de AWS para el patrón como se especifica en template.yml archivo:
  1. Proporcione las siguientes entradas cuando se le solicite:
Enter a stack name.
Enter us-east-1 or your AWS Region where you enabled Amazon Bedrock Cohere Command Light Model.
Enter SenderEmailId - Once the model customization is complete email will come from this email id. You need to have access to this mail id to verify the ownership.
Enter RecipientEmailId - User will be notified to this email id.
Enter ContainerImageURI - ContainerImageURI is available from the output of the `bash build.sh` step.
Keep default values for the remaining fields.

  1. Tenga en cuenta los resultados del proceso de implementación de SAM. Estos contienen los nombres de recursos y/o ARN que se utilizan en los pasos subsiguientes.

Paso 2: Cargue datos de entrenamiento patentados en el depósito S3

Nuestros datos de entrenamiento patentados se cargarán en el depósito S3 dedicado creado en el paso anterior y se usarán para ajustar el modelo Amazon Bedrock Cohere Command Light. Los datos de entrenamiento deben estar en Línea JSON formato con cada línea que contiene un JSON válido con dos atributos: solicitud y finalización.

solía Este conjunto de datos públicos de HuggingFace y lo convertí al formato de línea JSON.

  1. Sube los archivos de datos de entrenamiento proporcionados al depósito S3 utilizando el siguiente comando. Reemplazar TrainingDataBucket con el valor de la sam deploy --guided Salida. Actualizar your-region con la Región que proporcionó al ejecutar la plantilla SAM.
aws s3 cp training-data.jsonl s3://{TrainingDataBucket}/training-data.jsonl --region {your-region}

  1. Subir el validation-data.json archivo al depósito S3 utilizando el comando que sigue. Reemplace ValidationDataBucket con el valor de la sam deploy --guided Salida. Actualizar your-region con la región que proporcionó al ejecutar la plantilla SAM:
aws s3 cp validation-data.json s3://{ValidationDataBucket}/validation-data.json --region {your-region}

  1. Subir el reference-inference.json archivo al depósito S3 utilizando el comando que sigue. Reemplace ValidationDataBucket con el valor de la sam deploy --guided Salida. Actualizar your-region con la región que proporcionó al ejecutar la plantilla SAM.
aws s3 cp reference-inference.json s3://{ValidationDataBucket}/reference-inference.json --region {your-region}

  1. También debería haber recibido un correo electrónico para verificar la dirección de correo electrónico del remitente. Verifique la dirección de correo electrónico siguiendo las instrucciones que se indican en el correo electrónico.

Solicitud de verificación de dirección de correo electrónico

Paso 3: Ejecute el flujo de trabajo de Step Functions y monitoree

Ahora iniciaremos la máquina de estados de Step Functions para ajustar el modelo Cohere Command Light en Amazon Bedrock en función de los datos de entrenamiento cargados en el depósito S3 en el paso anterior. También pasaremos los hiperparámetros. Siéntete libre de cambiarlos.

  1. Ejecute el siguiente comando de AWS CLI para iniciar el flujo de trabajo de Step Functions. Reemplace StateMachineCustomizeBedrockModelArn y TrainingDataBucket con los valores de la sam deploy --guided Salida. Reemplazar UniqueModelName y UniqueJobName con valores únicos. Cambie los valores de los hiperparámetros en función del modelo seleccionado. Actualizar your-region con la región que proporcionó al ejecutar la plantilla SAM.
aws stepfunctions start-execution --state-machine-arn "{StateMachineCustomizeBedrockModelArn}" --input "{\"BaseModelIdentifier\": \"cohere.command-light-text-v14:7:4k\",\"CustomModelName\": \"{UniqueModelName}\",\"JobName\": \"{UniqueJobName}\", \"HyperParameters\": {\"evalPercentage\": \"20.0\", \"epochCount\": \"1\", \"batchSize\": \"8\", \"earlyStoppingPatience\": \"6\", \"earlyStoppingThreshold\": \"0.01\", \"learningRate\": \"0.00001\"},\"TrainingDataFileName\": \"training-data.jsonl\"}" --region {your-region}

Ejemplo de salida:

{
"executionArn": "arn:aws:states:{your-region}:123456789012:execution:{stack-name}-wcq9oavUCuDH:2827xxxx-xxxx-xxxx-xxxx-xxxx6e369948",
"startDate": "2024-01-28T08:00:26.030000+05:30"
}

La personalización y evaluación del modelo básico puede tardar entre 1 y 1,5 horas en completarse. Recibirá un correo electrónico de notificación una vez que se complete la personalización.

  1. Ejecute el siguiente comando de AWS CLI o inicie sesión en Consola de AWS Step Functions para comprobar el estado del flujo de trabajo de Step Functions. Espere hasta que el flujo de trabajo se complete correctamente. Reemplace el executionArn Desde el paso anterior salida y actualización your-region.
aws stepfunctions describe-execution --execution-arn {executionArn} --query status --region {your-region}

Paso 4: Ver el resultado del entrenamiento del modelo de base

Una vez que el flujo de trabajo de Step Functions se complete correctamente, recibirá un correo electrónico con el resultado de la calidad del modelo personalizado. Si el modelo personalizado no tiene un mejor rendimiento que el modelo base, se eliminará el rendimiento proporcionado. A continuación, se incluye un correo electrónico de muestra:

Personalización del modelo completa

Si la calidad de la respuesta de inferencia no es satisfactoria, deberá volver a entrenar el modelo base según los datos de entrenamiento o hiperparámetros actualizados.

Ver el ModelInferenceBucket para las inferencias generadas tanto desde el modelo base como desde el modelo personalizado.

Paso 5: Limpieza

La desactivación adecuada de los recursos de AWS aprovisionados es una práctica recomendada importante para optimizar los costos y mejorar la seguridad después de concluir las pruebas de concepto y las demostraciones. Los siguientes pasos eliminarán los componentes de infraestructura implementados anteriormente en esta publicación:

  1. Elimine el rendimiento aprovisionado de Amazon Bedrock del modo personalizado. Asegúrese de que la configuración sea correcta. ProvisionedModelArn Se proporciona para evitar una eliminación accidental no deseada. También se actualiza your-region.
aws bedrock delete-provisioned-model-throughput --provisioned-model-id {ProvisionedModelArn} --region {your-region}

  1. Elimine el modelo personalizado de Amazon Bedrock. Asegúrese de que la configuración sea correcta. CustomModelName Se proporciona para evitar la eliminación accidental no deseada. También se actualiza your-region.
aws bedrock delete-custom-model --model-identifier {CustomModelName} --region {your-region}

  1. Elimine el contenido del depósito S3 con el siguiente comando. Asegúrese de proporcionar el nombre de depósito correcto para evitar la pérdida accidental de datos:
aws s3 rm s3://{TrainingDataBucket} --recursive --region {your-region}
aws s3 rm s3://{CustomizationOutputBucket} --recursive --region {your-region}
aws s3 rm s3://{ValidationDataBucket} --recursive --region {your-region}
aws s3 rm s3://{ModelInferenceBucket} --recursive --region {your-region}

  1. Para eliminar los recursos implementados en su cuenta de AWS a través de AWS SAM, ejecute el siguiente comando:

Conclusión

En esta publicación se describe un flujo de trabajo de principio a fin para personalizar un modelo de Amazon Bedrock utilizando AWS Step Functions como motor de orquestación. El flujo de trabajo automatizado entrena el modelo base con datos personalizados y ajusta los hiperparámetros. Luego, evalúa el rendimiento del modelo personalizado en comparación con el modelo base para determinar la eficacia del entrenamiento. Una vez finalizado, se notifica al usuario por correo electrónico los resultados del entrenamiento.

La personalización de modelos de lenguaje de gran tamaño requiere de infraestructura y experiencia especializada en aprendizaje automático. Los servicios de AWS como Amazon Bedrock y Step Functions eliminan estas complejidades para que las empresas puedan centrarse en sus datos y casos de uso exclusivos. Al contar con un flujo de trabajo automatizado para la personalización y la evaluación, los clientes pueden personalizar los modelos según sus necesidades con mayor rapidez y con menos desafíos operativos.

Estudio adicional


Sobre el Autor

Biswanath Mukherjee es arquitecto de soluciones sénior en Amazon Web Services. Trabaja con grandes clientes estratégicos de AWS proporcionándoles orientación técnica para migrar y modernizar sus aplicaciones en la nube de AWS. Gracias a su amplia experiencia en arquitectura y migración de la nube, colabora con los clientes para desarrollar soluciones innovadoras que aprovechen la escalabilidad, la confiabilidad y la agilidad de AWS para satisfacer sus necesidades comerciales. Su experiencia abarca diversas industrias y casos de uso, lo que permite a los clientes aprovechar todo el potencial de la nube de AWS.