Tener el equipo o pagar por llamada
Alojar un modelo es ejecutarlo en equipos que cuidas tú. Alquilar es pagar a otra empresa por cada llamada. Cada opción tiene un coste que sube de forma distinta.
Importa porque la opción más barata cambia con el número de llamadas. Una cuenta te dice dónde está la frontera, y una lista te dice lo que la cuenta olvidó.
Al final de esta lección
Nota
Puedo decidir si ejecutar un modelo por mi cuenta.
Palabras clave
| Palabra | Qué significa |
|---|---|
| Alojar | ejecutar el modelo en equipos propios |
| Alquilar | pagar a otra empresa por cada llamada |
| Punto de equilibrio | el volumen en que dos costes se igualan |
| Capacidad | las llamadas que un equipo atiende al mes |
| Caída | un periodo en que el servicio no funciona |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Dos costes que suben de forma distinta
Alquilar cuesta lo mismo por cada llamada, así que sube en línea recta. Alojar es un coste escalonado: cada equipo atiende un número fijo de llamadas y pagas un equipo entero cada vez. Pagas también al personal que lo cuida.
El punto de equilibrio es el volumen en que los dos costes se igualan. Por encima de él, alojar sale más barato.
Precios inventados, euros al mes
| Llamadas al mes | Alquilar | Alojar |
|---|---|---|
| 300 000 | 900 | 2400 |
| 1 000 000 | 3000 | 3300 |
| 1 200 000 | 3600 | 3300 |
| 2 000 000 | 6000 | 5100 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Lo que la cuenta deja fuera
Una cuenta de precios no es una decisión. Deja fuera la caída cuando el equipo falla de noche. Deja fuera el tiempo de actualizar el programa y el equipo que está parado. Deja fuera también el coste de un error con datos privados.
Deja fuera además el otro lado: puede que unos datos no puedan salir de tu edificio, y entonces alquilar no se permite a ningún precio.
Un error frecuente
Advertencia
Mucha gente cree que, cuando el equipo es suyo, cada llamada sale gratis. El equipo, el personal y las caídas se siguen pagando cada mes. Calcula el punto de equilibrio con los escalones y el personal incluidos, y lista después lo que aún queda fuera.
Escribe el ayudante del modelo, parte 1
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const base = process.env.AI_URL || \"http://ai:4000\";' '// Los tokens de una respuesta, o null si no trae ninguno.' 'function count(data, name) {' ' return data.usage && typeof data.usage[name] === \"number\" ? data.usage[name] : null;' '}' > model.js"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Escribe el ayudante del modelo, parte 2
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function ask(messages, sample, max) {' ' try {' ' const res = await fetch(base + \"/v1/chat/completions\", {' ' method: \"POST\",' ' headers: { \"content-type\": \"application/json\", authorization: \"Bearer lab\" },' ' body: JSON.stringify({ model: \"lab\", messages: messages, max_tokens: max || 100 }),' ' signal: AbortSignal.timeout(30000),' ' });' ' if (res.ok === false) throw new Error(\"estado \" + res.status);' ' const d = await res.json();' ' return { text: d.choices[0].message.content, inTokens: count(d, \"prompt_tokens\"), outTokens: count(d, \"completion_tokens\"), recorded: false };' ' } catch (error) {' ' console.log(\"Muestra grabada: ningún modelo respondió (\" + error.message + \").\");' ' return { text: sample, inTokens: null, outTokens: null, recorded: true };' ' }' '}' 'module.exports = { ask };' >> model.js"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Escribe la cuenta de costes, parte 1
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { ask } = require(\"./model\");' 'const price = 3;' 'const machine = 900;' 'const capacity = 600000;' 'const people = 1500;' 'function rent(calls) {' ' return Math.floor(calls * price / 1000);' '}' 'function host(calls) {' ' return Math.ceil(calls / capacity) * machine + people;' '}' > host.js"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Escribe la cuenta de costes, parte 2
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' ' console.log(\"llamadas al mes | alquilar | alojar | sale mejor\");' ' for (const calls of [300000, 600000, 1000000, 1200000, 2000000]) {' ' const pick = host(calls) < rent(calls) ? \"alojar\" : \"alquilar\";' ' console.log(calls + \" | \" + rent(calls) + \" | \" + host(calls) + \" | \" + pick);' ' }' ' console.log(\"equilibrio simple: \" + Math.ceil((machine + people) * 1000 / price) + \" llamadas\");' >> host.js"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Escribe la cuenta de costes, parte 3
docker exec -w /home/node/project agent sh -c "printf '%s\n' ' const q = \"En una frase corta, nombra un coste de ejecutar tu propio modelo que el precio por llamada no incluye.\";' ' const sample = \"Alguien tiene que estar de guardia cuando falla el equipo, y su tiempo no está en el precio por llamada.\";' ' const reply = await ask([{ role: \"user\", content: q }], sample, 60);' ' console.log(\"el modelo dijo: \" + reply.text);' '}' 'main();' >> host.js"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Ejecuta la cuenta de costes
docker exec -w /home/node/project agent node host.jsSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Qué imprime el Run
| Línea | Qué muestra |
|---|---|
| 300000 | 900 | 2400 | alquilar | Con poco volumen gana alquilar |
| 1000000 | 3000 | 3300 | alquilar | Se compra el segundo equipo y alojar da un salto |
| 1200000 | 3600 | 3300 | alojar | Ahora gana alojar |
| equilibrio simple: 800000 llamadas | Demasiado pronto: ignora los escalones |
| el modelo dijo: ... | Una frase. Las palabras cambian en cada ejecución |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.