文章目录
前言
最近一直在调模型, 这篇主要想说说相关的内容以及一些坑。
关于logging
我认为, 要好好地调模型参数, 最重要的一点是代码里一定要把各种logging都写好, 尤其是超参数的设定。因为用的是ubuntu的screen命令在后台跑, 而screen自带的logging是会把tqdm
的每一次变动都新写一行的, 严重阻碍了我们的阅读, 而且经常是重连服务器后看不到之前的终端输出, 这更加强调了将模型的参数设定和测试结果写入到文件里的重要性。
logging performance
我自己的workflow如下
因此我会在每次evaluate()
结束后将Hyper Parameters
和训练步数以及一些重要的模型参数(的shape) 写入到performance.log
里, 这样对比起来就方便多了。
logging information
python
自带的模块logging
真的很方便, 可以简单地配置一下格式
logging.basicConfig(level=logging.INFO, format="[%(asctime)s] %(levelname)s (%(name)s) %(message)s")
在任何自定义的module
中, 只需要下面两句就可以输出信息 (到终端)了。
logger = logging.getLogger(__name__)
logger.info('xxx')
更详细的logging配置直接看python文档就好。
关于embedding
一般来说我们fine-tune的都是预训练的embedding之类的东西, 比如用Glove
做word embedding
, PyTorch
的nn.embedding
可以很方便地加载这样的向量, 用的时候只需要根据index查表就可以。
- 我发现有趣的点是
nn.embedding
查表速度要显著快于把预训练向量用nn.Parameter
包装起来查表, 估计做了优化, 但我也没有仔细研究; - 另外,
nn.Embedding
有一个参数叫做sparse
, 如果为True
的话会将梯度转化为sparse gradient
, 我上网搜了一下dense和sparse的不同, 开发人员给出的答案是当单词表很大时, sparse会快并且占用更少的内存;但我自己使用的时候对比两者没发现显著区别。 还需要注意的是, 如果sparse-True
, 需要给embedding设置单独的sparse optimizer
, 比如SparseAdam
;
关于one_hot
PyTorch
中自带了将index转化为one-hot编码的方法torch.nn.functional.one_hot
, 但是! 这个方法的速度很慢, 我使用scatter
方法能够获得更快的速度, 原码如下
index = torch.empty(5, 5, 1, dtype=torch.int64).random_(0,10)
def one_hot(index):
dest = torch.zeros(5, 5, 10)
src = torch.ones(5, 5, 10)
dest.scatter_(-1, index, src)
return dest
关于加载模型
torch.load()
有一个至关重要的参数map_location
, 如果不给其传递值, 那么会自动将模型加载到之前保存它的device上, 之前一直搞不懂为什么指明了cuda:1
却还是会占用cuda:0
的显存, 后来发现原来需要torch.load(xxx, map_location='cuda:1')
关于多进程
由于要评测的模型检查点很多, 我想的能并发地测评(相当于不用手开多个脚本), 试用一下torch.multiprocessing
, 但我发现无论怎样parent process
都会占用一部分额外的显存, 这让我很困惑。 最后我还是在脚本里多开了几个脚本, 来实现并发hhhh。
关于MIND
晒一下最近的成果哈哈哈哈
还是蛮不错滴! 继续加油哈哈哈哈。
关于TiKZ
怎么说呢, 这个东西画图还是挺折磨的, 但是直观上就是感觉比ppt画出来的好看(可能是自我安慰), 展示一手
关于调参
感觉学习率真的会对模型造成很大的影响, 剩下的我也还有待探究。其实我最近很感兴趣为什么模型的效果这么“瞬息万变”, 之后想看看相关的研究。
关于结构
之前我把每个模型都放在一个nn,Module
里, 但是我发现这样有可能导致很多重复的代码, 建议还是可以适当地“拆解”一下模型, 比如encoder
和decoder
分开, 这样还能尝试不同的搭配效果, 以及不会自己改着改着忘记了以前的结构。。。
写在最后
就说这么多吧! 还要继续努力, 当然享受生活也很重要! 再分享一下我的新闻推荐仓库, 喜欢的可以标个星hhh。