第一次,先找感觉。使用python进行ml中的一般东西了。mlflow,minio上一节已建好了。怎么使用git和dvc来联动呢?一个管理代码,一个管理数据和AI。本来想用 python PDM的,但好像速度不行,update慢,又冲突,又循环的。使用最传统的requirements.txt管理依赖吧。
一,安装一个gitlab
除了mlflow和minio,还安排一个gitlab。
docker-compose.yml
version: '3'
services:
gitlab:
image: 'gitlab/gitlab-ce:latest'
container_name: gitlab
restart: always
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://192.168.1.111:8993'
gitlab_rails['gitlab_shell_ssh_port'] = 2224
ports:
- '8993:8993'
二,安装一个dvc环境和依赖
requirements.txt
大约就是这几个,PDM导出的requirements.txt太多,就不贴了
"lightgbm~=3.2",
"mlflow~=1.18",
"boto3~=1.17",
"fastapi~=0.65",
"uvicorn~=0.14",
"dvc[s3]~=2.3",
"pyarrow~=4.0",
"scikit-learn~=0.24",
"hydra-core~=1.1",
"matplotlib~=3.4",
"prefect~=0.14",
"cloudpickle~=1.6",
三,将sklearn的iris数据导一个parquet格式
先转成csv,再导出parquet格式
import pandas as pd
from sklearn import datasets
from sklearn.datasets import load_iris
# =============iris to csv========================
iris_datasets = load_iris()
data_np = pd.DataFrame(iris_datasets.data,
columns=['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)'])
label = pd.DataFrame(iris_datasets.target, columns=['target'])
data_np['target'] = label
data_np.to_csv("iris.csv")
# ==============csv to parquet========================
data = pd.read_csv('iris.csv')
data.to_parquet('iris.parquet')
四,设置gitlab和dvc
从gitlab上clone一个项目,初始化dvc
git clone http://192.168.1.111:8993/ai/dvc.git
dvc init
将那个iris的parquet的数据文件,放到data/raw目录下,使用dvc配置与minio的连接,然后push
(base) root@6bbb605efca8:/dvc# dvc remote add -d minio s3://mlflow -f
Setting 'minio' as a default remote.
(base) root@6bbb605efca8:/dvc# dvc remote modify minio endpointurl http://192.168.1.111:9000
(base) root@6bbb605efca8:/dvc# dvc remote modify minio access_key_id admin
(base) root@6bbb605efca8:/dvc# dvc remote modify minio secret_access_key adminadmin
(base) root@6bbb605efca8:/dvc# dvc push
如果项目目录有新增的AI模型相关的数据,选dvc push,再gitlab push。这样,gitlab里保存的是ai模型数据的s3://地址,而不是真的数据。
我觉得是通过gitlab和minio,将两部分的数据都管理起来了,但使用的命令要两边跳。
网友评论