Update hands-on.mdx

This commit is contained in:
Thomas Simonini
2023-01-04 14:27:23 +01:00
committed by GitHub
parent 9b5db4e879
commit 26e335736e

View File

@@ -642,6 +642,8 @@ import datetime
import json
import imageio
import tempfile
import os
```
@@ -669,67 +671,77 @@ def record_video(env, policy, out_directory, fps=30):
```
```python
def push_to_hub(repo_id, model, hyperparameters, eval_env, video_fps=30, local_repo_path="hub"):
"""
Evaluate, Generate a video and Upload a model to Hugging Face Hub.
This method does the complete pipeline:
- It evaluates the model
- It generates the model card
- It generates a replay video of the agent
- It pushes everything to the Hub
def push_to_hub(repo_id,
model,
hyperparameters,
eval_env,
video_fps=30
):
"""
Evaluate, Generate a video and Upload a model to Hugging Face Hub.
This method does the complete pipeline:
- It evaluates the model
- It generates the model card
- It generates a replay video of the agent
- It pushes everything to the Hub
:param repo_id: repo_id: id of the model repository from the Hugging Face Hub
:param model: the pytorch model we want to save
:param hyperparameters: training hyperparameters
:param eval_env: evaluation environment
:param video_fps: how many frame per seconds to record our video replay
:param local_repo_path: where the local repository is
"""
:param repo_id: repo_id: id of the model repository from the Hugging Face Hub
:param model: the pytorch model we want to save
:param hyperparameters: training hyperparameters
:param eval_env: evaluation environment
:param video_fps: how many frame per seconds to record our video replay
"""
_, repo_name = repo_id.split("/")
api = HfApi()
# Step 1: Create the repo
repo_url = api.create_repo(
_, repo_name = repo_id.split("/")
api = HfApi()
# Step 1: Create the repo
repo_url = api.create_repo(
repo_id=repo_id,
exist_ok=True,
)
)
# Step 2: Download files
repo_local_path = Path(snapshot_download(repo_id=repo_id))
with tempfile.TemporaryDirectory() as tmpdirname:
local_directory = Path(tmpdirname)
# Step 2: Save the model
torch.save(model, local_directory / "model.pt")
# Step 3: Save the model
torch.save(model, os.path.join(repo_local_path, "model.pt"))
# Step 4: Save the hyperparameters to JSON
with open(Path(repo_local_path) / "hyperparameters.json", "w") as outfile:
json.dump(hyperparameters, outfile)
# Step 5: Evaluate the model and build JSON
mean_reward, std_reward = evaluate_agent(
eval_env, hyperparameters["max_t"], hyperparameters["n_evaluation_episodes"], model
)
# Step 3: Save the hyperparameters to JSON
with open(local_directory / "hyperparameters.json", "w") as outfile:
json.dump(hyperparameters, outfile)
# Step 4: Evaluate the model and build JSON
mean_reward, std_reward = evaluate_agent(eval_env,
hyperparameters["max_t"],
hyperparameters["n_evaluation_episodes"],
model)
# Get datetime
eval_datetime = datetime.datetime.now()
eval_form_datetime = eval_datetime.isoformat()
evaluate_data = {
"env_id": hyperparameters["env_id"],
"mean_reward": mean_reward,
"n_evaluation_episodes": hyperparameters["n_evaluation_episodes"],
"eval_datetime": eval_form_datetime,
"env_id": hyperparameters["env_id"],
"mean_reward": mean_reward,
"n_evaluation_episodes": hyperparameters["n_evaluation_episodes"],
"eval_datetime": eval_form_datetime,
}
# Write a JSON file
with open(Path(repo_local_path) / "results.json", "w") as outfile:
with open(local_directory / "results.json", "w") as outfile:
json.dump(evaluate_data, outfile)
# Step 6: Create the model card
# Env id
# Step 5: Create the model card
env_name = hyperparameters["env_id"]
metadata = {}
metadata["tags"] = [env_name, "reinforce", "reinforcement-learning", "custom-implementation", "deep-rl-class"]
metadata["tags"] = [
env_name,
"reinforce",
"reinforcement-learning",
"custom-implementation",
"deep-rl-class"
]
# Add metrics
eval = metadata_eval_result(
@@ -741,7 +753,7 @@ def push_to_hub(repo_id, model, hyperparameters, eval_env, video_fps=30, local_r
metrics_value=f"{mean_reward:.2f} +/- {std_reward:.2f}",
dataset_pretty_name=env_name,
dataset_id=env_name,
)
)
# Merges both dictionaries
metadata = {**metadata, **eval}
@@ -752,32 +764,32 @@ def push_to_hub(repo_id, model, hyperparameters, eval_env, video_fps=30, local_r
To learn to use this model and train yours check Unit 4 of the Deep Reinforcement Learning Course: https://huggingface.co/deep-rl-course/unit4/introduction
"""
readme_path = repo_local_path / "README.md"
readme_path = local_directory / "README.md"
readme = ""
if readme_path.exists():
with readme_path.open("r", encoding="utf8") as f:
readme = f.read()
readme = f.read()
else:
readme = model_card
readme = model_card
with readme_path.open("w", encoding="utf-8") as f:
f.write(readme)
f.write(readme)
# Save our metrics to Readme metadata
metadata_save(readme_path, metadata)
# Step 7: Record a video
video_path = repo_local_path / "replay.mp4"
# Step 6: Record a video
video_path = local_directory / "replay.mp4"
record_video(env, model, video_path, video_fps)
# Step 7. Push everything to the Hub
api.upload_folder(
repo_id=repo_id,
folder_path=repo_local_path,
path_in_repo=".",
repo_id=repo_id,
folder_path=local_directory,
path_in_repo=".",
)
print(f"Your model is pushed to the hub. You can view your model here: {repo_url}")
print(f"Your model is pushed to the Hub. You can view your model here: {repo_url}")
```
By using `push_to_hub` **you evaluate, record a replay, generate a model card of your agent and push it to the Hub**.
@@ -815,8 +827,7 @@ push_to_hub(
cartpole_policy, # The model we want to save
cartpole_hyperparameters, # Hyperparameters
eval_env, # Evaluation environment
video_fps=30,
local_repo_path="hub",
video_fps=30
)
```
@@ -964,8 +975,7 @@ push_to_hub(
pixelcopter_policy, # The model we want to save
pixelcopter_hyperparameters, # Hyperparameters
eval_env, # Evaluation environment
video_fps=30,
local_repo_path="hub",
video_fps=30
)
```