# TensorBoard 日志记录器

TensorBoard 是一个用于机器学习实验的可视化工具包。TensorBoard 允许跟踪和可视化损失和准确率等指标、可视化模型图、查看直方图、显示图像等等。TensorBoard 与 Hugging Face Hub 深度集成。当推送到 Hub 时，Hub 会自动检测 TensorBoard 跟踪文件（例如 `tfevents`），并启动一个实例来可视化它们。要了解有关 Hub 上 TensorBoard 集成的更多信息，请查看 [此指南](https://huggingface.co/docs/hub/tensorboard)。

为了利用此集成，`huggingface_hub` 提供了一个自定义日志记录器，用于将日志推送到 Hub。它可以作为 [SummaryWriter](https://tensorboardx.readthedocs.io/en/latest/tensorboard.html) 的直接替代品，无需额外代码。跟踪数据仍会保存在本地，并由后台任务按固定间隔将其推送到 Hub。

## HFSummaryWriter[[huggingface_hub.HFSummaryWriter]]

#### huggingface_hub.HFSummaryWriter[[huggingface_hub.HFSummaryWriter]]

```python
huggingface_hub.HFSummaryWriter(*args, **kwargs)
```

[源代码](https://github.com/huggingface/huggingface_hub/blob/v2.4.0/src/huggingface_hub/_tensorboard_logger.py#L39)

**参数：**

repo_id (`str`) : 日志将推送到的仓库的 id。

logdir (`str`, *可选*) : 日志写入的目录。如果未指定，底层的 `SummaryWriter` 对象将创建一个本地目录。

commit_every (`int` 或 `float`，*可选*)：日志推送到 Hub 的频率（以分钟为单位）。默认值为 5 分钟。

squash_history (`bool`, *可选*) : 是否在每次提交后压缩仓库的历史记录。默认为 `False`。压缩提交有助于避免仓库过大时性能下降。

repo_type (`str`, *可选*) : 日志将推送到的仓库类型。默认为 "model"。

repo_revision (`str`, *可选*) : 日志将推送到的仓库的版本。默认为 "main"。

repo_private (`bool`, *可选*) : 是否将仓库设为私有。如果为 `None`（默认值），除非组织的默认设置为私有，否则仓库将是公开的。如果仓库已存在，则忽略此值。

path_in_repo (`str`, *可选*) : 日志将推送到的仓库中文件夹的路径。默认为 "tensorboard/"。

repo_allow_patterns (`list[str]` 或 `str`，*可选*) : 要包含在上传中的模式列表。默认值为 `"*.tfevents.*"`。有关更多详细信息，请参阅 [上传指南](https://huggingface.co/docs/huggingface_hub/guides/upload#upload-a-folder)。

repo_ignore_patterns (`list[str]` 或 `str`，*可选*) : 上传时需要排除的模式列表。有关更多详细信息，请参阅[上传指南](https://huggingface.co/docs/huggingface_hub/guides/upload#upload-a-folder)。

token (`str`，*可选*)：身份验证令牌。默认使用已存储的令牌。有关更多详细信息，请访问 https://huggingface.co/settings/token

kwargs : 传递给 `SummaryWriter` 的额外关键字参数。

对 tensorboard 的 `SummaryWriter` 进行封装，以将训练日志推送到 Hub。

数据会先在本地记录，然后异步推送到 Hub。向 Hub 推送数据在单独的线程中执行，以避免阻塞训练脚本。特别是，如果上传因任何原因（例如连接问题）失败，主脚本不会中断。数据会自动每 `commit_every` 分钟（默认每 5 分钟）推送到 Hub。

> [!WARNING]
> `HFSummaryWriter` 目前处于实验阶段。其 API 可能会在未来未经提前通知的情况下发生变更。

示例：
```diff
# Taken from https://pytorch.org/docs/stable/tensorboard.html
- from torch.utils.tensorboard import SummaryWriter
+ from huggingface_hub import HFSummaryWriter

import numpy as np

- writer = SummaryWriter()
+ writer = HFSummaryWriter(repo_id="username/my-trained-model")

for n_iter in range(100):
    writer.add_scalar('Loss/train', np.random.random(), n_iter)
    writer.add_scalar('Loss/test', np.random.random(), n_iter)
    writer.add_scalar('Accuracy/train', np.random.random(), n_iter)
    writer.add_scalar('Accuracy/test', np.random.random(), n_iter)
```

```py
>>> from huggingface_hub import HFSummaryWriter

# Logs are automatically pushed every 15 minutes (5 by default) + when exiting the context manager
>>> with HFSummaryWriter(repo_id="test_hf_logger", commit_every=15) as logger:
...     logger.add_scalar("a", 1)
...     logger.add_scalar("b", 2)
```

