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.