Logotipo de Zephyrnet

Cómo Amazon Search redujo los costos de inferencia de ML en un 85 % con AWS Inferentia

Fecha:

El motor de búsqueda de productos de Amazon indexa miles de millones de productos, atiende a cientos de millones de clientes en todo el mundo y es uno de los servicios más utilizados del mundo. El equipo de búsqueda de Amazon desarrolla tecnología de aprendizaje automático (ML) que potencia el Amazon.com motor de búsqueda y ayuda a los clientes a buscar sin esfuerzo. Brindar una gran experiencia al cliente y operar a la escala masiva requerida por la Amazon.com motor de búsqueda, este equipo siempre está buscando formas de crear sistemas más rentables con requisitos de rendimiento y latencia en tiempo real. El equipo explora constantemente el hardware y los compiladores optimizados para el aprendizaje profundo para acelerar la inferencia y el entrenamiento del modelo, al tiempo que reduce los costos operativos en todos los ámbitos.

En esta publicación, describimos cómo Amazon Search usa Inferencia de AWS, un acelerador de alto rendimiento creado por AWS para acelerar las cargas de trabajo de inferencia de aprendizaje profundo. El equipo ejecuta inferencia de aprendizaje automático de baja latencia con modelos NLP basados ​​en Transformer en sistemas basados ​​en AWS Inferentia. Nube informática elástica de Amazon (Amazon EC2) Inf1, y ahorra hasta un 85 % en costos de infraestructura mientras mantiene un sólido rendimiento y latencia.

Aprendizaje profundo para la predicción de intención de consulta y duplicados

Buscar en Amazon Marketplace es un problema multimodal y multitarea, que se ocupa de varias entradas, como ASIN (Número de identificación estándar de Amazon, un número alfanumérico de 10 dígitos que identifica productos de forma única), imágenes de productos, descripciones textuales y consultas. Para crear una experiencia de usuario personalizada, se utilizan predicciones de muchos modelos para diferentes aspectos de la búsqueda. Esto es un desafío porque el sistema de búsqueda tiene miles de modelos con decenas de miles de transacciones por segundo (TPS) en carga máxima. Nos enfocamos en dos componentes de esa experiencia:

  • Predicciones duplicadas percibidas por el cliente – Para mostrar la lista más relevante de productos que coinciden con la consulta de un usuario, es importante identificar los productos entre los que a los clientes les cuesta diferenciar.
  • Predicción de intención de consulta – Para adaptar la página de búsqueda y el diseño del producto para que se adapten mejor a lo que busca el cliente, es importante predecir la intención y el tipo de consulta del usuario (por ejemplo, una consulta relacionada con los medios, una consulta de ayuda y otros tipos de consulta)

Ambas predicciones se realizan utilizando arquitecturas de modelos de Transformer, es decir, modelos basados ​​en BERT. De hecho, ambos comparten el mismo modelo basado en BERT como base, y cada uno apila una cabeza de clasificación/regresión sobre esta columna vertebral.

La predicción duplicada toma varias características textuales para un par de productos evaluados como entradas (como tipo de producto, título, descripción, etc.) y se calcula periódicamente para grandes conjuntos de datos. Este modelo está capacitado de extremo a extremo en una forma multitarea. Trabajos de procesamiento de Amazon SageMaker se utilizan para ejecutar estas cargas de trabajo por lotes periódicamente para automatizar su lanzamiento y solo pagan por el tiempo de procesamiento que se utiliza. Para este caso de uso de carga de trabajo por lotes, el requisito para el rendimiento de inferencia fue de 8,800 TPS en total.

La predicción de la intención toma la consulta textual del usuario como entrada y se necesita en tiempo real para atender dinámicamente el tráfico diario y mejorar la experiencia del usuario en Amazon Marketplace. El modelo está entrenado en un objetivo de clasificación multiclase. Luego, este modelo se despliega en Servicio de contenedor elástico de Amazon (Amazon ECS), que permite un escalado automático rápido y fácil definición y gestión de implementación. Debido a que este es un caso de uso en tiempo real, requería que la latencia P99 fuera inferior a 10 milisegundos para garantizar una experiencia de usuario agradable.

AWS Inferentia y el SDK de AWS Neuron

Instancias EC2 Inf1 cuentan con la tecnología de AWS Inferentia, el primer acelerador de aprendizaje automático creado por AWS para acelerar las cargas de trabajo de inferencia de aprendizaje profundo. Las instancias Inf1 ofrecen un rendimiento hasta 2.3 veces mayor y un costo por inferencia hasta un 70 % más bajo que las instancias EC2 basadas en GPU comparables. Puede seguir entrenando sus modelos con el marco de su elección (PyTorch, TensorFlow, MXNet) y luego implementarlos fácilmente en AWS Inferentia para beneficiarse de las optimizaciones de rendimiento integradas. Puede implementar una amplia gama de tipos de modelos utilizando instancias Inf1, desde reconocimiento de imágenes, detección de objetos, procesamiento de lenguaje natural (NLP) y modelos de recomendación modernos.

AWS neurona es un kit de desarrollo de software (SDK) que consta de un compilador, tiempo de ejecución y herramientas de creación de perfiles que optimizan el rendimiento de inferencia de ML de las instancias EC2 Inf1. Neuron se integra de forma nativa con marcos de ML populares como TensorFlow y PyTorch. Por lo tanto, puede implementar modelos de aprendizaje profundo en AWS Inferentia con las mismas API familiares proporcionadas por el marco de su elección y beneficiarse del aumento en el rendimiento y el menor costo por inferencia en la nube.

Desde su lanzamiento, Neuron SDK ha seguido aumentando la variedad de modelos que admite mientras continúa mejorando el rendimiento y reduciendo los costos de inferencia. Esto incluye modelos NLP (BERT), modelos de clasificación de imágenes (ResNet, VGG) y modelos de detección de objetos (OpenPose y SSD).

Implemente en instancias Inf1 para obtener baja latencia, alto rendimiento y ahorro de costos

El equipo de búsqueda de Amazon quería ahorrar costos al mismo tiempo que cumplía con su requisito de alto rendimiento en la predicción de duplicación y el requisito de baja latencia en la predicción de la intención de consulta. Eligieron implementar en instancias Inf1 basadas en AWS Inferentia y no solo cumplieron con los requisitos de alto rendimiento, sino que también ahorraron hasta un 85 % en costos de inferencia.

Predicciones duplicadas percibidas por el cliente

Antes del uso de Inf1, un dedicado EMR de Amazon el clúster se ejecutaba con instancias basadas en CPU. Sin depender de la aceleración de hardware, se necesitaba una gran cantidad de instancias para cumplir con el requisito de alto rendimiento de 8,800 transacciones totales por segundo. El equipo cambió a instancias inf1.6xlarge, cada una con 4 aceleradores de AWS Inferentia y 16 NeuronCores (4 núcleos por chip de AWS Inferentia). Rastrearon el modelo basado en Transformer para un solo NeuronCore y cargaron un modo por NeuronCore para maximizar el rendimiento. Al aprovechar los 16 NeuronCores disponibles, redujeron los costos de inferencia en un 85 % (según el precio público actual bajo demanda de Amazon EC2).

Predicción de intención de consulta

Dado el requisito de latencia P99 de 10 milisegundos o menos, el equipo cargó el modelo en todos los NeuronCore disponibles en instancias inf1.6xlarge. Puede hacer esto fácilmente con PyTorch Neuron usando el antorcha.neurona.DataParallel API. Con la implementación de Inf1, la latencia del modelo fue de 3 milisegundos, la latencia de extremo a extremo fue de aproximadamente 10 milisegundos y el rendimiento máximo en la carga máxima alcanzó los 16,000 XNUMX TPS.

Comience con código de implementación y compilación de muestra

El siguiente es un código de muestra para ayudarlo a comenzar con las instancias Inf1 y obtener los beneficios de rendimiento y costo como el equipo de búsqueda de Amazon. Mostramos cómo compilar y realizar inferencias con un modelo PyTorch, usando Neurona PyTorch.

En primer lugar, el modelo se compila con torch.neuron.trace():

m = torch.jit.load(f="./cpu_model.pt", map_location=torch.device('cpu'))
m.eval()
model_neuron = torch.neuron.trace(
    m,
    inputs,
    compiler_workdir="work_" + str(cores) + "_" + str(batch_size),
    compiler_args=[
        '--fp32-cast=all', '--neuroncore-pipeline-cores=' + str(cores)
    ])
model_neuron.save("m5_batch" + str(batch_size) + "_cores" + str(cores) +
                  "_with_extra_op_and_fp32cast.pt")

Para la lista completa de posibles argumentos a la trace método, consulte PyTorch-Neuron rastrea la API de Python. Como puedes ver, argumentos del compilador se puede pasar a la torch.neuron API directamente. Todos los operadores FP32 se lanzan a BF16 with --fp32-cast=all, proporcionando el más alto rendimiento al mismo tiempo que conserva el rango dinámico. Hay más opciones de fundición disponibles que le permiten controlar el rendimiento para modelar el equilibrio de precisión. Los modelos utilizados para ambos casos de uso se compilaron para un solo NeuronCore (sin tubería).

Luego cargamos el modelo en Inferentia con torch.jit.loady utilícelo para la predicción. los tiempo de ejecución de la neurona carga automáticamente el modelo a NeuronCores.

cm_cpd_preprocessing_jit = torch.jit.load(f=CM_CPD_PROC,
                                          map_location=torch.device('cpu'))
cm_cpd_preprocessing_jit.eval()
m5_model = torch.jit.load(f=CM_CPD_M5)
m5_model.eval()

input = get_input()
with torch.no_grad():
    batch_cm_cpd = cm_cpd_preprocessing_jit(input)
    input_ids, attention_mask, position_ids, valid_length, token_type_ids = (
        batch_cm_cpd['input_ids'].type(torch.IntTensor),
        batch_cm_cpd['attention_mask'].type(torch.HalfTensor),
        batch_cm_cpd['position_ids'].type(torch.IntTensor),
        batch_cm_cpd['valid_length'].type(torch.IntTensor),
        batch_cm_cpd['token_type_ids'].type(torch.IntTensor))
    model_res = m5_model(input_ids, attention_mask, position_ids, valid_length,
                         token_type_ids)

Conclusión

El equipo de búsqueda de Amazon pudo reducir sus costos de inferencia en un 85 % mediante el uso de instancias Inf1 basadas en AWS Inferentia, con mucho tráfico y exigentes requisitos de rendimiento. AWS Inferentia y Neuron SDK brindaron al equipo la flexibilidad necesaria para optimizar el proceso de implementación por separado de la capacitación, y presentaron una curva de aprendizaje poco profunda a través de herramientas integrales y API de marco familiar.

Puede desbloquear los beneficios de rendimiento y costo al comenzar con el código de muestra que se proporciona en esta publicación. Además, echa un vistazo a la punta a punta Tutoriales para ejecutar modelos ML en Inferentia con PyTorch y TensorFlow.


Sobre los autores

joão moura es un arquitecto de soluciones especializado en IA/ML en Amazon Web Services. Se centra principalmente en los casos de uso de NLP y en ayudar a los clientes a optimizar el entrenamiento y la implementación del modelo de aprendizaje profundo. También es un defensor activo de hardware especializado en aprendizaje automático y soluciones de aprendizaje automático de bajo código.

Weiqi Zhang es gerente de ingeniería de software en Search M5, donde trabaja en la producción de modelos a gran escala para aplicaciones de aprendizaje automático de Amazon. Sus intereses incluyen la recuperación de información y la infraestructura de aprendizaje automático.

jason carlson es un ingeniero de software para desarrollar canalizaciones de aprendizaje automático para ayudar a reducir la cantidad de impresiones de búsqueda robadas debido a duplicados percibidos por el cliente. Trabaja principalmente con Apache Spark, AWS y PyTorch para ayudar a implementar y alimentar/procesar datos para modelos ML. En su tiempo libre le gusta leer y salir a correr.

Shaohuixi es SDE en el equipo Search Query Understanding Infra. Lidera el esfuerzo para construir servicios de inferencia en línea de aprendizaje profundo a gran escala con baja latencia y alta disponibilidad. Fuera del trabajo, le gusta esquiar y explorar la buena comida.

zhuoqi zhang es ingeniero de desarrollo de software en el equipo Search Query Understanding Infra. Trabaja en la creación de marcos de servicio de modelos para mejorar la latencia y el rendimiento de los servicios de inferencia en línea de aprendizaje profundo. Fuera del trabajo, le gusta jugar baloncesto, hacer snowboard y conducir.

Sol Haowei es ingeniero de software en el equipo Search Query Understanding Infra. Trabaja en el diseño de API e infraestructura que respaldan los servicios de inferencia en línea de aprendizaje profundo. Sus intereses incluyen el diseño de API de servicios, la configuración y el mantenimiento de la infraestructura. Fuera del trabajo, le gusta correr, caminar y viajar.

Jaspreet Singh es científico aplicado en el equipo de M5, donde trabaja en modelos básicos a gran escala para mejorar la experiencia de compra del cliente. Sus intereses de investigación incluyen el aprendizaje multitarea, la recuperación de información y el aprendizaje de representación.

Sruti Koparkar es gerente sénior de marketing de productos en AWS. Ayuda a los clientes a explorar, evaluar y adoptar la infraestructura informática acelerada de EC2 para sus necesidades de aprendizaje automático.

punto_img

Información más reciente

punto_img

Habla con nosotros!

¡Hola! ¿Le puedo ayudar en algo?