引言
- 自从搞深度学习训练模型以来,一直有个问题困扰着我:训练所用数据集的管理。
- 为什么说这是一个问题呢? 在读研时,我们依据选的课题来开展研究,用的数据集往往都是公开的标准数据集,像经典的ImageNet、MNIST、Fashion MNIST等等,不存在对数据集有什么特殊管理的问题。而在工作场景下就不同了,工作中用到的数据集往往是根据业务有所侧重的,且会存在自己收集和标注的问题。这就引出了数据集管理问题。
- 设想如下场景:
- 假设领导想要做一个身份证检测的任务,需要把图像中身份证抠出来。
- 这是一个目标检测任务,输入图像,输出是否有身份证,如果有的话,在哪里?
- 但是这个任务没有现成的数据集供你使用,无奈只能去网上辛辛苦苦搜集一下,然后自己标注其位置,得到一个勉强够用的身份证检测数据集。
- 随后,经过一系列调参优化,得到了一版较好的模型,成功交付给了领导。然后,你就去忙其他的了。
- 过了几个月,领导又来找到你,想着把身份证检测改为身份证和火车票的检测。这时,你发现之前标注的身份证数据集的标注不对了,但是又想不起来什么时候改过。
- 上述身份证数据集损坏或者丢失的场景多种多样,你只能重新将标注一一矫正一下,再做使用。
- 太长不看版:将数据集备份即可避免数据集丢失问题。
- 这时,如果使用了dolt,就不会这么麻烦了。接下来就随我看看这个神奇的东西是什么吧!
Dolt是什么?
- Dolt是一个SQL数据库,可以像操作Git仓库一样来操作数据库。用更直白的话来说,就是将Git和数据库结合了起来,Dolt即支持完整的sql命令,也支持所有的git命令。更通俗来说,Dolt就是将数据集纳入了版本控制系统。
- 除了Dolt本身这个工具之外,还衍生了上图的三个产品:
- DoltHub: 类似于Github社区,这是一个大家分享数据集的社区,可以将数据集传到这里,也可以从这里下载数据集。这些数据集都纳入了Git版本控制体系,因此可以协作来动态更新数据集。
- DoltLab: 这是一个离线版本的DoltHub。因为日常用的数据集有一大部分是自有数据,因为放在DoltHub不太合适。而DoltLab就很好弥补了这个不足。类似于GitLab可以自己搭建一样,DoltLab也可以自行搭建。
- HOSTEDDolt: 这是一个云端部署的Dolt database,这个用的情况较少,我这里并未做过多探究。
如何本地部署使用DoltLab
- 因为DoltLab是最能契合使用场景的,可以使用DoltHub所有功能,同时能把握数据安全。接下来,将做详细安装介绍;(详细的官方文档可以点这里)
- 部署环境介绍:
- OS: CentOS 7
- DoltLab: v0.7.0
具体安装步骤
- 推荐的最小硬件要求:
- 4 CPU 和 16G内存
- 100G 磁盘空间(具体取决于数据集大小)
- Ubuntu 18.04/20.04 / CentOS 7
- HOST IP需要开放,且允许TCP链接
- 以下TCP端口需要开放,且不能被其他应用占用:
- 22: ssh连接
- 80:ingress HTTP链接
- 100:DoltLab remote data file server使用
- 50051:DoltLab remote API使用
- 4321:DoltLab file upload service API使用
- 安装依赖环境
- Ubuntu系统
wget https://gist.github.com/coffeegoddd/f6cacad2a6da423ca27cd0bebc67fd80 -O ubuntu-bootstrap.sh export DOLTLAB_VERSION=v0.7.1 chmod +x ubuntu-bootstrap.sh sudo ./ubuntu-bootstrap.sh with-sudo "$DOLTLAB_VERSION" cd doltlab sudo newgrp docker # login as root to run docker without sudo
- CentOS系统
wget https://gist.github.com/coffeegoddd/655669b436dbf28d78d5610749350811 -O centos-bootstrap.sh export DOLTLAB_VERSION=v0.7.1 chmod +x centos-bootstrap.sh sudo ./centos-bootstrap.sh with-sudo "$DOLTLAB_VERSION" cd doltlab sudo newgrp docker # login as root to run docker without sudo
- 以上命令,会自动安装上以下依赖:
- curl
- unzip
- docker
- docker-compose
- amazon-ecr-credential-helper
- 验证是否安装成功(不加sudo可以直接执行):
docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- Ubuntu系统
- 下载安装最新版DoltLab
curl -LO https://doltlab-releases.s3.amazonaws.com/linux/amd64/doltlab-latest.zip unzip doltlab-latest.zip -d doltlab cd doltlab
- 在doltlab目录下主要有以下几项,关于某一项的解释,参见link:
envoy.tmpl gentokenenckey send_doltlab_deployed_event smtp_connection_helper shell-db.sh docker-compose.yaml start-doltlab.sh
- 在doltlab目录下主要有以下几项,关于某一项的解释,参见link:
- 启动DoltLab
- 设置如下环境变量:
export HOST_IP=<Host IP> export POSTGRES_PASSWORD=<Password> export DOLTHUBAPI_PASSWORD=<Password> export POSTGRES_USER="dolthubapi" export EMAIL_USERNAME=<SMTP Email Username> export EMAIL_PASSWORD=<SMTP Email Password> export EMAIL_PORT=<STMP Email Port> export EMAIL_HOST=<SMTP Email Host> export NO_REPLY_EMAIL=<An Email Address to Receive No Reply Messages>
- 运行
./start-doltlab.sh
- 运行成功验证,如果执行下面命令,有相同结果,则说明安装成功
docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c1087c9f6004 public.ecr.aws/dolthub/doltlab/dolthub-server:v0.3.1 "docker-entrypoint.s…" 9 days ago Up 9 days 3000/tcp doltlab_doltlabui_1 a63aade4a36e public.ecr.aws/dolthub/doltlab/dolthubapi-graphql-server:v0.3.1 "docker-entrypoint.s…" 9 days ago Up 9 days 9000/tcp doltlab_doltlabgraphql_1 5b2cad62d4e5 public.ecr.aws/dolthub/doltlab/dolthubapi-server:v0.3.1 "/app/go/services/do…" 9 days ago Up 9 days doltlab_doltlabapi_1 e6268950f987 public.ecr.aws/dolthub/doltlab/doltremoteapi-server:v0.3.1 "/app/go/services/do…" 9 days ago Up 9 days 0.0.0.0:100->100/tcp, :::100->100/tcp, 0.0.0.0:50051->50051/tcp, :::50051->50051/tcp doltlab_doltlabremoteapi_1 52f39c016537 public.ecr.aws/dolthub/doltlab/fileserviceapi-server:v0.3.1 "/app/go/services/fi…" 9 days ago Up 9 days doltlab_doltlabfileserviceapi_1 0f952e7c7007 envoyproxy/envoy-alpine:v1.18-latest "/docker-entrypoint.…" 9 days ago Up 9 days 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:4321->4321/tcp, :::4321->4321/tcp, 10000/tcp doltlab_doltlabenvoy_1 204e0274798b public.ecr.aws/dolthub/doltlab/postgres-server:v0.3.1 "docker-entrypoint.s…" 9 days ago Up 9 days 5432/tcp doltlab_doltlabdb_1
- 设置如下环境变量:
- 查看界面:浏览器中输入
http://${HOST_IP}:80
,即可看到和DoltHub一样的界面了。
安装期间FAQ
- 遇到某个容器启动之后,又马上关闭的问题
Q: 首先可以运行docker logs 容器ID
查看运行日志定位问题,同时可以参考issue42 - 我并没有安装PostgreSQL数据库,怎么也可以运行起来呢?
Q: 这是因为doltLab自带了一个PostgreSQL数据库,从运行的镜像中可以看到。
写在最后
- 最终,我这里没有采用该工具。原因在于对数据集的数据库存储,一般适用于文本类的数据集,对于图像类的数据集,需要将图像写入到表中,然后再将表上传到DoltLab中。整个流程过于复杂。
- 如果平时数据集都是一些txt或者csv倒是可以考虑使用一下。