Logotipo de Zephyrnet

Aloje el modelo Whisper en Amazon SageMaker: explorando opciones de inferencia | Servicios web de Amazon

Fecha:

Susurro de OpenAI Es un modelo avanzado de reconocimiento automático de voz (ASR) con licencia MIT. La tecnología ASR resulta útil en servicios de transcripción, asistentes de voz y mejora de la accesibilidad para personas con discapacidad auditiva. Este modelo de última generación se basa en un amplio y diverso conjunto de datos supervisados ​​multilingües y multitarea recopilados de la web. Su alta precisión y adaptabilidad lo convierten en un activo valioso para una amplia gama de tareas relacionadas con la voz.

En el panorama en constante evolución del aprendizaje automático y la inteligencia artificial, Amazon SageMaker proporciona un ecosistema integral. SageMaker permite a los científicos, desarrolladores y organizaciones de datos desarrollar, entrenar, implementar y gestionar modelos de aprendizaje automático a escala. Al ofrecer una amplia gama de herramientas y capacidades, simplifica todo el flujo de trabajo del aprendizaje automático, desde el preprocesamiento de datos y el desarrollo de modelos hasta la implementación y el monitoreo sin esfuerzo. La interfaz fácil de usar de SageMaker la convierte en una plataforma fundamental para desbloquear todo el potencial de la IA, consolidándola como una solución revolucionaria en el ámbito de la inteligencia artificial.

En esta publicación, nos embarcamos en una exploración de las capacidades de SageMaker, centrándonos específicamente en alojar modelos de Whisper. Profundizaremos en dos métodos para hacer esto: uno que utiliza el modelo Whisper PyTorch y el otro que utiliza la implementación Hugging Face del modelo Whisper. Además, realizaremos un examen en profundidad de las opciones de inferencia de SageMaker, comparándolas entre parámetros como velocidad, costo, tamaño de carga útil y escalabilidad. Este análisis permite a los usuarios tomar decisiones informadas al integrar los modelos Whisper en sus casos de uso y sistemas específicos.

Resumen de la solución

El siguiente diagrama muestra los componentes principales de esta solución.

  1. Para alojar el modelo en Amazon SageMaker, el primer paso es guardar los artefactos del modelo. Estos artefactos se refieren a los componentes esenciales de un modelo de aprendizaje automático necesarios para diversas aplicaciones, incluida la implementación y el reentrenamiento. Pueden incluir parámetros del modelo, archivos de configuración, componentes de preprocesamiento, así como metadatos, como detalles de la versión, autoría y cualquier nota relacionada con su rendimiento. Es importante tener en cuenta que los modelos Whisper para las implementaciones de PyTorch y Hugging Face constan de diferentes artefactos de modelo.
  2. A continuación, creamos scripts de inferencia personalizados. Dentro de estos scripts, definimos cómo se debe cargar el modelo y especificamos el proceso de inferencia. Aquí también es donde podemos incorporar parámetros personalizados según sea necesario. Además, puede enumerar los paquetes de Python necesarios en un requirements.txt archivo. Durante la implementación del modelo, estos paquetes de Python se instalan automáticamente en la fase de inicialización.
  3. Luego seleccionamos los contenedores de aprendizaje profundo (DLC) PyTorch o Hugging Face proporcionados y mantenidos por AWS. Estos contenedores son imágenes de Docker prediseñadas con marcos de aprendizaje profundo y otros paquetes de Python necesarios. Para más información puedes consultar esto liga.
  4. Con los artefactos del modelo, los scripts de inferencia personalizados y los DLC seleccionados, crearemos modelos de Amazon SageMaker para PyTorch y Hugging Face respectivamente.
  5. Finalmente, los modelos se pueden implementar en SageMaker y usarse con las siguientes opciones: puntos finales de inferencia en tiempo real, trabajos de transformación por lotes y puntos finales de inferencia asincrónica. Analizaremos estas opciones con más detalle más adelante en esta publicación.

El cuaderno de ejemplo y el código para esta solución están disponibles en este Repositorio GitHub.

Figura 1. Descripción general de los componentes clave de la solución

Tutorial

Alojamiento del modelo Whisper en Amazon SageMaker

En esta sección, explicaremos los pasos para alojar el modelo Whisper en Amazon SageMaker, utilizando PyTorch y Hugging Face Frameworks, respectivamente. Para experimentar con esta solución, necesita una cuenta de AWS y acceso al servicio Amazon SageMaker.

Marco PyTorch

  1. Guardar artefactos del modelo

La primera opción para alojar el modelo es utilizar el Paquete oficial de Python de Whisper, que se puede instalar usando pip install openai-whisper. Este paquete proporciona un modelo de PyTorch. Al guardar artefactos del modelo en el repositorio local, el primer paso es guardar los parámetros que se pueden aprender del modelo, como los pesos del modelo y los sesgos de cada capa en la red neuronal, como un archivo "pt". Puede elegir entre diferentes tamaños de modelo, incluidos "pequeño", "básico", "pequeño", "mediano" y "grande". Los tamaños de modelo más grandes ofrecen un rendimiento de mayor precisión, pero tienen el costo de una latencia de inferencia más larga. Además, debe guardar el diccionario de estado del modelo y el diccionario de dimensiones, que contienen un diccionario de Python que asigna cada capa o parámetro del modelo de PyTorch a sus parámetros aprendibles correspondientes, junto con otros metadatos y configuraciones personalizadas. El siguiente código muestra cómo guardar los artefactos de Whisper PyTorch.

### PyTorch
import whisper
# Load the PyTorch model and save it in the local repo
model = whisper.load_model("base")
torch.save(
    {
        'model_state_dict': model.state_dict(),
        'dims': model.dims.__dict__,
    },
    'base.pt'
)

  1. Seleccionar contenido descargable

El siguiente paso es seleccionar el DLC prediseñado de este liga. Tenga cuidado al elegir la imagen correcta considerando las siguientes configuraciones: marco (PyTorch), versión del marco, tarea (inferencia), versión de Python y hardware (es decir, GPU). Se recomienda utilizar las últimas versiones del marco y de Python siempre que sea posible, ya que esto da como resultado un mejor rendimiento y soluciona problemas y errores conocidos de versiones anteriores.

  1. Crear modelos de Amazon SageMaker

A continuación, utilizamos el SDK de SageMaker Python para crear modelos de PyTorch. Es importante recordar agregar variables de entorno al crear un modelo de PyTorch. De forma predeterminada, TorchServe solo puede procesar archivos de hasta 6 MB, independientemente del tipo de inferencia utilizado.

# Create a PyTorchModel for deployment
from sagemaker.pytorch.model import PyTorchModel

whisper_pytorch_model = PyTorchModel(
    model_data=model_uri,
    image_uri=image,
    role=role,
    entry_point="inference.py",
    source_dir='code',
    name=model_name,
    env = {
        'TS_MAX_REQUEST_SIZE': '100000000',
        'TS_MAX_RESPONSE_SIZE': '100000000',
        'TS_DEFAULT_RESPONSE_TIMEOUT': '1000'
    }
)

La siguiente tabla muestra la configuración para diferentes versiones de PyTorch:

Marco conceptual Variables de entorno
PyTorch 1.8 (basado en TorchServe) "TS_MAX_REQUEST_SIZE':'100000000'
"TS_MAX_RESPONSE_SIZE':'100000000'
"TS_DEFAULT_RESPONSE_TIMEOUT':'1000'
PyTorch 1.4 (basado en MMS) "MMS_MAX_REQUEST_SIZE':'1000000000'
"MMS_MAX_RESPONSE_SIZE':'1000000000'
"MMS_DEFAULT_RESPONSE_TIMEOUT':'900'
  1. Defina el método de carga del modelo en inference.py

En la costumbre inference.py script, primero verificamos la disponibilidad de una GPU compatible con CUDA. Si dicha GPU está disponible, asignamos la 'cuda' dispositivo al DEVICE variable; de lo contrario, asignamos el 'cpu' dispositivo. Este paso garantiza que el modelo se coloque en el hardware disponible para un cálculo eficiente. Cargamos el modelo PyTorch usando el paquete Whisper Python.

### PyTorch
DEVICE = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
def model_fn(model_dir):
    """
    Load and return the model
    """
    model = whisper.load_model(os.path.join(model_dir, 'base.pt'))
    model = model.to(DEVICE)
    return model

Marco de cara abrazada

  1. Guardar artefactos del modelo

La segunda opción es usar Abrazando el susurro de la cara implementación. El modelo se puede cargar usando el AutoModelForSpeechSeq2Seq Clase de transformadores. Los parámetros que se pueden aprender se guardan en un archivo binario (bin) usando el save_pretrained método. El tokenizador y el preprocesador también deben guardarse por separado para garantizar que el modelo Hugging Face funcione correctamente. Alternativamente, puede implementar un modelo en Amazon SageMaker directamente desde Hugging Face Hub configurando dos variables de entorno: HF_MODEL_ID y HF_TASK. Para obtener más información, consulte este página web.

### Hugging Face
from transformers import WhisperTokenizer, WhisperProcessor, AutoModelForSpeechSeq2Seq

# Load the pre-trained model
model_name = "openai/whisper-base"
model = AutoModelForSpeechSeq2Seq.from_pretrained(model_name)
tokenizer = WhisperTokenizer.from_pretrained(model_name)
processor = WhisperProcessor.from_pretrained(model_name)

# Define a directory where you want to save the model
save_directory = "./model"

# Save the model to the specified directory
model.save_pretrained(save_directory)
tokenizer.save_pretrained(save_directory)
processor.save_pretrained(save_directory)

  1. Seleccionar contenido descargable

De manera similar al marco PyTorch, puede elegir un DLC Hugging Face prediseñado del mismo liga. Asegúrese de seleccionar un DLC que admita los últimos transformadores de Hugging Face e incluya compatibilidad con GPU.

  1. Crear modelos de Amazon SageMaker

De manera similar, utilizamos el SDK de SageMaker Python para crear modelos de cara abrazada. El modelo Hugging Face Whisper tiene una limitación predeterminada por la que solo puede procesar segmentos de audio de hasta 30 segundos. Para abordar esta limitación, puede incluir el chunk_length_s parámetro en la variable de entorno al crear el modelo Hugging Face y luego pasar este parámetro al script de inferencia personalizado al cargar el modelo. Por último, configure las variables de entorno para aumentar el tamaño de la carga útil y el tiempo de espera de respuesta para el contenedor Hugging Face.

# Create a HuggingFaceModel for deployment
from sagemaker.huggingface.model import HuggingFaceModel

whisper_hf_model = HuggingFaceModel(
    model_data=model_uri,
    role=role, 
    image_uri = image,
    entry_point="inference.py",
    source_dir='code',
    name=model_name,
    env = {
        "chunk_length_s":"30",
        'MMS_MAX_REQUEST_SIZE': '2000000000',
        'MMS_MAX_RESPONSE_SIZE': '2000000000',
        'MMS_DEFAULT_RESPONSE_TIMEOUT': '900'
    }
)

Marco conceptual Variables de entorno

Contenedor de inferencia HuggingFace

(basado en MMS)

"MMS_MAX_REQUEST_SIZE':'2000000000'
"MMS_MAX_RESPONSE_SIZE':'2000000000'
"MMS_DEFAULT_RESPONSE_TIMEOUT':'900'
  1. Defina el método de carga del modelo en inference.py

Al crear un script de inferencia personalizado para el modelo Hugging Face, utilizamos una canalización que nos permite pasar el chunk_length_s como parámetro. Este parámetro permite que el modelo procese eficientemente archivos de audio largos durante la inferencia.

### Hugging Face
DEVICE = "cuda:0" if torch.cuda.is_available() else "cpu"
chunk_length_s = int(os.environ.get('chunk_length_s'))
def model_fn(model_dir):
    """
    Load and return the model
    """
    model = pipeline(
        "automatic-speech-recognition",
        model=model_dir,
        chunk_length_s=chunk_length_s,
        device=DEVICE,
        )
    return model

Explorando diferentes opciones de inferencia en Amazon SageMaker

Los pasos para seleccionar opciones de inferencia son los mismos para los modelos PyTorch y Hugging Face, por lo que no los diferenciaremos a continuación. Sin embargo, vale la pena señalar que, al momento de escribir esta publicación, el inferencia sin servidor La opción de SageMaker no admite GPU y, como resultado, excluimos esta opción para este caso de uso.

  1. Inferencia en tiempo real

Podemos implementar el modelo como un punto final en tiempo real, proporcionando respuestas en milisegundos. Sin embargo, es importante tener en cuenta que esta opción se limita a procesar entradas de menos de 6 MB. Definimos el serializador como un serializador de audio, que es responsable de convertir los datos de entrada a un formato adecuado para el modelo implementado. Utilizamos una instancia de GPU para la inferencia, lo que permite el procesamiento acelerado de archivos de audio. La entrada de inferencia es un archivo de audio que proviene del repositorio local.

from sagemaker.serializers import DataSerializer
from sagemaker.deserializers import JSONDeserializer

# Define serializers and deserializer
audio_serializer = DataSerializer(content_type="audio/x-audio")
deserializer = JSONDeserializer()

# Deploy the model for real-time inference
endpoint_name = f'whisper-real-time-endpoint-{id}'

real_time_predictor = whisper_model.deploy(
    initial_instance_count=1,
    instance_type="ml.g4dn.xlarge",
    endpoint_name = endpoint_name,
    serializer=audio_serializer,
    deserializer = deserializer
    )

# Perform real-time inference
audio_path = "sample_audio.wav" 
response = real_time_predictor.predict(data=audio_path)

  1. Trabajo de transformación por lotes

La segunda opción de inferencia es el trabajo de transformación por lotes, que es capaz de procesar cargas útiles de entrada de hasta 100 MB. Sin embargo, este método puede tardar unos minutos de latencia. Cada instancia puede manejar solo una solicitud por lotes a la vez, y el inicio y cierre de la instancia también requieren unos minutos. Los resultados de la inferencia se guardan en un Amazon Simple Storage Service (Amazon S3) depósito al finalizar el trabajo de transformación por lotes.

Al configurar el transformador por lotes, asegúrese de incluir max_payload = 100 para manejar cargas útiles más grandes de manera efectiva. La entrada de inferencia debe ser la ruta de Amazon S3 a un archivo de audio o una carpeta de Amazon S3 Bucket que contenga una lista de archivos de audio, cada uno con un tamaño inferior a 100 MB.

Batch Transform divide los objetos de Amazon S3 en la entrada por clave y asigna objetos de Amazon S3 a instancias. Por ejemplo, cuando tiene varios archivos de audio, una instancia puede procesar input1.wav y otra instancia puede procesar el archivo denominado input2.wav para mejorar la escalabilidad. La transformación por lotes le permite configurar max_concurrent_transforms para aumentar la cantidad de solicitudes HTTP realizadas a cada contenedor de transformador individual. Sin embargo, es importante tener en cuenta que el valor de (max_concurrent_transforms* max_payload) no debe exceder los 100 MB.

# Create a transformer
whisper_transformer = whisper_model.transformer(
    instance_count = 1,
    instance_type = "ml.g4dn.xlarge", 
    output_path="s3://{}/{}/batch-transform/".format(bucket, prefix),
    max_payload = 100
)
# Start batch transform job
whisper_transformer.transform(data = data, job_name= job_name, wait = False)

  1. inferencia asíncrona

Por último, Amazon SageMaker Asynchronous Inference es ideal para procesar múltiples solicitudes simultáneamente, ya que ofrece una latencia moderada y admite cargas útiles de entrada de hasta 1 GB. Esta opción proporciona una excelente escalabilidad, permitiendo la configuración de un grupo de escalado automático para el punto final. Cuando se produce un aumento de solicitudes, se amplía automáticamente para manejar el tráfico y, una vez que se procesan todas las solicitudes, el punto final se reduce a 0 para ahorrar costos.

Mediante la inferencia asincrónica, los resultados se guardan automáticamente en un depósito de Amazon S3. En el AsyncInferenceConfig, puede configurar notificaciones para finalizaciones exitosas o fallidas. La ruta de entrada apunta a una ubicación de Amazon S3 del archivo de audio. Para obtener detalles adicionales, consulte el código en GitHub.

from sagemaker.async_inference import AsyncInferenceConfig

# Create an AsyncInferenceConfig object
async_config = AsyncInferenceConfig(
    output_path=f"s3://{bucket}/{prefix}/output", 
    max_concurrent_invocations_per_instance = 4,
    # notification_config = {
            #   "SuccessTopic": "arn:aws:sns:us-east-2:123456789012:MyTopic",
            #   "ErrorTopic": "arn:aws:sns:us-east-2:123456789012:MyTopic",
    #}, #  Notification configuration 
)

# Deploy the model for async inference
endpoint_name = f'whisper-async-endpoint-{id}'
async_predictor = whisper_model.deploy(
    async_inference_config=async_config,
    initial_instance_count=1, 
    instance_type ='ml.g4dn.xlarge',
    endpoint_name = endpoint_name
)

# Perform async inference
initial_args = {'ContentType':"audio/x-audio"}
response = async_predictor.predict_async(initial_args = initial_args, input_path=input_path)

Opcional: Como se mencionó anteriormente, tenemos la opción de configurar un grupo de escalado automático para el punto final de inferencia asincrónica, lo que le permite manejar un aumento repentino en las solicitudes de inferencia. En este se proporciona un ejemplo de código. Repositorio GitHub. En el siguiente diagrama, puede observar un gráfico de líneas que muestra dos métricas de Reloj en la nube de Amazon: ApproximateBacklogSize y ApproximateBacklogSizePerInstance. Inicialmente, cuando se activaron 1000 solicitudes, solo había una instancia disponible para manejar la inferencia. Durante tres minutos, el tamaño del trabajo pendiente superó consistentemente tres (tenga en cuenta que estos números se pueden configurar) y el grupo de escalado automático respondió activando instancias adicionales para eliminar el trabajo pendiente de manera eficiente. Esto resultó en una disminución significativa en la ApproximateBacklogSizePerInstance, lo que permite que las solicitudes pendientes se procesen mucho más rápido que durante la fase inicial.

Figura 2. Gráfico de líneas que ilustra los cambios temporales en las métricas de Amazon CloudWatch

Análisis comparativo de las opciones de inferencia.

Las comparaciones de diferentes opciones de inferencia se basan en casos de uso comunes de procesamiento de audio. La inferencia en tiempo real ofrece la velocidad de inferencia más rápida pero restringe el tamaño de la carga útil a 6 MB. Este tipo de inferencia es adecuado para sistemas de comando de audio, donde los usuarios controlan o interactúan con dispositivos o software mediante comandos de voz o instrucciones habladas. Los comandos de voz suelen ser de tamaño pequeño y una baja latencia de inferencia es crucial para garantizar que los comandos transcritos puedan desencadenar rápidamente acciones posteriores. Batch Transform es ideal para tareas programadas sin conexión, cuando el tamaño de cada archivo de audio es inferior a 100 MB y no hay requisitos específicos para tiempos de respuesta de inferencia rápidos. La inferencia asincrónica permite cargas de hasta 1 GB y ofrece una latencia de inferencia moderada. Este tipo de inferencia es adecuado para transcribir películas, series de televisión y conferencias grabadas donde es necesario procesar archivos de audio más grandes.

Tanto las opciones de inferencia asincrónica como en tiempo real brindan capacidades de escalamiento automático, lo que permite que las instancias de punto final aumenten o reduzcan automáticamente según el volumen de solicitudes. En los casos en los que no hay solicitudes, el ajuste de escala automático elimina instancias innecesarias, lo que le ayuda a evitar costos asociados con instancias aprovisionadas que no están en uso activo. Sin embargo, para la inferencia en tiempo real, se debe conservar al menos una instancia persistente, lo que podría generar costos más altos si el punto final opera continuamente. Por el contrario, la inferencia asincrónica permite que el volumen de la instancia se reduzca a 0 cuando no está en uso. Al configurar un trabajo de transformación por lotes, es posible utilizar varias instancias para procesar el trabajo y ajustar max_concurrent_transforms para permitir que una instancia maneje múltiples solicitudes. Por tanto, las tres opciones de inferencia ofrecen una gran escalabilidad.

Limpiar

Una vez que haya terminado de utilizar la solución, asegúrese de eliminar los puntos finales de SageMaker para evitar incurrir en costos adicionales. Puede utilizar el código proporcionado para eliminar puntos finales de inferencia asincrónica y en tiempo real, respectivamente.

# Delete real-time inference endpoint
real_time_predictor.delete_endpoint()

# Delete asynchronous inference endpoint
async_predictor.delete_endpoint()

Conclusión

En esta publicación, le mostramos cómo la implementación de modelos de aprendizaje automático para el procesamiento de audio se ha vuelto cada vez más esencial en diversas industrias. Tomando el modelo Whisper como ejemplo, demostramos cómo alojar modelos ASR de código abierto en Amazon SageMaker utilizando enfoques PyTorch o Hugging Face. La exploración abarcó varias opciones de inferencia en Amazon SageMaker, ofreciendo información sobre el manejo eficiente de datos de audio, la realización de predicciones y la gestión de costos de manera efectiva. Esta publicación tiene como objetivo proporcionar conocimientos a investigadores, desarrolladores y científicos de datos interesados ​​en aprovechar el modelo Whisper para tareas relacionadas con el audio y tomar decisiones informadas sobre estrategias de inferencia.

Para obtener información más detallada sobre la implementación de modelos en SageMaker, consulte este Guía para desarrolladores. Además, el modelo Whisper se puede implementar mediante SageMaker JumpStart. Para obtener detalles adicionales, consulte el Los modelos Whisper para reconocimiento automático de voz ahora están disponibles en Amazon SageMaker JumpStart enviar.

No dudes en consultar el cuaderno y el código de este proyecto en GitHub y comparte tu comentario con nosotros.


Sobre la autora

Ying Hou, doctorado, es arquitecto de creación de prototipos de aprendizaje automático en AWS. Sus principales áreas de interés abarcan el aprendizaje profundo, con especial atención en GenAI, visión por computadora, PNL y predicción de datos de series temporales. En su tiempo libre, disfruta pasar momentos de calidad con su familia, sumergirse en novelas y hacer senderismo en los parques nacionales del Reino Unido.

punto_img

Información más reciente

punto_img