# Uso de Stable-Baselines3 en Hugging Face

`stable-baselines3` es un conjunto de implementaciones fiables de algoritmos de aprendizaje por refuerzo en PyTorch.

## Explorando Stable-Baselines3 en el Hub

Puedes encontrar los modelos de Stable-Baselines3 filtrando en la parte izquierda de la [página de modelos](https://huggingface.co/models?library=stable-baselines3).

Todos los modelos del Hub vienen con características útiles:
1. Una tarjeta de modelo generada automáticamente con una descripción, una configuración de entrenamiento y más.
2. Etiquetas de metadatos que ayudan a la descubribilidad.
3. Resultados de evaluación para comparar con otros modelos.
4. Un widget de video donde puedes ver a tu agente en acción.

## Instalar la biblioteca

Para instalar la biblioteca `stable-baselines3`, necesitas instalar dos paquetes:
- `stable-baselines3`: biblioteca Stable-Baselines3.
- `huggingface-sb3`: código adicional para cargar y subir modelos de Stable-baselines3 desde el Hub.

```
pip install stable-baselines3
pip install huggingface-sb3
```

## Uso de modelos existentes
Puedes simplemente descargar un modelo del Hub usando la función `load_from_hub`

```
checkpoint = load_from_hub(
    repo_id="sb3/demo-hf-CartPole-v1",
    filename="ppo-CartPole-v1.zip",
)
```

Debes definir dos parámetros:
- `--repo-id`: el nombre del repositorio de Hugging Face que deseas descargar.
- `--filename`: el archivo que desea descargar.

## Compartir tus modelos
Puedes subir tus modelos fácilmente usando dos funciones diferentes:

1. `package_to_hub()`: guarda el modelo, lo evalúa, genera una tarjeta de modelo y registra un video de reproducción de tu agente antes de subir el repositorio completo al Hub.

```
package_to_hub(model=model, 
               model_name="ppo-LunarLander-v2",
               model_architecture="PPO",
               env_id=env_id,
               eval_env=eval_env,
               repo_id="ThomasSimonini/ppo-LunarLander-v2",
               commit_message="Test commit")
```

Debes definir siete parámetros:
- `--model`: tu modelo entrenado.
- `--model_architecture`: nombre de la arquitectura de tu modelo (DQN, PPO, A2C, SAC...).
- `--env_id`: nombre del entorno.
- `--eval_env`: entorno utilizado para evaluar al agente.
- `--repo-id`: el nombre del repositorio de Hugging Face que deseas crear o actualizar. Es `<your huggingface username>/<the repo name>`.
- `--commit-message`.
- `--filename`: el archivo que deseas enviar al Hub.

2. `push_to_hub()`: simplemente sube un archivo al Hub

```
push_to_hub(
    repo_id="ThomasSimonini/ppo-LunarLander-v2",
    filename="ppo-LunarLander-v2.zip",
    commit_message="Added LunarLander-v2 model trained with PPO",
)
```
Debes definir tres parámetros:
- `--repo-id`: el nombre del repositorio de Hugging Face que deseas crear o actualizar. Es `<your huggingface username>/<the repo name>`.
- `--filename`: el archivo que deseas enviar al Hub.
- `--commit-message`.

## Recursos adicionales

* Documentación de Hugging Face Stable-Baselines3 [documentation](https://github.com/huggingface/huggingface_sb3#hugging-face--x-stable-baselines3-v20)
* Documentación de Stable-Baselines3 [documentation](https://stable-baselines3.readthedocs.io/en/master/)

