> ## Documentation Index
> Fetch the complete documentation index at: https://wb-21fd5541-sa-registry-access.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> 강화 학습 실험을 추적하고 트레이닝 성능을 로깅하도록 W&B를 Stable Baselines3와 통합합니다.

# Stable Baselines 3 PyTorch

[Stable Baselines 3](https://github.com/DLR-RM/stable-baselines3) (SB3)는 PyTorch로 구현된 신뢰할 수 있는 강화 학습 알고리즘 모음입니다. W\&B SB3 인테그레이션은 다음을 지원합니다:

* loss 및 에피소드 반환값과 같은 메트릭을 로깅합니다.
* 에이전트가 게임을 플레이하는 비디오를 업로드합니다.
* 트레이닝된 모델을 저장합니다.
* 모델의 하이퍼파라미터를 로깅합니다.
* 모델 그라디언트 히스토그램을 로깅합니다.

[예시 SB3 트레이닝 run](https://wandb.ai/wandb/sb3/runs/1jyr6z10)을 살펴보세요.

<div id="log-your-sb3-experiments">
  ## SB3 실험 로깅하기
</div>

SB3 트레이닝을 W\&B에 로깅하려면 모델의 `learn` 메서드에 `WandbCallback`을 전달하세요:

```python theme={null}
from wandb.integration.sb3 import WandbCallback

model.learn(..., callback=WandbCallback())
```

<Frame>
  <img src="https://mintcdn.com/wb-21fd5541-sa-registry-access/Obd-BEsNttVciY7m/images/integrations/stable_baselines_demo.gif?s=bfb74173a80aa9faad02a7e1ffd99135" alt="W&B를 활용한 Stable Baselines 3 트레이닝" width="2448" height="1544" data-path="images/integrations/stable_baselines_demo.gif" />
</Frame>

<div id="wandbcallback-arguments">
  ## `WandbCallback` 인수
</div>

다음 표에서는 `WandbCallback`에 전달할 수 있는 인수를 설명합니다:

| 인수                   | 사용                                                |
| :------------------- | :------------------------------------------------ |
| `verbose`            | SB3 출력의 상세도입니다.                                   |
| `model_save_path`    | 모델이 저장되는 폴더의 경로입니다. 기본값은 `None`이므로 모델은 로깅되지 않습니다. |
| `model_save_freq`    | 모델을 저장하는 주기입니다.                                   |
| `gradient_save_freq` | 그라디언트를 로깅하는 주기입니다. 기본값은 `0`이므로 그라디언트는 로깅되지 않습니다.  |

<div id="basic-example">
  ## 기본 예시
</div>

W\&B SB3 인테그레이션은 TensorBoard에서 생성된 로그 출력을 사용해 메트릭을 로깅합니다.

```python theme={null}
import gym
from stable_baselines3 import PPO
from stable_baselines3.common.monitor import Monitor
from stable_baselines3.common.vec_env import DummyVecEnv, VecVideoRecorder
import wandb
from wandb.integration.sb3 import WandbCallback


config = {
    "policy_type": "MlpPolicy",
    "total_timesteps": 25000,
    "env_name": "CartPole-v1",
}
run = wandb.init(
    project="sb3",
    config=config,
    sync_tensorboard=True,  # sb3의 tensorboard 메트릭 자동 업로드
    monitor_gym=True,  # 에이전트가 게임을 플레이하는 비디오 자동 업로드
    save_code=True,  # 선택 사항
)


def make_env():
    env = gym.make(config["env_name"])
    env = Monitor(env)  # 반환값 등의 통계 기록
    return env


env = DummyVecEnv([make_env])
env = VecVideoRecorder(
    env,
    f"videos/{run.id}",
    record_video_trigger=lambda x: x % 2000 == 0,
    video_length=200,
)
model = PPO(config["policy_type"], env, verbose=1, tensorboard_log=f"runs/{run.id}")
model.learn(
    total_timesteps=config["total_timesteps"],
    callback=WandbCallback(
        gradient_save_freq=100,
        model_save_path=f"models/{run.id}",
        verbose=2,
    ),
)
run.finish()
```
