我们在学习或者开发大模型的时候,经常会用到Huggingface的模型和工具,甚至Huggingface有专门的log系统。那么它和传统的Python标准日志有神区别呢?
Huggingface 是一个专门做自然语言处理(NLP)的开源平台,提供了很多现成的模型和工具。就像一个”模型商店”,你可以直接用他们的模型来做文本生成、翻译等任务。
最常用的是他们的 transformers
库,包含了:
from transformers import AutoTokenizer, AutoModelForCausalLM # 用于加载模型
from transformers import Trainer, TrainingArguments # 用于训练模型
2. Python 标准日志系统 (logging)
这是 Python 自带的记录日志的工具,就像写日记一样,记录程序运行过程中的各种信息。
基础使用:
import logging
# 1. 最简单的使用
logging.basicConfig(filename='my_log.txt', level=logging.INFO)
logging.info("这是一条日志") # 会写入 "这是一条日志" 到 my_log.txt
# 2. 详细配置
logging.basicConfig(
filename='my_log.txt', # 日志文件名
level=logging.INFO, # 日志级别
format='%(asctime)s - %(message)s', # 日志格式:时间 - 消息
filemode='a' # a 表示追加模式,w 表示覆盖模式
)
# 3. 不同级别的日志
logging.debug("调试信息") # 最低级别,记录详细的调试信息
logging.info("普通信息") # 记录程序正常运行的信息
logging.warning("警告信息") # 记录可能的问题
logging.error("错误信息") # 记录错误,但程序还能运行
logging.critical("严重错误") # 记录可能导致程序崩溃的错误
实际例子:
import logging
# 配置日志
logging.basicConfig(
filename='training.log',
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s'
)
# 记录训练过程
logging.info("开始训练模型")
for epoch in range(3):
loss = 0.5 # 假设这是训练损失
logging.info(f"Epoch {epoch}, Loss: {loss}")
logging.info("训练完成")
# 日志文件内容会像这样:
# 2024-11-23 14:30:00 - INFO - 开始训练模型
# 2024-11-23 14:30:01 - INFO - Epoch 0, Loss: 0.5
# 2024-11-23 14:30:02 - INFO - Epoch 1, Loss: 0.5
# 2024-11-23 14:30:03 - INFO - Epoch 2, Loss: 0.5
# 2024-11-23 14:30:04 - INFO - 训练完成
3. Huggingface 的日志系统
这是专门为机器学习训练设计的日志系统,自动记录训练过程中的各种指标。
基础使用:
from transformers import TrainingArguments, Trainer
# 1. 配置训练参数
training_args = TrainingArguments(
output_dir="./results", # 输出目录
logging_dir="./logs", # 日志目录
logging_steps=100, # 每100步记录一次日志
save_steps=500, # 每500步保存一次模型
num_train_epochs=3 # 训练3轮
)
# 2. 使用Trainer训练
trainer = Trainer(
model=model, # 你的模型
args=training_args, # 训练参数
train_dataset=dataset # 训练数据
)
# 3. 开始训练,Huggingface会自动记录日志
trainer.train()
4. 两者的主要区别:
-
适用场景:
-
Python logging:像记日记一样,可以记录任何信息
-
Huggingface:专门记录模型训练过程中的数据(loss、准确率等)
-
-
使用难度:
-
Python logging:需要自己写想记录什么
-
Huggingface:自动记录训练信息,不需要自己写
-
-
灵活性:
-
Python logging:完全自由,想怎么记录都可以
-
Huggingface:格式相对固定,主要记录训练相关的数据
-
5. 实际使用建议:
如果你在:
-
写普通的Python程序:用 Python logging
-
训练机器学习模型:用 Huggingface 的日志系统
-
训练模型但想记录更多信息:两者结合使用
比如结合使用的例子:
import logging
from transformers import Trainer
class MyTrainer(Trainer):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# 配置Python logging
logging.basicConfig(filename='custom_log.txt', level=logging.INFO)
def train(self, *args, **kwargs):
logging.info("开始训练") # 用Python logging记录额外信息
super().train(*args, **kwargs) # Huggingface自动记录训练指标
logging.info("训练结束")
没有回复内容