# 前言
我在远程服务器上跑代码的时候,遇到了tensorboard页面在本地浏览器始终打不开的问题,试了度娘的各种办法都无果。
在同学的安利下发现这个复旦大学计算机科学技术学院 自然语言处理与深度学习组 的 fastNLP 团队开发的神器——fitlog。可以满足我记录loss、acc等参数并可视化为图表的简单需求。
目录
# 实战使用步骤
服务器为linux系统,环境配的pytorch框架
1 包安装
在自己的环境里install这个包
pip install fitlog
2 入门样例
在命令行中输入fitlog init example初始化项目
>>> fitlog init example
Initialized empty Git repository in /Users/fdujyn/workspaces/example/.git/
[master (root-commit) 0b94c29] Project initialized.
4 files changed, 72 insertions(+)
create mode 100755 .fitconfig
create mode 100755 .gitignore
create mode 100644 logs/default.cfg
create mode 100755 main.py
Initialized empty Git repository in /Users/fdujyn/workspaces/example/.git/
Fitlog project example is initialized.
初始化后,会在当前目录下创建一个example文件夹,我们在命令行输入cd example来进入样例。样例中以`.`开头的文件和文件夹是fitlog所需的配置文件, 我们一般情况下不需要修改他们;logs 文件夹是 fitlog 默认存放日志的文件夹;main.py 是训练程序的入口文件。
>>> cd example
>>> ls -al
total 24
drwxr-xr-x 8 fdujyn staff 256 Apr 25 19:38 .
drwxr-xr-x@ 20 fdujyn staff 640 Apr 25 19:38 ..
-rwxr-xr-x 1 fdujyn staff 142 Apr 25 19:38 .fitconfig
drwxr-xr-x 14 fdujyn staff 448 Apr 25 19:38 .fitlog
drwxr-xr-x 10 fdujyn staff 320 Apr 25 19:40 .git
-rw-r--r-- 1 fdujyn staff 37 Apr 25 19:38 .gitignore
drwxr-xr-x 3 fdujyn staff 96 Apr 25 19:38 logs
-rwxr-xr-x 1 fdujyn staff 390 Apr 25 19:38 main.py
我们在main.py中修改代码,模拟一个训练过程。loss和acc随机生成,使用随机种子固定step(loss,acc)。可以修改rand_seed的值后重新运行代码,获得新的数据。此处我们分别设为12,123,1234,12345运行四次代码.
import fitlog #导入fitlog包
import random
import argparse
# 从命令行传入参数
parser = argparse.ArgumentParser()
parser.add_argument('--demo', type=int, default=2)
# fitlog.commit(__file__) # 自动 commit 你的代码
fitlog.set_log_dir("logs/") # 设定日志存储的目录
args = parser.parse_args()
fitlog.add_hyper(args) # 通过这种方式记录ArgumentParser的参数
fitlog.add_hyper_in_file(__file__) # 记录本文件中写死的超参数
######hyper
rand_seed = 124 #随机种子数值改变后随机的acc和loss也会变化
######hyper
random.seed(rand_seed)
best_acc, best_step, step = 0, 0, 0 #我们想要记录的训练过程中产生的参数
for i in range(200):
step += 1
if step % 20 == 0: #每20轮记录一次参数
loss = random.random()
acc = random.random()
fitlog.add_loss(loss,name="Loss",step=step) #记录loss
fitlog.add_metric({"dev":{"Acc":acc}}, step=step) #记录acc
if acc>best_acc:
best_acc = acc
fitlog.add_best_metric({"dev":{"Acc":best_acc}}) #记录best_acc
# 当dev取得更好的performance就在test上evaluate一下
test_acc = random.random()
fitlog.add_best_metric({"test":{"Acc":test_acc}}) #记录test_acc
fitlog.finish() # 训练完了,关闭日志记录
把上面的代码运行后,训练中记录下的四个参数被写进了logs/下的文件夹中。我们接下来打开网页服务来查看数据。在命令行中输入cd /Users/fdujyn/workspaces/example(main.py函数所在目录),再输入fitlog log logs(logs是日志存储的目录)
>>> pwd #查看当前目录指令
/Users/fdujyn/workspaces/example #main.py所在的目录
>>> fitlog log logs
Start preparing data.
Finish preparing data. Found 4 records in /Users/fdujyn/workspaces/example/logs.
* Serving Flask app "fitlog.fastserver.app" (lazy loading)
* Environment: production
WARNING: Do not use the development server in a production environment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
点击下面第一个蓝色的url即可在浏览器打开网页,找到trend按钮可查看metric曲线,

3 远程服务器使用
- 日志文件夹创建:先按照上面的例子在ssh session(服务器终端)进入你的要跑的py文件的目录。在你的工程里下创建一个文件夹(随便起名,此处假设加logs)来存放fitlog记录的日志。
- fitlog调用:在py文件中导入fitlog包,参考👆示例
- 开头import fitlog
- 训练开始前指定日志文件地址fitlog.set_log_dir("logs/")
- 训练/测试中在每个epoch结束后记录指标,若是最好的指标则记录为best👇
# 记录最大的 accuracy 和 f1 if acc > max_acc: max_acc = acc fitlog.add_best_metric(value=max_acc, name='Accuracy') if f1 > max_f1: max_f1 = f1 fitlog.add_best_metric(value=max_f1, name='F1') if precision > max_precision: max_precision = precision fitlog.add_best_metric(value=max_precision, name='precision') if recall > max_recall: max_recall = recall fitlog.add_best_metric(value=max_recall, name='recall') # 记录每个epoch的loss和指标 fitlog.add_loss(train_loss / len(train_loader), name='Train Loss', step=epoch) fitlog.add_loss(val_loss / len(val_loader), name='Validation Loss', step=epoch) fitlog.add_metric(acc, name='Accuracy', step=epoch) fitlog.add_metric(f1, name='F1', step=epoch)
- 在运行完这个文件后,在logs文件夹下会出现记录的数据
- 想查看指标的情况,要在本地终端使用SSH链接Fitlog动态端口
- 先在ssh使用cd进入当前文件夹,输入fitlog log log文件夹地址,就会出现下面的ip1:端口1
- windows按下win+r,输入cmd,然后在窗口输入👇
- 1234是你的服务器端口,123.123.123.112是服务器ip地址,后面框起来的第一个为【ip1:8001】,第二个为【ip1:端口1】。运行时要把框框去掉。
ssh -p 1234 userid@123.123.123.112 -L【127.0.0.1:8001】:【127.0.0.1:5000】
- 连接上之后,终端自动会出现读数据的操作,在本地浏览器输入http://127.0.0.1:8001即可,网页就会出现可查看数据,找到trend按钮可查看metric曲线。
终端输入ctrl+c可退出