Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[ Docs] translated peft (ES) and toctree.yml add #30554

Closed
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions docs/source/es/_toctree.yml
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,8 @@
title: Mecanismos de atención
- local: pad_truncation
title: Relleno y truncamiento
local: peft
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should be in the "Tutorial" section.

Suggested change
local: peft
- local: peft

title: Carga los adaptadores con 🤗 PEFT
- local: bertology
title: BERTología
- local: perplexity
Expand Down
238 changes: 238 additions & 0 deletions docs/source/es/peft.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,238 @@
<!--Copyright 2023 The HuggingFace Team. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
specific language governing permissions and limitations under the License.
⚠️ Note that this file is in Markdown but contain specific syntax for our doc-builder (similar to MDX) that may not be
rendered properly in your Markdown viewer.
-->

# Carga los adaptadores con 🤗 PEFT

[[open-in-colab]]

[Parameter-Efficient Fine Tuning (PEFT)](https://huggingface.co/blog/peft) métodos congelan los parámetros del modelo preentrenado durante el afinamiento y agregan un pequeño número de parámetros entrenables (los adaptadores) encima de eso. Varios parámetros entrenables (los adaptadores) están entrenados para aprender la tarea específica. Está manera a sido comprobada en ser eficiente con la memoria y con menos uso de computar mientras produciendo resultados comparable a un modelo completamente afinado.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
[Parameter-Efficient Fine Tuning (PEFT)](https://huggingface.co/blog/peft) métodos congelan los parámetros del modelo preentrenado durante el afinamiento y agregan un pequeño número de parámetros entrenables (los adaptadores) encima de eso. Varios parámetros entrenables (los adaptadores) están entrenados para aprender la tarea específica. Está manera a sido comprobada en ser eficiente con la memoria y con menos uso de computar mientras produciendo resultados comparable a un modelo completamente afinado.
Los métodos PEFT [Parameter-Efficient Fine Tuning (PEFT)](https://huggingface.co/blog/peft) congelan los parámetros del modelo preentrenado durante el afinamiento y agregan un pequeño número de parámetros entrenables (los adaptadores) encima. Los adaptadores están entrenados para aprender información específica de una tarea. Se ha demostrado que este enfoque es muy eficiente en memoria con un menor uso de cómputo y al mismo tiempo produce resultados comparables a un modelo completamente ajustado.


Adaptadores entrenados con PEFT también son usualmente un orden de magnitud más pequeños que los modelos enteros, haciéndolos más convenientes para compartir, archivar, y cargar.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Adaptadores entrenados con PEFT también son usualmente un orden de magnitud más pequeños que los modelos enteros, haciéndolos más convenientes para compartir, archivar, y cargar.
Los adaptadores entrenados con PEFT también suelen ser un orden de magnitud más pequeños que el modelo completo, lo que hace que sea conveniente para compartirlos, almacenarlos y cargarlos.


<div class="flex flex-col justify-center">
<img src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/peft/PEFT-hub-screenshot.png"/>
<figcaption class="text-center">The adapter weights for a OPTForCausalLM model stored on the Hub are only ~6MB compared to the full size of the model weights, which can be ~700MB.</figcaption>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would be nice to also translate the caption 🙂

</div>

Si estás interesado en aprender más sobre la librería de PEFT, lee la [documentación](https://huggingface.co/docs/peft/index).

## Configuración

Empezar por instalar 🤗 PEFT:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Empezar por instalar 🤗 PEFT:
Vamos a empezar instalando 🤗 PEFT:


```bash
pip install peft
```

Si quieres tratar las nuevas características, instala la librería de la fuente:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Si quieres tratar las nuevas características, instala la librería de la fuente:
Si quieres probar las nuevas características, es posible que te interese instalar la biblioteca desde la fuente:


```bash
pip install git+https://github.com/huggingface/peft.git
```

## Los modelos de PEFT apoyados

Los 🤗 Transformers nativamente apoyan algunos métodos de PEFT. De esta manera puedes cargar los pesos del adaptador archivados localmente o archivados en el Hub y fácilmente ejecutar o entrenar los pesos con unas cuantas líneas de código. Los siguientes métodos están apoyados:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Los 🤗 Transformers nativamente apoyan algunos métodos de PEFT. De esta manera puedes cargar los pesos del adaptador archivados localmente o archivados en el Hub y fácilmente ejecutar o entrenar los pesos con unas cuantas líneas de código. Los siguientes métodos están apoyados:
🤗 Transformers admite nativamente algunos métodos de PEFT. De esta manera puedes cargar los pesos del adaptador almacenados localmente o almacenados en el Hub y fácilmente ejecutar o entrenar los pesos con unas cuantas líneas de código. Se cuenta con soporte para los siguientes métodos:


- [Low Rank Adapters](https://huggingface.co/docs/peft/conceptual_guides/lora)
- [IA3](https://huggingface.co/docs/peft/conceptual_guides/ia3)
- [AdaLoRA](https://arxiv.org/abs/2303.10512)

Si quieres usar otros métodos de PEFT como el aprendizaje de avisos o afinamientos de los avisos o de la librería de 🤗 PEFT en general por favor refiere a la [documentación](https://huggingface.co/docs/peft/index).
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Si quieres usar otros métodos de PEFT como el aprendizaje de avisos o afinamientos de los avisos o de la librería de 🤗 PEFT en general por favor refiere a la [documentación](https://huggingface.co/docs/peft/index).
Si desea utilizar otros métodos PEFT, como el prompt learning o el prompt tuning, o sobre la librería 🤗 PEFT en general, consulte la [documentación](https://huggingface.co/docs/peft/index).



## Cargar un adaptador de PEFT

Para cargar y usar un modelo adaptador de PEFT desde 🤗 Transformers, asegura que el Hub repositorio o el directorio local contiene un `adapter_config.json` archivo y pesas de adaptadores como presentado en el imagen de arriba. Después puedes cargar el modelo adaptador de PEFT usando la clase de `AutoModelFor`. Por ejemplo, para cargar el modelo adaptador de PEFT para modelar usando idioma casual:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Para cargar y usar un modelo adaptador de PEFT desde 🤗 Transformers, asegura que el Hub repositorio o el directorio local contiene un `adapter_config.json` archivo y pesas de adaptadores como presentado en el imagen de arriba. Después puedes cargar el modelo adaptador de PEFT usando la clase de `AutoModelFor`. Por ejemplo, para cargar el modelo adaptador de PEFT para modelar usando idioma casual:
Para cargar y usar un modelo adaptador PEFT desde 🤗 Transformers, asegúrese de que el repositorio en el Hub o el directorio local contenga un archivo `adapter_config.json` y los pesos del adaptador, como se presenta en la imagen de arriba. Después puedes cargar el modelo adaptador PEFT usando la clase `AutoModelFor`. Por ejemplo, para cargar un modelo de adaptador PEFT para modelado de lenguaje causal:


1. específica el ID del modelo de PEFT
2. pásalo a la clase de [`AutoModelForCausalLM`]

```py
from transformers import AutoModelForCausalLM, AutoTokenizer

peft_model_id = "ybelkada/opt-350m-lora"
model = AutoModelForCausalLM.from_pretrained(peft_model_id)
```

<Tip>

Puedes cargar al PEFT adaptador con una clase de `AutoModelFor` o la clase del modelo base como `OPTForCausalLM` o `LlamaForCausalLM`.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Puedes cargar al PEFT adaptador con una clase de `AutoModelFor` o la clase del modelo base como `OPTForCausalLM` o `LlamaForCausalLM`.
Puedes cargar un adaptador PEFT con una clase `AutoModelFor` o la clase del modelo base como `OPTForCausalLM` o `LlamaForCausalLM`.


</Tip>

Tambíen puedes cargar un adaptador de PEFT llamando el método de `load_adapter`:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Tambíen puedes cargar un adaptador de PEFT llamando el método de `load_adapter`:
Tambíen puedes cargar un adaptador PEFT llamando al método `load_adapter`:


```py
from transformers import AutoModelForCausalLM, AutoTokenizer

model_id = "facebook/opt-350m"
peft_model_id = "ybelkada/opt-350m-lora"

model = AutoModelForCausalLM.from_pretrained(model_id)
model.load_adapter(peft_model_id)
```

## Cargar en 8bit o 4bit
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The first paragraph of this section is incomplete. In general the translation would be something like:

"La integración de bitsandbytes admite tipos de datos de precisión de 8 y 4 bits, que son útiles para cargar modelos grandes porque ahorra memoria (consulte la guía de integración de bitsandbytes para obtener más información). Agregue los parámetros load_in_8bit o load_in_4bit a from_pretrained() y configure device_map="auto" para distribuir efectivamente el modelo a su hardware:"


La integración de `bitsandbytes` apoya los tipos de datos precisos que son utilizados para cargar modelos grandes porque
guarda memoria (mira la [guia](./quantization#bitsandbytes-integration) de `bitsandbytes` para aprender mas). Agrega el parametro `load_in_8bit` o el parametro `load_in_4bit` al [`~PreTrainedModel.from_pretrained`] y coloca `device_map="auto"` para effectivamente distribuir el modelo tu hardware:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The "Quantization" doc doesn't exist in Spanish yet so let's link to the English one for now

Suggested change
guarda memoria (mira la [guia](./quantization#bitsandbytes-integration) de `bitsandbytes` para aprender mas). Agrega el parametro `load_in_8bit` o el parametro `load_in_4bit` al [`~PreTrainedModel.from_pretrained`] y coloca `device_map="auto"` para effectivamente distribuir el modelo tu hardware:
guarda memoria (mira la [guia](https://huggingface.co/docs/transformers/quantization#bitsandbyes) de `bitsandbytes` para aprender mas). Agrega el parametro `load_in_8bit` o el parametro `load_in_4bit` al [`~PreTrainedModel.from_pretrained`] y coloca `device_map="auto"` para effectivamente distribuir el modelo tu hardware:


```py
from transformers import AutoModelForCausalLM, AutoTokenizer

peft_model_id = "ybelkada/opt-350m-lora"
model = AutoModelForCausalLM.from_pretrained(peft_model_id, device_map="auto", load_in_8bit=True)
```

## Agrega un nuevo adaptador

Puedes usar [`~peft.PeftModel.add_adapter`] para agregar un nuevo adaptador a un modelo con un existente adaptador mientras
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Puedes usar [`~peft.PeftModel.add_adapter`] para agregar un nuevo adaptador a un modelo con un existente adaptador mientras
Puedes usar [`~peft.PeftModel.add_adapter`] para agregar un nuevo adaptador a un modelo con un adaptador existente siempre que

el nuevo sea el mismo tipo que el adaptador actual. Por ejemplo si tienes un existente LoRA adaptador ajunto a un modelo:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
el nuevo sea el mismo tipo que el adaptador actual. Por ejemplo si tienes un existente LoRA adaptador ajunto a un modelo:
el nuevo adaptador sea del mismo tipo que el actual. Por ejemplo, si tienes un adaptador LoRA conectado a un modelo:


```py
from transformers import AutoModelForCausalLM, OPTForCausalLM, AutoTokenizer
from peft import LoraConfig

model_id = "facebook/opt-350m"
model = AutoModelForCausalLM.from_pretrained(model_id),
lora_config = LoraConfig(
target_modules=["q_proj", "k_proj"],
init_lora_weights=False
)

model.add_adapter(lora_config, adapter_name="adapter_1")
```

Para agregar un nuevo adaptador:

```py
# attach new adapter with same config
model.add_adapter(lora_config, adapter_name="adapter_2")
```

Ahora puedes usar [`~peft.PeftModel.set_adapter`] para configurar cuál adaptador para usar:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Ahora puedes usar [`~peft.PeftModel.set_adapter`] para configurar cuál adaptador para usar:
Ahora puedes usar [`~peft.PeftModel.set_adapter`] para configurar cuál adaptador usar:


```py
# use adapter_1
model.set_adapter("adapter_1")
output = model.generate(**inputs)
print(tokenizer.decode(output_disabled[0], skip_special_tokens=True))

# use adapter_2
model.set_adapter("adapter_2")
output_enabled = model.generate(**inputs)
print(tokenizer.decode(output_enabled[0], skip_special_tokens=True))
```

## Para activar y desactivar los adaptadores
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
## Para activar y desactivar los adaptadores
## Activar y desactivar los adaptadores


Cuando has agregado un adaptador a un modelo, activa or desactiva el módulo de adaptador. Para activar el módulo de adaptador:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Cuando has agregado un adaptador a un modelo, activa or desactiva el módulo de adaptador. Para activar el módulo de adaptador:
Una vez que haya agregado un adaptador a un modelo, puedes habilitar o deshabilitar el módulo adaptador. Para habilitar el módulo adaptador:


```py
from transformers import AutoModelForCausalLM, OPTForCausalLM, AutoTokenizer
from peft import PeftConfig

model_id = "facebook/opt-350m"
adapter_model_id = "ybelkada/opt-350m-lora"
tokenizer = AutoTokenizer.from_pretrained(model_id)
text = "Hello"
inputs = tokenizer(text, return_tensors="pt")

model = AutoModelForCausalLM.from_pretrained(model_id)
peft_config = PeftConfig.from_pretrained(adapter_model_id)

# to initiate with random weights
peft_config.init_lora_weights = False

model.add_adapter(peft_config)
model.enable_adapters()
output = model.generate(**inputs)
```

Para desactivar el modulo adaptero:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Para desactivar el modulo adaptero:
Para desactivar el módulo adaptador:


```py
model.disable_adapters()
output = model.generate(**inputs)
```

## Como entrenar un adaptor de PEFT

Los adaptadores de PEFT están apoyados por la clase de PEFT [`Trainer`] para que puedas entrenar el adaptador para tu caso de uso específico. Sólo requiere agregar unas cuantas líneas más de código. Por ejemplo, para entrenar un adaptador de LoRA:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Los adaptadores de PEFT están apoyados por la clase de PEFT [`Trainer`] para que puedas entrenar el adaptador para tu caso de uso específico. Sólo requiere agregar unas cuantas líneas más de código. Por ejemplo, para entrenar un adaptador de LoRA:
Los adaptadores PEFT son compatibles con la clase [`Trainer`] para que puedas entrenar el adaptador para tu caso de uso específico. Sólo requiere agregar unas cuantas líneas más de código. Por ejemplo, para entrenar un adaptador de LoRA:


<Tip>

Si no estás familiarizado con el proceso de afinar un modelo con [`Trainer`], mira el tutorial [Fine-tune a pretrained model](training).

</Tip>

1. Define tu configuraciôn de adaptador con el tipo de tarea y hiperparámetros (lee [`~peft.LoraConfig`] sobre más detalles de lo que
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
1. Define tu configuraciôn de adaptador con el tipo de tarea y hiperparámetros (lee [`~peft.LoraConfig`] sobre más detalles de lo que
1. Define la configuración de su adaptador con el tipo de tarea y los hiperparámetros (consulte [`~peft.LoraConfig`] para obtener más detalles sobre lo que hacen los hiperparámetros).

hacen los hiperparámetros).
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remove this line


```py
from peft import LoraConfig

peft_config = LoraConfig(
lora_alpha=16,
lora_dropout=0.1,
r=64,
bias="none",
task_type="CAUSAL_LM",
)
```

2. Agrega el adaptador al modelo.

```py
model.add_adapter(peft_config)
```

3. ¡Ahora puedes pasar el modelo a [`Trainer`]!

```py
trainer = Trainer(model=model, ...)
trainer.train()
```

Para archivar tu adaptador entrenado y volver a cargarlo:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Para archivar tu adaptador entrenado y volver a cargarlo:
Para guardar tu adaptador entrenado y volver a cargarlo:


```py
model.save_pretrained(save_dir)
model = AutoModelForCausalLM.from_pretrained(save_dir)
```

## Agrega capas entrenables adicionales a un PEFT adaptador
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
## Agrega capas entrenables adicionales a un PEFT adaptador
## Agrega capas entrenables adicionales a un adaptador PEFT


Tambien puedes afinar adaptadores entrenables adicionales en encima de un modelo que tiene adaptadores ajustados por pasar a `modules_to_save` en tu config PEFT. Por ejemplo, si tu quieres también afinar el lm_head encima de un modelo con un adaptador de LoRA:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Tambien puedes afinar adaptadores entrenables adicionales en encima de un modelo que tiene adaptadores ajustados por pasar a `modules_to_save` en tu config PEFT. Por ejemplo, si tu quieres también afinar el lm_head encima de un modelo con un adaptador de LoRA:
También puedes ajustar adaptadores entrenables adicionales sobre un modelo que tiene adaptadores conectados pasando `modules_to_save` en su configuración PEFT. Por ejemplo, si también quieres ajustar el `lm_head` encima de un modelo con un adaptador LoRA:


```py
from transformers import AutoModelForCausalLM, OPTForCausalLM, AutoTokenizer
from peft import LoraConfig

model_id = "facebook/opt-350m"
model = AutoModelForCausalLM.from_pretrained(model_id)

lora_config = LoraConfig(
target_modules=["q_proj", "k_proj"],
modules_to_save=["lm_head"],
)

model.add_adapter(lora_config)
```


<!--
TODO: (@younesbelkada @stevhliu)
- Link to PEFT docs for further details
- Trainer
- 8-bit / 4-bit examples ?
-->
Loading