Buckets:

rtrm's picture
|
download
raw
10.9 kB

Compartir modelos preentrenados[[sharing-pretrained-models]]

{#if fw === 'pt'}

{:else}

{/if}

En los pasos siguientes veremos las formas más sencillas de compartir modelos preentrenados en el 🤗 Hub. Existen herramientas y utilidades que facilitan compartir y actualizar modelos directamente en el Hub, y las exploraremos a continuación.

Animamos a todas las personas que entrenan modelos a contribuir compartiéndolos con la comunidad. Compartir modelos, incluso cuando se entrenaron con datasets muy específicos, ayuda a otros, les ahorra tiempo y recursos de cómputo y les da acceso a artefactos entrenados útiles. A cambio, tú también puedes beneficiarte del trabajo que han hecho otros.

Hay tres maneras de crear nuevos repositorios de modelos:

  • Usar la API push_to_hub
  • Usar la librería de Python huggingface_hub
  • Usar la interfaz web

Una vez que hayas creado un repositorio, puedes subir archivos a través de git y git-lfs. En las secciones siguientes te mostraremos cómo crear repositorios de modelos y subir archivos a ellos.

Usar la API push_to_hub[[using-the-pushtohub-api]]

{#if fw === 'pt'}

{:else}

{/if}

La forma más sencilla de subir archivos al Hub es aprovechar la API push_to_hub.

Antes de seguir, tendrás que generar un token de autenticación para que la API huggingface_hub sepa quién eres y a qué namespaces tienes acceso de escritura. Asegúrate de estar en un entorno donde tengas instalado transformers (consulta Instalación). Si estás en un notebook, puedes usar la siguiente función para iniciar sesión:

from huggingface_hub import notebook_login

notebook_login()

En una terminal puedes ejecutar:

huggingface-cli login

En ambos casos se te pedirá tu nombre de usuario y contraseña, que son los mismos que usas para iniciar sesión en el Hub. Si aún no tienes un perfil en el Hub, puedes crear uno aquí.

Perfecto. Ahora tienes tu token de autenticación guardado en la carpeta de caché. Veamos cómo crear repositorios.

{#if fw === 'pt'}

Si has experimentado con la API Trainer para entrenar un modelo, la manera más sencilla de subirlo al Hub es establecer push_to_hub=True cuando definas tus TrainingArguments:

from transformers import TrainingArguments

training_args = TrainingArguments(
    "bert-finetuned-mrpc", save_strategy="epoch", push_to_hub=True
)

Cuando llames a trainer.train(), el Trainer subirá tu modelo al Hub cada vez que se guarde (aquí, en cada época) en un repositorio de tu namespace. Ese repositorio tendrá el mismo nombre que el directorio de salida que hayas elegido (aquí bert-finetuned-mrpc), pero puedes escoger otro nombre con hub_model_id = "a_different_name".

Para subir tu modelo a una organización de la que eres miembro, basta con pasar hub_model_id = "my_organization/my_repo_name".

Una vez finalizado el entrenamiento, deberías hacer un trainer.push_to_hub() final para subir la última versión de tu modelo. Eso también generará una tarjeta del modelo con todos los metadatos relevantes, incluidos los hiperparámetros usados y los resultados de evaluación. Aquí tienes un ejemplo del contenido que podrías encontrar en una tarjeta de este tipo:

{:else}

Si usas Keras para entrenar tu modelo, la forma más sencilla de subirlo al Hub es pasar un PushToHubCallback cuando llames a model.fit():

from transformers import PushToHubCallback

callback = PushToHubCallback(
    "bert-finetuned-mrpc", save_strategy="epoch", tokenizer=tokenizer
)

Después debes añadir callbacks=[callback] en tu llamada a model.fit(). El callback subirá tu modelo al Hub cada vez que se guarde (aquí, en cada época) en un repositorio de tu namespace. Ese repositorio tendrá el mismo nombre que el directorio de salida que hayas elegido (aquí bert-finetuned-mrpc), pero puedes escoger otro nombre con hub_model_id = "a_different_name".

Para subir tu modelo a una organización de la que eres miembro, basta con pasar hub_model_id = "my_organization/my_repo_name".

{/if}

A un nivel más bajo, se puede acceder al Model Hub directamente desde modelos, tokenizadores y objetos de configuración a través de su método push_to_hub(). Este método se encarga tanto de crear el repositorio como de enviar directamente al repositorio los archivos del modelo y del tokenizador. No hace falta manejarlos manualmente, a diferencia de la API que veremos más abajo.

Para hacerte una idea de cómo funciona, primero inicialicemos un modelo y un tokenizador:

{#if fw === 'pt'}

from transformers import AutoModelForMaskedLM, AutoTokenizer

checkpoint = "camembert-base"

model = AutoModelForMaskedLM.from_pretrained(checkpoint)
tokenizer = AutoTokenizer.from_pretrained(checkpoint)

{:else}

from transformers import TFAutoModelForMaskedLM, AutoTokenizer

checkpoint = "camembert-base"

model = TFAutoModelForMaskedLM.from_pretrained(checkpoint)
tokenizer = AutoTokenizer.from_pretrained(checkpoint)

{/if}

Puedes hacer con ellos lo que quieras: añadir tokens al tokenizador, entrenar el modelo, ajustarlo. Una vez que estés conforme con el modelo resultante, sus pesos y el tokenizador, puedes usar el método push_to_hub() disponible directamente en el objeto model:

model.push_to_hub("dummy-model")

Esto creará el nuevo repositorio dummy-model en tu perfil y lo poblará con los archivos del modelo. Haz lo mismo con el tokenizador, para que todos los archivos queden disponibles en ese repositorio:

tokenizer.push_to_hub("dummy-model")

Si perteneces a una organización, basta con especificar el argumento organization para subirlo al namespace de esa organización:

tokenizer.push_to_hub("dummy-model", organization="huggingface")

Si quieres usar un token específico de Hugging Face, también puedes pasarlo al método push_to_hub():

tokenizer.push_to_hub("dummy-model", organization="huggingface", use_auth_token="")

Ahora ve al Model Hub para encontrar tu modelo recién subido: https://huggingface.co/user-or-organization/dummy-model.

Haz clic en la pestaña "Files and versions" y deberías ver los archivos que aparecen en la siguiente captura:

{#if fw === 'pt'}

{:else}

{/if}

✏️ ¡Inténtalo! Toma el modelo y el tokenizador asociados al checkpoint bert-base-cased y súbelos a un repositorio de tu namespace usando el método push_to_hub(). Comprueba que el repositorio aparezca correctamente en tu página antes de eliminarlo.

Como has visto, el método push_to_hub() acepta varios argumentos, lo que permite subir a un repositorio específico o al namespace de una organización, o usar un token de API distinto. Te recomendamos revisar la especificación del método disponible directamente en la documentación de 🤗 Transformers para hacerte una idea de todo lo que permite.

El método push_to_hub() está respaldado por el paquete de Python huggingface_hub, que ofrece una API directa para el Hugging Face Hub. Está integrado en 🤗 Transformers y en varias otras librerías de machine learning, como allenlp. Aunque en este capítulo nos centramos en la integración con 🤗 Transformers, incorporarlo a tu propio código o librería es sencillo.

Salta a la última sección para ver cómo subir archivos a tu repositorio recién creado.

Usar la librería de Python huggingface_hub[[using-the-huggingfacehub-python-library]]

La librería de Python huggingface_hub es un paquete que ofrece un conjunto de herramientas para los hubs de modelos y datasets. Proporciona métodos y clases sencillos para tareas comunes, como obtener información sobre repositorios en el hub y gestionarlos. Ofrece APIs simples que funcionan sobre git para gestionar el contenido de esos repositorios e integrar el Hub en tus proyectos y librerías.

Al igual que con la API push_to_hub, esto requiere que tengas tu token de API guardado en la caché. Para hacerlo, debes usar el comando login desde la CLI, como se mencionó en la sección anterior (otra vez, asegúrate de anteponer estos comandos con el carácter ! si estás ejecutando en Google Colab):

huggingface-cli login

El paquete huggingface_hub ofrece varios métodos y clases útiles para nuestro propósito. En primer lugar, hay algunos métodos para gestionar la creación y eliminación de repositorios, entre otras cosas:

from huggingface_hub import (
    # User management
    login,
    logout,
    whoami,

    # Repository creation and management
    create_repo,
    delete_repo,
    update_repo_visibility,

    # And some methods to retrieve/change information about the content
    list_models,
    list_datasets,
    list_metrics,
    list_repo_files,
    upload_file,
    delete_file,
)

Además, ofrece la potente clase Repository para gestionar un repositorio local. Exploraremos esos métodos y esa clase en las siguientes secciones para entender cómo aprovecharlos.

El método create_repo puede usarse para crear un nuevo repositorio en el hub:

from huggingface_hub import create_repo

create_repo("dummy-model")

Esto creará el repositorio dummy-model en tu namespace. Si quieres, puedes indicar a qué organización debe pertenecer el repositorio usando el argumento organization:

from huggingface_hub import create_repo

create_repo("dummy-model", organization="huggingface")

Esto creará el repositorio dummy-model en el namespace huggingface, suponiendo que pertenezcas a esa organización. Otros argumentos que pueden resultar útiles son:

  • private, para especificar si el repositorio debe ser visible para otras personas o no.
  • token, si quieres sobrescribir el token almacenado en la caché con otro token.
  • repo_type, si quieres crear un dataset o un space en lugar de un modelo. Los valores aceptados son "dataset" y "space".

Una vez creado el repositorio, debemos añadirle archivos. Salta a la siguiente sección para ver las tres formas de hacerlo.

Usar la interfaz web[[using-the-web-interface]]

La interfaz web ofrece herramientas para gestionar repositorios directamente en el Hub. Con ella puedes crear repositorios fácilmente, añadir archivos (incluso grandes), explorar modelos, visualizar diffs y mucho más.

Para crear un nuevo repositorio, visita huggingface.co/new:

Primero, especifica el propietario del repositorio: puede ser tu cuenta o cualquiera de las organizaciones con las que estés afiliado. Si eliges una organización, el modelo aparecerá en la página de esa organización y cada miembro de la organización podrá contribuir al repositorio.

Xet Storage Details

Size:
10.9 kB
·
Xet hash:
8b31035d893d01dac1292c9ddee513f0d4d4e5c78e41119ff21fa849e2845c16

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.