fastnlp / fitlog

fitlog是一款在深度学习训练中用于辅助用户记录日志和管理代码的工具
https://gitee.com/fastnlp/fitlog
Apache License 2.0
1.47k stars 128 forks source link

是否可以跑实验的时候实时看loss #30

Closed jiang-yuan closed 2 years ago

jiang-yuan commented 4 years ago

我有时看看如果不收敛就暂停一半就不跑了,但是我也需要记录log。 在网页端是否可以显示实时的loss变化曲线然后每隔多少秒自己刷新一次

jiang-yuan commented 4 years ago

还有一个问题,我参数都是命令行得到的 比如lr=args.lr num_steps=args.num_steps 如果用############hyper注释的话,在表格里显示的lr和num_step的值都只是字符串args.lr和args.num_steps 我是可以手动在############hyper里面赋值,但是我一般是命令行赋值的不会经常动代码里面的数字,这样挺不方便的

yhcc commented 4 years ago

我有时看看如果不收敛就暂停一半就不跑了,但是我也需要记录log。 在网页端是否可以显示实时的loss变化曲线然后每隔多少秒自己刷新一次

是可以自动刷新的, 就是打开曲线那个图,它是自动实时刷新的。

yhcc commented 4 years ago

还有一个问题,我参数都是命令行得到的 比如lr=args.lr num_steps=args.num_steps 如果用############hyper注释的话,在表格里显示的lr和num_step的值都只是字符串args.lr和args.num_steps 我是可以手动在############hyper里面赋值,但是我一般是命令行赋值的不会经常动代码里面的数字,这样挺不方便的

如果通过args传入的话,直接fitlog.add_hyper(args)就好了,就不再需要#####hyper这样了

jiang-yuan commented 4 years ago

我有时看看如果不收敛就暂停一半就不跑了,但是我也需要记录log。 在网页端是否可以显示实时的loss变化曲线然后每隔多少秒自己刷新一次

是可以自动刷新的, 就是打开曲线那个图,它是自动实时刷新的。

你是说点'trend'吗? 我的loss是这么写的 fitlog.add_loss(loss, name="Loss", step=epoch_idx) 然后点'trend'什么曲线都不显示,横坐标只显示0和1 是不是要把epoch参数也加上?还是因为我返回的是gpu tensor的loss,要自己转换回cpu再item()才能记录?

yhcc commented 4 years ago

有可能是因为bug(我不太确定)。你尝试pip uninstall fitlog先卸载, 然后pip install git+https://github.com/fastnlp/fitlog 安装最新版试一下。

jiang-yuan commented 4 years ago

有可能是因为bug(我不太确定)。你尝试pip uninstall fitlog先卸载, 然后pip install git+https://github.com/fastnlp/fitlog 安装最新版试一下。

args那个我传进去了没问题了。 我更新到0.7.1之后可以了

这个epoch做什么用的,我看trend也只显示step

yhcc commented 4 years ago

epoch就是epoch的数量(一般都是5~100),step是指当前的步数(因为一个epoch中其实会包含很多步,一个batch就是一步,所以总量可能会特别大,几万以上)。step是必须传的(每个数据point的step都是不一样的),epoch(不同数据point可能share相同的epoch)可以传可以不传,如果传了也会显示epoch的

jiang-yuan commented 4 years ago

epoch就是epoch的数量(一般都是5~100),step是指当前的步数(因为一个epoch中其实会包含很多步,一个batch就是一步,所以总量可能会特别大,几万以上)

是,我实验里也是这样的,但是我设置再添加参数epoch=epoch_index之后,trend也没显示出来epoch只显示step 我是想知道这个epoch什么时候会显示

yhcc commented 4 years ago

是这样写的吗? fitlog.add_metric({"dev":{"Acc":acc}}, step=step, epoch=i) 我这边测试新生成的log会有epoch数字的。

jiang-yuan commented 4 years ago

是这样写的吗? fitlog.add_metric({"dev":{"Acc":acc}}, step=step, epoch=i) 我这边测试新生成的log会有epoch数字的。

鼠标移上去是有epoch数字,不过我想横坐标直接显示epoch怎么操作呢? 因为step数字太大了都几万几万的...

yhcc commented 4 years ago

哦,横坐标没法显示epoch,因为一个epoch下可能记录了很多很多点。

jiang-yuan commented 4 years ago

哦,横坐标没法显示epoch,因为一个epoch下可能记录了很多很多点。

你求个平均不就行了 我代码里一个epoch只记录一次,那我现在就改成step=epoch_index就行了

yhcc commented 4 years ago

好的

jiang-yuan commented 4 years ago

好的

我发现我运行的状态state这个column不见了 我点上面的column也没有显示''state''这一项

jiang-yuan commented 4 years ago

好的

现在运行的state一直不显示,不知道为啥..... 我还有两个问题 1, 如何在程序里获取生成的log的名称? 我想在控制台显示我现在实验的id和网页那个一样 2,我有的tensor比较长,直接add的话就会显示很长0.8327783598263522, 能否添加格式化位数的选项?

jiang-yuan commented 4 years ago

还有我在vscode里面从github pull下来的话, git msg只会显示empty,不会同步我git上commit的信息

yhcc commented 4 years ago

好的

现在运行的state一直不显示,不知道为啥..... 我还有两个问题 1, 如何在程序里获取生成的log的名称? 我想在控制台显示我现在实验的id和网页那个一样 2,我有的tensor比较长,直接add的话就会显示很长0.8327783598263522, 能否添加格式化位数的选项?

为了不让前端过于杂乱,fitlog会自动折叠每个column都一样的值,被折叠的值会被显示在顶端的"Con. cols."中,你点击就可以看到。另外就是fitlog不能更新table中不存在的column的值,所以如果新增了column需要重新刷新页面。

jiang-yuan commented 4 years ago

好的

现在运行的state一直不显示,不知道为啥..... 我还有两个问题 1, 如何在程序里获取生成的log的名称? 我想在控制台显示我现在实验的id和网页那个一样 2,我有的tensor比较长,直接add的话就会显示很长0.8327783598263522, 能否添加格式化位数的选项?

为了不让前端过于杂乱,fitlog会自动折叠每个column都一样的值,被折叠的值会被显示在顶端的"Con. cols."中,你点击就可以看到。另外就是fitlog不能更新table中不存在的column的值,所以如果新增了column需要重新刷新页面。

我的所有实验都是running状态啊,是不是只有主动调用fitlog.finish()才会显示不是running状态? 我几个程序都是跑到一半不收敛就ctrl+c了,不会让它调用finish的啊....这样等于除非让它跑完不然状态永远不会变了? 我上面还有两个问题有办法弄吗?

yhcc commented 4 years ago

好的

现在运行的state一直不显示,不知道为啥..... 我还有两个问题 1, 如何在程序里获取生成的log的名称? 我想在控制台显示我现在实验的id和网页那个一样 2,我有的tensor比较长,直接add的话就会显示很长0.8327783598263522, 能否添加格式化位数的选项?

  1. 有一个fitlog.get_log_id()接口可以获取当前的log_id,但是这个参数只有在实验记录了第一次loss或metric之后才会有值。(是为了防止很多时候代码bug没跑到训练的地方,导致生成很多无意义的文件,不过也可以修改为一运行fitlog.set_log_dir()就创建)
  2. 默认是round到6位,但是如果是运行过程中update的由于我之前写的稍微有点bug,我又不想改了,所以会有这个问题。
yhcc commented 4 years ago

好的

现在运行的state一直不显示,不知道为啥..... 我还有两个问题 1, 如何在程序里获取生成的log的名称? 我想在控制台显示我现在实验的id和网页那个一样 2,我有的tensor比较长,直接add的话就会显示很长0.8327783598263522, 能否添加格式化位数的选项?

为了不让前端过于杂乱,fitlog会自动折叠每个column都一样的值,被折叠的值会被显示在顶端的"Con. cols."中,你点击就可以看到。另外就是fitlog不能更新table中不存在的column的值,所以如果新增了column需要重新刷新页面。

我的所有实验都是running状态啊,是不是只有主动调用fitlog.finish()才会显示不是running状态? 我几个程序都是跑到一半不收敛就ctrl+c了,不会让它调用finish的啊....这样等于除非让它跑完不然状态永远不会变了? 我上面还有两个问题有办法弄吗?

对的,必须要主动fitlog.finish(),fitlog是无法知道你程序是不是已经结束了的

yhcc commented 4 years ago

还有我在vscode里面从github pull下来的话, git msg只会显示empty,不会同步我git上commit的信息

你是指fitlog没有把你自己的git msg给读出来,是么?

jiang-yuan commented 4 years ago

还有我在vscode里面从github pull下来的话, git msg只会显示empty,不会同步我git上commit的信息

你是指fitlog没有把你自己的git msg给读出来,是么?

第一个OK的,我我觉得记录第一次了才有值挺合理的 第二个我是update了best metric, 就显示很多位

我是用两台服务器同时跑的程序,用vscode push 和pull, 我从vscode的git插件pull下来的代码,运行的时候fitlog就不会显示git msg。 我不确定是vscode的问题还是fitlog的问题

yhcc commented 4 years ago

我刚尝试修复了一下进位的问题,你可以安装github上的版本,期望已经解决了吧。

vscode这个,我不太确定vscode是不是默认不会update git到远程服务器。

yhcc commented 4 years ago

@WillQvQ 你后来fitlog的git实现方式修改过后,有测试过能不能读取出用户自己的git message吗?

jiang-yuan commented 4 years ago

我刚尝试修复了一下进位的问题,你可以安装github上的版本,期望已经解决了吧。

vscode这个,我不太确定vscode是不是默认不会update git到远程服务器。

可以了,不过其实4位够我用了

yhcc commented 4 years ago

我刚尝试修复了一下进位的问题,你可以安装github上的版本,期望已经解决了吧。 vscode这个,我不太确定vscode是不是默认不会update git到远程服务器。

可以了,不过其实4位够我用了

你可以设置的,你在logs文件夹下面有一个default.cfg文件,里面有配置“round_to”,你修改成4就可以是4位了。

jiang-yuan commented 4 years ago

我刚尝试修复了一下进位的问题,你可以安装github上的版本,期望已经解决了吧。 vscode这个,我不太确定vscode是不是默认不会update git到远程服务器。

可以了,不过其实4位够我用了

你可以设置的,你在logs文件夹下面有一个default.cfg文件,里面有配置“round_to”,你修改成4就可以是4位了。

嗯,设置里面max_no_updates是表格页面多久没新数据就不刷新吗? 我每个epoch有100秒,我发现每次都得我手动刷新挺麻烦的 ,还有可以更改它的刷新频率吗,我这边好像表格完全就不会自己刷新的样子

两个在跑着的程序我怎么看它们的loss的trend的对比图呢?

我自己捕获ctrl+c之后主动调用fitlog.finish()就可以实现提前结束的时候改变状态了,你们可以把这个写进tutorial里面或者让fitlog自己捕获异常改变状态后再抛出啊。

try:
     train()
except KeyboardInterrupt:
     fitlog.finish()
     raise
yhcc commented 4 years ago

table不会自动刷新,需要手动点刷新,只有趋势图会自动刷新; 关于loss trend对比图请查看我们github readme的最后一行[Doge]; 嗯,我们的教程非常滞后,不过非常高兴你找到了一些如何使用的方式;至少还有30%+的功能其实我们没有任何说明[Doge again]。

jiang-yuan commented 4 years ago

table不会自动刷新,需要手动点刷新,只有趋势图会自动刷新; 关于loss trend对比图请查看我们github readme的最后一行[Doge]; 嗯,我们的教程非常滞后,不过非常高兴你找到了一些如何使用的方式;至少还有30%+的功能其实我们没有任何说明[Doge again]。

加个表格刷新行不,我每天都自己手动点几十次.... 中文文档都没写完,不知道啥时候能写英文文档哟

yhcc commented 4 years ago

暂时应该不会加了,之前整个fitlog本来只想做一个静态的网页来着,结果很多功能是强行加的,所以整个项目顶层设计就不太好,导致了扩展非常难,最近在考虑重构整个项目了,在新的版本也许会加进去,当前这个fitlog应该就不会考虑新增功能了。 之后应该会录个视频说明下如何使用,英文文档应该不会写的,懂中文的小伙伴们愿意使用我们,我们就非常满足和开心了。

jiang-yuan commented 4 years ago

暂时应该不会加了,之前整个fitlog本来只想做一个静态的网页来着,结果很多功能是强行加的,所以整个项目顶层设计就不太好,导致了扩展非常难,最近在考虑重构整个项目了,在新的版本也许会加进去,当前这个fitlog应该就不会考虑新增功能了。 之后应该会录个视频说明下如何使用,英文文档应该不会写的,懂中文的小伙伴们愿意使用我们,我们就非常满足和开心了。

中文的好像也没做的比你们好的.....其实英文的也有差不多的软件吧,不过我就是觉得中文的小伙伴都回复更新得很快所以比较愿意用中文的 github msg还是不能在多台电脑的vscode之间同步 我还发现个问题,reorder row调整行之后保存了刷新又没了

yhcc commented 4 years ago

嗯,行序是不记录的,只是方便临时对比使用。 这个不能同步这个我们也没有很好的办法了(因为没有办法定位出问题),这个可能只有稍微克服一下了,不好意思~

jiang-yuan commented 4 years ago

嗯,行序是不记录的,只是方便临时对比使用。 这个不能同步这个我们也没有很好的办法了(因为没有办法定位出问题),这个可能只有稍微克服一下了,不好意思~

我设置filter之后如果保存的话没法取消filter啊... 每次只能去配置文件里面手动删掉这里吗filter_condition = {"meta-state": "=running", "hyper-n_step": "=5"}

还有我hide了2行,当前页面如果最多显示10 个row的话, 它就只会显示8个row,不会从后面一页补位

yhcc commented 4 years ago

那肯定呀,你如果不需要持久这个filter,你为啥要保存它(虽然其实是有正确的使用方法避免这种事情,不过文档没说)。

嗯,不会补位的,有个办法是你可以保存后刷新。我们前端都不咋会,所以这方面基本属于搞不定(艰难)。

jiang-yuan commented 4 years ago

那肯定呀,你如果不需要持久这个filter,你为啥要保存它(虽然其实是有正确的使用方法避免这种事情,不过文档没说)。

嗯,不会补位的,有个办法是你可以保存后刷新。我们前端都不咋会,所以这方面基本属于搞不定(艰难)。

我就是保存后刷新也没补 你这么说前端看到了会伤心的

yhcc commented 4 years ago

哦,那应该是由于这个table它实际上是有个占位。

也还好,嗯,毕竟我的前端确实不行。

jiang-yuan commented 4 years ago

哦,那应该是由于这个table它实际上是有个占位。

也还好,嗯,毕竟我的前端确实不行。

我跑完实验了,想比较几个实验的loss变化图,有办法在fitlog下导出我loss随时间的变化吗?我想自己绘图把几个实验的loss变化曲线都放到一张图上

yhcc commented 4 years ago

你直接到logs文件夹下,找到对应的那些log的folder下面的loss.log文件就是loss的记录

jiang-yuan commented 4 years ago

你直接到logs文件夹下,找到对应的那些log的folder下面的loss.log文件就是loss的记录 意思说我得自己写python脚本提取出我需要的那些数据,有办法直接导出到excel吗

yhcc commented 4 years ago

不支持直接导出。需要自己写一点脚本实现,不过因为都是文本文件,虽然有些额外的coding但还不算特别复杂

jiang-yuan commented 4 years ago

不支持直接导出。需要自己写一点脚本实现,不过因为都是文本文件,虽然有些额外的coding但还不算特别复杂

为啥我在网页里选compare的时候只显示best_metric,选了就显示没有step信息 我trend里明明有另一个metric为什么compare的时候不显示出来啊

yhcc commented 4 years ago

老实说,没有考虑到会有metric不记录best metric的情况[捂脸]