DoltLab本地部署实践

引言
  • 自从搞深度学习训练模型以来,一直有个问题困扰着我:训练所用数据集的管理。
  • 为什么说这是一个问题呢? 在读研时,我们依据选的课题来开展研究,用的数据集往往都是公开的标准数据集,像经典的ImageNet、MNIST、Fashion MNIST等等,不存在对数据集有什么特殊管理的问题。而在工作场景下就不同了,工作中用到的数据集往往是根据业务有所侧重的,且会存在自己收集和标注的问题。这就引出了数据集管理问题。
  • 设想如下场景:
    • 假设领导想要做一个身份证检测的任务,需要把图像中身份证抠出来。
    • 这是一个目标检测任务,输入图像,输出是否有身份证,如果有的话,在哪里?
    • 但是这个任务没有现成的数据集供你使用,无奈只能去网上辛辛苦苦搜集一下,然后自己标注其位置,得到一个勉强够用的身份证检测数据集。
    • 随后,经过一系列调参优化,得到了一版较好的模型,成功交付给了领导。然后,你就去忙其他的了。
    • 过了几个月,领导又来找到你,想着把身份证检测改为身份证和火车票的检测。这时,你发现之前标注的身份证数据集的标注不对了,但是又想不起来什么时候改过。
  • 上述身份证数据集损坏或者丢失的场景多种多样,你只能重新将标注一一矫正一下,再做使用。

  • 太长不看版:将数据集备份即可避免数据集丢失问题。
  • 这时,如果使用了dolt,就不会这么麻烦了。接下来就随我看看这个神奇的东西是什么吧!
Dolt是什么?

dolt logo

  • Dolt是一个SQL数据库,可以像操作Git仓库一样来操作数据库。用更直白的话来说,就是将Git和数据库结合了起来,Dolt即支持完整的sql命令,也支持所有的git命令。更通俗来说,Dolt就是将数据集纳入了版本控制系统。
Git
Database
Dolt
DoltHub
Doltlab
HOSTEDDolt
  • 除了Dolt本身这个工具之外,还衍生了上图的三个产品:
    • DoltHub: 类似于Github社区,这是一个大家分享数据集的社区,可以将数据集传到这里,也可以从这里下载数据集。这些数据集都纳入了Git版本控制体系,因此可以协作来动态更新数据集。
    • DoltLab: 这是一个离线版本的DoltHub。因为日常用的数据集有一大部分是自有数据,因为放在DoltHub不太合适。而DoltLab就很好弥补了这个不足。类似于GitLab可以自己搭建一样,DoltLab也可以自行搭建。
    • HOSTEDDolt: 这是一个云端部署的Dolt database,这个用的情况较少,我这里并未做过多探究。
如何本地部署使用DoltLab
  • 因为DoltLab是最能契合使用场景的,可以使用DoltHub所有功能,同时能把握数据安全。接下来,将做详细安装介绍;(详细的官方文档可以点这里
  • 部署环境介绍:
    • OS: CentOS 7
    • DoltLab: v0.7.0
具体安装步骤
  1. 推荐的最小硬件要求:
    • 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使用
  2. 安装依赖环境
    1. 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
      
    2. 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
      
    3. 以上命令,会自动安装上以下依赖:
      • curl
      • unzip
      • docker
      • docker-compose
      • amazon-ecr-credential-helper
    4. 验证是否安装成功(不加sudo可以直接执行):
      docker ps
      CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
      
  3. 下载安装最新版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
      
  4. 启动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
      
  5. 查看界面:浏览器中输入http://${HOST_IP}:80,即可看到和DoltHub一样的界面了。
安装期间FAQ
  1. 遇到某个容器启动之后,又马上关闭的问题
    Q: 首先可以运行docker logs 容器ID查看运行日志定位问题,同时可以参考issue42
  2. 我并没有安装PostgreSQL数据库,怎么也可以运行起来呢?
    Q: 这是因为doltLab自带了一个PostgreSQL数据库,从运行的镜像中可以看到。
写在最后
  • 最终,我这里没有采用该工具。原因在于对数据集的数据库存储,一般适用于文本类的数据集,对于图像类的数据集,需要将图像写入到表中,然后再将表上传到DoltLab中。整个流程过于复杂。
  • 如果平时数据集都是一些txt或者csv倒是可以考虑使用一下。
其他相关资料
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值