Spaces:
Running
Running
File size: 4,865 Bytes
d4bc59b 20ea7ff d4bc59b 20ea7ff e26d94c d4bc59b 8595143 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 | # 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.
|