Skip to content

Pipeline de entrenamiento LoRA nocturno en Elastic Compute #1

El sustrato acumulativo de PointSav requiere reentrenamiento periódico para incorporar las interacciones del operador y las decisiones editoriales acumuladas desde el ciclo anterior. Elastic Compute #1 es el nodo de cómputo que ejecuta este reentrenamiento cada noche — una instancia spot en la nube con GPU (cómputo Yo-Yo) que reconstruye el grafo de conocimiento y produce pesos adaptadores LoRA (Adaptación de Bajo Rango, del inglés Low-Rank Adaptation) actualizados para el modelo de lenguaje local de la plataforma. El pipeline operacionaliza la afirmación estructural de que cada sesión productiva mejora la plataforma para la siguiente: convierte datos de interacción en bruto en pesos de modelo que hereda la próxima sesión.

Elastic Compute #1 es una instancia spot g2-standard-4 de Google Cloud equipada con una GPU NVIDIA L4 de 24 GB de VRAM. Cada noche ejecuta un pipeline de dos fases y cuatro horas de duración que produce pesos adaptadores ajustados para el modelo de lenguaje de la plataforma. La Fase 1 extrae entidades de negocio estructuradas del corpus de datos del operador y las escribe en un grafo de propiedades. La Fase 2 lee los pares de entrenamiento de ingeniería y aprendizaje acumulados, verifica si el corpus ha superado un umbral mínimo, y ejecuta un ciclo de entrenamiento eficiente en parámetros sobre el modelo base. Las dos fases son obligatorias y secuenciales — no pueden superponerse porque ambas requieren acceso exclusivo a la GPU L4.

Por qué las fases son separadas

La GPU L4 sirve dos cargas de trabajo incompatibles dentro de la ventana nocturna. Durante la Fase 1, vLLM carga OLMo 3 32B Think (cuantizado a 4 bits) para ejecutar la inferencia de extracción de entidades. Durante la Fase 2, el ciclo de entrenamiento QLoRA carga los safetensors de OLMo 3 7B Think para el cómputo de gradientes. Una GPU no puede servir simultáneamente un proceso de inferencia vLLM activo y un ciclo de entrenamiento PyTorch — las direcciones de memoria entran en conflicto y el cambio de contexto entre kernels CUDA a esta escala no está soportado. nightly-run.sh establece el límite de forma explícita: la Fase 1 termina con stop-yoyo.sh, que drena el proceso vLLM y libera la GPU antes de que comience la Fase 2. Cada fase tiene un presupuesto de tiempo configurable, con un valor predeterminado de 7200 segundos (dos horas) cada una.

Fase 1 — Reconstrucción del DataGraph

Al inicio de la ventana nocturna, start-yoyo.sh arranca la VM de Elastic Compute #1 y espera hasta 90 minutos a que vLLM señale su disponibilidad. Una vez que el servidor de inferencia está activo, jennifer-datagraph-rebuild.sh procesa tres flujos de documentos del despliegue del operador: archivos markdown de transcripciones de reuniones, archivos YAML y markdown de investigación de agentes, y registros JSON de fuentes de contactos. Para cada documento, el script llama a POST :9080/v1/chat/completions a través de Doorman, que enruta la carga útil al modelo 32B Think en la VM de Elastic Compute. El modelo devuelve un arreglo JSON estructurado de entidades nombradas — personas, empresas, proyectos, cuentas y ubicaciones — restringido por una gramática JSON Schema para que la salida sea procesable por máquina sin postprocesamiento. El script luego llama a POST :9081/v1/graph/mutate en service-content para escribir esas entidades en LadybugDB. Un registro local de hashes de documentos procesados garantiza que cada documento se procese exactamente una vez en múltiples ejecuciones nocturnas.

Al finalizar la Fase 1, vLLM se detiene y la GPU queda libre.

Fase 2 — Entrenamiento del adaptador

corpus-threshold.py se ejecuta al inicio de la Fase 2. Cuenta los pares JSONL en dos buckets del corpus — engineering-pointsav (pares SFT extraídos de commits de ingeniería entre todos los clústeres) y apprenticeship-pointsav (pares DPO generados por el sustrato de enrutamiento de aprendizaje). Cuando alguno de los buckets alcanza 50 pares, el script escribe un archivo marcador de entrenamiento pendiente y, si la variable de entorno SLM_YOYO_WEIGHTS_GCS_BUCKET está configurada, sincroniza el directorio del corpus relevante con el bucket de GCS configurado.

En la VM de Elastic Compute, lora-training.sh verifica el directorio de entrenamiento pendiente cada 30 segundos. Cuando aparece un marcador, lo reclama mediante un renombrado atómico (añadiendo .claimed), descarga el corpus desde GCS y ejecuta QLoRA usando las bibliotecas peft, bitsandbytes y trl.

Qué es QLoRA

QLoRA (Quantised Low-Rank Adaptation) es un método de ajuste fino eficiente en parámetros que carga un modelo base en cuantización 4-bit NF4 y entrena un conjunto pequeño de matrices de peso adicionales — llamadas adaptador — en lugar de actualizar el modelo completo. Para un modelo de 7 mil millones de parámetros como OLMo 3 7B Think, la cuantización a 4 bits reduce la demanda de GPU de aproximadamente 14 GB (en bfloat16) a cerca de 6 GB, dejando margen suficiente en la L4 de 24 GB para el ciclo de entrenamiento. El adaptador apunta a siete capas de proyección lineal: q_proj, v_proj, k_proj, o_proj, gate_proj, up_proj y down_proj. El entrenamiento se ejecuta durante dos épocas con rango 16 (r=16), alpha 32 (lora_alpha=32), una longitud de secuencia máxima de 512 tokens y verificación de gradientes activada para gestionar la memoria de activaciones.

La configuración de entrenamiento es intencionalmente conservadora. El objetivo es desplazar el modelo base hacia el vocabulario, los patrones de formato y las convenciones estructurales que aparecen en los corpus de ingeniería y aprendizaje — no reentrenar el modelo en una tarea general. Dos épocas sobre cientos de pares son suficientes para este desplazamiento acotado.

Los dos flujos del corpus

Pares de ingeniería son pares SFT (ajuste fino supervisado) extraídos de diffs de commits reales, mensajes de commit y resúmenes de revisión de todos los clústeres del espacio de trabajo. Enseñan al modelo el vocabulario técnico preciso y los patrones estructurales utilizados en el flujo de trabajo de ingeniería: cómo se describen los diffs, cómo se formulan los comentarios de revisión y cómo se documentan las decisiones de implementación.

Pares de aprendizaje son pares DPO (optimización de preferencias directas) producidos por el sustrato de enrutamiento de aprendizaje. Cada par consiste en una respuesta en sombra (la salida sin guía del modelo) y una respuesta veredicto (la formulación preferida confirmada por el operador). El entrenamiento DPO sobre estos pares mueve el modelo hacia la distribución de respuestas preferidas sin requerir etiquetas explícitas para cada token.

Salida del adaptador y publicación

Cuando el entrenamiento finaliza, el adaptador se guarda en /data/weights/adapters/<tenant>/<role>/v<N>/ en la VM de Elastic Compute. El directorio del adaptador contiene los archivos de pesos LoRA y la configuración del tokenizador — el tamaño total es típicamente de 1 a 3 GB. Luego, lora-training.sh indica a adapter-publish.service que cargue el directorio del adaptador al bucket de GCS configurado. El adaptador queda disponible para que Doorman del espacio de trabajo lo cargue como una superposición de pesos en tiempo de inferencia sobre el modelo base mediante composición de adaptadores. El archivo marcador se renombra a .completed cuando todos los pasos se completan correctamente.

Entrenamiento de adaptadores versus preentrenamiento continuo

El proceso LoRA nocturno es entrenamiento de adaptadores. Produce un delta de pesos — unos pocos gigabytes de parámetros — que el modelo base carga en tiempo de inferencia. Se ejecuta en aproximadamente dos horas en una sola GPU L4 y opera sobre cientos a miles bajos de pares de entrenamiento. El modelo base en sí no se modifica.

El preentrenamiento continuo (CPT) es una operación distinta a una escala fundamentalmente diferente. El CPT produciría un nuevo checkpoint de modelo base entrenando sobre 50 a 100 mil millones de tokens en 8 a 32 GPUs de clase H100 durante una a cuatro semanas. El costo por ciclo de CPT asciende a decenas de miles de dólares. El CPT es activado por el operador, nunca automatizado, y nunca programado como parte del pipeline nocturno. El objetivo de primer corte para CPT es el primer trimestre de 2027, sujeto a volumen del corpus y decisión del operador. Hasta que se tome esa decisión, todo el entrenamiento nocturno es exclusivamente de adaptadores.

Estado actual

El código del pipeline nocturno está completo. El servicio de modelo de lenguaje del espacio de trabajo pasa 177 de 177 pruebas. La reconstrucción de la imagen Packer que incorpora el stack Python de entrenamiento (peft, bitsandbytes, trl) a la VM de Elastic Compute es la siguiente acción prevista del operador. Una vez desplegada esa imagen, se habilitará lora-training.service en la VM de Elastic Compute con systemctl enable --now lora-training.service. Hasta que la imagen sea reconstruida, la fase de entrenamiento opera en modo solo marcador: corpus-threshold.py escribe y despacha el marcador de GCS, pero lora-training.sh aún no está activo en la imagen de VM en producción.

Véase también

Important Information

Important Information

Corporate structure. PointSav Digital Systems ("PointSav") is a trade name of Woodfine Capital Projects Inc. ("Woodfine"). PointSav does not itself offer, sell, or solicit any security. Any securities offering associated with Woodfine's real-property direct-hold solutions is made exclusively by Woodfine, and only by means of the applicable Private Placement Memorandum.

No investment advice. This wiki's content is provided for engineering, operational, research, and development purposes. Nothing on this wiki constitutes investment advice or a solicitation to invest in any Woodfine partnership or direct-hold solution.

Intellectual property. The PointSav name, trade name, wordmark, and marks, together with all current and future PointSav- and Totebox-branded products, services, and offerings — and the software, source code, documentation, design system, and all related materials — are proprietary to Woodfine and its affiliates, except for components identified as open source. No rights are granted except as expressly set out in a written license or agreement. See TRADEMARK.md in this repository for the full trademark notice.

Open source components. Portions of the platform are made available under permissive open-source licenses identified in the accompanying repository. Use of those components is governed by their respective license terms.

No warranty; informational use. Content on this wiki is provided for general informational purposes only and does not constitute a representation, warranty, or commitment with respect to product functionality, availability, pricing, or roadmap. Some articles describe planned or intended features, capabilities, and milestones — language such as "planned," "intended," "targeted," "may," and "expected" marks this forward-looking content, which is subject to change and does not constitute a commitment regarding future performance.

Confidentiality. Where an article describes an operational or deployment detail that is not intended for public disclosure, that article is not published on this wiki. Content here is general-purpose engineering documentation, not customer-specific configuration.

Jurisdiction. Woodfine Capital Projects Inc. is organized in British Columbia, Canada. References to the Sovereign Data Foundation on this wiki describe a planned or intended initiative only, not a current equity holder or active governance body.

Changes to this notice. PointSav may update this notice from time to time; the version posted on this page governs.

Not a filing system. This wiki is not a securities filing system, an electronic disclosure repository, or a substitute for SEDAR+ or any other regulatory filing system. Formal securities filings are made through the applicable regulatory filing system, not through this wiki.

Full disclaimer. This notice supplements, and does not replace, the full Disclaimers article. In the event of any conflict, the full Disclaimers article governs.

Read the full disclaimer →