人工智能 Introduction to DVC

wdgann · October 16, 2019 · 116 hits

DVC 介紹:

  • DVC: Data Version Control,針對資料進行資料版控的一個方法。

DVC 安裝方法:

透過 pypi 即可直接下載:

# 原始安裝
$ pip install dvc
# 如果今天需要安裝相關依賴關係,例如:[s3],[ssh],[gs],[azure]或[oss]
# Example: 
$ pip install dvc[s3]
# 如果今天所有依賴的套件都需要,請透過[all]進行安裝
$ pip install dvc[all]

DVC 使用方式 - 數據資料的管控

一、初始化:

# git 的初始化
$ git init
# dvc 的初始化
# 初始化後,.dvc/ 將使用 config 和 .gitignore文件 和 cache目錄 創建一個新目錄。
$ dvc init
# 將 .dvc/config 和 .dvc/.gitignore 文件(DVC內部)置於Git控制之下
$ git commit -m "initialize DVC"

二、配置:

  • DVC 目前支援以下七種 remote 類型:
    1. local - 本地目錄
    2. s3 - Amazon S3
    3. gs - Google 雲端
    4. azure - Azure Blob
    5. ssh - ssh
    6. hdfs - Hadoop 分佈式文件系統
    7. http - HTTP 和 HTTPS 協議
Ex:
$ dvc remote add -d myremote [#local端儲存位置]
$ dvc remote add -d s3remote s3://[#S3儲存位置]

$ git commit .dvc/config -m "initialize DVC local remote"

配置:

  1. dvc config 會加入配置相關的訊息
  2. dvc remote 可以了解 remote 的相關訊息

三、添加文件

就很像 git 添加文件的方法,接受任何文件與目錄。

dvc add [#文件與目錄]

然後就會生成 dvc 副檔名的檔案: [#文件與目錄].dvc
將.gitignore 和[#文件與目錄].dvc提交給 git 來做追蹤文件。

git add .../.gitignore .../[#文件與目錄].dvc
git commit -m "add raw data to DVC"

四、保存與共享資料

$ dvc push

Ex: 如果今天團隊把資料放在 AWS S3 資料庫,那就可以透過 S3 資料庫遠端存取與共享資料
但這個指令只針對資料上面的存取,
如果今天要更改 code 或者 dvc 文件更改,
要使用git commitgit push進行 git 對 code 的保存。

五、檢索數據

dvc pull 
#指定路徑
dvc pull [#文件與目錄].dvc

DVC 使用方式-ML 流程的管控

一、資料與程式碼的連接:

(以下會使用到官方範例來做解釋,可見官方的文件檔案: 連結網站請按此)
以下是一個資料前處裡程式的檔案:

$ dvc run -f prepare.dvc 
          -d src/prepare.py -d data/data.xml 
          -o data/prepared 
          python src/prepare.py data/data.xml

其中:

  1. dvc run會生成出prepare.dvc檔案
  2. prepare.py 需要輸入已經dvc add過的 data.xml 檔案
  3. 此程式碼將會輸出兩個檔案,輸出的位置會放置在 data/prepared 中
    完成整個程式的運行過後,就可以將資料透過 git 和 dvc 更改保存的版本。
$ git add data/.gitignore prepare.dvc
$ git commit -m "add data preparation stage"
$ dvc push

二、機器學習的流程管道:

接續上面,可將特徵提取、訓練的流程建立起來,如下:

# 特徵提取
$ dvc run -f featurize.dvc 
          -d src/featurization.py -d data/prepared 
          -o data/features 
          python src/featurization.py data/prepared data/features
# 訓練
$ dvc run -f train.dvc 
          -d src/train.py -d data/features 
          -o model.pkl 
          python src/train.py data/features model.pkl

並且提交流程到 dvc 和 git

git add data/.gitignore .gitignore featurize.dvc train.dvc
git commit -m "add featurization and train steps to the pipeline"
dvc push

設置好流程管道並提交後,我們可以回來看以下三種狀況:
1. dvc 的 ML 流程管道:

$ dvc pipeline show --ascii train.dvc
     +-------------------+
     | data/data.xml.dvc |
     +-------------------+
               *
               *
               *
        +-------------+
        | prepare.dvc |
        +-------------+
               *
               *
               *
       +---------------+
       | featurize.dvc |
       +---------------+
               *
               *
               *
       .---------------.
       | model.pkl.dvc |
       `---------------'
  1. 也可以看怎麼運行程式:
$ dvc pipeline show --ascii train.dvc --commands
          +-------------------------------------+
          | python src/prepare.py data/data.xml |
          +-------------------------------------+
                          *
                          *
                          *
   +---------------------------------------------------------+
   | python src/featurization.py data/prepared data/features |
   +---------------------------------------------------------+
                          *
                          *
                          *
          +---------------------------------------------+
          | python src/train.py data/features model.pkl |
          +---------------------------------------------+
  1. 跑完一次 dvc run 時,會輸出甚麼檔案或資料夾出來:
dvc pipeline show --ascii train.dvc --outs
          +---------------+
          | data/data.xml |
          +---------------+
                  *
                  *
                  *
          +---------------+
          | data/prepared |
          +---------------+
                  *
                  *
                  *
          +---------------+
          | data/features |
          +---------------+
                  *
                  *
                  *
            +-----------+
            | model.pkl |
            +-----------+

三、重現跑完的結果

如果今天想要重現模型的樣子,可以透過以下指令重現:

dvc repro train.dvc

四、衡量模型訓練結果指標:

官方文件的評估程式需要先進行代碼連接,並提交結果:

$ dvc run -f evaluate.dvc 
          -d src/evaluate.py -d model.pkl -d data/features 
          -M auc.metric 
          python src/evaluate.py model.pkl 
                 data/features auc.metric
$ git add evaluate.dvc auc.metric
$ git commit -m "add evaluation step to the pipeline"
$ dvc push

接下來跟一般在上傳 git 時略有不同,我們要分配一個 Git 標籤,它將作為

  1. 我們將來比較實驗的檢查點
  2. 如果我們需要返回並檢查它和相應的數據
$ git tag -a "baseline-experiment" -m "baseline"

五、新舊實驗模型比較:

如果今天修改了特徵資料的方法:

vi src/featurization.py    # edit to use bigrams

透過 dvc 可以抓取不同實驗的方法:

dvc repro train.dvc        # get and save the new model.pkl
git commit -a -m "bigram model"

這樣,我們就可以獲得不同的 model.pkl 檔案,如果要回到原本的實驗,可以透過 checkout 的命令:

# 注意: 此命令先後順序有差
git checkout baseline-experiment
dvc checkout

# 回到master的狀態
git checkout master
dvc checkout

透過dvc repro來運行所有必要命令來建構模型並測量性能的方法。

dvc repro evaluate.dvc

接下來 tag 比較實驗的檢查點

git commit -a -m "evaluate bigram model"
git tag -a "bigram-experiment" -m "bigrams"

接下來我們可以使用命令-T選項dvc metrics show來查看baselinebigrams實驗之間的區別:

dvc metrics show -T

baseline-experiment:
    auc.metric: 0.588426
bigram-experiment:
    auc.metric: 0.602818

DVC 使用方式 - 回復過去舊文件:

假設我們想要獲取上一個 model.pkl 文件,那可以透過以下指令獲得:

git checkout baseline-experiment train.dvc
dvc checkout train.dvc

如果想要回復所有以前實驗,那只要運行以下指令,不指定目標:

git checkout baseline-experiment
dvc checkout
No Reply at the moment.
You need to Sign in before reply, if you don't have an account, please Sign up first.