Ajustar completamente un modelo de lenguaje grande (LLM) previamente entrenado para diferentes tareas es muy costoso. En su lugar, podemos congelar los parámetros del LLM mientras solo ajustamos unos pocos millones de parámetros entrenables agregados a través de un adaptador LoRA.
En otras palabras, solo necesitamos ajustar un adaptador para que el modelo realice una tarea objetivo. Por ejemplo, si queremos convertir un LLM previamente entrenado en un modelo de traducción, ajustaríamos un adaptador para la traducción. Podemos ajustar un adaptador para cada solicitud que queremos que realice el LLM.
Pero, ¿podemos combinar varios adaptadores para obtener un único adaptador multitarea?
Por ejemplo, si tenemos un adaptador para traducción y un adaptador para resumen, ¿podemos combinar ambos para que el LLM pueda realizar traducción y resumen?
En este artículo, muestro cómo combinar varios adaptadores LoRA en un único adaptador multitarea. Veremos que es muy sencillo y que el adaptador resultante puede ser tan bueno como los adaptadores utilizados para la combinación.
Usando Llama 2 7B, veremos cómo combinar un adaptador optimizado para traducción con otro adaptador optimizado para chat. Con el adaptador resultante podremos crear una Llama 2 que pueda traducir y chatear.
También implementé un cuaderno que puede ejecutar todo el código explicado en este artículo. Lo puedes encontrar aquí:
Antes de combinar adaptadores, debemos agregarlos al LLM base.
Tenemos que asegurarnos de que el adaptador que queremos agregar haya sido ajustado para nuestro LLM base, es decir, Llama 2 7B. Puede encontrar esta información en el archivo “adapter_config.json” que se encuentra en el directorio del adaptador. Por ejemplo, para kaitchup/Llama-2–7B-adaptador-oasstguanaco (licencia MIT), el adaptador_config.json contiene los siguientes datos:
{
"auto_mapping": null,
"base_model_name_or_path": "meta-llama/Llama-2-7b-hf",
"bias": "none",
"fan_in_fan_out": false,
"inference_mode": true,
"init_lora_weights": true,
"layers_pattern": null…