# trainer-xy : 训练仪表盘


训练过程可视化。动态绘制训练的 loss 等信息，并且可以发送消息来暂停/继续训练进程。
由于训练进程和可视化的进程是独立的，所以关闭可视化进程不会影响训练进程，且重新打开可视化进程时，
仍然能正常显示。


# 特点

设：1各项目下有n次训练，1个训练会向m个消息队列发送消息。
设1个消息队列相当于sql中的一个表，则1次训练相当于一个数据库。
因此，消息队列中的各个队列需要知道他们所属的是哪个训练库。
由于消息队列中的数据会转存到sql中，所以，
在 sql 中，使用训练的名字作为库名，每个队列对应一个表。

* 系统各进程独立，进程间使用消息队列通信。可视化(app)进程不会阻塞训练进程。
由于各部分是分开的，所以即便关闭前后端的可视化进程，也不会影响训练。并且重新打开可视化进程时，
也不会有任何影响。

* 绘图是动态的，不断训练，不断绘图
* 可以在前端页面上暂停/继续训练进程
* 在同一个项目下，可能会对数据进行多次尝试性的训练，每个训练都会有记录（每个训练都属于这个项目名），
可以切换查看训练结果。
* 在 msmg 中，可以一次性删除某个训练的所有队列信息。因为一个训练会有m个信息队列。
* 在 sql 中，使用训练的名字作为库名，每个队列对应一个表。
* 对项目整体结构有较强的要求，需要有标准的 model,config,dataset,train函数等
* 整体依赖性较强，但修改起来也比较方便。比如：要增加一项数据，只需要增加响应的前后端程序即可



# 环境配置
## rabbitmq
使用 3.8.0 版本的rabbitmq，对应的 erlang 版本是 22.1。换用其他版本时，需要注意版本之间的配合。

## mysql
后端数据存储使用 mysql，mysql 版本是 5.6.41. 当然，由于存储时直接使用的 pandas ，所以可以使用 pandas 支持的任何数据库，
而不仅仅是 mysql 。pandas 以及 ORM 框架使得切换数据库很方便。

## vue
vue cli 版本是 4.0.5。(不做开发不需要配置)

## node
node 版本是 11.14.0。(不做开发不需要配置)

## python
python 需要是 3.5/3.6 ，版本太高可能会有一定的问题。


# 依赖说明

## 后端依赖
* numpy==1.14.5
* pandas==0.23.4
* pika==1.1.0
* ujson==1.35
* sanic==19.3.1
* dill==0.3.1.1
* Sanic_Cors==0.9.8
* PyMySql>=0.9.2
* SQLAlchemy>=1.2.13


## trainer 依赖
* nvidia_ml_py3==7.352.0
* psutil==5.4.7
* dataset_xy==1.0.0
* tf (自选)
* keras (自选)
* pytorch (自选)



# 安装

## pip

pip install trainer-xy
