Hugging Face transformers
库中的 logging
transformers.logging
是 Hugging Face transformers
库提供的 日志管理模块,用于 控制日志级别、调试信息、抑制冗余输出,适用于 模型加载、训练、推理等场景。
1. 为什么使用 transformers.logging
?
在使用 transformers
进行模型训练和推理时,控制日志输出有助于:
- 调试模型加载、训练问题
- 减少不必要的日志输出,提高可读性
- 调整日志级别,获取更多或更少的信息
- 兼容
logging
模块,统一管理日志
2. logging
的基本用法
2.1. 导入 logging
from transformers import logging
2.2. 设置日志级别
logging.set_verbosity_info() # 设置信息级别(默认)
或者:
logging.set_verbosity_debug() # 设置调试级别(详细日志)
logging.set_verbosity_warning() # 仅显示警告及以上日志
logging.set_verbosity_error() # 仅显示错误及以上日志
2.3. 禁用日志
如果你不想打印任何日志:
logging.set_verbosity_error() # 仅保留错误信息
logging.disable_default_handler() # 禁用默认日志
3. 日志级别对比
级别 | 方法 | 作用 |
---|---|---|
调试 | logging.set_verbosity_debug() | 显示所有日志(详细信息) |
信息 | logging.set_verbosity_info() | 显示关键加载信息(默认) |
警告 | logging.set_verbosity_warning() | 仅显示警告及以上日志 |
错误 | logging.set_verbosity_error() | 仅显示错误信息 |
禁用 | logging.disable_default_handler() | 关闭所有 transformers 日志 |
4. 示例:调整日志级别
from transformers import logging
# 设置信息级别(默认)
logging.set_verbosity_info()
# 加载模型时观察日志
from transformers import AutoModelForSequenceClassification
model = AutoModelForSequenceClassification.from_pretrained("bert-base-uncased")
输出示例
Some weights of the model checkpoint at bert-base-uncased were not used when initializing BertForSequenceClassification...
如果改为 调试级别:
logging.set_verbosity_debug()
输出示例(更多细节)
loading configuration file config.json from cache at ...
loading weights file pytorch_model.bin from cache at ...
5. 结合 logging
进行调试
如果想要 记录 transformers
日志到文件:
import logging
from transformers import logging as hf_logging
# 配置 Python logging
logging.basicConfig(
filename="transformers_debug.log",
filemode="w",
format="%(asctime)s - %(levelname)s - %(message)s",
level=logging.DEBUG
)
# 让 transformers 也使用这个 logging
hf_logging.set_verbosity_debug()
hf_logging.enable_default_handler()
hf_logging.enable_explicit_format()
6. logging
在 Trainer
训练中的应用
当使用 Trainer
训练时,可以调整日志级别:
from transformers import TrainingArguments
training_args = TrainingArguments(
output_dir="./results",
logging_dir="./logs",
logging_strategy="steps", # 每隔几步记录日志
logging_steps=10, # 每 10 步记录一次日志
)
# 设置信息级别
from transformers import logging
logging.set_verbosity_info()
这样可以在训练过程中 减少冗余日志,或在调试时 增加日志输出。
7. transformers.logging
vs Python logging
功能 | transformers.logging | Python logging |
---|---|---|
适用于 transformers | ✅ | ❌ |
控制 transformers 日志级别 | ✅ | ❌ |
记录到日志文件 | ❌ | ✅(使用 logging.basicConfig ) |
统一管理整个项目日志 | ❌ | ✅ |
如果你的 项目中有多个日志系统,建议:
- 用
transformers.logging
控制transformers
相关日志 - 用 Python
logging
进行全局日志管理
8. 总结
transformers.logging
用于控制transformers
库的日志级别,适用于 模型加载、训练、推理 等场景。- 支持
debug
、info
、warning
、error
等日志级别,可以 减少不必要的日志输出。 - 可与 Python
logging
结合使用,实现 日志管理和文件存储。 - 在
Trainer
训练时,可以设置logging_steps
控制日志频率。