এটি টেনসরফ্লো সংগ্রহস্থলে কোড পরীক্ষার জন্য প্রস্তাবিত অনুশীলন।
আপনি শুরু করার আগে
আপনি কোনও টেনসরফ্লো প্রকল্পে উত্স কোডটি অবদান রাখার আগে, দয়া করে প্রকল্পটির গিটহাব রেপোতে থাকা CONTRIBUTING.md
ফাইলটি পর্যালোচনা করুন। (উদাহরণস্বরূপ, মূল টেনসরফ্লো রেপোর জন্য CONTRIBUTING.md ফাইলটি দেখুন)) সমস্ত কোড অবদানকারীদের একটি অবদানকারী লাইসেন্স চুক্তি (সিএলএ) স্বাক্ষর করতে হবে।
সাধারণ নীতি
আপনার বিল্ড বিধিগুলিতে আপনি যা ব্যবহার করেন কেবল তার উপরই নির্ভর করুন
টেনসরফ্লো একটি বড় গ্রন্থাগার, এবং তার প্যাকেজটির জন্য যখন একটি ইউনিট পরীক্ষা লেখার সময় সম্পূর্ণ প্যাকেজের উপর নির্ভর করে একটি সাধারণ অনুশীলন হয়ে থাকে। তবে এটি bazel
নির্ভরতা-নির্ভর বিশ্লেষণ অক্ষম করে। এর অর্থ হ'ল ধারাবাহিক ইন্টিগ্রেশন সিস্টেমগুলি প্রসুবমিট / পোস্টসবিট রানগুলির জন্য সম্পর্কিত সম্পর্কগুলি পরীক্ষা-নিরীক্ষার সাথে বুদ্ধিমানভাবে শেষ করতে পারে না। আপনি যদি কেবল নিজের BUILD
ফাইলটিতে যা সাবমডিউলগুলি পরীক্ষা করে যাচ্ছেন তার উপর নির্ভর করে তবে আপনি সমস্ত টেনসরফ্লো বিকাশকারী এবং অনেক মূল্যবান গণনার শক্তি সাশ্রয় করবেন।
তবে সম্পূর্ণ টিএফ লক্ষ্যমাত্রা বাদ দিতে আপনার বিল্ড নির্ভরতা পরিবর্তন করে আপনি আপনার পাইথন কোডে যা আমদানি করতে পারবেন তার কিছু সীমাবদ্ধতা নিয়ে আসে। আপনি আপনার ইউনিট পরীক্ষায় আর import tensorflow as tf
স্টেটমেন্ট import tensorflow as tf
ব্যবহার করতে সক্ষম হবেন না। তবে এটি একটি কার্যকর ট্রেডঅফ কারণ এটি সমস্ত বিকাশকারীকে হাজার হাজার অপ্রয়োজনীয় পরীক্ষা চালানো থেকে বাঁচায়।
সমস্ত কোডে ইউনিট পরীক্ষা করা উচিত
আপনি যে কোনও কোড লেখেন, তার ইউনিট পরীক্ষাগুলিও লিখতে হবে। আপনি যদি একটি নতুন ফাইল foo.py
লিখেন তবে আপনার ইউনিট পরীক্ষাগুলি foo_test.py
এ foo_test.py
এবং এটি একই পরিবর্তনের মধ্যে জমা দেওয়া উচিত। আপনার সমস্ত কোডের জন্য 90% ইনক্রিমেন্টাল টেস্ট কভারেজের জন্য লক্ষ্য।
টিএফ-তে নেটিভ বেজেল পরীক্ষার নিয়ম ব্যবহার করা এড়িয়ে চলুন
পরীক্ষা চালানোর সময় টিএফের অনেক সূক্ষ্মতা থাকে। আমরা আমাদের বেজেল ম্যাক্রোগুলিতে complex সমস্ত জটিলতা আড়াল করার জন্য কাজ করেছি। এগুলি মোকাবেলা করতে এড়াতে, স্থানীয় পরীক্ষার নিয়মের পরিবর্তে নিম্নলিখিতটি ব্যবহার করুন। নোট করুন যে এগুলি সমস্ত tensorflow/tensorflow.bzl
সংজ্ঞায়িত হয়েছে সিসি পরীক্ষার জন্য, tf_cc_test
, tf_gpu_cc_test
, tf_gpu_only_cc_test
। পাইথন পরীক্ষার জন্য, tf_py_test
বা gpu_py_test
ব্যবহার করুন। আপনার যদি দেশীয় py_test
নিয়মের খুব কাছাকাছি কিছু দরকার হয় তবে দয়া করে পরিবর্তে টেনসরফ্লো.বিজেএলে সংজ্ঞায়িত একটিটি ব্যবহার করুন। বিল্ড ফাইলের শীর্ষে আপনাকে কেবল নিম্নলিখিত লাইনটি যুক্ত করতে হবে: load(“tensorflow/tensorflow.bzl”, “py_test”)
পরীক্ষাটি কোথায় কার্যকর হয় সে বিষয়ে সচেতন হন
আপনি যখন কোনও পরীক্ষা লিখেন, আমাদের টেস্ট ইনফ্রা সিপিইউ, জিপিইউ এবং এক্সিলারেটরগুলিতে আপনার পরীক্ষাগুলি চালনার যত্ন নিতে পারে যদি আপনি সে অনুযায়ী লিখেন। আমাদের স্বয়ংক্রিয় পরীক্ষা আছে যা লিনাক্স, ম্যাকোস, উইন্ডোজগুলিতে চলে, যার জিপিইউ সহ বা ছাড়াই সিস্টেম রয়েছে। আপনাকে কেবল উপরে তালিকাভুক্ত ম্যাক্রোগুলি বেছে নিতে হবে এবং তারপরে কোথায় তা কার্যকর করা হবে তা সীমাবদ্ধ করতে ট্যাগগুলি ব্যবহার করুন।
manual
ট্যাগ আপনার পরীক্ষাটি যে কোনও জায়গায় চালানো থেকে বাদ দেবে। এর মধ্যে ম্যানুয়াল টেস্ট মৃত্যুদন্ড কার্যকর করা হয়েছে যাbazel test tensorflow/…
মতো নিদর্শনগুলি ব্যবহার করেno_oss
অফিসিয়াল টিএফ ওএসএস পরীক্ষার পরিকাঠামোয় চালানো থেকে আপনার পরীক্ষা বাদ দেবে।no_mac
বাno_windows
ট্যাগগুলি আপনার পরীক্ষাকে প্রাসঙ্গিক অপারেটিং সিস্টেমের পরীক্ষার স্যুট থেকে বাদ দিতে ব্যবহার করা যেতে পারে।no_gpu
ট্যাগটি আপনার পরীক্ষাটি GPU টেস্ট স্যুটগুলিতে চলমান থেকে বাদ দিতে ব্যবহার করা যেতে পারে।
প্রত্যাশিত পরীক্ষা স্যুটগুলিতে চালিত পরীক্ষাগুলি যাচাই করুন
টিএফ এর বেশ কয়েকটি পরীক্ষার স্যুট রয়েছে। কখনও কখনও, তারা সেট আপ করতে বিভ্রান্ত হতে পারে। অবিচ্ছিন্ন বিল্ডগুলি থেকে আপনার পরীক্ষাগুলি বাদ দেওয়ার জন্য বিভিন্ন সমস্যা থাকতে পারে। সুতরাং, আপনার পরীক্ষাগুলি প্রত্যাশা অনুযায়ী কার্যকর করা হচ্ছে তা যাচাই করা উচিত। এটা করতে:
- আপনার পুল অনুরোধ (পিআর) এর সমাপ্তির দিকে চালিত হওয়ার জন্য আপনার পূর্বপত্রকের জন্য অপেক্ষা করুন।
- স্থিতির চেকগুলি দেখতে আপনার PR এর নীচে স্ক্রোল করুন।
- যে কোনও কোকরো চেকের ডানদিকে "বিশদ" লিঙ্কটি ক্লিক করুন।
- আপনার নতুন যুক্ত হওয়া লক্ষ্যগুলি খুঁজে পেতে "লক্ষ্য" তালিকাটি পরীক্ষা করুন।
প্রতিটি শ্রেণি / ইউনিটের নিজস্ব ইউনিট পরীক্ষার ফাইল থাকা উচিত
পৃথক পরীক্ষার ক্লাস ব্যর্থতা এবং সংস্থানগুলিকে আরও ভালভাবে বিচ্ছিন্ন করতে সহায়তা করে। এগুলি পরীক্ষার ফাইলগুলি পড়ার পক্ষে আরও খাটো এবং সহজ দিকে পরিচালিত করে। সুতরাং, আপনার সমস্ত পাইথন ফাইলের কমপক্ষে একটি সম্পর্কিত টেস্ট ফাইল থাকা উচিত (প্রতিটি foo.py
জন্য এটির foo_test.py
থাকা উচিত)। আরও বিস্তৃত পরীক্ষার জন্য যেমন ইন্টিগ্রেশন টেস্টগুলির জন্য বিভিন্ন সেটআপের প্রয়োজন হয়, আরও পরীক্ষার ফাইল যুক্ত করা ভাল।
গতি এবং চলমান সময়
ভাগ করে নেওয়া যতটা সম্ভব ব্যবহার করা উচিত
শাড়িংয়ের পরিবর্তে দয়া করে বিবেচনা করুন:
- আপনার পরীক্ষা আরও ছোট করা
- উপরেরটি যদি সম্ভব না হয় তবে পরীক্ষাগুলি বিভক্ত করুন
ভাগ করা কোনও পরীক্ষার সামগ্রিক বিলম্বিতা হ্রাস করতে সহায়তা করে তবে ছোট লক্ষ্যগুলিতে পরীক্ষাগুলি ভেঙে তা অর্জন করা যায়। বিভাজন পরীক্ষা আমাদের প্রতিটি পরীক্ষার উপর একটি সূক্ষ্ম স্তরের নিয়ন্ত্রণ দেয়, অপ্রয়োজনীয় প্রসেসমিট রান কমিয়ে দেয় এবং একটি বিল্ডকপ থেকে কভারেজ ক্ষয় হ্রাস করে একটি খারাপ আচরণের টেস্টকেসের কারণে পুরো লক্ষ্যটিকে অক্ষম করে। তদুপরি, শ্যাার্ডিংয়ের ফলে গোপন ব্যয় ঘটে যা এতো সুস্পষ্ট নয়, যেমন সমস্ত শর্টের জন্য সমস্ত পরীক্ষার সূচনা কোড চালানো running অতিরিক্ত লোড তৈরি করে এমন উত্স হিসাবে এই সমস্যাটি আমাদের কাছে ইনফ্রা টিম দ্বারা বাড়ানো হয়েছে।
ছোট পরীক্ষা আরও ভাল better
আপনার পরীক্ষাগুলি যত তাড়াতাড়ি চালানো হবে, লোকেরা আপনার পরীক্ষাগুলি চালানোর সম্ভাবনা তত বেশি। আপনার পরীক্ষার জন্য আরও একটি দ্বিতীয় সেকেন্ডটি বিকাশকারী এবং আমাদের অবকাঠামোগতদের দ্বারা আপনার পরীক্ষা চালাতে কয়েক ঘন্টা অতিরিক্ত সময় জমা করতে পারে। আপনার পরীক্ষাগুলি 30 সেকেন্ডের অধীনে চালিত করার চেষ্টা করুন (অপ-বিকল্প মোডে!) এবং সেগুলি ছোট করে তোলেন। কেবলমাত্র শেষ পরীক্ষার হিসাবে আপনার পরীক্ষাগুলি মাঝারি হিসাবে চিহ্নিত করুন। ইনফ্রা প্রেসবমিট বা পোস্টসবমিট হিসাবে কোনও বড় পরীক্ষা চালায় না! অতএব, আপনি যদি এটি পরিচালনা করতে চলেছেন তবে কেবল একটি বড় পরীক্ষা লিখুন। দ্রুত পরীক্ষা চালানোর জন্য কয়েকটি টিপস:
- আপনার পরীক্ষায় প্রশিক্ষণের কম পুনরাবৃত্তি চালান
- সাধারণ জাল দিয়ে পরীক্ষার অধীনে ভারী নির্ভরতা প্রতিস্থাপনের জন্য নির্ভরতা ইনজেকশন ব্যবহার করার বিষয়টি বিবেচনা করুন।
- ইউনিট পরীক্ষায় ছোট ইনপুট ডেটা ব্যবহার করার বিষয়ে বিবেচনা করুন
- অন্য কিছু যদি না কাজ করে তবে আপনার পরীক্ষার ফাইলটি বিভক্ত করার চেষ্টা করুন।
পরীক্ষার সময়গুলি ফ্লাকগুলি এড়ানোর জন্য পরীক্ষার আকারের সময়সীমা অর্ধেকের জন্য লক্ষ্য করা উচিত
bazel
পরীক্ষার লক্ষ্যগুলি সহ, ছোট পরীক্ষাগুলিতে 1 মিনিটের সময়সীমা থাকে। মাঝারি পরীক্ষার সময়সীমা 5 মিনিট। টেনসরফ্লো পরীক্ষা ইনফ্রা দ্বারা বড় টেস্টগুলি কার্যকর করা হয় না। তবে অনেক পরীক্ষা তারা যে পরিমাণ সময় নেয় তা নির্ধারণ করে না। বিভিন্ন কারণে আপনার পরীক্ষাগুলি এখন এবং তারপরে আরও বেশি সময় নিতে পারে। এবং, আপনি যদি গড় হিসাবে গড়ে 50 সেকেন্ডের জন্য চালিত এমন কোনও পরীক্ষা চিহ্নিত করেন তবে এটি কোনও পুরানো সিপিইউযুক্ত কোনও মেশিনে শিডিয়ুল করলে আপনার পরীক্ষাটি ভাসবে। অতএব, ছোট পরীক্ষার জন্য 30 সেকেন্ডে গড় চলমান সময় নির্ধারণ করুন। মাঝারি পরীক্ষার জন্য গড় চলমান সময়ের 2 মিনিট 30 সেকেন্ডের জন্য লক্ষ্য।
নমুনার সংখ্যা হ্রাস করুন এবং প্রশিক্ষণের জন্য সহনশীলতা বাড়ান
ধীরগতিতে চলমান পরীক্ষাগুলি অবদানকারীদের বাধা দেয়। পরীক্ষায় প্রশিক্ষণ চালানো খুব ধীর হতে পারে। আপনার পরীক্ষাগুলি পর্যাপ্ত দ্রুত রাখার জন্য আপনার পরীক্ষাগুলিতে কম নমুনা ব্যবহার করতে সক্ষম হতে উচ্চতর সহনশীলতা পছন্দ করুন 2.5
অ-নির্ধারণবাদ এবং ফ্লেক্সগুলি নির্মূল করুন
নির্ণায়ক পরীক্ষা লিখুন
ইউনিট পরীক্ষাগুলি সর্বদা নিরস্তক হওয়া উচিত। টেপ এবং গিটারে চলমান সমস্ত পরীক্ষাগুলি প্রতিবারের মতো একইভাবে চালানো উচিত, যদি কোনও কোড পরিবর্তন না করে ing এটি নিশ্চিত করার জন্য, নীচে কয়েকটি বিষয় বিবেচনা করতে হবে।
সর্বদা stochasticity যে কোন উত্স বীজ
যেকোন এলোমেলো নম্বর জেনারেটর, বা স্টোকাস্টিসিটির অন্য কোনও উত্স স্বাচ্ছন্দ্য দেখা দিতে পারে। সুতরাং, এই প্রতিটি অবশ্যই বীজ করা উচিত। পরীক্ষাগুলি কম ফ্ল্যাশ করা ছাড়াও, এটি সমস্ত পরীক্ষার পুনরুত্পাদনযোগ্য করে তোলে। টিএফ পরীক্ষাগুলিতে আপনাকে কিছু বীজ সেট করার বিভিন্ন উপায় হতে পারে:
# Python RNG
import random
random.seed(42)
# Numpy RNG
import numpy as np
np.random.seed(42)
# TF RNG
from tensorflow.python.framework import random_seed
random_seed.set_seed(42)
মাল্টিথ্রেডেড টেস্টগুলিতে sleep
ব্যবহার এড়িয়ে চলুন
পরীক্ষাগুলিতে sleep
কার্যকারিতাটি স্বচ্ছলতার একটি বড় কারণ হতে পারে। বিশেষত একাধিক থ্রেড ব্যবহার করার সময়, অন্য থ্রেডের জন্য অপেক্ষা করার জন্য ঘুম ব্যবহার করা কখনই সংক্ষিপ্ত নয়। এটি সিস্টেম বিভিন্ন থ্রেড বা প্রক্রিয়াগুলি কার্যকর করার কোনও আদেশের গ্যারান্টি দিতে সক্ষম না হওয়ার কারণে এটি। অতএব, মিটেক্সেসের মতো ডিস্ট্রিমেন্টিক সিঙ্ক্রোনাইজেশন কনস্ট্রাক্টগুলি পছন্দ করুন।
পরীক্ষাটি ফ্ল্যাশ কিনা তা পরীক্ষা করে দেখুন
ফ্লেক্সগুলির ফলে বিল্ডকপস এবং বিকাশকারীরা অনেক ঘন্টা হারাতে পারে। এগুলি সনাক্ত করা কঠিন এবং তাদের ডিবাগ করা কঠিন। স্বচ্ছলতা সনাক্ত করার জন্য অটোমেটেড সিস্টেম থাকা সত্ত্বেও, ডেনিলিস্ট পরীক্ষাগুলি সঠিকভাবে পরীক্ষা করার আগে তাদের কয়েকশ টেস্ট রান সংগ্রহ করতে হবে। এমনকি যখন তারা সনাক্ত করে, তারা আপনার পরীক্ষাগুলি অস্বীকার করে এবং পরীক্ষার কভারেজটি হারিয়ে যায়। অতএব, পরীক্ষার লেখকদের পরীক্ষা করা উচিত যখন পরীক্ষাগুলি লেখার সময় তাদের পরীক্ষাগুলি ফ্লেক হয় কিনা। পতাকা সহ আপনার পরীক্ষা চালিয়ে এটি সহজেই করা যায়: --runs_per_test=1000
টেনসরফ্লোটেষ্টক্যাস ব্যবহার করুন
টেনসরফ্লোটেষ্টকেস প্রয়োজনীয় সতর্কতা গ্রহণ করে যেমন যতটা সম্ভব ফ্ল্যাঙ্কনেস হ্রাস করার জন্য ব্যবহৃত সমস্ত এলোমেলো সংখ্যা জেনারেটর বীজ হিসাবে। যেহেতু আমরা আরও ফ্ল্যাঙ্কনেস উত্সগুলি আবিষ্কার ও ঠিক করেছি, এগুলি সমস্ত টেনসরফ্লোটেষ্টকেসে যুক্ত করা হবে। অতএব, টেনসরফ্লো জন্য পরীক্ষা লেখার সময় আপনার টেনসরফ্লোটেষ্টকেস ব্যবহার করা উচিত। tensorflow/python/framework/test_util.py
এখানে সংজ্ঞায়িত করা হয়েছে: tensorflow/python/framework/test_util.py
হারমেটিক পরীক্ষা লিখুন
হারমেটিক পরীক্ষার জন্য বাইরের কোনও সংস্থার প্রয়োজন হয় না। তারা তাদের প্রয়োজনীয় সমস্ত কিছু দিয়ে ভরাট করা হয় এবং তারা কেবল যে কোনও নকল পরিষেবা তাদের প্রয়োজন হতে শুরু করে। আপনার পরীক্ষাগুলি ব্যতীত অন্য কোনও পরিষেবা অ নির্ধারণের উত্স। এমনকি অন্যান্য পরিষেবার 99% প্রাপ্যতা থাকা সত্ত্বেও, নেটওয়ার্কটি ফ্লেক করতে পারে, আরপিসি প্রতিক্রিয়াটি বিলম্বিত হতে পারে এবং আপনি একটি অনির্বচনীয় ত্রুটি বার্তা দিয়ে শেষ করতে পারেন। বাইরের পরিষেবাগুলি জিসিএস, এস 3 বা কোনও ওয়েবসাইটের মধ্যে সীমাবদ্ধ নয় তবে limited