Implemente Voxtral de Mistral AI en Amazon SageMaker AI
Configure su modelo en code/serving.properties: Para implementar Voxtral-Mini, use el siguiente código:

option.model_id=mistralai/Voxtral-Mini-3B-2507 option.tensor_parallel_grado=1

Para implementar Voxtral-Small, utilice el siguiente código:

option.model_id=mistralai/Voxtral-Small-24B-2507 option.tensor_parallel_grado=4

Abra y ejecute Voxtral-vLLM-BYOC-SageMaker.ipynb para implementar su punto final y probar con texto, audio y capacidades de llamada de funciones.

Configuración del contenedor Docker

El repositorio de GitHub contiene el Dockerfile completo. El siguiente fragmento de código destaca las partes clave:

# Contenedor vLLM personalizado para la implementación del modelo Voxtral en SageMaker FROM –platform=linux/amd64 vllm/vllm-openai:latest # Establecer variables de entorno para SageMaker ENV MODEL_CACHE_DIR=/opt/ml/model ENV TRANSFORMERS_CACHE=/tmp/transformers_cache ENV HF_HOME=/tmp/hf_home ENV VLLM_WORKER_MULTIPROC_METHOD=spawn # Instalar dependencias de procesamiento de audio EJECUTAR pip install –no-cache-dir \ “mistral_common>=1.8.1” \ librosa>=0.10.2 \ soundfile>=0.12.1 \ pydub>=0.25.1

Este Dockerfile crea un contenedor especializado que amplía el servidor vLLM oficial con capacidades específicas de Voxtral agregando bibliotecas de procesamiento de audio esenciales (mistral_common para tokenización, librosa/soundfile/pydub para manejo de audio) mientras configura las variables de entorno de SageMaker adecuadas para la carga y el almacenamiento en caché del modelo. El enfoque separa la infraestructura de la lógica empresarial al mantener el contenedor genérico y permitir que SageMaker inyecte dinámicamente código específico del modelo (model.py y server.properties) desde Amazon S3 en tiempo de ejecución, lo que permite una implementación flexible de diferentes variantes de Voxtral sin necesidad de reconstruir el contenedor.

Configuraciones del modelo

Las configuraciones completas del modelo se encuentran en el archivo server.properties ubicado en la carpeta de códigos. El siguiente fragmento de código resalta las configuraciones clave:

# Configuración del modelo option.model_id=mistralai/Voxtral-Small-24B-2507 option.tensor_parallel_title=4 option.dtype=bfloat16 # Configuraciones específicas de Voxtral (según la documentación oficial) option.tokenizer_mode=mistral option.config_format=mistral option.load_format=mistral option.trust_remote_code=true # Procesamiento de audio (especificaciones de Voxtral) option.limit_mm_per_prompt=audio:8 option.mm_processor_kwargs={“audio_sampling_rate”: 16000, “audio_max_length”: 1800.0} # Optimizaciones de rendimiento (funciones de vLLM v0.10.0+) option.enable_chunked_prefill=true option.enable_prefix_caching=true option.use_v2_block_manager=true

Este archivo de configuración proporciona optimizaciones específicas de Voxtral que siguen las recomendaciones oficiales de Mistral para la implementación del servidor vLLM, la configuración de modos de tokenización adecuados, parámetros de procesamiento de audio (que admiten hasta ocho archivos de audio por mensaje con capacidad de transcripción de 30 minutos) y el uso de las funciones de rendimiento más recientes de vLLM v0.10.0+, como precarga fragmentada y almacenamiento en caché de prefijos. El diseño modular admite una conmutación perfecta entre Voxtral-Mini y Voxtral-Small simplemente cambiando los parámetros model_id y tensor_parallel_grado, manteniendo al mismo tiempo una utilización óptima de la memoria y habilitando mecanismos de almacenamiento en caché avanzados para mejorar el rendimiento de la inferencia.

Controlador de inferencia personalizado

El código de inferencia personalizado completo se encuentra en el archivo model.py ubicado en la carpeta de códigos. El siguiente fragmento de código resalta las funciones clave:

# Aplicación FastAPI para la aplicación de compatibilidad de SageMaker = FastAPI(title=”Voxtral vLLM Inference Server”, version=”1.1.0″) model_engine = Ninguno # Inicialización del servidor vLLM para Voxtral def start_vllm_server(): “””Iniciar el servidor vLLM con una configuración específica de Voxtral””” config = load_serving_properties() cmd = [
“vllm”, “serve”, config.get(“option.model_id”),
“–tokenizer-mode”, “mistral”,
“–config-format”, “mistral”,
“–tensor-parallel-size”, config.get(“option.tensor_parallel_degree”),
“–host”, “127.0.0.1”,
“–port”, “8000”
]

vllm_server_process = subprocess.Popen(cmd, env=vllm_env) server_ready = wait_for_server() return server_ready @app.post(“/invocations”) async def invoke_model(solicitud: Solicitud): “””Manejar chat, transcripción y llamadas a funciones””” # Solicitudes de transcripción si “transcripción” en request_data: audio_source = request_data[“transcription”][“audio”]

return transcribe_audio(audio_source) # Solicitudes de chat con mensajes de soporte multimodal = format_messages_for_openai(request_data[“messages”]) herramientas = request_data.get(“herramientas”) # Generar mediante vLLM Respuesta del cliente OpenAI = openai_client.chat.completions.create( model=model_config[“model_id”]mensajes=mensajes, herramientas=herramientas si admite_función_llamada() de lo contrario Ninguno) devolver respuesta

Este controlador de inferencia personalizado crea un servidor basado en FastAPI que se integra directamente con el servidor vLLM para un rendimiento óptimo de Voxtral. El controlador procesa contenido multimodal, incluido audio codificado en base64 y URL de audio, carga dinámicamente configuraciones de modelo desde el archivo server.properties y admite funciones avanzadas como llamadas a funciones para implementaciones Voxtral-Small.

Código de implementación de SageMaker

El cuaderno Voxtral-vLLM-BYOC-SageMaker.ipynb incluido en la carpeta Voxtral-vllm-byoc organiza todo el proceso de implementación para ambos modelos de Voxtral:

importar boto3 importar sagemaker desde sagemaker.model importar modelo # Inicializar sesión de SageMaker sagemaker_session = sagemaker.Session() role = sagemaker.get_execution_role() bucket = “your-s3-bucket” # Cargar artefactos del modelo a S3 byoc_config_uri = sagemaker_session.upload_data( path=”./code”, bucket=bucket, key_prefix=”voxtral-vllm-byoc/code” ) # Configurar la imagen del contenedor personalizado account_id = boto3.client(‘sts’).get_caller_identity()[‘Account’]
región = boto3.Session().nombre_región image_uri = f”{account_id}.dkr.ecr. {region}.amazonaws.com/voxtral-vllm-byoc:latest” # Crear modelo de SageMaker voxtral_model = Model( image_uri=image_uri, model_data={ “S3DataSource”: { “S3Uri”: f”{byoc_config_uri}/”, “S3DataType”: “S3Prefix”, “CompressionType”: “None” } }, role=role, env={ ‘MODEL_CACHE_DIR’: ‘/opt/ml/model’, ‘TRANSFORMERS_CACHE’: ‘/tmp/transformers_cache’, ‘SAGEMAKER_BIND_TO_PORT’: ‘8080’ } ) # Implementar en el punto final predictor = voxtral_model.deploy( inicial_instance_count=1, instancia_type=”ml.g6.12xlarge”, # Para Voxtral-Small container_startup_health_check_timeout=1200, wait=True)

Casos de uso del modelo

Los modelos Voxtral admiten varios casos de uso de texto y de voz a texto, y el modelo Voxtral-Small admite el uso de herramientas con entrada de voz. Consulte el repositorio de GitHub para obtener el código completo. En esta sección, proporcionamos fragmentos de código para diferentes casos de uso que admite el modelo.

Sólo texto

El siguiente código muestra una conversación básica basada en texto con el modelo. El usuario envía una consulta de texto y recibe una respuesta estructurada:

carga útil = { “mensajes”: [
{
“role”: “user”,
“content”: “Hello! Can you tell me about the advantages of using vLLM for model inference?”
}
]”max_tokens”: 200, “temperatura”: 0,2, “top_p”: 0,95 } respuesta = predictor.predict(carga útil)

Sólo transcripción

El siguiente ejemplo se centra en la transcripción de voz a texto estableciendo la temperatura en 0 para una salida determinista. El modelo procesa la URL de un archivo de audio o un archivo de audio convertido a código base64 y luego devuelve el texto transcrito sin interpretación adicional:

carga útil = { “transcripción”: { “audio”: “https://audiocdn.frenchtoday.com/file/ft-public-files/audiobook-samples/AMPFE/AMP%20FE%20Ch%2002%20Story%20Slower.mp3”, “idioma”: “fr”, “temperatura”: 0.0 } } respuesta = predictor.predict(carga útil)

Comprensión de texto y audio.

El siguiente código combina instrucciones de texto y entrada de audio para el procesamiento multimodal. El modelo puede seguir comandos de texto específicos mientras analiza el archivo de audio proporcionado en una sola pasada de inferencia, lo que permite interacciones más complejas como transcripción guiada o tareas de análisis de audio:

carga útil = { “mensajes”: [
{
“role”: “user”,
“content”: [
{
“type”: “text”,
“text”: “Can you summarise this audio file”
},
{
“type”: “audio”,
“path”: “https://huggingface.co/datasets/hf-internal-testing/dummy-audio-samples/resolve/main/obama.mp3”
}
]
} ], “max_tokens”: 300, “temperatura”: 0.2, “top_p”: 0.95 } respuesta = predictor.predict(carga útil)

uso de herramientas

El siguiente código muestra capacidades de llamada de funciones, donde el modelo puede interpretar comandos de voz y ejecutar herramientas predefinidas. El ejemplo demuestra consultas meteorológicas a través de entrada de voz, con el modelo llamando automáticamente a la función apropiada y devolviendo resultados estructurados:

# Definir la configuración de la herramienta meteorológica WEATHER_TOOL = { “type”: “function”, “function”: { “name”: “get_current_weather”, “description”: “Obtener el clima actual para una ubicación específica”, “parameters”: { “type”: “object”, “properties”: { “location”: { “type”: “string”, “description”: “La ciudad y el estado, por ejemplo, San Francisco, CA” }, “format”: { “type”: “string”, “enum”: [“celsius”, “fahrenheit”]”description”: “La unidad de temperatura a utilizar.” } }, “requerido”: [“location”, “format”]
} } } # Función de clima simulado def mock_weather(ubicación, formato=”celsius”): “””Siempre devuelve clima soleado a 25°C/77°F””” temp = 77 if format.lower() == “fahrenheit” else 25 unit = “°F” if format.lower() == “fahrenheit” else “°C” return f”Está soleado en {ubicación} con {temp}{unit}” # Carga útil de prueba con carga útil de audio = { “mensajes”: [
{
“role”: “user”,
“content”: [
{
“type”: “audio”,
“path”: “https://huggingface.co/datasets/patrickvonplaten/audio_samples/resolve/main/fn_calling.wav”
}
]
} ], “temperatura”: 0,2, “top_p”: 0,95, “herramientas”: [WEATHER_TOOL]
} respuesta = predictor.predict(carga útil)

Integración de agentes de Strands

El siguiente ejemplo muestra cómo integrar Voxtral con el marco Strands para crear agentes inteligentes capaces de utilizar múltiples herramientas. El agente puede seleccionar y ejecutar automáticamente herramientas apropiadas (como calculadora, operaciones de archivos o comandos de shell de las herramientas prediseñadas de Strands) en función de las consultas de los usuarios, lo que permite flujos de trabajo complejos de varios pasos a través de la interacción del lenguaje natural:

# Integración de SageMaker con agentes de Strands # from strands import Agente de strands import Agente de strands.models.sagemaker import SageMakerAIModel de strands_tools import calculadora, hora_actual, lectura_de_archivo, modelo de shell = SageMakerAIModel( endpoint_config={ “endpoint_name”: endpoint_name, “region_name”: “us-west-2”, }, payload_config={ “max_tokens”: 1000, “temperatura”: 0,7, “corriente”: Falso, } ) agente = Agente(modelo=modelo, herramientas=[calculator, current_time, file_read, shell]) respuesta = agente(“¿Cuál es la raíz cuadrada de 12?”)

Limpiar

Cuando termine de experimentar con este ejemplo, elimine los puntos finales de SageMaker que creó en el cuaderno para evitar costos innecesarios:

# Eliminar punto final de SageMaker print(f” Eliminando punto final: {endpoint_name}”) predictor.delete_endpoint(delete_endpoint_config=True) print(” Punto final eliminado correctamente”)

Conclusión

En esta publicación, demostramos cómo autohospedar con éxito los modelos Voxtral de código abierto de Mistral en SageMaker utilizando el enfoque BYOC. Hemos creado un sistema listo para producción que utiliza el último marco vLLM y optimizaciones oficiales de Voxtral para las variantes de modelo Mini y Small. La solución admite todo el espectro de capacidades de Voxtral, incluidas conversaciones de solo texto, transcripción de audio, comprensión multimodal sofisticada y llamadas de funciones directamente desde la entrada de voz. Con esta arquitectura flexible, puede cambiar entre los modelos Voxtral-Mini y Voxtral-Small mediante actualizaciones de configuración simples sin necesidad de reconstruir el contenedor.

Lleve sus aplicaciones de IA multimodal al siguiente nivel probando el código completo del repositorio de GitHub para alojar el modelo Voxtral en SageMaker y comience a crear sus propias aplicaciones habilitadas para voz. Explore todo el potencial de Voxtral visitando el sitio web oficial de Mistral para descubrir capacidades detalladas, puntos de referencia de rendimiento y especificaciones técnicas. Finalmente, explore el marco de Strands Agents para crear sin problemas aplicaciones agentes que puedan ejecutar flujos de trabajo complejos.

Sobre los autores

Ying Hou, PhD, es arquitecta senior de soluciones especializada para GenAI en AWS, donde colabora con proveedores de modelos para incorporar los modelos de IA más recientes y inteligentes en las plataformas de AWS. Con una profunda experiencia en Gen AI, ASR, visión por computadora, PNL y modelos de pronóstico de series temporales, trabaja en estrecha colaboración con los clientes para diseñar y crear aplicaciones ML y GenAI de vanguardia.