Uso de una función Firebase de JavaScript para ejecutar un modelo en Google Cloud Platform

Feb 02 2023
Supongamos que tiene un proyecto de Firebase asociado con su aplicación y ha creado un modelo de aprendizaje automático en el mismo proyecto en Google Cloud Platform (GCP). Ahora quizás se pregunte cómo realizar inferencias usando el modelo en GCP, a través de la autenticación de Firebase en la aplicación.

Supongamos que tiene un proyecto de Firebase asociado con su aplicación y ha creado un modelo de aprendizaje automático en el mismo proyecto en Google Cloud Platform (GCP). Ahora quizás se pregunte cómo realizar inferencias usando el modelo en GCP, a través de la autenticación de Firebase en la aplicación. Puede usar una función de Firebase de JavaScript para hacerlo.

(Esto fue probado con Ubuntu 18.04 y Node.js 14)

0. Requisitos previos

  • Un proyecto de Firebase asociado con su aplicación (p. ej., id del proyecto = {PROJECT_ID})
  • Un modelo de aprendizaje automático en el mismo proyecto {PROJECT_ID} en GCP
  • Node.js 14 y npm (puede instalarlos usando nvm )

Abra una terminal y ejecute lo siguiente.

npm install -g firebase-tools

Supongamos que el directorio del proyecto local es {LOCAL_DIR} en el escritorio. Créelo y navegue hasta él.

mkdir -p ~/Desktop/{LOCAL_DIR}
cd ~/Desktop/{LOCAL_DIR}

Ejecute los siguientes comandos uno por uno con cuidado, mientras consulta las notas debajo de ellos como una guía sobre cómo navegar a través de las indicaciones generadas por ellos.

firebase login

firebase init firestore

firebase init functions

  • Se le pedirá que inicie sesión a través del navegador y se autentique.
  • Elija el proyecto de Firebase correcto ( {PROJECT_ID} ) cuando se le solicite.
  • Elija JavaScript (js) como idioma.
  • “ elsint ” no es necesario para esto.
  • Elija sí para instalar dependencias.

Necesitaremos el paquete googleapis .

cd ~/Desktop/{LOCAL_DIR}/functions
npm i googleapis

Abra " {LOCAL_DIR}/functions/package.json" con su IDE preferido (por ejemplo, VS Code) y edite la sección " motores " de la siguiente manera.

"engines": {
    "node": "14"
  },

Abra “ {LOCAL_DIR}/functions/index.js” con su IDE preferido.

Definamos los siguientes términos. Debe reemplazarlos con sus datos.

  • Nombre del modelo = {MODEL_NAME}
  • Región del modelo = {MODEL_REGION} — (Asegúrese de que la región del modelo sea la misma que la región de la función, especialmente para un mejor rendimiento. Predeterminado = us-central1 )
  • Nombre de la función de Firebase = {ML_FUNCTION}
  • Entrada a la función = entrada al modelo = un diccionario como {“key_str”: “val_str”, “key_int”: 2, “key_arr”: [1.25, 0.76, 3.84]}

const functions = require("firebase-functions");

const admin = require("firebase-admin");

admin.initializeApp(functions.config().firebase);

const googleapis_pack = require("googleapis");

const ml = googleapis_pack.google.ml({version:"v1", rootUrl:"https://{MODEL_REGION}-ml.googleapis.com"});

exports.{ML_FUNCTION} = functions.https.onCall(async(data, context)=>
{
    const key_str = data.key_str;
    const key_int = data.key_int;
    const key_arr = data.key_arr;

    const instance = {"key_str":key_str, "key_int":key_int, "key_arr":key_arr};

    const model = "{MODEL_NAME}";

    const { credential } = await googleapis_pack.google.auth.getApplicationDefault();

    const modelName = "projects/{PROJECT_ID}/models/" + model;

    const results = await ml.projects.predict({
        auth: credential,
        name: modelName,
        requestBody: instance
    });

    return results.data;

}
);

Ve a la terminal y ejecuta lo siguiente.

cd ~/Desktop/{LOCAL_DIR}
firebase deploy --only functions

PD:

Para saber cómo llamar a una función de Firebase desde su aplicación (iOS, Android, etc.), puede consultar esta documentación oficial de Google.

Referencias

  • https://firebase.google.com/docs/functions/get-started
  • https://github.com/nvm-sh/nvm/blob/master/README.md
  • https://firebase.google.com/docs/functions/callable