Metadata-Version: 2.1 Name: huggingface-sb3 Version: 3.0 Summary: Additional code for Stable-baselines3 to load and upload models from the Hub. Home-page: https://github.com/huggingface/huggingface_sb3 Author: Thomas Simonini, Omar Sanseviero and Hugging Face Team Author-email: thomas.simonini@huggingface.co License: Apache Keywords: reinforcement learning deep reinforcement learning RL Platform: UNKNOWN Description-Content-Type: text/markdown Requires-Dist: huggingface-hub ~=0.8 Requires-Dist: pyyaml ~=6.0 Requires-Dist: wasabi Requires-Dist: numpy Requires-Dist: cloudpickle >=1.6 Provides-Extra: quality Requires-Dist: black ~=22.0 ; extra == 'quality' Requires-Dist: isort >=5.5.4 ; extra == 'quality' Requires-Dist: flake8 >=3.8.3 ; extra == 'quality' # Hugging Face 🤗 x Stable-baselines3 v3.0 A library to load and upload Stable-baselines3 models from the Hub with Gymnasium and Gymnasium compatible environments. ⚠️ If you use Gym, you need to install `huggingface_sb3==2.3.1` ## Installation ### With pip ``` pip install huggingface-sb3 ``` ## Examples We wrote a tutorial on how to use 🤗 Hub and Stable-Baselines3 [here](https://colab.research.google.com/github/huggingface/deep-rl-class/blob/master/notebooks/unit1/unit1.ipynb) If you use **Colab or a Virtual/Screenless Machine**, you can check Case 3 and Case 4. ### Case 1: I want to download a model from the Hub ```python import gymnasium as gym from huggingface_sb3 import load_from_hub from stable_baselines3 import PPO from stable_baselines3.common.evaluation import evaluate_policy # Retrieve the model from the hub ## repo_id = id of the model repository from the Hugging Face Hub (repo_id = {organization}/{repo_name}) ## filename = name of the model zip file from the repository checkpoint = load_from_hub( repo_id="sb3/demo-hf-CartPole-v1", filename="ppo-CartPole-v1.zip", ) model = PPO.load(checkpoint) # Evaluate the agent and watch it eval_env = gym.make("CartPole-v1") mean_reward, std_reward = evaluate_policy( model, eval_env, render=False, n_eval_episodes=5, deterministic=True, warn=False ) print(f"mean_reward={mean_reward:.2f} +/- {std_reward}") ``` ### Case 2: I trained an agent and want to upload it to the Hub With `package_to_hub()` **we'll save, evaluate, generate a model card and record a replay video of your agent before pushing the repo to the hub**. It currently **works for Gym and Atari environments**. If you use another environment, you should use `push_to_hub()` instead. First you need to be logged in to Hugging Face: - If you're using Colab/Jupyter Notebooks: ```python from huggingface_hub import notebook_login notebook_login() ``` - Else: ``` huggingface-cli login ``` Then **With `package_to_hub()`**: ```python import gymnasium as gym from stable_baselines3 import PPO from stable_baselines3.common.env_util import make_vec_env from huggingface_sb3 import package_to_hub # Create the environment env_id = "LunarLander-v2" env = make_vec_env(env_id, n_envs=1) # Create the evaluation env eval_env = make_vec_env(env_id, n_envs=1) # Instantiate the agent model = PPO("MlpPolicy", env, verbose=1) # Train the agent model.learn(total_timesteps=int(5000)) # This method save, evaluate, generate a model card and record a replay video of your agent before pushing the repo to the 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") ``` **With `push_to_hub()`**: Push to hub only **push a file to the Hub**, if you want to save, evaluate, generate a model card and record a replay video of your agent before pushing the repo to the hub, use `package_to_hub()` ```python import gymnasium as gym from stable_baselines3 import PPO from stable_baselines3.common.env_util import make_vec_env from huggingface_sb3 import push_to_hub # Create the environment env_id = "LunarLander-v2" env = make_vec_env(env_id, n_envs=1) # Instantiate the agent model = PPO("MlpPolicy", env, verbose=1) # Train it for 10000 timesteps model.learn(total_timesteps=10_000) # Save the model model.save("ppo-LunarLander-v2") # Push this saved model .zip file to the hf repo # If this repo does not exists it will be created ## repo_id = id of the model repository from the Hugging Face Hub (repo_id = {organization}/{repo_name}) ## filename: the name of the file == "name" inside model.save("ppo-LunarLander-v2") push_to_hub( repo_id="ThomasSimonini/ppo-LunarLander-v2", filename="ppo-LunarLander-v2.zip", commit_message="Added LunarLander-v2 model trained with PPO", ) ``` ### Case 3: I use Google Colab with Classic Control/Box2D Gym Environments - You can use xvbf (virtual screen) ``` !apt-get install -y xvfb python-opengl > /dev/null 2>&1 ``` - Just put your code inside a python file and run ``` !xvfb-run -s "-screen 0 1400x900x24" ``` ### Case 4: I use a Virtual/Remote Machine - You can use xvbf (virtual screen) ``` xvfb-run -s "-screen 0 1400x900x24" ``` ### Case 5: I want to automate upload/download from the Hub If you want to upload or download models for many environments, you might want to automate this process. It makes sense to adhere to a fixed naming scheme for models and repositories. You will run into trouble when your environment names contain slashes. Therefore, we provide some helper classes: ```python import gymnasium as gym from huggingface_sb3.naming_schemes import EnvironmentName, ModelName, ModelRepoId env_name = EnvironmentName("seals/Walker2d-v0") model_name = ModelName("ppo", env_name) repo_id = ModelRepoId("YourOrganization", model_name) # prints 'seals-Walker2d-v0'. Notice how the slash is removed so you can use it to # construct file paths if you like. print(env_name) # you can still access the original gym id if needed env = gym.make(env_name.gym_id) # prints `ppo-seals-Walker2d-v0` print(model_name) # prints: `ppo-seals-Walker2d-v0.zip`. # This is where `model.save(model_name)` will place the model file print(model_name.filename) # prints: `YourOrganization/ppo-seals-Walker2d-v0` print(repo_id) ```