Sobre el proyecto

# Sistema de monitoreo CI Build-Eye **Build-Eye** - Sistema de monitoreo automatizado de compilaciones CI y análisis de causa raíz para vLLM-Ascend ## Descripción general del sistema Build-Eye es un sistema de monitoreo de compilaciones CI diseñado específicamente para el proyecto vLLM-Ascend, capaz de: - **Monitorear automáticamente** las compilaciones CI del repositorio vllm-project/vllm-ascend - **Clasificar inteligentemente** la causa raíz de los fallos de compilación (problema de código / problema de infraestructura / problema de interferencia) - **Generar sugerencias** de reparación de bajo costo y aplicables - **Archivar informes** estandarizados automáticamente en el repositorio build-eye ## Objetivos de monitoreo - Repositorio principal monitoreado: https://github.com/vllm-project/vllm-ascend - Repositorio de archivo: https://github.com/winson-00178005/build-eye.git ## Clasificación de causas raíz de fallos ### 1. Problemas de código del PR - Fallo de aserción en pruebas - Errores de compilación (CMake, clang) - Errores de importación de Python - Incompatibilidad con la API de vLLM - Problemas de compilación del kernel de Ascend ### 2. Problemas de infraestructura - Fallo del cache-service de K8s (cache-service.nginx-pypi-cache) - Runner no disponible - Problemas de hardware NPU (910B/910C/310P) - Problemas del toolkit CANN - Fallo de comunicación multi-tarjeta HCCL - Fallo al descargar la imagen Docker - Fallo de caché de Csrc - Tiempo de espera de compilación agotado ### 3. Interferencia por concurrencia de múltiples PR - Varios PR fusionados en poco tiempo - Diferencias en la matriz de versiones de vLLM - Competencia por recursos del Runner - Impacto de actualizaciones de la imagen CANN ## Inicio rápido ### 1. Configurar el token de GitHub Consulte `docs/token-setup.md` para configurar las claves necesarias. ### 2. Instalar dependencias ```bash pip install -r requirements.txt ``` ### 3. Activar manualmente el monitoreo ```bash python scripts/monitor/fetch_runs.py --output data/workflow_runs.json python scripts/monitor/collect_metadata.py --input data/workflow_runs.json --output data/build_metadata.json python scripts/classify/classifier.py --input data/build_metadata.json --output data/classifications.json python scripts/recommend/recommender.py --input data/classifications.json --output data/recommendations.json python scripts/report/generator.py --input data/recommendations.json --output reports/ ``` ### 4. Archivar informes ```bash python scripts/archive/archiver.py --input reports/ --repo https://github.com/winson-00178005/build-eye.git ``` ## Flujo de trabajo de GitHub Actions El sistema admite dos modos de activación: ### Sondeo programado Verifica automáticamente los fallos de compilación recientes cada 6 horas. Archivo de flujo de trabajo: `.github/workflows/monitor.yml` ### Activación manual Activación manual mediante `workflow_dispatch` de GitHub Actions. Parámetros opcionales: - `lookback_hours`: cuántas horas hacia atrás revisar (por defecto 24) - `dry_run`: modo de prueba (sin archivar) - `target_repo`: repositorio objetivo ## Estructura del proyecto ``` build-eye/ ├── .github/workflows/ │ └── monitor.yml # Flujo de trabajo de GitHub Actions ├── scripts/ │ ├── monitor/ # Módulo de monitoreo CI │ │ ├── github_client.py # Cliente de la API de GitHub │ │ ├── fetch_runs.py # Obtener workflow runs │ │ ├── collect_metadata.py # Recopilar metadatos │ │ └── config_loader.py # Carga de configuración │ ├── classify/ # Módulo de clasificación de fallos │ │ ├── classifier.py # Motor de clasificación │ │ ├── code_detector.py # Detección de problemas de código │ │ ├── infra_detector.py # Detección de infraestructura │ │ └── interference_detector.py # Detección de interferencias │ ├── recommend/ # Módulo de sugerencias de reparación │ │ ├── recommender.py # Generador de sugerencias │ │ └── templates.py # Plantillas de sugerencias │ ├── report/ # Módulo de generación de informes │ │ ├── generator.py # Generador de informes │ │ ├── formatter.py # Herramientas de formato │ │ └── summary.py # Generación de resúmenes │ └── archive/ # Módulo de archivado de informes │ ├── archiver.py # Archivador │ └── git_client.py # Cliente Git ├── config/ │ └── config.yaml # Configuración del sistema ├── templates/ │ └ example_reports.py # Ejemplos de informes ├── tests/ # Directorio de pruebas ├── docs/ │ └ token-setup.md # Guía de configuración de Token ├── reports/ # Directorio de salida de informes └ requirements.txt # Dependencias de Python └ requirements-dev.txt # Dependencias de desarrollo └ README.md # Este documento ``` ## Opciones de configuración ### config/config.yaml ```yaml target_repository: owner: vllm-project repo: vllm-ascend url: https://github.com/vllm-project/vllm-ascend branch: main monitored_workflows: - pr_test_full.yaml - pr_test_light.yaml archive_repository: owner: winson-00178005 repo: build-eye url: https://github.com/winson-00178005/build-eye.git monitoring: polling_interval_hours: 6 lookback_hours: 24 ``` ### Variables de entorno - `GITHUB_TOKEN`: token de acceso a la API de GitHub - `ARCHIVE_TOKEN`: token de escritura del repositorio de archivo - `TARGET_REPO_OWNER`: propietario del repositorio objetivo - `TARGET_REPO_NAME`: nombre del repositorio objetivo ## Formato del informe Cada informe contiene: - Frontmatter YAML (metadatos) - Resumen (1-2 frases) - Análisis de causa raíz (clasificación, confianza, razonamiento) - Evidencia (patrones coincidentes, enlaces, fragmentos de registro) - Sugerencias de reparación (sugerencia prioritaria, pasos detallados) - PR relacionados (solo clasificación de interferencia) Ruta de archivado del informe: `reports/YYYY/MM/DD/<clasificación>-pr-<número>.md` ## Ejecutar pruebas ```bash pip install -r requirements-dev.txt pytest tests/ ``` ## Extender el pipeline nightly El sistema ya está diseñado para admitir el monitoreo del pipeline nightly; solo hay que añadir en la configuración: ```yaml target_repository: monitored_workflows: - schedule_nightly_test_a2.yaml - schedule_nightly_test_a3.yaml ``` ## Mantenimiento y extensión ### Añadir nuevas reglas de clasificación Añada un nuevo detector en `scripts/classify/`: ```python def detect_new_pattern(log_excerpt: str) -> dict: patterns = [...] # Implementar la lógica de detección ``` Luego llámelo en `classifier.py`. ### Añadir nuevas plantillas de sugerencias Añada nuevas plantillas en `scripts/recommend/templates.py`. ## Licencia Apache License 2.0 - consulte el archivo LICENSE para más detalles ## Contacto Comentarios: https://github.com/winson-00178005/build-eye/issues