डीवीसी में कोई पाइपलाइन को परिभाषित कर सकता है। यूनिक्स में, कोई आम तौर पर रूट स्तर पर काम नहीं करता है। इसके अलावा, डीवीसी को उम्मीद है कि फाइलें गिट रिपॉजिटरी के अंदर होंगी।

तो, यह एक सामान्य समस्या की तरह लगता है।

मान लीजिए मेरे पास निम्नलिखित है:

/home/user/project/content-folder/data/data-type/cfg.json
/home/user/project/content-folder/app/foo.py

गिट /home/user/project/ से शुरू होता है

cd ~/project/content-folder/data/data-type
../../app/foo.py do-this --with cfg.json --dest $(pwd) 

मेरे लिए उचित लगता है: स्क्रिप्ट एक कॉन्फ़िगरेशन लेती है, जो किसी विशेष स्थान पर संग्रहीत होती है, इसे कुछ encapsulated कार्यक्षमता के विरुद्ध चलाती है, और इसे एक पूर्ण पथ का उपयोग करके गंतव्य पर आउटपुट करती है।

--dest का डिफ़ॉल्ट व्यवहार वर्तमान कार्यशील निर्देशिका में आउटपुट करना है। यह एक और उचित डिफ़ॉल्ट की तरह लगता है।


इसके बाद, मैं dvc के लिए params.yaml फ़ाइल को कॉन्फ़िगर करने के लिए जाता हूं, और मैं तुरंत भ्रमित और अनिश्चित हूं कि क्या होने वाला है। लिखता हूँ:

foodoo:
  params: do-this --with ????/cfg.json --dest ????

मैं क्या लिखना चाहता हूं (और एक शेल स्क्रिप्ट में होगा):

#!/usr/bin/env bash
origin:=$(git rev-parse --show-toplevel)

verb=do-this
params=--with $(origin)/content-folder/data/data-type/cfg.json --dest $(origin)/content-folder/data/data-type

लेकिन, डीवीसी में, पाथिंग निहित प्रतीत होता है, और मुझे नहीं पता कि कहां से शुरू किया जाए:

  1. DVC स्थानीय रूप से मेरी स्क्रिप्ट के पथ की गणना करेगा
  2. स्थानीय रूप से मेरी स्क्रिप्ट के पथ की गणना न करें

जो ठीक है -- मैं उसका पता लगा सकता हूँ। लेकिन मुझे पूरा यकीन है कि डीवीसी मेरी परियोजना के पथ के साथ मेरे params.yaml में निर्देशिका और फ़ाइल पैरा को बिल्कुल उपसर्ग नहीं करेगा।


कोई पथ नियंत्रण कैसे प्राप्त करता है जो एक निश्चित परियोजना स्थान ग्रहण नहीं करता है, जैसे मैं बाश में करता हूं?

3
Chris 23 पद 2020, 00:32

1 उत्तर

सबसे बढ़िया उत्तर

डिफ़ॉल्ट रूप से, DVC आपके स्टेज कमांड को उसी निर्देशिका से चलाएगा जैसे dvc .yaml फ़ाइल। यदि आपको किसी भिन्न स्थान से कमांड चलाने की आवश्यकता है, तो आप wdir के माध्यम से एक वैकल्पिक कार्यशील निर्देशिका निर्दिष्ट कर सकते हैं, जो dvc.yaml के स्थान के सापेक्ष पथ होना चाहिए।

आपके चरण में अन्य सभी चीज़ों के लिए पथ (जैसे params.yaml) को wdir के सापेक्ष निर्दिष्ट किया जाना चाहिए (या wdir प्रदान नहीं किए जाने पर dvc.yaml के सापेक्ष)।

आपके उदाहरण को देखते हुए, डीवीसी में मापदंडों पर भी कुछ भ्रम है। DVC चरण में, params पैरामीटर निर्भरता निर्दिष्ट करने के लिए है, जिसका उपयोग नहीं किया जाता है कमांड लाइन झंडे निर्दिष्ट करने के लिए। झंडे/विकल्पों सहित पूरे आदेश को आपके मंच के लिए cmd अनुभाग में शामिल किया जाना चाहिए। यदि आप यह सुनिश्चित करना चाहते हैं कि आपके चरण को हर बार cfg.json में कुछ मान बदलने पर फिर से चलाया जाए, तो आपके चरण का params अनुभाग कुछ ऐसा दिखाई देगा:

params:
  <relpath from dvc.yaml>/cfg.json:
    - param1
    - param2
    ...

तो आपका उदाहरण dvc.yaml कुछ इस तरह दिखेगा:

stages:
  foodoo:
    cmd: <relpath from dvc.yaml>/foo.py do-this --with <relpath from dvc.yaml>/cfg.json --dest <relpath from dvc.yaml>/...
    deps:
      <relpath from dvc.yaml>/foo.py
    params:
      <relpath from dvc.yaml>/cfg.json:
        ...
    ...

यह कमांड dvc repro को आपके चरण को किसी भी समय फिर से चलाएगा जब foo.py में कोड बदल गया है, या cfg.json में निर्दिष्ट पैरामीटर बदल गए हैं।

आप dvc रन के लिए डॉक्स भी देख सकते हैं, जो हो सकता है dvc.yaml स्टेज को जेनरेट या अपडेट करने के लिए इस्तेमाल किया जाता है (dvc.yaml को हाथ से लिखने के बजाय)

2
pmrowla 23 पद 2020, 04:27
1
महान! मैं थोड़ी देर के लिए निराश हो गया, जब तक मुझे पता नहीं चला कि डीवीसी ने मेरी अपेक्षा से कोई गलती नहीं की है, और उम्मीद से कहीं ज्यादा है।
 – 
Chris
23 पद 2020, 04:32