En
el
mundo
continuamos
con
los
talleres
de
nuestro
hackathon,
somos
600M.
Como
sabéis,
nuestros
objetivos
son
crear
recursos
diversos,
abiertos
y
de
calidad
de
procesamiento
del
lenguaje
natural
en
español.
Ya
hemos
tenido
un
taller
que
acaba
de
terminar.
Super
interesante
con
Gabriel
de
Agila,
es
ingeniero
de
Machine
Learning
allí
y
nos
ha
explicado
cómo
crear
data
sets
de
calidad
utilizando
Agila
y
Distill
Label,
que
son
los
herramientas
que
han
desarrollado.
Y
por
el
principio
nos
ha
enseñado
su
caso
de
uso,
el
modelo
Notus.
O
sea,
su
caso
de
uso,
sí,
que
tuvieron
mucho,
mucho
éxito,
caso
de
éxito,
eso,
del
modelo
Notus.
Y
después
nos
ha
enseñado
cómo
podemos
utilizar
estas
herramientas
para
desarrollar
nuestros
propios
data
sets
y
después
de
utilizarnos
para
entrenar
nuestros
LLMS.
Ahora
vamos
a
continuar
con
la
importancia
de
la
calidad
de
los
bases
de
datos
con
Manu
Romero,
a
quien
le
doy
la
bienvenida.
Bueno,
casi
todo
el
mundo
aquí
ya
le
conocerá,
ha
dado
un
montón
de
charlas
para
somos
un
LPA
y
también
en
todo
lo
que
es
el
ecosistema
de
Hi-In
Face
le
conocemos
mucho
porque
ha
entrenado
un
montón
de
modelos.
Creo
que
ya
oficialmente
has
llegado
al
500,
Manu.
-Más
cierto,
de
seguro
más
cierto.
-Incredible.
Entonces,
bueno,
obviamente
es
una
persona
muy
indicada
para
enseñarnos
cómo
hacer,
bueno,
entrenar
estos
modelos
y
también
a
la
que
yo
creo
que
vamos
a
hacerle
caso,
sí,
todavía
nos
ha
quedado
claro
que
necesitamos
data
sets
de
calidad
para
entrenar
nuestros
modelos.
Entonces,
bueno,
bienvenido,
Manu.
Muchísimas
gracias
por
preparar
este
taller
y
comparto
tu
collab
y
todo
tuyo.
Para
la
gente
que
no
estáis
viendo
en
directo,
podéis
preguntar
las
preguntas
en
el
chat
y
yo
al
final
del
taller
se
las
voy
leyendo
a
Manu.
Vale.
Adelante,
todo
tuyo.
-Vale,
pues,
bueno,
no
sé
si
veis
bien
el
cola
o
quieres
que
haga
un
poquito
de
zoom.
-Igual,
un
poquito
más.
-Sí,
así,
una
cosa
así.
-Un
poquito
más.
-Venga.
-Ay,
yo
creo,
para
que
vean
bien
el
código
y
tal.
-Vale,
si
no
me
interrumpen,
María,
y
vamos,
voy
haciendo
zoom.
Vale,
bueno,
pues,
cuando
hablaba
con
María
un
poco
de
algo
muy
importante,
¿no?
Que
está
tomando
mucha
relevancia
en
el
mundo
del
NLLP
o
en
concreto
en
el
mundo
de
los
LLMs,
pues
consideramos
que
ya
tocaba
un
poco
crear
igual
un
ejemplo
en
tu
N
de
principio
a
fin
de
cómo
la
calidad
de
los
datos
sobre
la
cual
entramos
en
nuestro
modelo,
ya
sea
fine
tuning
o
incluso
pretraining,
pues
afecta
en
la
calidad
también
del
modelo
resultante.
Al
final,
¿no?
Hay
una
ley,
¿no?
En
programación
se
dice
mucho
de
"Gerbichin,
Gerbichout",
¿no?
Que
es
como
si
insertamos
basura
o
obtenemos
basura
y
los
LLMs
no
son
la
excepción,
¿no?
Todo
es
creo
que
como
modelos
como,
por
ejemplo,
FI2
de
Niklosov,
que
tú
el
mundo
lo
conocerás
o
stable
LLM,
la
versión
2
también,
que
son
modelos
más
pequeños,
pero
que
consiguen
un
rendimiento
bastante
importante
gracias
a
entrenar
en
datos
sintéticos
de
alta
calidad,
especialmente
el
libro
de
texto,
¿no?
Es
una
como
algo
muy
natural,
¿no?
De
cómo
nos
enseñan
nosotros,
¿no?
Nos
enseñamos
cuando
íbamos
a
la
escuela,
al
colegio
o
al
instituto,
¿no?
Basado
en
el
libro
de
texto,
pues
generando
esos
libros,
porque
lamentablemente
no
hay
mucho
digitalizado
de
ese
estilo
y
menos
en
español,
digamos,
que
se
consigue,
¿no?
Datos
de
calidad
que
como
resultado
dan
modelos
que
luego
rinden
muy
bien
en
los
Benzbar
y
no
es
que
lo
diga
yo,
sino
que
ahí
están
modelos
como
FI2,
de
los
billones
de
parámetros,
que
se
acerca
a
algún
modelo
de
7
billones,
¿no?
Mucho
más
grande.
Pues,
bueno,
vamos
a
ver
un
poco
eso,
¿no?
Es
ejemplo
de
Entwenn,
en
el
que
veremos
también
cómo
hacerle
el
FI2
y
no
al
modelo,
¿no?
Si
alguien
quiere
reproducir
el
experimento
entero.
Y,
bueno,
como
dice
María,
yo
creo
que
conocerme,
me
conocéis
todo
ya,
pero,
bueno,
un
poco
acerca
de
mí.
Ahora
estoy
trabajando
de
CSO
en
Maesha,
que
es
como
se
han
renombrado
la
antigua
Kiribren.
Y,
bueno,
colaboró
bastante
con
Javi
and
Faiths.
Hoy,como
ha
dicho
María,
pues,
de
las
personas
que
más
modelos
se
ha
aportado
al
Javno,
algunos
de
ellos
con
muchísimas
descarga
al
me,
20
millones
de
descarga,
el
bajador
de
Javi
and
Faiths,
también,
participé
en
el
proyecto
de
BigSci
and
the
Big
Code,
que
era
como
una
especie
de
intento
de
hacer
un
GPT3
abierto
a
todo
el
mundo
y
un
co-pilot,
¿no?
Para
código
también
abierto.
Y,
bueno,
antes
de
esto,
estaba
en
narrativa,
también
como
ingeniero
de
NLP,
con
María,
cofundé,
somos
NLP,
y
mi
formación
es
Computer
Science,
hago
ingeniería
informática
y
hasta
que
me
metí
hace,
pues,
no
sé,
ya
cinco
o
seis
años,
¿no?
En
esto
de
la
día,
en
concreto,
de
los
modelos
de
lenguaje,
pues,
ha
hecho
bastante
bacan.
Y,
bueno,
pasemos,
no
directamente,
a
ver
un
poco
los
beneficios,
¿no?
de
entrenar,
porque
aunque
lo
que
vamos
a
ver
es
un
ejemplo
de
fine-tuning
realmente
en
el
pre-training
también,
en
la
fase,
estátos
fases,
¿no?
Que
tienen
los
modelos
de
lenguaje,
pre-training
y
post-training,
pues,
tienen
la
de
pre-training,
también
es
muy
importante,
igual
de
importante
o
más,
que
tengamos
esos
datos
de
calidad,
¿no?
Que
ese
corpus
sea
de
calidad.
Entonces,
¿qué
beneficios
tiene
de
eso?
Pues,
tiene
beneficios
como
es
alignment,
¿no?
O
alineación
y
adquisición
de
conocimiento,
ya
que
estos
datos
de
alta
calidad,
pues
aseguran
que
el
modelo
aprende
información
precisa,
de
ahí
que
se
utilicen
muchos
libros
de
texto,
últimamente,
comportamiento
apropiado,
¿no?
Qué
es
crucial
para
que
el
modelo,
pues,
pues
se
alinea
al
final
con
objetivos
humanos
y
adquiera
conocimiento
durante
ese
pre-training.
Con
ello
también
conseguimos
que
tenga
un
mayor
rendimiento
y
capacidad
de
generalización,
¿no?
Entrenas
con
datos
de
mala
o
baja
calidad,
puede
afectar
muy
negativamente
al
rendimiento
de
esto.
Mientras
con
datos
de
alta
calidad,
pues,
ayudan,
por
ejemplo,
a
reducir
seco
y
mejoran
la
capacidad
de
fiabilidad
y
capacidad
de
generalización
que
tiene
el
modelo,
que
acerna
en
lo
que
importa,
¿no?
¿Cómo
devuelve
generalizando
ese
modelo?
¿Respondiendo
o
enfrentando
ese
escenario
que
no
ha
visto,
¿no?,
en
su
dato
de
entrenamiento?
El
modelo
de
lenguaje
y,
en
general,
todos
los
modelos
de
día
se
entrenan
con
ese
propósito,
¿no?
Con
que
rindan
bien
en
casos
que
no
han
visto
durante
el
entrenamiento,
porque
en
casos
que
han
visto
durante
el
entrenamiento,
ya
suponemos
que
rindan
bien.
Y
si
le
preguntamos
por
las
mismas
cosas
que
ha
visto,
seguramente
se
la
sepa,
pero
de
memoria,
¿no?
Tenéis
en
cuenta
que
estamos
hablando
de
modelos
de
billones
de
parámetros,
con
lo
cual,
a
la
vez,
es
probable
que
memoricen
cierto
contenido.
Es
bueno
también
que
tengamos
datos
de
calidad
de
cada
la
eficiencia
y
escalabilidad,
¿no?
La
calidad
de
los
datos
afecta
significativamente
a
la
eficiencia
del
proceso
de
entrenamiento.
Datos
de
alta
calidad
permiten
una
escalabilidad
más
eficiente
de
los
parámetros
del
modelo
y
pueden
conducir
un
modelo
más
eficiente
también
en
términos
de
cómputo.
Esto
quiere
decir
que
si
tengo
muchos
datos,
pero
muy
noisy,
o
contienen
información
que
no
aporta
mucho
valor
o
información
que
realmente
no
le
hace
al
modelo
aprender
nada
nuevo,
pues
seguramente
el
data
es
muy
grande,
llevará
más
tiempo
que
el
entrenamiento,
que
el
modelo
vea
todo
ese
texto
de
manera
completa,
pero
al
final
no
tiene
por
qué
tener
ese
modelo
que
obtengamos,
mayor
rendimiento
que
un
modelo
que
ha
visto
menos
tokens
o
que
el
data
se
den
más
pequeño,
es
un
data
set
más
condensado
en
datos
que
realmente
aportan
información,
como
son,
me
repito
una
vez
más,
no,
los
libros
de
texto.
También
un
córpulte
de
calidad
va
en
pro
de
la
diversidad
de
los
datos
y
experiencia
en
el
dominio,
¿no?
Un
conjunto
de
datos
diversos
y
de
alta
calidad,
pues,
permitan
los
LNN
a
los
LNM,
perdón,
adquirir
un
amplio
rango
de
conocimiento
y
demostrar
fuertes
habilidades
de
generalización
en
varios
dominios,
¿no?
Los
conjuntos
de
datos
especializados,
pues,
tambiénpueden
proporcionar
los
LNN
habilidades
específicas
para
resolver
problemas.
Luego,
desde
el
punto
de
vista
del
preprocesamiento
y
gestión
de
datos,
pues,
la
gestión
efectiva
de
datos,
no
incluyendo
estrategias
de
procesamiento
como
la
de
duplicación,
filtrados
de
calidad,
filtrados
por
toxicidad,
pues,
al
final,
acaba
siendo
esencial
para
construir
datas
adecuadas,
¿no?
Y
este
proceso,
especialmente
el
preprocesing
que
le
llamamos,
influye
especialmente
en
la
capacidad
del
modelo
para
aprender
de
manera
más
eficiente
y
desempeñar
nuevas
tareas.
Luego,
futuras
direcciones
y
desafíos,
en
este
área
de
crear
data
set
de
calidad,
pues,
hay
un
enfoque
creciente,
como
he
comentado,
en
mejores
conjuntos
de
datos
para
el
pre-training,
en
lugar
de
entrenar
con
todos
los
datos
disponibles.
El
equilibrio
entre
la
calidad
y
la
cantidad
de
los
datos
sigue
siendo
un
área
de
investigación
activa
a
día
de
hoy.
Los
datos
de
alta
calidad,
pues,
pueden
permitir
entrenar
modelos
más
pequeños
que
desempeñan
de
manera
comparable
a
modelos
grandes,
como
estamos
comentando,
el
caso
de
FII,
de
Stable
LM2,
de
Stability.
Pero
esto
también
implica
que
existen
esos
riesgos
como
sobreajuste,
¿no?
Al
final,
que
overfitting,
que
se
conoce
el
término,
como
que
aprendan
de
memoria.
Y
los
sensibles
que
puedan
ser
al
pronto.
Bueno,
visto
un
poco
esto
de
la
que
sería,
por
así
decirlo,
como
la
teoría.
En
esa
fase
de
pre-training,
sin
ir
mucho
más
lejos,
el
viernes
pasado,
creo,
que
aparecía
el
paper
de
Yi.
Yi
es
una
familia
de
LLMS
de
6
y
34
billones
de
parámetros
entrenado
en
un
corpus
paralelo
de
inglés
y
chino.
Y
bueno,
es
uno
de
los
modelos
que
rinde
estado
del
arte,
¿no?
Entonces,
salió
ese
paper
y
creo
que
analizar
un
poco
por
encima
qué
han
hecho
ellos
para
adquirir
ese
data
set
de
calidad,
pues,
viene
muy
bien
con
respecto
a
lo
que
queremos
ver,
¿no?
De
la
importancia
de
la
calidad
de
los
datos.
Y
es
que
si
nos
fijamos
en
el
paper,
luego
pasa
el
Colab,
¿no?
Para
que
podáis
analizar
el
pipeline
este
que
habéis
aquí
de
filtro
de
datos,
¿no?
Pero
la
visión
general
un
poco
que
tenían
es
que,
pues,
el
objetivo
era
crear
datos
de
entrenamiento
blingues,
como
decía,
inglés
y
chino,
de
alta
calidad,
¿no?
A
partir
de
la
web,
¿no?
Que
es
de
donde
se
parte
la
mayoría
de
las
veces.
Esto
implica,
pues,
usar
herramientas
específicas
para
identificar
idiomas
y
limpiar
esos
datos,
¿no?
Que
nos
van
a
venir
de
la
web
donde
nos
podemos
encontrar
datos
en
todo
tipo
de
idiomas.
Y,
pues,
a
la
hora
de
limpiar
datos,
pues,
podemos
encontrar
desde
algo
que
aporta
muy
poco
valor
o
ninguno,
pues,
hasta
como
decía,
¿no?
Pues,
blog
posts
o
algún
tipo
de
publicación
que
sí
que
es
informativa,
que
da
mucho
detalle,
¿no?
Y
que
puede
hacer
que
el
modelo,
pues,
aprenda
mejor.
Y
algunos
pasos
que
se
ven
en
el
diagrama
de
limpieza,
pues,
son
filtros
jurísticos,
¿no?
¿Cómo
se
eliminan
textos
de
mala
calidad?
Pues,
por
ejemplo,
URL,
¿no?
Que
sean
consideradas,
pues,
que
apunten,
¿no?
A
sitios
que
ya
sabemos
que,
pues,
como
algún
foro,
¿no?
Donde,
por
ejemplo,
pues,
haya
como
un,
se
utiliza
un
lenguaje
tóxico
o
sepamos
que
el
propósito
de
ese
foro
no
es
aportar
nada
de
concimiento
o
un
dominio
y
texto
sin
sentido,
también,
eliminarlo.
Luego
también
se
filtra
por
longitud
del
documento
inadecuada,
documento
muy
largo,
documento
demasiado
corto,
documentos
que
contengan
símbolos
especiales,
¿no?
Caracteres
que,
bueno,
pues,
que
el
modelo
no
entienda
o
que
directamente
también
tengan
líneas
que
no
están
finalizadas,
contenido
repetitivo
también
se
filtra,
¿no?
Para
que
el
modelo
no
memorice.
Un
paso
muy
importante,
¿no?
Eliminar
de
toda
esa
información
que
hayamos
recabado
de
la
web,
la
información
personal,
como
correo
electrónico,
números
de
teléfono,
nombre
de
personas,
registros
médicos,
etcétera.
Luego
hay
otro
tipo
de
filtros,
¿no?
Como
pueden
ser
filtros
aprendidos
que
usan
métodos
avanzados
para
tratar
contenido
complicado,
¿no?
Especialmente
estos
lo
usan
para
chino,
pues,
que
se
basa
en
descartar
documentos
queson
demasiado
confuso
de
baja
calidad
y
eliminar
documentos
que
son
incoherentes
o
tienen
contenido
peligroso.
Y
luego
hay
filtros
basados
en
agrupaciones.
Agrupaciones,
aquí
quiere
decir
en
este
caso,
clúster,
¿no?
Que
agrupar
esos
documentos,
¿no?
Sobre
los
que
se
quiere
realizar
el
pretraign
en
clúster
para
evaluar
y
mejorar
la
calidad
de
manera
más
efectiva.
Y
por
último,
de
duplicar,
¿no?
De
duplicar
se
ha
demostrado
que
tiene
unos
efectos
muy
positivos
en
la
calidad
del
modelo
final
que
obtenemos.
Vale,
pues
el
resultado
que
consiguen
en
Gino
haciendo
este,
por
supuesto,
este
tipo
de
filtrado,
más
todo
el
training,
¿no?
Pues
producen
un
conjunto
de
datos
al
final
de
3,1
billones
de
palabras.
En
realidad
son
tokens
de
alta
calidad
en
inglés
y
chino.
Este
conjunto
de
datos
es
más
limpio
y
verso
en
comparación
que
otro.
Y
como
hablábamos,
¿no?
En
parte
debido
a,
pues,
esos
métodos
efectivos
del
impiesto
y
filtrado.
Con
lo
cual
recalco,
¿no?
Esa
preprocesing
es
crítico,
porque,
bueno,
ya
sabemos
que
si
tenemos
muchas
GPUs
y
el
arquitectura
transformer,
pues,
obviamente,
van
saliendo
algunas
modificaciones
especial,
sobre
todo
en
el
tema
de
embeddings,
¿no?
¿De
qué
tipo
de
embeddings
se
utilizan
para
trabajar
con
contextos
más
largos
o
variaciones
en
el
mecanismo
de
atención
para
que
también
permita
o
trabajar
con
contextos
más
largos
o
que
no
sea
tan
costoso
en
términos
de
complejidad
espacio
temporal?
Pero
al
final,
eso
varía
muy
poco
y
lo
que
se
está
demostrando
que
importa
mucho
y
de
ahí
el
sentido
también
de
este
jacazón
es
tener
datos
de
calidad.
Y,
bueno,
como
muestra
un
botón,
por
así
decirlo,
y
este
modelo,
¿no?
El
que
estábamos
hablando,
que
han
hecho
este
preprocesado
tan
exquisito,
pues,
aquí
tenemos
subversiones
en
los
benchmarks
de
6
y
34
billones,
que
vemos
que,
bueno,
en
su
tamaño,
pues,
rivaliza
con
modelos,
pues,
con
otros
modelos
OpenSoul
como
Llamados,
NoFalcon,
etcétera.
Aquí
tenemos
el
benchmark
como
el
MMLU,
BitspanHard,
etcétera.
Y
luego
en
otros,
como
matemáticas
y
código,
digamos
que
teniendo
en
cuenta
la
limitación
de
esos
billones
de
parámetros,
pues,
es
un
modelo
que
está
estado
del
arte
con
otros
modelos,
con
otros
grandes
que,
seguro
que
no
suenan
a
todos
como
son
Mistral,
Llamados,
no,
etcétera.
Entonces,
vale.
Aquí
os
dejo
el
paper
para
que
os
lo
leáis,
si
queréis.
Yo
os
lo
recomiendo
mucho,
porque
ya
os
digo
que
modelos
de
estado
del
arte,
pues,
digamos
que
desvelan
bastantes
ingredientes
que
son
importantes
a
la
hora
de
realizar
ese
pre-training
y
a
la
hora
de
generar
datos
de
calidad.
Entonces,
lo
que
vamos
a
ver
ahora
es
cómo
hacer
fine
tuning,
digamos
que
esto
ya
pertenece
a
la
parte
del
post-training,
de
cuando
ya
hemos
pre-entrenado
y
ahora
queremos
ajustar
el
modelo,
como
sabéis,
para
resolver
un
problema
concreto,
pues,
como
en
esa
parte,
efectivamente,
también
la
calidad
de
los
datos
importa.
Entonces,
para
este
ejemplo,
lo
que
he
creado
son
dos
data
sets,
son
data
sets
de
traducciones
de
inglés
a
español,
con
lo
cual
haríamos
fine
tuning.
Vamos
a
hacer
fine
tuning
a
un
modelo
para
que
nos
sirva
como
traductor.
Y
he
creado,
como
os
decía,
dos
data
sets.
Uno
con
traducciones
de
alta
calidad
para
las
cuales
he
usado
GPT4
y
otro
de
traducciones
de
mala
calidad
entre
comillas.
Para
ese
data
set,
también
he
usado
GPT4,
pero
especificando
en
el
PROM
que
era
un
traductor
de
baja
calidad
y
que
con
lo
cual
podía
cometer
algún
tipo
de
error.
Entonces,
bueno,
aquí
como
veis,
cargamos--
Esto
es
una
muestra
de
los
dos
data
sets
de
training,
el
data
set
con
la
traducción
de
calidad
y
el
data
set
con
las
traducciones
de
mala
calidad.
Aquí
vemos
que
en
esta
muestra
tenemos
20
ejemplos
de
cada.
Las
pasamos
a
pandas.
Es
muy
fácil,
como
veis,
convertir
un
data
set
de
Javier
Feis
a
pandas
para
que
podamos
hacer
el
display.
Y
aquí
si
nos
fijamos
en
las
traducciones,
el
data
set
que
voy
a
utilizar
para
entrenar
de
calidad,
pues
bueno,
podemos
echar
un
vistazo.
Pero
vemos
queestán
bastante
bien.
No
hay
ningún
tipo
de
error
gramatical,
ni
ninguna
traducción
literal,
etcétera.
No
sé
si
María
os
ha
compartido
el
cola,
si
no
lo
voy
a
compartir
yo,
pero
podéis
verlo.
Luego,
con
el
data
set
de
mala
calidad,
de
traducción
de
mala
calidad,
pues
ya
podemos
ver
que
hay
cosas
no
o
hay
algunas
traducciones
que
no
son
del
todo
correctas.
Por
ejemplo,
esta,
dónde
puedo
aparcar,
where
can
I
park,
de
donde
puedo
estacionar.
Me
gustaría
la
número
16.
Me
gustaría
alquilar
un
coche.
Me
gustaría
rentar
un
carro.
Vemos
que
es
como
un
poco
literal.
Aquí
tenemos
también,
por
ejemplo,
cómo
puedo
cancelar
mi
reserva.
Necesito
y
la
traducción
sería
necesito
cancelar
mi
reservación,
no?
No
cual
tampoco
es
muy
exacto.
Y
otro
tipo
de
errores
que
podemos
aquí,
como
veis
ésta,
me
gustaría
crear
una
reserva
para
la
cena
para
dos
personas
y
quiero
hacer
una
reserva
de
cena
para
dos.
Ésta
estaría
bien,
sinceramente.
Pero
hay
otras,
como
decía,
que
contienen
algún
error
que
es
probable,
que
en
errores
de
menos,
que
en
errores,
perdón,
que
con
modelos
de
traducción
de
menos
calidad,
pues
sea
comunes,
¿no?
Se
puedan
cometer.
Entonces,
una
vez
que
tenemos
esos
dos
data
sets
que,
como
digo,
los
arepúblicos,
por
si
alguien
quiere
reproducir
el
ejemplo
en
tuen,
pues
tendríamos
que
hacerle
fine
tuning.
Entonces,
yo
lo
que
he
hecho
para
hacer
fine
tuning,
bueno,
aquí
tenemos
que
estas
traducciones
reflejan
errores
comunes,
¿no?
Como
traducciones
literales,
que
lo
que
habíamos
dicho,
terminó
lo
que
era
incorrecta
y
errores
gramaticales
típicos
de
traducción
de
baja
calidad.
Una
vez
tenemos
esos
dos
data
sets
que
he
creado
de
mil
ejemplos
cada
uno,
pues
lo
siguiente
sería
hacer
fine
tuning
a
dos
modelos.
Uno,
en
el
data
set
de
traducción
de
calidad,
yo
tengo
en
el
data
set
de
traducciones
que
no
tienen
esa
calidad.
Entonces,
en
este
caso,
aprovechando
también
que
han
salido
hace
15
días,
pues
he
utilizado
los
modelos
GEMMA
de
Google,
en
concreto
los
de
2
billones
de
parámetros,
para
que
cualquiera
pueda
reproducir
el
experimento
en
un
colap
gratuito.
Y
le
he
posh
hecho
fine
tuning.
Y
lo
siguiente,
¿no?
Es
un
poco
que
os
quiero
enseñar,
es
cómo
le
hacemos
ese
fine
tuning,
que
aunque
lo
he
contado
como
dice
María
muchas
veces,
pues
estoy
buscándolo.
Aunque
lo
he
contado
muchas
veces,
pues
bueno,
no
está
demasiado.
Vale,
yo
creo
que
está
aquí.
Si
no
se
ve,
María
me
lo
dice.
Vale.
Creo
que
se
ve
bastante
bien,
¿no?
Y
bueno,
en
este
caso,
he
aprovechado
un
colap
que
ya
tenía,
¿vale?
En
el
que
para
ilustrar
el
proceso
de
fine
tuning,
porque
es
exactamente
igual
donde
le
hacíamos
fine
tuning
a
GEMMA
2
billones,
pero
en
el
data
set
Open
Hermes,
usando
Polora,
que
ahora
comentaremos.
Open
Hermes
es
efectivamente
un
data
set
de
instrucciones,
contiene
un
millón
de
instrucciones
de
alta
calidad.
Ahora
mismo
el
data
set
en
el
Hub
está
en
inglés.
A
ver
si
en
este
Hub,
a
Zom,
nos
sincronizamos
y
colaboramos
y
creamos
algo
así
en
español.
Pero
es
el
data
set
de
instrucciones
sintéticas
de
mayor
calidad
que
hay
en
el
Hub
de
Javi
Pace.
Y
de
hecho,
muchos
de
los
modelos
que
están
en
estado
del
arte
o
que
opcionen
mejor
puntuación
en
la
leaderboard
de
modelos
y
demás
Benchmark,
pues
son
resultados
de
hacerle
fine
tuning
en
este
data
set
que
vamos
a
ver
ahora.
Entonces,
lo
típico
de
siempre,
he
instalado
la
versión
de
Torch
que
veis
aquí,
la
211,
por
temas
de
que
puede
ir
un
poco
más
rápido,
¿no?
Es
un
poco
recomendado.
Lo
siguiente
sería,
para
trabajar
con
Gemma
había
que
instalar
esta
versión
de
Transformer,
si
instaláis
la
última
os
va
a
ir
igual.
Instalamos
Transformer,
Reformer,
Learning,
porque
tiene
un
wrapper
para
Supervised
Fine
Tuning
en
lo
que
vamos
a
hacer,
que
nos
ayuda
a
un
sincrisis
de
la
vida.
Instalamos
Peth,
porque
vamos
a
hacer
fine
tuning
utilizando
adapters.
El
que
quiera
logger
su
experimento
a
Wacom
Bayasis,
pues
tiene
que
instalar
o
cuánde
ve.
Vamos
a
instalar
también
Accelerate
para
hacer
un
sáptimo
del
hardware,
Datasets,obviamente
para
cargar
el
Datasets
y
Bits
and
Bites,
porque
como
es
cool
hora,
vamos
a
cargar
el
modelo
base
de
manera
cuantizada,
¿no?
Entonces,
bueno,
aquí
tenemos
los
imports
clásicos
que
nos
van
a
hacer
falta
para
trabajar,
para
hacer
este
fine
tuning.
Aquí,
importante,
¿no?
Nos
tenemos
que
loguear
en
Hadinface,
porque
os
recuerdo
que
para
usar
GEMMA
tenemos
que
aceptar
unos
términos,
entonces
para
que
se
cheque
que
los
hemos
aceptado,
hay
que
loguearse.
Además,
si
luego
queremos
que
esto
yo
se
emplee
recomiendo,
¿no?
Que
nuestro
objeto
trainer,
el
que
hace
el
fine
tuning,
pues
suga
automáticamente
el
modelo
o
el
adapter.
Cuando
ya
hemos
terminado,
pues
también
hay
que
estar
logueado,
¿no?
La
siguiente
celda
es
opcional,
los
que
queráis
loguearlo
a
Wacom
Bayasis,
pues
le
asignáis
un
nombre
de
proyecto
y
ejecutáis
esto,
no
tiene
más.
Luego,
como
os
contaba,
aquí,
en
este
caso,
cargaré
el
dataset.
En
nuestro
caso,
pues
sería
el
dataset
de
traducción
de
calidad
y
el
dataset
de
traducción
de
baja
calidad.
Aquí,
para
ajustarlo,
pues
es
el
dataset
instrucciones
OpenRM
2.5
y
formateado
al
estilo
Cephir,
que
ahora
os
comentaré
esto
un
poco,
el
sentido
que
tiene.
Cargamos
el
dataset
de
trial
y
de
test.
Si
aquí
veis
un
poco,
pues
el
formato
que
tiene
cada
uno.
Entonces,
¿por
qué
lo
formate
con
estilo
Cephir?
Lo
formate
con
estilo
Cephir,
porque
si
aquí
veis
el
ejemplo,
ya
no
se
incluye
estos
token
de
system,
user,
asistan,
que
nos
van
a
permitir,
no?
Que
el
modelo
resultante
de
esto
podamos
como
enchufarlo
o
conectarlo
a
todas
estas
interfaces
como
chat
ML
que
han
aparecido,
pues
que
nos
permiten
que
utilizemos
de
manera
intercambiable,
pues
modelos
de
lenguaje
mediante
estos,
por
así
decirlo,
estos
protocolos
o
estas
plantillas
de
formateo
de
datos,
¿vale?
Es
simplemente
por
eso.
El
model
ID,
pues
el
gem
de
2B,
como
hemos
comentado,
cargamos
el
token
ICEL
y
siempre
me
gusta
ver
qué
tokens
especiales
tiene,
¿no?
Contiene
el
modelo
desde
SuperTrain.
Y
vemos
que
tiene
el
token
de
inicio
de
secuencia,
el
de
final,
el
token
desconocido
y
el
de
padding.
Y
esto
de
ahora
es
importante,
¿vale?
Entonces,
hubo
un
problema
con
los
modelos
gemma
y
es
que
si
el
primer
token
o
no
era
el
de
comienzo
de
secuencia,
esta
que
hemos
de
vos,
la
generación
no
iba
o
iba
mal,
¿no?
Entonces,
yo
para
evitar
ese
tipo
de
problemas,
lo
que
hago
aquí
en
esta
función
de
formatear
es
que
a
estos
ejemplos
que
estáis
viendo
aquí,
a
cada
ejemplo
del
dataset,
le
voy
a
añadir
ese
token
al
inicio
más
lo
que
había
ya
en
ese
campo
y
reemplazo
el
token
este
que
habéis
aquí
de
final
de
secuencia,
porque
este
es
típico
de
decir
que
es
mistral
por
el
de
secuencia
que
tiene
el
modelo,
que
es
este.
Son
tokens
que
él
ya
sabe
este
modelo,
¿qué
significado
tienen?
Si
le
añadimos
uno
nuevo,
dejamos
este
que
estaba
de
mistral,
pues
tendrá
que
aprenderlo
durante
el
entrenamiento
porque
no
sabe
qué
significa
ese
token.
Pues
esto
sobre
todo
añadir
este
comienzo
de
secuencia.
En
los
casos
gemma
me
costa
que
es
importante
para
que
vaya
yo.
Y
bueno,
luego
si
imprimimos
un
ejemplo,
pues
ya
vemos
que
le
ha
añadido
ese
token
y
vemos
también
que
en
lugar
de
poner
en
octés,
pues
pone
aquí
final
de
secuencia,
¿vale?
Bueno,
pues
formateamos
de
esa
manera
el
dataset
entrenamiento,
formateamos
también
el
de
test
y
lo
siguiente,
algo
muy
importante,
porque
el
uso
del
AGPU
o
la
AGPU
que
vayamos
a
necesitar
es
yo
diría
directamente
proporcional
entre
otros
parámetros
al
tamaño
máximo
de
secuencia
que
establezcamos,
¿no?
Entonces,
¿cómo
podemos
saber
con
qué
secuencias
estamos
trabajando?
Pues
dibujando,
¿no?
La
distribución
de
longitud
de
tokens
de
nuestros
ejemplos.
Y
aquí
vemos,
¿no?
Que
nuestra
distribución
se
quedaría
un
poco
este
pico,
lo
tiene
aquí
como
en
los
1000
tokens
o
algo
así,
si
teniendo
1000
tokens
habríamos
cubierto
una
gran
cantidad
de
casos,
pero
vemos
que
hay
algunos
e
incluso
algunos
ejemplos
que
están
cerca
aquí
de
los
3000
pico
o
4000
tokens.
Bueno,
si
yo
tengo
esta
gráficaaquí,
sé
que
con,
por
ejemplo,
512
tokens,
¿vale?
Que
sería
por
aquí,
pues
voy
a
cubrir
también
una
gran
cantidad
de
los
ejemplos
del
dataset
y
voy
a
utilizar
menos
memoria
de
AGPU,
obviamente,
que
si
cojo
1,024,
en
el
caso
de
que
cubriré
más
ejemplos,
pero
voy
a
necesitar
mucha
AGPU.
Esto
ya
va
a
depender,
obviamente,
de
la
AGPU
que
tengáis
disponible,
¿no?
Vale,
lo
siguiente.
Cargaré
el
modelo
base,
¿no?
Que
queremos,
al
que
le
vamos
a
dar
fine
tuning,
en
4
bits,
¿no?
Para
aprovechar
que
no
tenemos
una
configuración
de
hardware
muy
potente,
pero
aún
así
podamos
seguir
haciéndole
fine
tuning.
Entonces,
creamos
el
objeto
de
configuración,
que
como
veis
es
muy
sencillo.
Le
decimos
que
lo
queremos
cargar
en
4
bits,
que
el
tipo
de
cuantizaciones
en
F4.
Le
decimos
que
aquí
el
compute
ties
starts
bflot16.
El
bflot
este
16,
sale
del
fichero
de
configuración
del
modelo.
Es
un
poco,
si
os
vais
al
config
de
Gemma
2Billion,
veréis
que
donde
pone
torches
de
type,
de
hecho
hay
un
parámetro
que
se
llama
así,
pues
está
en
bflot16,
¿no?
En
esa
precisión.
Entonces,
bueno,
no
hay
magia
negra,
por
así
decirlo.
Sale
de
ahí.
Y
aquí
le
decimos
que
no.
En
este
caso
no
queremos
que
utilice
cuantización
doble.
Vale,
pues
ya
cargamos
el
modelo
con
la
clase
auto,
donde
le
pasamos
el
ID
y
el
objeto
de
cuantización,
¿no?
Que
hemos
creado
anteriormente.
Una
vez
que
hemos
creado
eso,
bueno,
aquí
me
creé
un
método
auxiliar
que
nos
dice
de
todos
los
billones
de
parámetros
que
tiene
el
modelo,
cuántos
parámetros
vamos
a
entrenar.
Pero
que
no
hace
falta.
De
hecho,
creo
que
lo
trae.
De
hecho,
creo
que
este
método,
ya
cuando
creamos
este
objeto
de
PEP,
nos
dice
ya
directamente
cuántos,
qué
porcentaje
de
los
parámetros
equivale
en
las
matrices
de
los
adapters
que
vamos
a
crear.
Pero,
pues
si
alguno
quiere
verlo,
pues
con
este
método
también
nos
lo
va
a
decir.
Y
esto
ya
lo
importante,
bueno,
muy
importante.
Esto
es
la
configuración
de
esos
adapters
para
el
que
así
rápidamente
el
que
no
sepa
lo
que
es
un
adapter
es
como
unas
nuevas
matrices
que
creamos
nosotros
y
que
un
paper
muy
famoso
determinó
que
si
esas
matrices
las
aplicamos
a
todas
las
capas
linear,
¿vale?
Lineales
del
modelo,
conseguimos
un
mismo,
conseguimos
un
rendimiento
prácticamente
igual
que
si
hacemos
full
fine
tuning.
Full
fine
tuning,
obviamente,
tendría
un
coste
prohibitivo
para
nosotros
porque
había
que
actualizar
todos
los
pesos
del
modelo.
Y
aquí
solo
actualizamos
las
matrices
que
nosotros
definamos
aquí
y
en
el
rango
en
que
nosotros
decidimos.
Con
lo
cual,
los
parámetros
que
nosotros
actualizamos
no
es
todo
el
modelo,
sino
esas
matrices
que
hemos
decidido
aplicar
a
lo
que
vemos
aquí,
estos
target
modules.
¿Aquí
qué
deberíamos
de
poner?
Pues
aquí
deberíamos
de
poner
todas
las
capas
linear
del
modelo.
Éstas
las
he
sacado
del
ejemplo
de
Haggingface
que
al
principio,
por
lo
menos
cuando
empezaron
a
integrar
Yema,
se
añadíamos
porque
el
modelo
tiene
más
capas
linear,
pero
se
añadíamos
más
el
comportamiento
del
21
era
un
poco
inestable.
Pero
bueno,
esto
también
depende
un
poco
de
la
memoria
también
de
la
GPU
que
tengamos
nosotros.
Si
tenemos,
o
sea,
lo
recomendado
por
el
paper
es
que
añadimos
todas
las
capas
linear,
pero
si
no
tenemos,
si
no
tenemos
mucha
GPU
con
las
capas
de,
o
con
las
matrices
de
atención,
que
son
Query,
Kibaliu,
como
veis
y
la
proyección,
pues
también
da
buenos
resultados.
Estos
parámetros
del
rank
y
el
aura
alpha,
pues
el
rank
es
algo
que
se
suele
establecer
entre
8
y
1632,
y
el
aura
alpha
como
doble
del
rank.
El
rank
es
el
rango
de
estas
matrices.
Vaya
se
suele
establecer
a
la
non-e,
se
le
pone
algo
de
dropout,
como
cualquier
red
neuronal
y
el
tipo
de
tarea,
pues
es
casual
el
language
modeling.
Vale,
aquí
si
descomentamos
esto,
pues
podemos
imprimir,
como
decía,
todos
los
parámetros
que
al
final
entrenamos
del
modelo
o
el
equivalente,
porque
los
parámetros
del
modelo,
recordad,
no
los
tocamos.
Entrenamos
las
nuevas
matrices
esas
quehemos
definido
sobre
las
capas
linear.
Aquí,
importante,
estos
parámetros
también
van
a
afectar
directamente
al
tamaño
de
la
GPU
que
tengamos,
¿no?
En
micro-batch
size,
pues
en
este
caso,
yo
mi
entrenamiento
lo
hice
en
una
100,
entonces
puse
que
sería
32,
que
el
batch
size
128.
Pues
al
final
tenemos
que
los
pasos
en
los
que
se
acumule
el
gradiente
es
128
entre
32.
Que
tenéis
menos
GPU,
pues
esto
lo
establecéis
a
8,
lo
establecéis
a
4,
¿no?
Como
ya
digo,
como
en
función,
en
función
de
la
GPU
que
tengáis,
es
jugar
con
ese
parámetro,
la
longitud
también
de
la
secuencia,
¿no?
Pues
esas
cosas
al
final
consumen
más
o
menos
memoria
de
la
GPU.
Y
lo
demás,
pues
aquí
los
training
arguments
tampoco
tiene
mucha
magia,
¿no?
Yo
siempre
como
digo,
le
digo
que
sí
lo
quiero,
que
sí
que
quiero
hacer
puse
al
hash,
que
lo
subo
de
manera
privada
inicialmente,
porque
igual
quiero
evaluarlo
y
probarlo
antes
de
que
quede
expuesto
públicamente.
Otra
cosa
importante,
aquí
no
lo
he
usado,
pero
si
usamos
gradient
checkpointing
también,
agorraríamos
memoria,
¿no?
En
este
experimento
no
lo
he
necesitado,
hace
que
vaya
un
poco
más
lento
el
entrenamiento,
pero
ahorramos
también
memoria.
Sólo
quiero,
¿no?
Que
vea
todo
el
data
set
entrenamiento
durante
una
epoca,
una
sola
vez.
Y
ya
bueno,
pues
otros
parámetros
ya
fijos,
como
el
learning
rate,
un
SIP
para
que
sea
reproducible,
cada
cuántos
pasos
queremos
que
se
armó
el
checkpoint
y
que
haga
evaluaciones.
Si
lo
queremos
reportar
a
Wegan
Bayasis
o
a
TensorBoard,
lo
podemos
como
queramos.
Y
esto
es
importante,
que
esto
sea
Fp16,
¿no?
O
Bf16
va
a
depender.
Si
estamos
en
una
tarjeta
gráfica
de
Gamma
and
Per,
como
son
las
A100,
H100,
las
RTX,
pues
podemos
hacer
entrenamiento
en
Bf16.
Si
estamos
en
una
T4
o
V100
con
la
T4,
pues
tenemos
que
poner
esto
a
true
y
esto
a
false,
¿vale?
Esto
depende
de
la
capacidad
de
compute
que
tengamos.
Ya
os
digo,
tarjetas
de
la
Gamma
and
Per,
pues
esto
permite
el
entrenamiento
en
Bf16.
Si
no,
es
simplemente
cambiar
esos
parámetros
en
función
de
la
GPU
que
tengan.
Y
ya
lo
siguiente,
pues
como
decíamos,
creamos
un
objeto
trainer
donde
pasamos
el
modelo,
el
data
set
de
entrenamiento,
la
evaluación,
la
configuración
de
nuestros
adapts,
en
qué
campo
o
columna
de
nuestro
data
tiene
que
mirar,
que
le
hemos
llamado
test.
Aquí
como
os
decía,
hemos
puesto
que
la
máxima
longitud
de
la
secuencia
va
a
ser
el
1024,
que
no
nos
cabe
en
la
GPU,
pues
podemos
poner
512.
Ya
hemos
visto
que
cubrimos
también
bastante
cantidad
de
ejemplo,
digamos
que
no
cortamos
muchos.
Le
pasamos
el
tokenizer,
los
argumentos
de
entrenamiento
que
acabamos
de
definir
y
eso
también
es
importante,
¿no?
Le
decimos
que
no
añada
tokens
especiales,
¿por
qué?
Porque
los
hemos
puesto
nosotros
aquí
ya.
Recordad
que
los
hemos
puesto
aquí,
los
tokens
especiales.
Le
decimos
que
no
los
añada
esos
tokens
especiales
y
que
tampoco
nos
añada
un
token
adicional
como
separador,
¿vale?
Este
parámetro
Packing
si
igual
a
truco
es
como
para
empaquetar
los
ejemplos
y
que
el
entrenamiento
sea
más
eficiente,
pero
bueno,
tampoco
es
importante
o
muy
significativo
en
el
proceso
de
fine
tuning.
Lo
que
os
decía
es
si
habéis
reportado
experimento
a
Weidan
Bayasi,
pues
nada,
pero
podéis
también
reportarlo
en
tiempo
real
aquí
al
cargar
en
la
extensión
tensorboard,
decirle
obviamente
que
donde
van
a
estar
logueados
los
logs
pues
es
donde
si
habéis
puesto
que
el
directorio
de
salida
es
este,
pues
puedes
poner
ese
nombre,
barra
runs,
o
si
ponéis
simplemente
ese
nombre,
también
os
lo
va
a
coger.
Y
aquí
veáis
en
tiempo
real
pues
la
evolución,
como
os
aquí
por
ejemplo
de
la
ejecución
que
yo
hice,
la
evolución
de
la
loss
en
la
evaluación,
luego
tenéis
también
la
evolución
de
la
loss
como
veáis
en
el
entrenamiento,
veis
cómo
el
Google
empieza
a
converger,
etcétera.
Y
bueno,
lo
siguiente
es
muy
sencillo,
es
simplemente
trainer.train
y
empieza
el
entrenamiento.
Como
decía,
aquí
veis
que
a
los
quehayáis
puesto
que
lo
que
hayáis
a
Weidan
Bayasi
pues
o
está
el
link
y
lo
podéis
seguir
ahí.
Y
siempre
dejamos
ejecutando
esta
celda
de
cuando
termine
el
entrenamiento,
que
se
haga
el
push
al
have,
automáticamente.
Bueno,
luego
si
no
da
tiempo
volvemos
sobre
esto,
vale,
que
esto
es
un
poco
como
se
probaría
el
modelo,
digamos
que
no
era
el
ámbito
un
poco
de
lo
que
queríamos
ver.
Entonces
vamos
a
compartir
otra
vez
la
otra
pantalla.
Nos
sabemos
que
es
la
fase
de
fine
tuning,
si
repetimos
ese,
si
hacemos
ese
proceso
de
fine
tuning
que
acabamos
de
ver,
con
un
modelo
gem,
el
que
elegí
o
yo,
o
el
que
queráis
en
este
caso,
con
los
datos
de
calidad
y
de
traducción
de
calidad
y
de
traducciones
de
baja
calidad
menos
calidad,
pues
tendremos
dos
modelos
al
final.
Entonces
yo,
esos
dos
modelos
que
he
hecho,
pues
yo
esos
dos
modelos
le
he
pasado
unos
tests
que
son
una
serie
de
frases
en
inglés
que
quiero
que
me
traduzca
a
español.
Y
lo
sé
almacenado
también
en
un
data
set
en
el
have
que
lo
tengo
aquí
como
traducciones
inglesa
español,
resultados
del
modelo
que
se
han
entrenado,
que
se
ha
fenceintuneado
en
traducción
de
alta
calidad.
Y
aquí
tenemos
los
resultados
del
modelo
que
se
han
entrenado
en
datos
de
mala
calidad.
Vale,
los
pasamos
otra
vez
a
pandas,
como
veis
para
que
los
puedan
visualizar
sin
problemas.
Y
aquí
tenemos
pues
los
resultados
del
modelo
que
se
entrenan
en
datos
de
calidad,
donde
yo,
por
ejemplo,
no
veo
ninguna
pega,
hay
un
vegetarian,
soy
vegetariano,
me
gustaría
crear
una
bici,
aquí
también
nos
dice
que
quisiera
tirar
una
bici,
las
errores
que
veíamos
antes
no
se
cometen.
Pero
si
nos
vamos
a
los
resultados
de
mala
calidad,
o
sea
del
modelo
que
hemos
entrenado
con
datos
de
mala
calidad,
fijaos
lo
importante
que,
porque
aquí,
por
ejemplo,
me
gustaría
tirar
una
bici,
pues
nos
dice
que
me
gustaría
rentar
una
bici.
Hay
otros,
¿no?
Can
you
call
a
taxi
for
me?
Pues
llamar
a
un
taxi
por
mí
y
aquí
dice,
puedes
hacer
una
llamada
a
un
taxi
para
mí,
lo
cual
tampoco
sería,
no
suena
natural,
no
es
del
toco
correcto.
Soy
vegetariano,
¿no?
Fijaos
la
traducción,
soy
vegetal,
no
tiene
nada
de
sentido.
O
sea
que
fijaos
al
final,
¿no?
Porque
os
he
enseñado
una
muestra
del
data
set,
de
gran
traducciones,
bueno,
que
cometiera
algún
tipo
de
error,
pero
podéis
pensar,
bueno,
pero
esto
es
algo
sutil,
¿no?
No
va
a
importar.
Pues
sí,
como
veis,
efectivamente,
sí
que
importa.
Sí
que
importa
ese
tipo
de
filtrado,
¿no?
Y
de
trabajarse,
de
trabajarse,
eso
trata,
¿sí?
Al
final
hay
una
frase
por
ahí
que
dice,
el
80
o
el
90%
de
un
proyecto
de
machine
learning
son
los
datos,
trabajar
y
preparar
los
datos.
Y
con
los
LLMS,
¿no?
A
los
modelos
de
lenguaje,
pues
no
iba
a
ser
tampoco
ninguna
excepción,
¿no?
Entonces,
bueno,
pues
esto
es
un
poco
como
el
resultado,
¿no?
De
que
podéis
ver
aquí,
de
entrenar
con
datos
de
calidad
y
de
entrenar
con
datos
de
mala
calidad.
Y
ahora
no
sé,
María,
si
hay
alguna
pregunta
o
algo.
Creo
que
preguntas
de
momento,
no.
El
tema
es
que
me--
bueno,
ahora
damos
unos
momentines
que
seguro
que
empiezan
a
surgir.
Me
compartiste
un
collab,
pero
el
que
está
enlazado,
o
sea,
el
del
fine
tuning,
no.
Entonces--
El
del
SAT,
¿dónde
lo
he
pasado?
Dice.
Sí.
Pero,
bueno,
después,
ya
he
dicho
por
el
SAT
que
eso
me
lo
mandas
y
lo
subo
también
al
mismo
repo.
O
lo
mandas
toda
hora.
Vale,
sí.
Te
lo
paso
por
aquí,
¿vale?
El
mismo.
Y
ya
deberías.
Vale,
genial.
Bueno,
el
tema
es
el--
Perdón,
María,
mucho--
mucho
hincapié
en
el
tema
del
fine
tuning,
porque
como
tú
dices,
al
final
siempre
acaba
hablando
de
fine
tuning
y
de--
No,
pero
está
bien.
Al
final
es
lo
que--
bueno,
sí,
es
lo
que
más
hace.
O
sea,
que
también
es
lo
que
tiene
más
experiencia
y
puedes
compartir
más--
Como
dice
David
en
los
comentarios,
puedes
compartir
una
ancestral
sabiduría.
Sí,
ahí
hay
un
post
de
Philip
Smith,
que
trabaja
en
Javi
and
Faith,
que
es
como
la
guía
definitiva
del
fine
tuning,
donde
pone
un
montón
de
buenas
prácticas,
que,
bueno,
que
no
se
me
pase
también,
que
lo
encuentre
y
lo
comparta,
¿vale?
En
Discord
somosen
LPL
o
compartiré,
porque
aún
un
poco
como--
pues,
como
todas
las
buenas
prácticas,
que
pues,
pues,
que
diferentes
personas
que
han
hecho,
hemos
hecho
muchos
experimentos,
pues
han,
pues,
así
decirlo,
han
llegado
un
consenso
que
es
lo
mejor.
Por
ejemplo,
cuando
se
utilita
adapters,
esas
marines
de
qué
rank,
¿no?
Las
hacemos
de
8,
16,
32,
qué
número
hay
funciona
mejor,
¿no?
Pero
ese
tipo
de
truquillos,
pues,
hay
como
un
post
ahí
que
merece
mucho
la
pena.
-
Ah,
genial.
Pues,
pásamelo.
Supongo
que
estar
en
inglés
podemos
ahí
pasarlo
por--
-
No,
sí.
No,
no.
-
A
ver,
vamos
a
decirlo.
-
Pasan
una
solución
y
otra
cosa
importante.
Yo
estoy
haciendo
una
versión
con
Auto
Train,
de
esto
que
acabáis
de
ver,
¿no?
Auto
Train,
al
final,
es
una
solución
de
Javi
and
Faith,
que
estamos
una
vez
más,
¿no?
Agradecíos
que
siempre
nos
ayuden
con
recursos,
este
tipo
de
iniciativas.
Es
una
solución
Open
Source,
también,
la
podéis
descargar
en
local
o
usarla
a
través
de
su
space,
que
os
permite
mediante
una
interfaz
gráfica,
que
os
tengáis
que
pelear
mucho
con
hiperparámetros
de
entrenamiento,
con
qué
GPU,
caben
la
GPU,
no
cabe.
Pues
es
una
interfaz
gráfica,
seleccionáis
el
modelo,
el
data
set
y
cuatro
cositas
y
os
haces
el
fine-tuning
del
modelo
de
manera
automática,
¿no?
Es
una
solución
bastante
potente
que
os
recomiendo
usar,
¿no?
Y
que,
bueno,
yo
pasaré
la
versión
Open
Source
de,
más
que
Open
Source,
un
cola
donde
con
Auto
Train
se
pueda
re-eplicar
esto
que
hemos
visto
exactamente,
¿no?
Si
no
hayá,
creo
que
no
es
muy
complica,
¿no?
Pero
alguien
que
esté
menos
metido
en
el
mundo
este,
igual
ve
tanto
hiperparámetro
que
lo
sabéis
inicialmente
y
le
echa
un
poco
para
atrás.
O
sea
que
con
cuatro
parámetros,
pues
también
sabe
el
resultado.
Sí,
sí,
sí.
Sí,
efectivamente,
porque
si
todavía
alguien
no
lo
sabía,
tenemos
críos
en
Auto
Train
patrocinados
por
Javi
and
Face,
entonces,
bueno,
también
lo
podéis
utilizar
como
opción
para
entrenar
vuestros
modelos
para
el
hackathon.
Creo
que
hay
un
par
de
preguntas.
Uno
más,
la
primera
más
sobre
el
objetivo,
cómo
estaba
organizado
el
hackathon,
o
sea,
el
taller,
en
el
sentido
de
cuál
era
el
motivo
para
crear
un
dataset
de
alta
calidad
y
otro
de
baja,
si
lo
has
entrenado
los
dos
o
hayan
dos
diferentes.
Y
son
dos
modelos
diferentes
entrenados
en
un
dataset
de
contrauciones
de
calidad
y
otro
contrauciones
de
mala
calidad.
Entonces,
hay
que,
al
final,
en
ese
dataset
de
resultados
que
os
he
enseñado,
pues,
se
pueda
percibir
que
la
calidad
importante.
Ese
era
precisamente
el
objetivo,
¿no?
El
ver
que
si
los
datos
iniciales,
tanto
de
pre-training,
fine
tuning,
lo
que
sea,
no
tienen
calidad,
pues
el
modelo
al
final
va
a
ser
un
reflejo
o
el
modelo
resultante
va
a
ser
un
reflejo
de
eso.
Efectivamente.
Ese
era
el
objetivo
del
taller.
Y
una
inquietud
que
nos
comparten
también,
¿cuál
es
la
relevancia
en
tu
opinión
de
GIA
en
el
contexto,
entiendo
yo,
del
NLP
en
español?
Porque
nos
cuenta
que
una
vez
hizo
fine
tuning
un
modelo
en
inglés,
contexto
en
español,
y
funcionó.
Y,
efectivamente,
es
un
poco
la
única
opción
que
tenemos
en
general.
Sí,
a
ver,
G
code,
yo
realmente--
Mira
que
hago
mucho
fine
tuning.
No
he
tocado
todavía
no
hecho
fine
tuning
a
ningún
modelo
G.
Pero,
bueno,
también
no
me
extraña
lo
que
nos
dice
este
usuario,
porque,
bueno,
Mistral,
por
ejemplo,
sobre
todo
los
primeros
Mistral,
los
vendían
que
estaban
pre-entrenados
en
texto
en
inglés
principalmente.
Y
luego,
cuando
se
le
ha
hecho
fine
tuning
en
dataset
en
español,
pues
funcionan
bastante
decente.
En
ese
proceso
que
veíamos
antes
de
preprocesing
de
filtering,
pues,
al
final,
ser
exhaustivo
a
nivel
de
filtrar
por
idioma
significa
tener
también
mucha
capacidad
de
cómputo.
Entonces,
digamos
que
eso
se
relaja
un
poco
y,
a
veces,
pues,
se
escapan
textos
o
restos
de
textos
en
otros
idiomas.
En
español
en
concreto,
teniendo
en
cuenta
que
es
un
idioma
hablado
por
muchas
personas
alrededor
del
mundo,
pues,
al
final,
la
web
también
es
un
reflejo
de
eso
y
hay
mucho
contenido
en
español.
Entonces,
casi,
o
sea,
yola
experiencia
que
tenia
es
que
muchos
modelos
que
han
sido
pre-entrenados
en
inglés,
en
este
caso,
inglés
y
chino,
luego
le
haces
fine
tuning
en
español
y
rinden,
no
sé
si,
no
te
daría
cualitativamente
un
número
de
súper
bien
o
tal,
pero
hay
ciertas
tareas
que
las
decían,
¿no?
Pues,
muy
bien.
Muchas
gracias.
Y
sí,
a
ver,
si
alguien
hace
un
fine
tuning
de
allí,
compartíslo
comunidad
y
nos
contaréis
a
ver
qué
tal
experiencia.
Yo
creo
que
lo
importante
es
que,
con
herramientas,
no
como
las
de
Argyla,
que
nos
presentaba
el
compañero
anteriormente
y
haciendo
uso
de
modelos
más
potentes
que
te
pueden
ayudar,
¿no?
A
esa
esenietiqueta
o
a
un
etiqueta
o
señautomático,
pues,
se
pueda
crear
ese
data
set
de
calidad
o
data
set
de
calidad
que,
al
final,
pues,
permita
hacer
fine
tuning
del
modelo
que
quieras,
¿no?
Al
final,
como
ha
visto
hacer
fine
tuning,
pues,
es
como
seguir
una
receta,
pero
si
no
hay
gasolina,
pues,
el
motor
no
va
a
arrancar,
¿no?
Y
necesitamos
gasolina
de
calidad
en
español,
que
es
lo
que
no
hay,
¿no?
Es
lo
que
no
hay.
A
ver
si
arreglamos
eso.
Última
pregunta
de
Aless.
Un
poco
nub,
dice,
pero
todas
las
preguntas
son
válidas
y
muy
bienvenidas.
Dice
que
muchos
ejemplos
y
tutoriales
ve
que
se
fija
manualmente
el
token
del
padding
a
ser
igual
que
el
end
of
sentence.
¿Por
qué?
Pues,
se
hace
porque
para
evitar
confusiones
a
la
hora
de--
A
ver,
el
tema
de
usar
ese
token
de
padding
solo
tiene
sentido
o
el
mayor
sentido
que
tiene
es
que
se
va
a
aprovechar
al
entrenar
en
GPU
su
capacidad
de
entrenamiento,
no
en
su
capacidad
de
paralización.
Entonces,
si
cortamos,
como
hemos
visto
ahí,
la
secuencia,
pues,
por
512
tokens,
imaginaos
que
nuestro
ejemplo
tiene
256,
se
rellena
del
256
al
512
con
ese
token,
¿no?
Entonces,
lo
que
hacemos
es
que,
oye,
vamos
a
entrenar
en
paralelo,
pero
que
sepa
el
modelo,
por
así
decirlo
cuando
se
está
enterando,
que
cuando
hay
el
token
de
padding,
en
este
caso,
es
equivalente
a
que
la
secuencia
ha
terminado,
¿no?
Eso
se
establece,
sí.
Genial.
Super
bien
explicado
y
muy
buena
manera
de
terminar
justo
en
punto.
Pues,
nada,
muchísimas
gracias,
Manu
otra
vez.
Ya
compartido
todos
los
links
para
Auto
Train,
para
dónde
están
los
recursos.
Si
alguien
está
viendo
esto,
pero
todavía
no
está
apuntado
al
jacatón,
pues,
que
se
apunte
ya.
Y
nada,
muchas
gracias.
Y
no
se
me
exploto.
No,
no
es
solamente
en
Discord.
Si
tenéis
más
preguntas,
ya
sabéis
que
podéis
pedir
ayuda
en
el
canal
PidaYuda.
Y
respondemos
en
cuanto
podamos.
Muchas
gracias.
Saludos.
(corte
de
base)