Pytorch

13 Apr 2017

目前来看, 我本人接触的DL的工具箱, 按照时间顺序包括了: torch, caffe, tensorflow, mxnet, pytorch. 当然, 有深有潜, 应该是有潜有更潜, 没深过. 可以总结下自己对这几个的简单印象.

1 torch

最先使用的工具, 但是绑定的是lua. 当时还因此单独学了lua, 这语言核心确实够小巧, 貌似就是围绕一个list的结构来组建. 后来不再使用, 主要原因就是lua. 考虑到当时组建团队, 我一个人虽然已经学了lua, 但是其他人再进入还有学习成本, 于是就放弃这个工具箱了.

2 caffe

是目前一直使用的工具箱, 支撑了所有平台的DL的训练/部署, 包括手机和嵌入式平台上的. 劳苦功高的一个框架. 选择原因是当时还没有几个可以选择的工具箱, 不选torch, 基本就只有caffe了, 训练上手很快, 文档基本良好, 代码结构组织也属于清晰漂亮的. 渐渐也遇到了新的问题, 按需修改是个比较大的工程, 虽然以prototxt为核心组织数据结构, 代码清晰易懂, 但也带来了牵一发而动全身的问题. 框架的开发因为贾扬清加入Google也转手别人, 新思想和新技术也没有加入, 因为毕竟代码库本身有年份了.

3 tf

这个应该是我接触最少的, 而且接触的是早期发布的版本. 可能因为这个原因, 自己基本没有用这个框架的想法. 自然不多说了.

4 mxnet

这个基本可以说是中国人搞的一个框架, 开发者大部分都是中国人. 自己也投入了一部分时间, 希望能够将目前caffe中修改的东西, 完全迁移到mxnet上面来, 顺便完善一下训练系统, 整个流程python脚本化. 遇到的问题比较多(因为花的时间也多):

  1. 文档: 可能是因为开发者中国人比较多, 英语非母语, 看文档能感觉出来, 味道不太一样. 然后是, 有些东西解释的不够清楚. 反正相对于其他英语母语的文档, 还是差那么点. 他们还不如干脆先维护一份完整的中文版本文档更加现实一点.
  2. 教程和example: 感觉mxnet可能迭代比较频繁, 示例代码都比较陈旧. 有些未必能直接跑起来. 经常还是需要直接查代码. 这个问题还是比较麻烦的.

5 pytorch

最新出的一个框架, 在刚刚公开的时候就看到了信息, 不过考虑到我本人对技术是偏保守的态度. 没有管过, 这两天上网站看了下文档, 感觉不错. 相比mxnet, 两个我感觉的问题都解决的很好. 文档清晰, 也没有非母语写出来的感觉. 有一个单独的example的代码库, 东西应该是都可以跑起来, 虽然我自己只跑了一个试验, 毕竟是新项目, 示例应该都是最新的.

另外, 代码组织结构上看比较清晰, 示例代码也比较老道, 应该是有丰富经验的老人写的. 老人写的这个因素对于一个项目是十分重要的, 自己之前表达过的观点就是, 软件的开发过程就是程序员对特定领域知识体系的构建过程. 本身是有经验的工程师+之前应该torch项目已经构建好了知识体系. 整个项目应该会保持一个比较稳定的组织状态. 从我个人的初步印象来看, pytorch的代码质量应该比mxnet高很多. 当然, 我还没有开始看项目源码, 仅仅是接触的示例代码.

6 综上

我要重新跳坑了, 目前会先开始考察pytorch的代码情况. 然后, 一切成本都是沉没成本, 我可能会整个跳坑. 毕竟, 从示例代码上来看, pytorch更加符合我对工具库的直觉, 也保持了一个很合适的核心范围. 另外, pytorch自己实现了一个专用的multiprocess接口, 这也证明, pytorch确实以python为重.