Spaces:
Running
Running
| # Migracion FastText Con pgAdmin Y Google Colab | |
| ## 1. Antes De Modificar RDS | |
| 1. Publica esta version en la rama `hf-deploy` de GitHub. | |
| 2. Crea un snapshot de RDS. | |
| 3. Pausa el Space de Hugging Face y cualquier job de sincronizacion. | |
| 4. No ejecutes todavia los cargadores de Colab. | |
| ## 2. Migrar Desde pgAdmin | |
| En pgAdmin selecciona la base `nlp_vectors`, abre **Tools > Query Tool**, carga el | |
| archivo `sql/pgadmin_migrate_fasttext_300.sql` y ejecutalo completo. | |
| El script hace en una sola transaccion: | |
| - valida que ambas columnas sigan siendo `VECTOR(16)`; | |
| - elimina las funciones e indices incompatibles; | |
| - trunca solamente `place_embeddings` y `post_embeddings`; | |
| - cambia ambas columnas a `VECTOR(300)`; | |
| - reconstruye HNSW, funciones y permisos; | |
| - confirma al final la dimension y que ambas tablas quedaron vacias. | |
| No lo ejecutes una segunda vez: esta protegido y abortara si ya encuentra | |
| `VECTOR(300)`. | |
| ## 3. Preparar Secrets En Colab | |
| En el panel **Secrets** de Colab agrega y habilita **Notebook access** para: | |
| | Nombre | Requerido | Uso | | |
| |---|---:|---| | |
| | `PGVECTOR_WRITER_PASSWORD` | Si | Password del rol `nlp_writer`. | | |
| | `MAIN_API_INTERNAL_TOKEN` | Solo si aplica | Token para leer lugares/posts de la API principal. | | |
| | `HF_TOKEN` | No | Puede ayudar con la descarga, pero el modelo es publico. | | |
| Los scripts incluyen los valores no secretos actuales del host, base, usuario y URL | |
| principal. Tambien puedes sobrescribirlos con Secrets llamados | |
| `PGVECTOR_HOST`, `PGVECTOR_DATABASE`, `PGVECTOR_WRITER_USER` y | |
| `MAIN_API_BASE_URL`. | |
| La URL base actual es `http://3.212.166.108`. No agregues `/api/v1` al valor de | |
| `MAIN_API_BASE_URL`, porque los paths de lugares y publicaciones ya incluyen ese | |
| segmento. Si existe un Secret `MAIN_API_BASE_URL` en Colab, actualizalo o eliminalo | |
| para evitar que reemplace este valor. | |
| ## 4. Permitir Temporalmente La IP De Colab | |
| RDS debe ser accesible desde el runtime. Obten la IP publica actual en una celda: | |
| ```python | |
| !curl -s https://api.ipify.org | |
| ``` | |
| En el Security Group de RDS agrega temporalmente una regla de entrada TCP 5432 con | |
| origen `<IP_OBTENIDA>/32`. No uses `0.0.0.0/0`. Elimina la regla cuando terminen | |
| ambas cargas. | |
| Si RDS es privado y no tiene una ruta publica, Colab no podra conectarse directamente; | |
| en ese caso ejecuta los jobs desde una instancia dentro de la VPC. | |
| ## 5. Ejecutar Las Cargas | |
| En un runtime de Colab con memoria suficiente: | |
| ```python | |
| !git clone --branch hf-deploy https://github.com/AlleksDev/Frimeet-API-NLP.git | |
| %cd Frimeet-API-NLP | |
| ``` | |
| Primero lugares: | |
| ```python | |
| !python scripts/colab_initial_load_places.py | |
| ``` | |
| Se recomienda ejecutar los archivos con `!python` como arriba. Tambien puedes copiar | |
| el contenido completo de cada script en una celda vacia y ejecutarlo directamente: | |
| si no existe el repositorio, el propio script clonara `hf-deploy`. En ese modo ignora | |
| los argumentos internos de Jupyter. Si no configuraste `PGVECTOR_WRITER_PASSWORD` en | |
| Secrets, mostrara una entrada oculta para solicitarlo. | |
| Despues publicaciones, reutilizando dependencias y el modelo ya descargado: | |
| ```python | |
| !python scripts/colab_initial_load_posts.py --skip-install --skip-download | |
| ``` | |
| Para una prueba sin escrituras se pueden agregar `--dry-run --max-pages 1`. Para una | |
| carga pequena real usa solamente `--max-pages 1`; despues puedes ejecutar otra vez | |
| sin esa opcion y el job completara los registros faltantes. La ejecucion completa no | |
| debe usar `--dry-run` ni `--max-pages`. El resultado correcto termina con `errors=0` | |
| y el mensaje de carga terminada. | |
| ## 6. Verificar Desde pgAdmin | |
| Despues de ambas cargas abre nuevamente Query Tool y ejecuta el contenido de | |
| `sql/verify_fasttext_embeddings.sql`. Debe mostrar: | |
| - filas mayores que cero; | |
| - dimensiones minima y maxima iguales a `300`; | |
| - modelo `facebook/fasttext-es-vectors`; | |
| - version `common-crawl-300-v1`; | |
| - normas cercanas a `1`. | |
| Finalmente elimina la regla temporal del Security Group, actualiza las variables del | |
| Space y despliega la nueva imagen. | |
| ## Recargar Cuando Cambie La Ponderacion | |
| Cambiar tags, categorias o pesos no requiere otra migracion SQL porque la dimension | |
| continua siendo 300. Publica el codigo y ejecuta nuevamente solamente: | |
| ```python | |
| !git -C /content/Frimeet-API-NLP pull origin hf-deploy | |
| !python /content/Frimeet-API-NLP/scripts/colab_initial_load_places.py --skip-install --skip-download | |
| ``` | |
| El hash `weighted-tags-v2` obliga al job a recalcular todos los lugares y hacer | |
| `UPSERT`. No ejecutes `TRUNCATE`, no alteres la columna y no vuelvas a ejecutar | |
| `pgadmin_migrate_fasttext_300.sql`. Al finalizar puedes actualizar estadisticas desde | |
| Query Tool: | |
| ```sql | |
| VACUUM (ANALYZE) public.place_embeddings; | |
| ``` | |
| Finalmente ejecuta `sql/verify_weighted_place_embeddings.sql`. Los valores | |
| `total_places` y `weighted_v2_places` deben coincidir y las dimensiones minima y | |
| maxima deben seguir siendo 300. | |