কোন উপায় (গুলি) দিয়ে আমি জুলিয়া ফাংশনটি বেনমার্ক করতে পারি?


11

পটভূমি

আমি নিজেকে মেশিন লার্নিং শিখিয়েছি এবং সম্প্রতি জুলিয়া মেশিন লার্নিং ইকোসিস্টেমের প্রতি আগ্রহী হতে শুরু করেছি।


একটি পাইথন পটভূমি থেকে আসছে এবং কিছু Tensorflow এবং থাকার OpenCV / skimageঅভিজ্ঞতা, আমি বেঞ্চমার্ক জুলিয়া এমএল লাইব্রেরি করতে চান (সর্দি / JuliaImages) তার প্রতিরূপ বিরুদ্ধে কিভাবে দ্রুত দেখতে বা এটি সত্যিই ধীর সঞ্চালিত করতে সিভি (যে কোন) কাজের (গুলি) এবং যদি সিদ্ধান্ত নিতে আমার জুলিয়া ব্যবহারে বদল করা উচিত।

আমি জানি যে এইভাবে timeitমডিউলটি ব্যবহার করে অজগরটিতে কোনও ক্রিয়াকলাপ চালাতে কীভাবে সময় নেওয়া যায় :

#Loading an Image using OpenCV

s = """\
img = cv2.imread('sample_image.png', 1)
"""
setup = """\
import timeit
"""
print(str(round((timeit.timeit(stmt = s, setup = setup, number = 1))*1000, 2)) + " ms")
#printing the time taken in ms rounded to 2 digits

জুলিয়াতে উপযুক্ত লাইব্রেরি (এই ক্ষেত্রে, JuliaImages) ব্যবহার করে কোনও একই কাজ সম্পাদনের সময়টিকে কীভাবে তুলনা করে ।

জুলিয়া কি সময় / বেঞ্চমার্কে কোনও ফাংশন / ম্যাক্রো সরবরাহ করে?

উত্তর:


10

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

এটি ব্যবহার করা গুরুত্বপূর্ণ @btimeবা @benchmarkসঠিকভাবে, এটি বিভ্রান্তিকর ফলাফল এড়িয়ে চলে। সাধারণত, আপনি এমন একটি ফাংশন বেঞ্চমার্ক করছেন যা এক বা একাধিক আর্গুমেন্ট নেয়। বেঞ্চমার্কিংয়ের সময়, সমস্ত আর্গুমেন্টগুলি বাহ্যিক চলক হওয়া উচিত: (বেঞ্চমার্ক ম্যাক্রো ছাড়াই)

x = 1
f(x)
# do not use f(1)

ফাংশনটি অনেকবার মূল্যায়ন করা হবে। যখনই ফাংশনটি মূল্যায়ন করা হয় তখন ফাংশন আর্গুমেন্টগুলি পুনরায় মূল্যায়ন হওয়া থেকে রোধ করতে, আমাদের প্রতিটি তর্ককে $আর্গুমেন্ট হিসাবে ব্যবহৃত প্রতিটি ভেরিয়েবলের নামের সাথে উপসর্গ করে চিহ্নিত করতে হবে । বেঞ্চমার্কিং ম্যাক্রোগুলি এটি ব্যাঙ্কমার্কিং প্রক্রিয়া শুরু করার পরে একবার পরিবর্তনশীলকে মূল্যায়ন (সমাধান) করা উচিত এবং এটির ফলাফলটি সরাসরি যেমন পুনরায় ব্যবহার করতে হবে তা বোঝাতে এটি ব্যবহার করে:

julia> using BenchmarkTools
julia> a = 1/2;
julia> b = 1/4;
julia> c = 1/8;
julia> a, b, c
(0.5, 0.25, 0.125)

julia> function sum_cosines(x, y, z)
         return cos(x) + cos(y) + cos(z)
       end;

julia> @btime sum_cosines($a, $b, $c);  # the `;` suppresses printing the returned value
  11.899 ns (0 allocations: 0 bytes)    # calling the function takes ~12 ns (nanoseconds)
                                        # the function does not allocate any memory
# if we omit the '$', what we see is misleading
julia> @btime sum_cosines(a, b, c);    # the function appears more than twice slower 
 28.441 ns (1 allocation: 16 bytes)    # the function appears to be allocating memory
# @benchmark can be used the same way that @btime is used
julia> @benchmark sum_cosines($a,$b,$c) # do not use a ';' here
BenchmarkTools.Trial:
  memory estimate:  0 bytes
  allocs estimate:  0
  --------------
  minimum time:     12.111 ns (0.00% GC)
  median time:      12.213 ns (0.00% GC)
  mean time:        12.500 ns (0.00% GC)
  maximum time:     39.741 ns (0.00% GC)
  --------------
  samples:          1500
  evals/sample:     999

সামঞ্জস্য করা যায় তার চেয়ে বেশি পরামিতি থাকা অবস্থায়, ডিফল্ট মানগুলি সাধারণত ভালভাবে কাজ করে। অভিজ্ঞ ursers জন্য বেঞ্চমার্কটুলস সম্পর্কে অতিরিক্ত তথ্যের জন্য, ম্যানুয়ালটি দেখুন


7

জুলিয়া টাইমিং / বেঞ্চমার্কিং কোড রানটাইমের জন্য দুটি ম্যাক্রো সরবরাহ করে । এইগুলো :

বেনমার্কটুলস এর @ বেঞ্চমার্ক ব্যবহার করা খুব সহজ এবং দুটি ভাষার গতির তুলনায় আপনার পক্ষে সহায়ক হবে। @bencharkআপনার দেওয়া পাইথন বেঞ্চের বিরুদ্ধে ব্যবহারের উদাহরণ ।

using Images, FileIO, BenchmarkTools

@benchmark img = load("sample_image.png")

আউটপুট:

BenchmarkTools.Trial: 
  memory estimate:  3.39 MiB
  allocs estimate:  322
  --------------
  minimum time:     76.631 ms (0.00% GC)
  median time:      105.579 ms (0.00% GC)
  mean time:        110.319 ms (0.41% GC)
  maximum time:     209.470 ms (0.00% GC)
  --------------
  samples:          46
  evals/sample:     1

এখন গড় সময়ের সাথে তুলনা করার জন্য, samplesআপনার পাইথন টাইমিট কোডে আপনার সংখ্যা (46) দেওয়া উচিত এবং মৃত্যুর সময় নির্ধারণের গড় সময় পেতে একই নম্বর দিয়ে ভাগ করে নেওয়া উচিত।

print(str(round((timeit.timeit(stmt = s, setup = setup, number = 46)/46)*1000, 2)) + " ms")

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


দ্রষ্টব্য : পরিসংখ্যানের দৃষ্টিকোণ থেকে, @ বেঞ্চমার্ক @ সময়ের চেয়ে অনেক ভাল।


2
নোট করুন যে সময় নির্ধারণের শব্দটি বেশিরভাগ ক্ষেত্রে ইতিবাচক হয় যা বোঝায় যে সর্বনিম্ন সময়টি প্রায়শই (সর্বদা নয়) আরও তথ্যপূর্ণ। @btimeএবং @belapsedশুধুমাত্র সর্বনিম্ন সময় ফেরত দিন।
ফ্রেডরিক বাগে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.