代码管理

使用Git

训练管理

使用sacred,相对看起来不错,有功能:

  1. 保存随机种子
  2. 保存每一次的超参数以及设置
  3. 保存每一次训练的代码(根据HASH值,保存文件版本,在训练config表明使用的文件版本)
  4. 保存每一次的训练结果,包括loss,ACC等指标
  5. 只需要在原框架上添加少量代码
  6. 可以配合Mongod和Omniboard数据库+前端可视化

下附demo
requirment:

  1. Node.js 前端
  2. Omniboard
  3. MongoDB 数据库
  4. sacred

    Demo

    ```python from sacred import Experiment from sacred.observers import MongoObserver from sacred.utils import apply_backspaces_and_linefeeds from sacred.observers import FileStorageObserver

ex = Experiment(‘hello_config’,save_git_info=False) ex.observers.append(MongoObserver()) ex.captured_out_filter = apply_backspaces_and_linefeeds ex.observers.append(FileStorageObserver(‘my_runs’))

@ex.config def my_config(): recipient = “world” message = “Hello %s!” % recipient

ex.add_config(‘conf.json’)

@ex.capture

def print_a_and_b(a, b):

print(“a =”, a)

print(“b =”, b)

import random import time

def example_metrics(_run): counter = 0 while counter < 20: counter+=1 value = counter ms_to_wait = random.randint(5, 5000) time.sleep(ms_to_wait/1000)

  1. # This will add an entry for training.loss metric in every second iteration.
  2. # The resulting sequence of steps for training.loss will be 0, 2, 4, ...
  3. if counter % 2 == 0:
  4. _run.log_scalar("training.loss", value * 1.5, counter)
  5. # Implicit step counter (0, 1, 2, 3, ...)
  6. # incremented with each call for training.accuracy:
  7. _run.log_scalar("training.accuracy", value * 2)
  8. # Another option is to use the Experiment object (must be running)
  9. # The training.diff has its own step counter (0, 1, 2, ...) too
  10. ex.log_scalar("training.diff", value * 2)

@ex.automain

@ex.main def main(message,run): print(message) examplemetrics(run) import argparse if _name == “__main“: r=ex.run() print(r.config) print(r.host_info)

  1. #python .\Sacred_test.py
  1. <a name="i7PxV"></a>
  2. ### 本地训练数据保存
  3. ![image.png](https://cdn.nlark.com/yuque/0/2020/png/296244/1606726691413-df3cc0d9-9ed9-4528-b7ca-6ba5e69c72f2.png#align=left&display=inline&height=82&margin=%5Bobject%20Object%5D&name=image.png&originHeight=163&originWidth=1222&size=52903&status=done&style=none&width=611)<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/296244/1606726705160-5053d48a-093c-4b8d-a485-55fc04f87865.png#align=left&display=inline&height=129&margin=%5Bobject%20Object%5D&name=image.png&originHeight=168&originWidth=254&size=4878&status=done&style=none&width=195) ![image.png](https://cdn.nlark.com/yuque/0/2020/png/296244/1606726719245-7225b09f-522e-4e37-aeaf-e4759da71e24.png#align=left&display=inline&height=125&margin=%5Bobject%20Object%5D&name=image.png&originHeight=249&originWidth=439&size=12808&status=done&style=none&width=219.5)<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/296244/1606726760011-a0bdd386-36de-4c96-b755-9b8a9398f5aa.png#align=left&display=inline&height=378&margin=%5Bobject%20Object%5D&name=image.png&originHeight=756&originWidth=1174&size=64766&status=done&style=none&width=587)
  4. <a name="OMGdA"></a>
  5. ### 浏览器前端+数据库展示
  6. ![image.png](https://cdn.nlark.com/yuque/0/2020/png/296244/1606726803996-b73fafa3-5027-42f7-828e-e00d91311a2b.png#align=left&display=inline&height=268&margin=%5Bobject%20Object%5D&name=image.png&originHeight=536&originWidth=1910&size=95955&status=done&style=none&width=955)<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/296244/1606726820411-90d4e00d-e1ba-4fb9-b393-5875fe2cbaea.png#align=left&display=inline&height=436&margin=%5Bobject%20Object%5D&name=image.png&originHeight=871&originWidth=1914&size=133705&status=done&style=none&width=957)
  7. <a name="ts9Ed"></a>
  8. ##
  9. <a name="lDdHk"></a>
  10. ## 教程
  11. 在服务器上安装mongodb,没有权限就用源码安装,我是用源码安装的<br />默认直接不用建用户,也别用安全机制,直接连接就行
  12. <a name="1k1dK"></a>
  13. ### 使用脚本启动数据库
  14. ```bash
  15. sheshuaijie@nova:~/mongod$ cat open_db.sh
  16. export PATH=/home/sheshuaijie/mongod/mongodb-linux-x86_64-ubuntu1404-4.0.0/bin/:$PATH
  17. mongod --config ./mongod.conf

配置文件conf

注意

  1. 设置安全为disable
  2. 设置bindIP为0.0.0.0接受所有ip连接
  3. 数据和log地址自定义 ```bash

    mongod.conf

for documentation of all options, see:

http://docs.mongodb.org/manual/reference/configuration-options/

Where and how to store data.

storage: dbPath: /home/sheshuaijie/mongod/data journal: enabled: true

where to write logging data.

systemLog: destination: file logAppend: true path: /home/sheshuaijie/mongod/log/mongod.log

network interfaces

net: port: 27017 bindIp: 0.0.0.0

how the process runs

processManagement: timeZoneInfo: /usr/share/zoneinfo fork: false

security.

security: authorization: disabled

  1. <a name="Mp0UL"></a>
  2. ### 建立新库
  3. 先进入交互环境
  4. ```bash
  5. sheshuaijie@nova:~/mongod$ export PATH=/home/sheshuaijie/mongod/mongodb-linux-x86_64-ubuntu1404-4.0.0/bin/:$PATH
  6. sheshuaijie@nova:~/mongod$ mongo
  1. use ADP # 使用这个指令就可以建库

添加代码

  1. from sacred.observers import MongoObserver
  2. ex.observers.append(FileStorageObserver('Pretrain'))
  3. obv = MongoObserver(url="localhost", port=27017, db_name="APT")

Window连接可视化

由于Linux可视化太麻烦,可以在window里去连接linux的数据库
image.png

或者直接可视化

  1. omniboard -m 114.212.96.144:27017:TryDelete
  2. omniboard -m 127.0.0.1:27017:PgnSum
  3. http://localhost:9000/

结果

image.png
image.png
image.png

参考

https://my.oschina.net/u/4299659/blog/4294549
https://sacred.readthedocs.io/en/stable/observers.html
https://zhuanlan.zhihu.com/p/144293625