বিপুল পরিমাণে (বাইনারি) ডেটা সংস্করণ নিয়ন্ত্রণের জন্য কীভাবে ডিল করবেন


46

আমি জিওফিজিক্সের পিএইচডি শিক্ষার্থী এবং বিপুল পরিমাণে চিত্রের ডেটা (শত শত জিবি, কয়েক হাজার ফাইল) নিয়ে কাজ করি। আমি জানি svnএবং gitমোটামুটি ভাল এবং সহজেই একসাথে কাজ করার এবং ডিস্ক দুর্নীতির বিরুদ্ধে সুরক্ষার সক্ষমতা সহ এক প্রকল্পের ইতিহাসের মূল্য দিতে এসেছি। gitধারাবাহিক ব্যাকআপ রাখার জন্য আমি অত্যন্ত সহায়ক বলে মনে করি তবে আমি জানি যে গিটটি বিশাল পরিমাণে বাইনারি ডেটা দক্ষতার সাথে পরিচালনা করতে পারে না।

আমার মাস্টার্স স্টাডিতে আমি একই আকারের ডেটা সেটগুলিতেও কাজ করেছি (চিত্রগুলিও) এবং বিভিন্ন সার্ভার / ডিভাইসে বিভিন্ন সংস্করণে ট্র্যাক রাখতে অনেক সমস্যা হয়েছিল। নেটওয়ার্কের মাধ্যমে 100 গিগাবাইটের পার্থক্য করা সত্যই মজাদার নয় এবং আমার জন্য অনেক সময় এবং প্রচেষ্টা ব্যয় করা হয়।

আমি জানি যে বিজ্ঞানের অন্যদেরও একই রকম সমস্যা রয়েছে বলে মনে হয়, তবুও আমি এর ভাল সমাধান খুঁজে পাইনি।

আমি আমার ইনস্টিটিউটের স্টোরেজ সুবিধা ব্যবহার করতে চাই, তাই আমার এমন কিছু দরকার যা "বোবা" সার্ভারটি ব্যবহার করতে পারে। আমি একটি পোর্টেবল হার্ড ডিস্কে একটি অতিরিক্ত ব্যাকআপ রাখতে চাই, কারণ আমি যেখানেই সম্ভব নেটওয়ার্কের মাধ্যমে কয়েকশো জিবি স্থানান্তর এড়াতে চাই। সুতরাং, আমার এমন একটি সরঞ্জাম প্রয়োজন যা একাধিক দূরবর্তী অবস্থান পরিচালনা করতে পারে।

শেষ অবধি, আমার সত্যিকারের এমন কিছু দরকার যা অন্য গবেষকরা ব্যবহার করতে পারেন, সুতরাং এটি অতি সাধারণ হওয়ার দরকার নেই, তবে এটি কয়েক ঘন্টার মধ্যেই শেখা উচিত।

আমি অনেকগুলি বিভিন্ন সমাধানের মূল্যায়ন করেছি, তবে কোনওটিই বিলের সাথে ফিট করে না বলে মনে হচ্ছে:

  • এসএনএন কিছুটা অক্ষম এবং একটি স্মার্ট সার্ভারের প্রয়োজন
  • এইচজি বিগফিল / লার্জি ফাইল কেবলমাত্র একটি রিমোট ব্যবহার করতে পারে
  • গিট বিগফিল / মিডিয়া কেবলমাত্র একটি রিমোট ব্যবহার করতে পারে তবে এটি খুব দক্ষও নয়
  • অ্যাটিকের কোনও লগ, বা পৃথকীকরণের ক্ষমতা রয়েছে বলে মনে হয় না
  • বুপটি দেখতে খুব ভাল লাগছে, তবে কাজ করার জন্য একটি "স্মার্ট" সার্ভারের প্রয়োজন

আমি চেষ্টা করেছি git-annex, যা করার জন্য আমার যা প্রয়োজন তা সবই করে (এবং আরও অনেক কিছু), তবে এটি ব্যবহার করা খুব কঠিন এবং নথিভুক্ত নয়। আমি বেশ কয়েক দিন ধরে এটি ব্যবহার করেছি এবং এটির চারপাশে আমার মাথা পেতে পারেনি, তাই আমি সন্দেহ করি যে অন্য কোনও সহকর্মী আগ্রহী।

গবেষকরা কীভাবে বড় ডেটাসেটগুলি ব্যবহার করেন এবং অন্যান্য গবেষণা গ্রুপগুলি কী ব্যবহার করছে?

স্পষ্ট করে বলতে গেলে, আমি অন্যান্য প্রাথমিক গবেষকরা কেবল এই নির্দিষ্ট ডেটাসেটের সাথে নয়, এই পরিস্থিতিটি কীভাবে মোকাবিলা করবেন সে সম্পর্কে আমি প্রাথমিকভাবে আগ্রহী। এটি আমার কাছে মনে হয় প্রায় প্রত্যেকেরই এই সমস্যাটি হওয়া উচিত, তবুও আমি কে জানি না যে এটি সমাধান করেছে know আমি কি কেবলমাত্র মূল তথ্যটির একটি ব্যাকআপ রাখি এবং এই সমস্ত সংস্করণ নিয়ন্ত্রণের জিনিসগুলি ভুলে যাব? সবাই কি তাই করছে?


1
@scaaahu আমি মনে করি এটি অগত্যা কোনও সফ্টওয়্যার প্রশ্ন; একটি গ্রহণযোগ্য উত্তর এছাড়াও একটি ওয়ার্কফ্লো বা সরঞ্জাম এবং সিস্টেমের সংমিশ্রণ বর্ণনা করতে পারে। (যাইহোক, অন্য কোথাও বিষয় হওয়া নিয়ে এখানে কোনও প্রশ্ন বন্ধ করার সিদ্ধান্ত নেওয়া উচিত নয়))

2
কেবল চিত্রের ডেটা সহ ডেটা দুর্নীতির হাত থেকে রক্ষা করার জন্য, আমি পর্যায়ক্রমে একটি স্ক্রিপ্ট চালনা করি যা সমস্ত ফাইল এবং তাদের এমডি 5 চেকসামের সাথে একটি চেকসাম ফাইলটিকে পুনরায় গণনা করে। তারপরে চেকসাম ফাইলটি গিটে রাখা হয়। এখনই আমি তাত্ক্ষণিকভাবে গিট ডিফের সাথে দেখতে পাচ্ছি যদি চেকসামগুলির কোনও পরিবর্তন হয়। এবং আমি দেখতে পাচ্ছি কোন ফাইলগুলি সরানো হয়েছে এবং যুক্ত করা হয়েছে। এবং যদি ডেটা দুর্নীতির উদাহরণ হিসাবে থাকে তবে আমি পুরানো সংস্করণগুলি পুনরুদ্ধার করতে নিয়মিত ব্যাকআপগুলি ব্যবহার করতে পারি। নিখুঁত কিন্তু কিছুই চেয়ে ভাল।

1
@JukkaSuomela আমার মনে হয় এটা একটি যুক্তিসঙ্গত প্রশ্ন যখন আপনি, খুব বড় ডেটাসেট পেয়েছেন সেই ডেটাসেট ঘন ঘন পরিবর্তন যদি ... এইসব ক্ষেত্রেও, ব্যাকআপ প্রায়ই হয় কি সংস্করণ কন্ট্রোল হিসাবে ব্যবহার করা হচ্ছে।

1
আমি এই প্রশ্নটিকে অফ-টপিক হিসাবে বন্ধ করতে ভোট দিচ্ছি কারণ এটি একাডেমিয়ার সাথে নির্দিষ্ট কিছু না করে ডেটা / ডাটাবেসগুলির সাথে সম্পর্কিত । প্রশ্নগুলি দুর্দান্ত, এবং (আইএমএইচও) ডেটা সায়েন্স.এসই বা (সম্ভবত) ডাটাবেস.এসইতে সরানো উচিত।
পাইটর মিগডাল

1
@ জোহান ডেটা বিজ্ঞানীর বিভিন্ন ব্যাকগ্রাউন্ড রয়েছে। খনি উদাহরণস্বরূপ কোয়ান্টাম মেকানিক্সে রয়েছে। এখানে পুরো বিষয়টি হ'ল: ১. স্ট্যাক এক্সচেঞ্জ তথাকথিত নৌকা প্রশ্নগুলিকে নিরুৎসাহিত করে এবং ২. এটি সমাধান করা লোকদের দ্বারা কীভাবে সমাধান করা হয়েছিল তবে তার কোনও ধারণা ছিল না তার চেয়ে উত্তম অভ্যাসগুলি অর্জন করা ভাল।
পাইওটর মিগডাল

উত্তর:


12

আমি যা ব্যবহার করে শেষ করছি তা হ'ল এক ধরণের সংকর সমাধান:

  • কাঁচা তথ্য ব্যাকআপ
  • কর্মপ্রবাহের গিট
  • ওয়ার্কফ্লো + প্রক্রিয়াকৃত ডেটার ম্যানুয়াল স্ন্যাপশটগুলি, যা প্রাসঙ্গিক, যেমন:
    • স্ট্যান্ডার্ড প্রিপ্রোসেসিং
    • সত্যিই সময়সাপেক্ষ
    • প্রকাশের জন্য

আমি বিশ্বাস করি যে প্রচুর পরিমাণে বাইনারি ডেটার একটি সম্পূর্ণ পুনর্বিবেচনা ইতিহাস পাওয়া খুব কমই বোধগম্য, কারণ পরিবর্তনগুলি পর্যালোচনা করার জন্য যে সময় প্রয়োজন তা অবশেষে এতটাই অপ্রতিরোধ্য হবে যে এটি দীর্ঘমেয়াদে পরিশোধ করবে না। হতে পারে একটি আধা-স্বয়ংক্রিয় স্ন্যাপশট পদ্ধতি (অবশেষে কিছুটা ডিস্ক-স্পেস সংরক্ষণ করতে, বিভিন্ন স্ন্যাপশটগুলিতে অপরিবর্তিত ডেটার প্রতিলিপি না দিয়ে) সাহায্য পাবে।


ঠিক আছে, আমি find . -type f -print0 | xargs -0 md5sum > checksums.md5চেকসামগুলি এবং চেকসামগুলি গণনা করতে md5sum -c checksums.md5এবং সংস্করণটি চেকসামগুলিকে নিয়ন্ত্রণ করতে ব্যবহার করছি । যা বিভিন্ন লোকেশনে / বিভিন্ন মেশিনে ডেটা পরীক্ষা করতে সহায়তা করে। এই মুহুর্তে আমরা যা করতে পারি সেরা বলে মনে হচ্ছে,
জোহান

যদি আপনার ডেটা পরিবর্তন করে আপনি সর্বদা এর ফাইলের নাম পরিবর্তন করেন তবে এটি ভাল সমাধান হতে পারে। অন্যথায়, আমি উচ্চ ডাটা নিজেই যাচাই করার জন্য সুপারিশ করব, উদাহরণস্বরূপ rsyncমূল ডেটার অন (অনুলিপি) দিয়ে। স্নায়ুবিজ্ঞানে সাধারণ অন্য একটি সম্ভাবনা (যদিও আমি এটি এতটা পছন্দ করি না কারণ মাঝে মাঝে এটি যেমন হওয়া উচিত ঠিক তেমন নথিভুক্তও হয় না), হ'ল পাইপথ পাইথন প্যাকেজটি ব্যবহার করা, যা একটি ওয়ার্কফ্লো হিসাবে দেখা যেতে পারে ম্যানেজার এবং এটি স্বয়ংক্রিয়ভাবে বিশ্লেষণের মধ্যবর্তী পদক্ষেপের বাইনারি ডেটা ক্যাশে পরিচালনা করে।
norok2

@ নরোক আপনি একটি দুর্দান্ত সাধারণ কাঠামো বর্ণনা করেছেন। আমি ডিভিসি সরঞ্জামে অনুরূপ কিছু বাস্তবায়ন করেছি - দয়া করে নীচে আমার উত্তরটি একবার দেখুন। আমি আপনার প্রতিক্রিয়া প্রশংসা করব।
দিমিত্রি

9

আমি খুব বড় সিন্থেটিক বায়োলজি ডেটাসেটের সাথে একই রকম সমস্যাগুলি মোকাবিলা করেছি, যেখানে আমাদের অনেকগুলি, বহু জিবি ফ্লো সাইটোমেট্রি ডেটা বহু, হাজার হাজার ফাইল জুড়ে ছড়িয়ে পড়েছে এবং বিভিন্ন সংস্থায় (একাধিক) সহযোগী গ্রুপের মধ্যে তাদের ধারাবাহিকভাবে বজায় রাখা দরকার।

এইচএনএন এবং গিটের মতো সাধারণ সংস্করণ নিয়ন্ত্রণ এই পরিস্থিতিতে ব্যবহারিক নয়, কারণ এটি কেবল এই ধরণের ডেটাসেটের জন্যই ডিজাইন করা হয়নি। পরিবর্তে, আমরা "ক্লাউড স্টোরেজ" সমাধানগুলি বিশেষত ড্রপবক্স এবং বিটোরেন্ট সিঙ্ক ব্যবহার করতে গিয়ে পড়েছি। ড্রপবক্সের সুবিধা রয়েছে যে এটি কমপক্ষে কিছু আদিম লগিং এবং সংস্করণ নিয়ন্ত্রণ করে এবং আপনার জন্য সার্ভার পরিচালনা করে, তবে অসুবিধাটি যে এটি বাণিজ্যিক পরিষেবা, আপনাকে বড় স্টোরেজের জন্য অর্থ প্রদান করতে হবে এবং আপনি আপনার অপ্রকাশিত ডেটা একটিতে রেখেছেন বাণিজ্যিক স্টোরেজ; আপনাকে বেশি মূল্য দিতে হবে না, তবে এটি একটি কার্যকর বিকল্প। বিটোরেন্ট সিঙ্কের একটি খুব অনুরূপ ইন্টারফেস রয়েছে তবে আপনি এটিকে নিজের স্টোরেজ সার্ভারগুলিতে নিজে চালিত করেন এবং এতে কোনও সংস্করণ নিয়ন্ত্রণ নেই। দু'জনেই আমার প্রোগ্রামার আত্মাকে আহত করেছে, তবে তারা আমার সহকর্মী এবং আমি এখনও অবধি খুঁজে পেয়েছি সেরা সমাধান।


ড্রপবক্স, ওনক্লাউডের একটি জনপ্রিয় ওপেন সোর্স সংস্করণ রয়েছে। যদিও আমি চেষ্টা করে দেখিনি।

9

আমি 10-100 ফাইলে 10-100 জিবি পরিচালনা করতে আমাজন এস 3 বালতিগুলিতে ভার্শনিং ব্যবহার করেছি। স্থানান্তর ধীর হতে পারে, সুতরাং এটি সমান্তরালভাবে সংকুচিত এবং স্থানান্তর করতে সহায়তা করেছে, বা কেবল ইসি 2 তে গণনা চালাতে পারে। Boto গ্রন্থাগার একটা চমৎকার পাইথন ইন্টারফেস প্রদান করে।


8

গিট লার্জ ফাইল স্টোরেজ (এলএফএস) দেখার চেষ্টা করুন । এটি নতুন, তবে এটি দেখার মতো জিনিস হতে পারে।

আমি দেখতে পাচ্ছি, হ্যাকার নিউজের একটি আলোচনায় বড় বড় ফাইলগুলি মোকাবেলার জন্য কয়েকটি আরও কয়েকটি উপায় উল্লেখ করা হয়েছে:


6

আমরা প্রকৃত ডেটা ফাইলগুলি সংস্করণে নিয়ন্ত্রণ করি না। আমরা এটি বাইনারি ফর্মের পরিবর্তে সিএসভি হিসাবে সংরক্ষণ করলেও আমরা চাই না। রিকার্ডো এম। যেমন বলেছিলেন, আমরা 10 এম সারির ডেটা সেটটিতে সারি-সারি পরিবর্তনগুলি পর্যালোচনা করতে আমাদের সময় ব্যয় করব না।

পরিবর্তে, প্রসেসিং কোডের সাথে, আমি সংস্করণটি মেটাটাটা নিয়ন্ত্রণ করে:

  • পরিবর্তনের তারিখ
  • ফাইলের আকার
  • সারি গণনা
  • কলামের নাম

ভিসিএসকে চাপ না দিয়ে কোনও ডেটা ফাইল পরিবর্তন হয়েছে কিনা এবং কী পরিবর্তিত হয়েছে (যেমন, সারি যুক্ত / মুছে ফেলা হয়েছে, নতুন / নাম পরিবর্তিত কলামগুলি হয়েছে) তার একটি ধারণা এটি আমাকে যথেষ্ট তথ্য দেয় ।


5

এটি একটি খুব সাধারণ সমস্যা। যখন আমি একটি বিশ্ববিদ্যালয়ের জন্য গবেষণা প্রকল্পগুলি করি এবং এখন - শিল্প তথ্য বিজ্ঞান প্রকল্পগুলিতে আমার এই ব্যথা হয়েছিল।

আমি এই সমস্যাটি সমাধান করার জন্য একটি ওপেন সোর্স সরঞ্জাম তৈরি করেছি এবং সম্প্রতি প্রকাশ করেছি - ডিভিসি

এটি মূলত আপনার কোডটি গিট এবং আপনার স্থানীয় ডিস্ক বা মেঘের মধ্যে ডেটা (এস 3 এবং জিসিপি স্টোরেজ) এর সাথে সংযুক্ত করে। ডিভিসি ডেটা এবং কোডের মধ্যে নির্ভরতা ট্র্যাক করে এবং নির্ভরতা গ্রাফ (ডিএজি) তৈরি করে। এটি আপনাকে আপনার প্রকল্পটিকে পুনরায় উত্পাদনযোগ্য করে তুলতে সহায়তা করে।

ডিভিসি প্রকল্পটি সহজেই ভাগ করা যেতে পারে - আপনার ডেটা একটি মেঘের সাথে সিঙ্ক করুন (ডিভিসি সিঙ্ক কমান্ড), আপনার গিট সংগ্রহস্থলটি ভাগ করুন এবং মেঘে আপনার ডেটা বালতিতে অ্যাক্সেস সরবরাহ করুন।

"কয়েক ঘন্টার মধ্যে শেখার" - এটি একটি ভাল বিষয়। গিটের সাথে পরিচিত হলে আপনার ডিভিসি-তে কোনও সমস্যা নেই। আপনার কেবলমাত্র তিনটি কমান্ড শিখতে হবে:

  1. dvc init- মত git init। একটি বিদ্যমান গিট সংগ্রহস্থলে করা উচিত।
  2. dvc import- আপনার ডেটা ফাইলগুলি (উত্স) আমদানি করুন। স্থানীয় ফাইল বা ইউআরএল।
  3. dvc run- আপনার কর্মপ্রবাহের ধাপগুলি dvc run python mycode.py data/input.jpg data/output.csv। ডিভিসি স্বয়ংক্রিয়ভাবে আপনার পদক্ষেপগুলির মধ্যে নির্ভরতা অর্জন করে, ডিএজি তৈরি করে এবং গিটে রাখে।
  4. dvc repro- আপনার ডেটা ফাইল পুনরুত্পাদন। উদাহরণ: vi mycode.py- কোড পরিবর্তন করুন এবং তারপরে dvc repro data/output.csvফাইলটি (এবং সমস্ত নির্ভরতা পুনরুত্পাদন করা হবে)।

ক্লাউড এবং বেসিক এস 3 বা জিসিপি দক্ষতার মাধ্যমে ডেটা ভাগ করতে আপনাকে আরও কয়েকটি ডিভিসি কমান্ড শিখতে হবে।

ডিভিসি টিউটোরিয়াল সেরা সূচনা পয়েন্ট - "ডেটা সংস্করণ নিয়ন্ত্রণ: পুনরাবৃত্তি মেশিন লার্নিং"


1
এটি কেবলমাত্র বড় বাইনারি ফাইল (বেশিরভাগ ভিডিও) সংরক্ষণের সাথে ব্যবহার করা যেতে পারে। এমএল লক্ষ্য নয়। লক্ষ্যটিতে বড় বাইনারি ফাইল সঞ্চয় করার জন্য একটি রেপো থাকে। রেপোতে ক্যাচিং, নির্বাচনী চেকআউট / পুল (পারফোরের মতো) এবং ফাইল / ডিরেক্টরি লকিং প্রক্রিয়া থাকা উচিত। এটি কি এই জাতীয় উদ্দেশ্যে উপযুক্ত?
হেমু

1
@ হেমু হ্যাঁ ডিভিসি এমএল বৈশিষ্ট্যগুলি (এমএল পাইপলাইন এবং পুনরুত্পাদনযোগ্যতার মতো) ব্যান্ডের বেসিক বড় ডেটা ফাইল দৃশ্যের জন্য ঠিক কাজ করে। পারফোরস-লক সিমেটিক গিট শব্দার্থক কারণে সমর্থিত নয়। পরিবর্তে প্রতি ফাইল-চেকআউট ব্যবহার করুন।
দিমিত্রি পেট্রোভ


0

আপনি ডওট নামে আমার প্রকল্পটি একবার দেখে নিতে পারেন: ডিস্ট্রিবিউটড অবজেক্ট ট্র্যাকার রিপোজিটরি ম্যানেজার।
এটি ব্যক্তিগত ব্যবহারের জন্য বাইনারি ফাইলগুলির জন্য খুব সাধারণ ভিসিএস (কোনও সহযোগিতা নেই)।
এটি চেকসামিং এবং ব্লক অনুচ্ছেদের জন্য SHA1 ব্যবহার করে। সম্পূর্ণ পি 2 পি সিঙ্ক হচ্ছে।
একটি অনন্য বৈশিষ্ট্য: টান / পুশের জন্য অ্যাডহক ওয়ান টাইম টিসিপি সার্ভার।
এটি পরিবহনের জন্য এসএসএইচ ব্যবহার করতে পারে।

এটি এখনও প্রকাশিত হয়নি, তবে এটি একটি ভাল সূচনা পয়েন্ট হতে পারে।
http://borg.uu3.net/cgit/cgit.cgi/dot/about/


0

আপনি হ্যাঙ্গার ব্যবহার করে দেখতে পারেন । এটি ডেটা সংস্করণ নিয়ন্ত্রণ বিশ্বে তুলনামূলকভাবে নতুন খেলোয়াড় তবে ব্লবের সংস্করণ পরিবর্তনের পরিবর্তে টেনারগুলিকে সংস্করণ দিয়ে একটি দুর্দান্ত কাজ করে। ডকুমেন্টেশন শুরু করার জন্য সেরা জায়গা হতে হবে। যেহেতু ডেটা টেনার হিসাবে সংরক্ষণ করা হচ্ছে, আপনার এটি সরাসরি আপনার এমএল কোডের মধ্যে ব্যবহার করতে সক্ষম হওয়া উচিত (প্লাস হ্যাঙ্গারে এখন পাইটর্চ এবং টেনসরফ্লোতে ডেটা লোডার রয়েছে)। হ্যাঙ্গারের সাহায্যে, আপনি গিটারের সমস্ত সুবিধা যেমন শূন্য-দামের শাখা, মার্জ, ইতিহাসের মাধ্যমে সময় ভ্রমণ পেতে পারেন। হ্যাঙ্গারে ক্লোনিংয়ের একটি দুর্দান্ত বৈশিষ্ট্য হ'ল আপনি আংশিক ক্লোনিং করতে পারেন । যার অর্থ, আপনার কাছে যদি আপনার রিমোটে 10 টিবি ডেটা থাকে এবং কেবল আপনার মডেলটির প্রোটোটাইপিংয়ের জন্য 100 এমবি প্রয়োজন হয় তবে আপনি সম্পূর্ণ ক্লোনটির পরিবর্তে আংশিক ক্লোনিংয়ের মাধ্যমে কেবল 100 এমবি আনতে পারবেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.