mirror of
https://github.com/huggingface/deep-rl-class.git
synced 2026-04-13 18:00:45 +08:00
Update hands-on.mdx
This commit is contained in:
@@ -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
|
||||
)
|
||||
```
|
||||
|
||||
|
||||
Reference in New Issue
Block a user