Un desarrollador publicó un proyecto de aprendizaje gratuito que lleva a los espectadores desde un archivo en blanco hasta un motor de inferencia de modelo de lenguaje grande que funciona. El proyecto, llamado samir-vllm, combina más de seis horas de video con más de 80 páginas de notas escritas a mano y diagramas. Su objetivo es mostrar lo que realmente ocurre entre una instrucción y los tokens generados que se devuelven.
¿Qué cubre el curso samir-vllm?
La serie está organizada como una construcción paso a paso. Comienza con una descripción general de la inferencia de IA y avanza por la carga de los pesos del modelo, las búsquedas de embeddings, la normalización, los embeddings posicionales rotatorios y las proyecciones de consulta, clave y valor. Los videos posteriores cubren la autoatención, la red feed-forward, el paso de decodificación y la caché KV, y luego el procesamiento por lotes y las cachés KV paginadas. Un capítulo final cubre la atención paginada. Las notas complementarias de cada video están disponibles en formato Markdown y PDF.
El motor está escrito en C++17 y CUDA, y se compila con CMake. Está orientado al modelo Llama 3.2 1B Instruct y carga los pesos directamente desde un archivo model.safetensors, copiando los tensores BF16 sin procesar a la memoria de la GPU. También se incluye un cargador mapeado en memoria para evitar una copia adicional en el lado de la CPU.
Gran parte del código apunta a las partes de la inferencia que la mayoría de los tutoriales omiten. El proyecto incluye un tokenizador local de codificación por pares de bytes que maneja Unicode y tokens especiales, con un ejecutable de pruebas dedicado. Sus kernels de CUDA cubren las búsquedas de embeddings y RMSNorm, que reduce en FP32 mientras aplica los pesos BF16 aprendidos. El prefill ejecuta las 16 capas del modelo, incluyendo la atención de consultas agrupadas, el perceptrón multicapa SwiGLU y las conexiones residuales. Un paso de argmax en la GPU selecciona cada token siguiente.
¿Cómo administra el motor la memoria de la caché KV?
El sistema de memoria es donde el proyecto cumple gran parte de su función didáctica. Un conjunto compartido de páginas KV BF16 contiene 16 tokens de claves y valores por página física, con una tabla de bloques para cada secuencia y capa. El conjunto predeterminado es de 128 MiB y puede modificarse mediante un indicador de línea de comandos. La atención de decodificación lee directamente las páginas en caché de cada secuencia, usando un softmax en línea FP32, en lugar de reunir un prefijo contiguo.
El motor admite tanto el procesamiento por lotes estático, que espera a que un grupo termine antes de admitir más solicitudes, como el procesamiento por lotes continuo, que admite instrucciones en cola cuando hay suficiente presupuesto de páginas disponible. Las solicitudes que no caben esperan en orden de llegada (primero en entrar, primero en salir). Una solicitud cuyo presupuesto supera la totalidad del conjunto es rechazada con un error. El autor describe este enfoque como conservador. Evita la expropiación y el recálculo, pero un presupuesto de salida solicitado muy grande puede limitar cuántas solicitudes se ejecutan al mismo tiempo, aunque el modelo se detenga antes.
El README también señala una limitación que a menudo sorprende a las personas. Las operaciones en BF16 pueden redondear de manera diferente con distintos tamaños de lote, por lo que, cuando dos logits del vocabulario están casi empatados, la salida codiciosa puede diferir entre ejecuciones individuales y por lotes. No se garantiza una salida idéntica bit a bit entre tamaños de lote.
¿Qué hardware y licencias se necesitan para ejecutarlo?
Para ejecutar el motor se requiere una GPU NVIDIA compatible con CUDA, el CUDA Toolkit, CMake 3.24 o posterior, un compilador de C++17, las bibliotecas de desarrollo ICU y el encabezado nlohmann/json. Los usuarios también necesitan los pesos y el tokenizador de Llama 3.2, que se rigen por la Licencia Comunitaria de Llama 3.2 de Meta y su Política de Uso Aceptable, y no están cubiertos por la licencia MIT del proyecto.
La licencia está dividida. El código fuente del motor en los directorios src, include, tests y python tiene licencia MIT. Las notas, escaneos, ilustraciones y PDF están protegidos por derechos de autor. La lectura y el estudio personal están permitidos, pero redistribuir o volver a publicar los materiales, de forma gratuita o paga, requiere autorización previa por escrito.
This article was written with the assistance of AI.
News Factory APP - agentic news to boost your SEO & AEO.