Subscribe to receive notifications of new posts:

Novedad: Constellation, la IA llega a la plataforma de Cloudflare

2023-05-15

7 min read
Introducing Constellation, bringing AI to the Cloudflare stack

El ecosistema de Cloudflare Workers ofrece ahora productos y funciones que incluyen el proceso, el alojamiento, el almacenamiento, las bases de datos, el streaming, las redes, la seguridad y mucho más. Con el tiempo, hemos intentado motivar a otros para que se alejen de las arquitecturas de software tradicionales, y para ello hemos demostrado y documentado cómo es posible crear aplicaciones complejas que se amplían globalmente sobre nuestra pila.

Hoy nos complace dar la bienvenida a Constellation, una nueva función de la pila de Cloudflare que permite a los desarrolladores ejecutar modelos de aprendizaje automático entrenados previamente y tareas de inferencia en la red de Cloudflare.

Un bloque de creación más en nuestra supernube

El aprendizaje automático y la IA han sido temas candentes últimamente, pero la realidad es que llevamos años utilizando estas tecnologías en nuestra vida cotidiana, aunque no nos demos cuenta. Nuestros teléfonos móviles, ordenadores, coches y asistentes domésticos, por poner algunos ejemplos, todos tienen IA. Está en todas partes.

Sin embargo, sigue sin ser una ventaja para los desarrolladores. A menudo necesitan entender las matemáticas que hay detrás, el software y las herramientas están dispersos y son complejos, y el hardware o los servicios en la nube para ejecutar los marcos y los datos son caros.

Hoy lanzamos una nueva función de nuestra pila, que permite a todo el mundo ejecutar modelos de aprendizaje automático y realizar inferencias sobre Cloudflare Workers.

Novedad: Constellation

Constellation te permite ejecutar tareas de inferencia rápidas y de baja latencia utilizando modelos de aprendizaje automático entrenados previamente de forma nativa con los scripts de Cloudflare Workers.

Algunos ejemplos de aplicaciones que puedes implementar con Constellation son:

  • Clasificación de imágenes o audio o detección de objetos
  • Detección de anomalías en los datos
  • Traducción, resumen o análisis de similitud de textos
  • Procesamiento del lenguaje natural
  • Análisis de opiniones
  • Reconocimiento de voz o conversión de texto a voz
  • Respuesta a preguntas

Los desarrolladores pueden cargar a Constellation cualquier modelo compatible, que pueden entrenar de forma independiente, o bien descargar modelos entrenados previamente de centros de aprendizaje automático como HuggingFace u ONNX Zoo.

Sin embargo, no todos querrán entrenar modelos o buscar en Internet modelos que aún no haya probado. Por esa razón, Cloudflare también mantendrá un catálogo de modelos verificados y listos para usar.

Creamos Constellation pensando en ofrecer una gran experiencia para los desarrolladores y API fáciles de usar. Aquí tienes un ejemplo para empezar.

Aplicación de clasificación de imágenes

En este ejemplo, crearemos una aplicación de clasificación de imágenes basada en la API de inferencia de Constellation y el modelo SqueezeNet, una red neuronal convolucional (CNN) que se entrenó previamente en más de un millón de imágenes de la base de datos de código abierto ImageNet y puede clasificar imágenes en 1000 categorías, como máximo.

SqueezeNet se compara con AlexNet, una de las CNN originales y punto de referencia para la clasificación de imágenes, por ser aproximadamente 3 veces más rápida y más o menos 500 veces más pequeña sin dejar de alcanzar niveles similares de precisión. Su reducido tamaño permite que se pueda ejecutar en dispositivos portátiles con recursos limitados o hardware personalizado.

En primer lugar, vamos a crear un nuevo proyecto Constellation utilizando el entorno de ejecución de ONNX. Wrangler ya tiene incorporada la funcionalidad para Constellation con la palabra clave `constellation`.

$ npx wrangler constellation project create "image-classifier" ONNX

Ahora vamos a crear el archivo de configuración wrangler.toml con el enlace del proyecto:

# Top-level configuration
name = "image-classifier-worker"
main = "src/index.ts"
compatibility_date = "2022-07-12"

constellation = [
    {
      binding = 'CLASSIFIER',
      project_id = '2193053a-af0a-40a6-b757-00fa73908ef6'
    },
]

Instala la biblioteca API del cliente Constellation:

$ npm install @cloudflare/constellation --save-dev

Carga al proyecto el modelo ONNX SqueezeNet 1.1 entrenado previamente.

$ wget https://github.com/microsoft/onnxjs-demo/raw/master/docs/squeezenet1_1.onnx
$ npx wrangler constellation model upload "image-classifier" "squeezenet11" squeezenet1_1.onnx

Como hemos mencionado antes, SqueezeNet clasifica las imágenes en un máximo de 1000 clases de objetos. Estas clases tienen en realidad la forma de una lista de anillos de sinónimos o synsets. Un synset tiene un Id. y una etiqueta. Proviene de la terminología de la base de datos WordNet de Princeton, la misma que se utiliza para etiquetar la base de datos de imágenes, ImageNet.

Para traducir los resultados de SqueezeNet en clases de imágenes legibles por humanos, necesitamos un archivo que asigne los Id. de synset (lo que obtenemos del modelo) con sus etiquetas correspondientes.

$ mkdir src; cd src
$ wget https://raw.githubusercontent.com/microsoft/onnxjs-demo/master/src/data/imagenet.ts

Y por último, vamos a codificar e implementar nuestro script de clasificación de imágenes:

import { imagenetClasses } from './imagenet';
import { Tensor, run } from '@cloudflare/constellation';

export interface Env {
    CLASSIFIER: any,
}

export default {
    async fetch(request: Request, env: Env, ctx: ExecutionContext) {
        const formData = await request.formData();
        const file = formData.get("file");
        const data = await file.arrayBuffer();
        const result = await processImage(env, data);
        return new Response(JSON.stringify(result));
    },
};

async function processImage(env: Env, data: ArrayBuffer) {
    const input = await decodeImage(data)

    const tensorInput = new Tensor("float32", [1, 3, 224, 224], input)

    const output = await run(env.CLASSIFIER, "MODEL-UUID", tensorInput);

    const probs = output.squeezenet0_flatten0_reshape0.value
    const softmaxResult = softmax(probs)
    const results = imagenetClasses(softmaxResult, 5);
    const topResult = results[0];
    return topResult
}

Este script lee una imagen de la solicitud, la descodifica en un tensor multidimensional float32 (ahora mismo solo descodificamos PNG, pero podemos añadir otros formatos), la proporciona al modelo SqueezeNet que se ejecuta en Constellation, obtiene los resultados, los combina con la lista de clases de ImageNet y devuelve las etiquetas de la imagen legibles por humanos.

Bastante sencillo, ¿no? Vamos a probarlo:

$ curl https://ai.cloudflare.com/demos/image-classifier -F file=@images/mountain.png | jq .name

alp

$ curl https://ai.cloudflare.com/demos/image-classifier -F file=@images/car.png | jq .name

convertible

$ curl https://ai.cloudflare.com/demos/image-classifier -F file=@images/dog.png | jq .name

Ibizan hound

A continuación, puedes ver las probabilidades en la práctica. El modelo está bastante seguro sobre las montañas y el descapotable, pero la probabilidad del podenco ibicenco es menor. Efectivamente, el perro de la foto es de otra raza.

Esta pequeña aplicación demuestra lo fácil y rápido que puedes empezar a utilizar modelos de aprendizaje automático y Constellation al crear aplicaciones sobre Workers. Consulta el código fuente completo aquí e impleméntalo tú mismo.

Transformadores

Google introdujo los transformadores, que son modelos de aprendizaje profundo diseñados para procesar datos de entrada secuenciales y se utilizan normalmente para el procesamiento del lenguaje natural (PLN), como traducciones, resúmenes o análisis de sentimientos, y tareas de visión por ordenador, como la clasificación de imágenes.

Transformers.js es una popular demostración que carga modelos de transformadores de HuggingFace y los ejecuta dentro de tu navegador utilizando el entorno de ejecución de ONNX compilado a WebAssembly. Hemos adaptado esta demostración para que utilice las API de Constellation.

Aquí tienes el enlace a nuestra versión: https://transformers-js.pages.dev/

Interoperabilidad con Workers

El otro elemento interesante de Constellation es que, como se ejecuta de forma nativa en Workers, puedes agruparla con otros productos y las API de nuestra pila. Puedes utilizar KV, R2, D1, Queues, lo que quieras, incluso el correo electrónico.

A continuación, te mostramos un ejemplo de un Worker que recibe correos electrónicos para tu dominio en Cloudflare utilizando Email Routing, ejecuta Constellation utilizando el modelo de análisis de sentimiento t5-small, añade un encabezado con la puntuación resultante, y lo reenvía a la dirección de destino.

import { Tensor, run } from '@cloudflare/constellation';
import * as PostalMime from 'postal-mime';

export interface Env {
    SENTIMENT: any,
}

export default {
  async email(message, env, ctx) {
    const rawEmail = await streamToArrayBuffer(event.raw, event.rawSize);
    const parser = new PostalMime.default();
    const parsedEmail = await parser.parse(rawEmail);

    const input = tokenize(parsedEmail.text)
    const output = await run( env.SENTIMENT, "MODEL-UUID", input);


    var headers = new Headers();
    headers.set("X-Sentiment", idToLabel[output.label]);
    await message.forward("[email protected]", headers);
  }
}

Ahora puedes utilizar Gmail o cualquier cliente de correo electrónico para aplicar una regla a tus mensajes basada en el encabezado "X-Sentiment". Por ejemplo, puede que quieras mover todos los correos molestos que estén fuera de tu bandeja de entrada a una carpeta diferente cuando lleguen.

Empieza a utilizar Constellation

Hoy, lanzamos Constellation en versión beta privada. Para unirte a la lista de espera, ve al panel de control, haz clic en la pestaña Workers debajo de tu cuenta y haz clic en "Solicitar acceso". El equipo irá incorporando cuentas por grupos. Recibirás un correo electrónico cuando tu cuenta esté habilitada.

Mientras tanto, puedes leer nuestra documentación para desarrolladores sobre Constellation y obtener más información sobre su funcionamiento y las API. Constellation se puede utilizar desde Wrangler, nuestra herramienta de línea de comandos para configurar, crear e implementar aplicaciones con los productos para desarrolladores de Cloudflare, o la puedes gestionar directamente en la interfaz de usuario del panel de control.

Estamos deseando saber cómo quieres utilizar el aprendizaje automático y la inteligencia artificial con tus aplicaciones. Constellation seguirá mejorando con límites más altos, nuevos entornos de ejecución compatibles y otros modelos más grandes, pero queremos saber de ti. Tu opinión influirá, sin duda, en nuestras decisiones sobre la hoja de ruta.

Una última cosa. Hoy hemos estado hablando de cómo puedes escribir Workers que utilicen Constellation, pero atento a este dato inicial. Constellation se creó utilizando la capacidad de WebAssembly, Workers, R2 y nuestras API. Procuraremos escribir un blog de seguimiento sobre cómo lo desarrollamos. No te lo pierdas.

Como siempre, puedes hablar con nosotros en nuestro Developers Discord (únete al canal #constellation) o en el foro de la comunidad. Te escuchamos.

We protect entire corporate networks, help customers build Internet-scale applications efficiently, accelerate any website or Internet application, ward off DDoS attacks, keep hackers at bay, and can help you on your journey to Zero Trust.

Visit 1.1.1.1 from any device to get started with our free app that makes your Internet faster and safer.

To learn more about our mission to help build a better Internet, start here. If you're looking for a new career direction, check out our open positions.
Developer Week (ES)AI (ES)Cloudflare Workers (ES)EspañolProduct News (ES)

Follow on X

Celso Martinho|@celso
Rita Kozlov|@ritakozlov_
Cloudflare|@cloudflare

Related posts

April 05, 2024 1:01 PM

Disponibilidad general de la API Browser Rendering, implementación de Cloudflare Snippets, SWR y, por último, Workers for Platforms, que ya está al alcance de todos los usuarios

La API Browser Rendering ya está disponible para todos los clientes de pago de Workers y hemos mejorado la gestión de sesiones...

April 04, 2024 1:05 PM

Nuevas herramientas para la seguridad de la producción: implementaciones graduales, correlaciones de código fuente, limitación de velocidad y nuevos SDK

Hoy anunciamos cinco novedades que te darán más poder: implementaciones graduales, seguimientos en Tail Workers, una nueva API de limitación de velocidad, la nueva API de SDK, y actualizaciones de Durable Objects, cada una pensada con servicios de producción esenciales...

April 03, 2024 1:30 PM

R2 añade notificaciones de eventos, compatibilidad para migraciones desde Google Cloud Storage y un nivel de almacenamiento de acceso ocasional

Nos complace anunciar tres nuevas funciones de Cloudflare R2: notificaciones de eventos, compatibilidad para migraciones desde Google Cloud Storage y un nivel de almacenamiento de acceso ocasional...