Tfrecord ফাইলটি শার্ডে বিভক্ত করার সুবিধা কী?


17

আমি টেনসরফ্লোতে বক্তৃতা স্বীকৃতি নিয়ে কাজ করছি এবং বিশাল তরঙ্গ ডেটাসেট দিয়ে এলএসটিএম এনএনকে প্রশিক্ষণের পরিকল্পনা করছি। পারফরম্যান্স লাভের কারণে, আমি tfrecord ব্যবহার করার পরিকল্পনা করছি। ইন্টারনেটে কয়েকটি উদাহরণ রয়েছে (প্রারম্ভিক ইনসেপশন।) যেখানে tfrecords ফাইলগুলি শার্ডে বিভক্ত। আমার প্রশ্ন: tfrecords ফাইলটি শার্ডে রাখার সুবিধা কী? এই বিভক্তির কোনও অতিরিক্ত কর্মক্ষমতা লাভ আছে কি?

উত্তর:


11

একাধিক ফাইলে বিভক্ত হওয়ার সুবিধাগুলি নিয়ে গবেষণা করার ক্ষেত্রে, গুগল জনগণের মধ্যে একটির কাছ থেকে একমাত্র যুক্তিসঙ্গত উত্তর এসেছে।

তারা বলেছে পারফরম্যান্স লাভ নগন্য নয়, তবে আমি সম্মত হই যে বিভাজনকারী ফাইলগুলি সাহায্য করতে পারে বিশেষত যদি আপনি ডেটাসেটটি অন্য কোনও জায়গায় স্থানান্তর করতে চান।

মনে রাখবেন যে সংরক্ষণের আগে আপনাকে এখনই বদলাতে হবে না, কারণ (বর্তমানে) টিএফআরকর্ডগুলি পড়ার জন্য প্রস্তাবিত পদ্ধতিটি ব্যবহার করে tf.data.TFRecordDatasetযা খুব কার্যকর .shuffle()পদ্ধতি প্রয়োগ করে ।


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

7

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

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

বিকল্পটি হ'ল ডুপ্লিকেট করার মাধ্যমে আপনার ডেটা প্রি-শিফাল করা বা টিএফআরকর্ডগুলি মোটেও ব্যবহার করবেন না।


4

টিএফআরেকর্ড ফাইলগুলিকে শার্ডে বিভক্ত করা আপনাকে মেমরির সাথে খাপ খায় না এমন বড় ডেটাসেটগুলিকে সাফ করতে সহায়তা করে।

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

একটি পদ্ধতির প্রতি প্রশিক্ষণের জন্য একটি ফাইল থাকা এবং সমস্ত ফাইলের নামের তালিকা তৈরি করা। তারপরে প্রতিটি যুগের শুরুতে আপনি ফাইলের নামের তালিকাটি বদলে ফেলুন এবং স্বতন্ত্র ফাইলগুলি লোড করুন। এই পদ্ধতির সমস্যাটি হ'ল আপনি নিজের ডিস্কে এলোমেলো অবস্থান থেকে কয়েক মিলিয়ন ফাইল লোড করছেন। এটি বিশেষত একটি হার্ড ডিস্ক ড্রাইভে ধীর হতে পারে। এমনকি যদি আপনি এলোমেলো অবস্থান থেকে কয়েক মিলিয়ন ছোট ফাইল লোড করে থাকেন তবে একটি RAID 0 অ্যারেও গতিতে সহায়তা করবে না। আপনি যদি কোনও নেটওয়ার্ক সংযোগের মাধ্যমে ফাইলগুলিতে অ্যাক্সেস করে থাকেন তবে সমস্যাটি আরও খারাপ হয়।

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

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

সঠিক পদক্ষেপ এখানে:

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

3

একটি টিএফআরকার্ডস ফাইলটিকে একাধিক শারডে বিভক্ত করাতে মূলত 3 টি সুবিধা রয়েছে:

  1. বদলে যাওয়া সহজ । অন্যরা যেমন উল্লেখ করেছে, এটি মোটা পর্যায়ে ডেটা বদলানো সহজ করে তোলে (একটি শ্যাফেল বাফার ব্যবহারের আগে)।
  2. দ্রুত ডাউনলোড করা । যদি ফাইলগুলি একাধিক সার্ভারগুলিতে ছড়িয়ে থাকে তবে সমান্তরালে বিভিন্ন সার্ভার থেকে বেশ কয়েকটি ফাইল ডাউনলোড করা ব্যান্ডউইথের ব্যবহারকে (একক সার্ভার থেকে একটি ফাইল ডাউনলোড করার চেয়ে) অনুকূলিত করবে। এটি একক সার্ভার থেকে ডেটা ডাউনলোডের তুলনায় পারফরম্যান্সকে উল্লেখযোগ্যভাবে উন্নতি করতে পারে।
  3. কারসাজি করা সহজ । একক 1 টিবি ফাইলের পরিবর্তে প্রতিটি 100 এমবি এর 10,000 টি ফাইলের সাথে ডিল করা সহজ। বিশাল ফাইলগুলি হ্যান্ডেল করার জন্য ব্যথা হতে পারে: বিশেষত, স্থানান্তর ব্যর্থ হওয়ার সম্ভাবনা অনেক বেশি। এটি যখন কোনও একক ফাইলে থাকে তখন ডেটা সাবসেটগুলি পরিচালনা করা আরও শক্ত।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.