Ingeniería LLM · Fácil · 12 min

¿Cabe el modelo en memoria?

La misma cuenta que usan nuestras páginas de producto: pesos, caché KV y margen de ejecución contra la memoria utilizable.

Escribe memoryNeededGb(params, quant, kvMbPerToken, contextTokens), que devuelve los GB necesarios:

- pesos: params (miles de millones) × BITS_PER_WEIGHT[quant] / 8; - caché KV: kvMbPerToken × contextTokens / 1000; - más RUNTIME_OVERHEAD_GB (1,5 GB).

Escribe también fitStatus(neededGb, usableGb): devuelve 'fits' si lo necesario es <= el 85 % de la memoria utilizable, 'tight' si cabe pero pasa del 85 %, y 'no' si no cabe. No redondees nada: los resultados tienen que coincidir con los de la web.

Retos 0/4

  • Llama 3.1 8B en Q4 con 8192 tokens necesita 7,42 GB
  • Llama 3.1 70B en Q8 con 32 768 tokens: 87,26 GB
  • Veredicto fits, tight y no según el 85 %
  • En un DGX Spark (122 GB utilizables) el 70B en fp16 no cabe y en Q8 sí

function memoryNeededGb(params, quant, kvMbPerToken, contextTokens) {
  const weights = (params * BITS_PER_WEIGHT[quant]) / 8;
  // suma la caché KV y el margen de ejecución
  return weights;
}

function fitStatus(neededGb, usableGb) {
  // 'fits' hasta el 85 % de usableGb, 'tight' hasta el 100 % y, si no, 'no'
  return neededGb <= usableGb ? 'fits' : 'no';
}

// Llama 3.1 8B en Q4 con 8192 tokens de contexto (0,131 MB de KV por token)
console.log(memoryNeededGb(8.0, 'q4', 0.131, 8192));
La consola aparece aquí (console.log).

Para profundizar: la herramienta relacionada →

¿Esto en producción, con tus datos? Hablemos 15 minutos →