paint-brush
DNN-এর জন্য 2x ত্বরণ আনলিশ করা: মাত্র 1 মিনিটে ইন্টিগ্রাল নিউরাল নেটওয়ার্ক সহ মডেলগুলিকে রূপান্তর করাদ্বারা@thestage
1,231 পড়া
1,231 পড়া

DNN-এর জন্য 2x ত্বরণ আনলিশ করা: মাত্র 1 মিনিটে ইন্টিগ্রাল নিউরাল নেটওয়ার্ক সহ মডেলগুলিকে রূপান্তর করা

দ্বারা TheStage AI6m2023/08/31
Read on Terminal Reader
Read this story w/o Javascript

অতিদীর্ঘ; পড়তে

এই নিবন্ধে, আমরা আপনাকে একটি 4x ইমেজ সুপার-রেজোলিউশন EDSR মডেলকে INN-এ রূপান্তর করার প্রক্রিয়ার মাধ্যমে গাইড করব, তারপরে দেখাব কীভাবে মডেলের কাঠামোগত ছাঁটাই করা যায়। অবশেষে, আমরা INN কে আবার একটি পৃথক DNN-এ রূপান্তর করব এবং দক্ষ অনুমানের জন্য এটি একটি Nvidia GPU-তে স্থাপন করব।
featured image - DNN-এর জন্য 2x ত্বরণ আনলিশ করা: মাত্র 1 মিনিটে ইন্টিগ্রাল নিউরাল নেটওয়ার্ক সহ মডেলগুলিকে রূপান্তর করা
TheStage AI HackerNoon profile picture
0-item
1-item


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


INNs অ্যাপ্লিকেশন। অনুমানের সময়, কেউ হার্ডওয়্যার বা ডেটা অবস্থার উপর নির্ভর করে গতিশীলভাবে নেটওয়ার্কের আকার পরিবর্তন করতে পারে। আকার হ্রাস কাঠামোগত এবং নিউরাল নেটওয়ার্কের সংকোচন এবং ত্বরণ স্বয়ংক্রিয়ভাবে বাড়ে।



TheStage.ai- এর দল IEEE/CVF CVPR 2023 সম্মেলনে তাদের গবেষণাপত্র, "ইন্টিগ্রাল নিউরাল নেটওয়ার্কস" উপস্থাপন করেছে। এই কাজটি ইভেন্টে প্রদর্শিত শুধুমাত্র 12টি 'পুরষ্কার প্রার্থী' কাগজপত্রের একটি হিসাবে স্বীকৃত হয়েছিল। INN হল নিউরাল নেটওয়ার্কের একটি নতুন শ্রেণী যা মৌলিক স্তরগুলিকে উপস্থাপন করতে অবিচ্ছিন্ন পরামিতি এবং অবিচ্ছেদ্য অপারেটরকে একত্রিত করে। অনুমান পর্যায়ে, INNগুলি ক্রমাগত ওজন থেকে পৃথক নমুনা দ্বারা একটি ভ্যানিলা DNN উপস্থাপনায় রূপান্তরিত হয়। এই ধরনের নেটওয়ার্কগুলির প্যারামিটারগুলি ফিল্টার এবং চ্যানেলের মাত্রাগুলির সাথে অবিচ্ছিন্ন থাকে যা কেবলমাত্র সেই মাত্রাগুলির সাথে পুনরায় বিবেচ্যকরণের মাধ্যমে ফাইন-টিউনিং ছাড়াই কাঠামোগত ছাঁটাইয়ের দিকে পরিচালিত করে।


এই নিবন্ধে, আমরা আপনাকে একটি 4x চিত্রের সুপার-রেজোলিউশন EDSR মডেলকে একটি INN-এ রূপান্তরিত করার প্রক্রিয়ার মাধ্যমে গাইড করব, তারপরে মডেলটির কাঠামোগত ছাঁটাই কীভাবে অর্জন করা যায় তা দেখাব। অবশেষে, আমরা INN কে আবার একটি পৃথক DNN-এ রূপান্তর করব এবং দক্ষ অনুমানের জন্য এটি একটি Nvidia GPU-তে স্থাপন করব। এই নিবন্ধটি নিম্নলিখিত হিসাবে এগিয়ে যাবে:


  1. INN-এর একটি সংক্ষিপ্ত ভূমিকা।
  2. সুপার-রেজোলিউশন টাস্কের জন্য EDSR নেটওয়ার্কের ওভারভিউ।
  3. কোডের একক লাইনে অবিচ্ছেদ্য EDSR পাওয়ার জন্য TorchIntegral ফ্রেমওয়ার্ক অ্যাপ্লিকেশন।
  4. INN ফাইন-টিউনিং (দ্রুত পাইপলাইন) ছাড়াই INN এর কাঠামোগত ছাঁটাই।
  5. এনভিডিয়া জিপিইউতে ছাঁটাই করা মডেল স্থাপন করুন।


আরও তথ্য এবং আপডেটের জন্য, অনুগ্রহ করে নিম্নলিখিত সংস্থানগুলি দেখুন:

INN প্রকল্প সাইট

INN প্রকল্প Github

এই নিবন্ধের সমর্থন কোড


বিচ্ছিন্ন EDSR এর বৈশিষ্ট্য মানচিত্র।


INN EDSR-এর বৈশিষ্ট্য মানচিত্র। এটি দেখতে সহজ যে INN-এর চ্যানেলগুলি ধারাবাহিকভাবে সংগঠিত হয়৷


ফাইন-টিউনিং ছাড়াই DNN ছাঁটাইয়ের জন্য INN

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


অবিচ্ছেদ্য সম্পূর্ণ-সংযুক্ত স্তর মূল্যায়নের ওভারভিউ।


EDSR 4x চিত্র সুপার-রেজোলিউশন ছাঁটাই

ইমেজ সুপার-রেজোলিউশন হল একটি সুপরিচিত কম্পিউটার ভিশন টাস্ক যেখানে একটি ইমেজ একটি পরিচিত বা অজানা ডিগ্রেডেশন অপারেটরের সাথে উন্নত করা উচিত। আমরা বাইকিউবিক ডাউনস্যাম্পলিংকে অবক্ষয় অপারেটর হিসাবে ব্যবহার করে ক্লাসিক্যাল সুপার-রেজোলিউশন ফর্ম বিবেচনা করি।


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


EDSR আর্কিটেকচার। EDSR আর্কিটেকচারে অবশিষ্ট ব্লকের একটি ক্রম থাকে, যার পরে একটি আপস্যাম্পল ব্লক থাকে। এই আপস্যাম্পল ব্লকটি বেশ কয়েকটি কনভলিউশন এবং আপস্যাম্পল লেয়ার নিয়ে গঠিত।


বাম: অবশিষ্ট ব্লক আর্কিটেকচার। ডানদিকে: 4x সুপার-রেজোলিউশনের জন্য আপস্যাম্পলিং ব্লক, প্রতিটি আপস্যাম্পল স্তরে 2x স্কেল রয়েছে।


EDSR আর্কিটেকচার ছাঁটাইয়ের বিশেষত্ব

স্ট্রাকচার্ড প্রুনিং, যার মধ্যে সম্পূর্ণ ফিল্টার বা চ্যানেল মুছে ফেলা জড়িত, অবশিষ্ট ব্লকগুলির জন্য অনন্য প্রভাব রয়েছে, যা EDSR-তে প্রাথমিক বিল্ডিং ব্লক হিসাবে কাজ করে। যেহেতু প্রতিটি স্টেট ইনপুটে একটি Conv -> ReLU -> Conv ব্লক যোগ করে আপডেট করা হয়, তাই ইনপুট এবং আউটপুট সিগন্যালে অবশ্যই একই সংখ্যক প্যারামিটার থাকতে হবে। এটি একটি ছাঁটাই নির্ভরতা গ্রাফ তৈরি করে TorchIntegral এ দক্ষতার সাথে পরিচালনা করা যেতে পারে। নীচের চিত্রটি ব্যাখ্যা করে যে প্রতিটি অবশিষ্ট ব্লকের দ্বিতীয় আবর্তন একটি একক গ্রুপ গঠন করে।


ছাঁটাই নির্ভরতা গোষ্ঠী। অবশিষ্ট ব্লকের একটি ক্রমানুসারে, দ্বিতীয় আবর্তনটি একটি একক গ্রুপ গঠন করে।


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


EDSR মডেলকে INN EDSR-এ রূপান্তর

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


DNN থেকে INN রূপান্তর। আমরা বিচ্ছিন্ন ওজন পারমিউট করার জন্য ট্রাভেলিং সেলসম্যান প্রবলেম ফর্মুলেশন ব্যবহার করছি। স্থানান্তরের পরে, আমরা আরও মসৃণ ওজন পেয়েছি যখন প্রাক-প্রশিক্ষিত DNN-এর কোনও গুণমান ড্রপ হয়নি।


 import torch import torchintegral as inn from super_image import EdsrModel # creating 4x EDSR model model = EdsrModel.from_pretrained("eugenesiow/edsr", scale=4).cuda() # Transform model layers to integral. # continous_dims and discrete dims define which dimensions # of parameters tensors should be parametrized continuously # or stay fixed size as in discrete networks. # In our case we make all filter and channel dimensions # to be continuous excluding convolutions of the upsample block. model = inn.IntegralWrapper(init_from_discrete=True)( model, example_input, continuous_dims, discrete_dims ).cuda()


ইন্টিগ্রেশন গ্রিড টিউনিং: ডিএনএন-এর স্ট্রাকচার্ড-প্রশিক্ষণ-পরবর্তী ছাঁটাই

ইন্টিগ্রেশন গ্রিড টিউনিং হল এমন একটি অপারেশন যা মসৃণভাবে (SGD অপ্টিমাইজেশানের অধীনে) প্যারামিটার টেনসর নির্বাচন করে যার ফিল্টারগুলি ব্যবহারকারী-সংজ্ঞায়িত সংখ্যার জন্য নমুনা করা উচিত। ফিল্টার/চ্যানেল মুছে ফেলার পদ্ধতির বিপরীতে, INNগুলি এমন ফিল্টার তৈরি করে যা ইন্টারপোলেশন অপারেশনের কারণে বেশ কয়েকটি পৃথক ফিল্টারকে একত্রিত করতে পারে।


INN ফিল্টার এবং চ্যানেলের মাত্রা বরাবর প্যারামিটারের টেনসরের উপর সফট সিলেক্ট-বাই-ইনডেক্স অপারেশন চালু করে।


 # Set trainable gird for each integral layer # Each group should have the same grid # During the sum of continuous signals # We need to sample it using the same set of points for group in model.groups: new_size = 224 if 'operator' in group.operations else 128 group.reset_grid(inn.TrainableGrid1D(new_size)) # Prepare model for tuning of integration grid model.grid_tuning() # Start training train(model, train_data, test_data)


ইন্টিগ্রেশন গ্রিড টিউনিং হল একটি দ্রুত অপ্টিমাইজেশন প্রক্রিয়া যা একটি ছোট ক্রমাঙ্কন সেটে করা যেতে পারে। এই অপ্টিমাইজেশনের ফলাফল হল একটি কাঠামোগতভাবে সংকুচিত DNN। একটি একক Nvidia A4000-এর পরীক্ষাগুলি দেখায় যে সম্পূর্ণ Div2k ডেটাসেটে ইন্টিগ্রেশন গ্রিড টিউনিংয়ের জন্য 4 মিনিটের প্রয়োজন ৷ 4x A4000-এ একটি বিতরণ করা সেটআপ প্রায় 4x গতি প্রদর্শন করে, যার ফলে অপ্টিমাইজেশন সময় মাত্র 1 মিনিট


আমাদের পরীক্ষা-নিরীক্ষার সময়, আমরা দেখেছি যে 500টি চিত্র 4000টি চিত্রের একটি সম্পূর্ণ ট্রেন সেট Div2k হিসাবে একই ফলাফল দেয়।


কর্মক্ষমতা

ফলস্বরূপ INN মডেলটিকে সহজেই একটি পৃথক মডেলে রূপান্তরিত করা যেতে পারে এবং যেকোনো NVIDIA GPU-তে স্থাপন করা যেতে পারে। আমরা RTX A4000-এ 64x64 এর ইনপুট রেজোলিউশন সহ ফ্রেম পার সেকেন্ড (FPS) প্রদান করি। সংকুচিত মডেল প্রায় 2x গতি অর্জন করে। ছাঁটাই করা INN মডেলটিকে একটি পৃথক মডেলে রূপান্তর করতে কোডের নিম্নলিখিত লাইনটি ব্যবহার করা যেতে পারে:


 model = model.transform_to_discrete() # then model can be compiled, for instance # compilation can add an additional 1.4x speedup for inference model = torch.compile(model, backend='cudagraphs') 


বাম 4x বাইকিউবিক আপস্কেল করা ছবি। ঠিক। INN ব্যবহার করে 50% সংকুচিত EDSR মডেল।


মডেল

আকার FP16

FPS RTX A4000

পিএসএনআর

EDSR মূল।

75 এমবি

170

30.65

INN EDSR 30%

52 এমবি

230

30.43

INN EDSR 40%

45 এমবি

270

30.34

INN EDSR 50%

37 এমবি

320

30.25

উপসংহার

এই নিবন্ধে, আমরা CVPR2023 পুরষ্কার প্রার্থীর কাগজের একটি ওভারভিউ উপস্থাপন করেছি, "ইন্টিগ্রাল নিউরাল নেটওয়ার্কস"। এটি 4x EDSR মডেলের প্রশিক্ষণ-পরবর্তী ছাঁটাইয়ের জন্য প্রয়োগ করা হয়েছিল, কোডের একক লাইন এবং ইন্টিগ্রেশন গ্রিডের 1-মিনিট ফাইন-টিউনিং সহ প্রায় 2x গতি অর্জন করে।


আমাদের ভবিষ্যতের নিবন্ধগুলিতে, আমরা INN-এর আরও অ্যাপ্লিকেশন উপস্থাপন করব এবং দক্ষ মডেল স্থাপনার বিষয়ে আরও বিশদ কভার করব। সাথে থাকুন:


INN প্রকল্প সাইট

INN প্রকল্প Github

এই নিবন্ধের সমর্থন কোড


আপনার মনোযোগের জন্য আপনাকে ধন্যবাদ!


এছাড়াও এখানে প্রকাশিত.