本文面向机器学习从业者, 使用Sacred库来管理实验时进行可视化. Sacred教程

0. 摘要

本文提供两种方法来安装 MongoDB 和 Omniboard 库.

  1. 使用Docker (推荐, 但需要服务器上有 docker, 并且当前用户在 docker 用户组里.)
  2. 手动安装
    1. mongod --dbpath /data/db --port 17000
    2. PORT=9000 omniboard -m localhost:17000:ExpDBName
    3. # 从浏览器访问 http://localhost:9000

    1. 使用 Docker 安装

    1.1 MongoDB

    ```bash

    拉取镜像

    docker pull mongo:4.4.4

创建网络 (用于后续 Omniboard 的 docker 连接到该 docker)

docker network create sacred

开启容器

docker run -p 7000:27017 -v /path/to/db:/data/db —name sacred_mongo —network sacred -d mongo:4.4.4

  1. <a name="CtzLv"></a>
  2. ## 1.2 Omniboard
  3. ```bash
  4. # 拉取镜像
  5. docker pull vivekratnavel/omniboard
  6. # 开启容器
  7. docker run -p 17001:9000 --name omniboard --network sacred -d vivekratnavel/omniboard -m sacred_mongo:27017:FSS

1.3 备注

如果因为某些原因服务器关闭, 或者docker重启, 那么不需要再次执行1.1和1.2的命令, 只需要启动容器即可(因为不加 —rm 参数时容器停止后不会删除, 可以再次启动.)

下载 lazydocker 工具来查看当前运行的 docker 容器, 执行停止, 启动, 删除等操作.

2. 手动安装

2.1 MongoDB

MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。在高负载的情况下,添加更多的节点,可以保证服务器性能。MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
MongoDB   Omniboard 机器学习实验管理 - 图1
以上参考: https://www.runoob.com/mongodb/mongodb-intro.html

2.1.1 安装 MongoDB

地址: https://www.mongodb.com/download-center/community
image.png
选择合适的版本并下载, 解压, 并拷贝到自定义目录

  1. # Download tgz file
  2. curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.2.5.tgz
  3. # unzip tgz file
  4. tar -zxvf mongodb-linux-x86_64-4.2.5.tgz
  5. # move and rename
  6. mv mongodb-linux-x86_64-4.2.5/ /home/<username>/tools/mongodb

把mongodb中的bin目录加入环境变量PATH

  1. export PATH=/home/<username>/tools/mongodb/bin:$PATH

创建数据库目录, 可以自定义选择目录

  1. # Root directory
  2. mkdir -p /data/db
  3. # User directory
  4. mkdir -p ~/data/db

2.1.2 启动 MongoDB 服务

  1. # Default parameters (root directory)
  2. mongod
  3. # Specify directory for data files, default to /data/db
  4. mongod --dbpath ~/data/db
  5. # Specify port number, default 27017
  6. mongod --dbpath ~/data/db --port 17000

2.1.3 使用 MongoDB 服务

比如使用python中的sacred库, 可以为程序添加 MongoObserver

  1. from sacred import Experiment
  2. from sacred.observers import MongoObserver
  3. ex = Experiment('ExpName')
  4. observer_mongo = MongoObserver.create(url='localhost:17000', db_name='ExpDBName')
  5. ex.observers.append(observer_mongo)

2.1.4 MongoDB 数据库管理工具

robot 3t / studio 3t

2.1.5 报错解决

  1. # mongod: error while loading shared libraries: libcurl.so.4: cannot open shared object file: No such file or directory
  2. # Solution
  3. sudo apt-get install libcurl4-openssl-dev
  1. # mongod: /usr/lib/x86_64-linux-gnu/libcurl.so.4: version `CURL_OPENSSL_4' not found (required by mongod)
  2. # Solution

2.2 Omniboard 可视化 MongoDB 中的内容

Omniboard 是一个用于机器学习实验管理库 Sacred 的基于网页的控制面板工具. 它可以使用 Sacred 中提供的工具连接到 MongoDB 数据库, 用来帮助可视化不同的实验和指标. Omniboard 使用 React, Node.js, Express 和 Bootstrap 编写.
注: 从 v2.0 开始, Omniboard 只支持 MongoDB >=4.0

2.2.1 安装 Node.js v8 或更高版本

  1. 安装nvm (如果 install.sh 下载不下来的话, 就新建一个文件手动把代码复制过去, 再 bash install.sh 运行)

    1. curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.34.0/install.sh | bash
    2. source ~/.bashrc
  2. 安装Nodejs

    1. nvm install node

    2.2.2 安装 Omniboard

    1. npm install -g omniboard
    2. # 换源安装
    3. npm install -g omniboard --registry=https://registry.npm.taobao.org
    4. # 永久换源安装
    5. npm config set registry https://registry.npm.taobao.org
    6. npm install -g omniboard

2.2.3 开启 Omniboard

  1. omniboard -m localhost:17000:ExpDBName

打开浏览器, 打开 http://localhost:9000 (Omnibaord 的 web 服务使用的端口会打印到终端, 具体是什么端口需要注意一下.)

使用指定的端口

  1. export PORT=18000
  2. omniboard -m localhost:17000:ExpDBName

打开浏览器, 打开 http://localhost:18000

启动第二个实例时端口会检测冲突, 并顺延

  1. omniboard -m localhost:17001:ExpDBName2

打开浏览器, 打开 http://localhost:18001


3. MongoDB Command Line 的使用

参考: 菜鸟教程

  • 连接到数据库

    1. mongo <db_name>
    2. mongo mongodb://<ip_address>/<db_name>
    3. mongo mongodb://<ip_address>:<port>/<db_name>
  • 查看集合

    1. show collections
  • 查询所有数据

    1. db.<collection_name>.find().pretty()