শেষ বিভাগে আমরা ফেডারেটেড লার্নিং ব্যবহার করে একটি খেলনা মডেল প্রশিক্ষণ দিয়েছি। আমরা এটি করেছি আমাদের মডেলের উপর .send() এবং .get() কল করে, এটিকে প্রশিক্ষণ ডেটার অবস্থানটিতে প্রেরণ করে, এটি আপডেট করে এবং তারপরে ফিরিয়ে আনা। তবে উদাহরণটির শেষে আমরা বুঝতে পেরেছিলাম যে মানুষের গোপনীয়তা রক্ষা করতে আমাদের আরও কিছুটা এগিয়ে যাওয়া দরকার। যথা- আমরা .get() কল করার পূর্বে গ্রেডিয়েন্টগুলি গড় করতে চাই। এইভাবে, আমরা কখনই কারোর সঠিক গ্রেডিয়েন্টটি দেখতে পাবো না (এভাবে তাদের গোপনীয়তা রক্ষা করা আরও ভাল !!!
তবে এটি করার জন্য আমাদের আরও কয়েকটি টুকরো দরকার:
এছাড়াও, আমরা এখানে থাকাকালীন আমরা আরও কয়েকটি উন্নত টেনসর অপারেশন সম্পর্কে শিখতে যা এই উদাহরণ এবং ভবিষ্যতে আমাদের দু'জনকেই সহায়তা করবে!
Authors:
অনুবাদক:
In [ ]:
import torch
import syft as sy
hook = sy.TorchHook(torch)
In [ ]:
bob = sy.VirtualWorker(hook, id='bob')
alice = sy.VirtualWorker(hook, id='alice')
In [ ]:
# this is a local tensor
x = torch.tensor([1,2,3,4])
x
In [ ]:
# this sends the local tensor to Bob
x_ptr = x.send(bob)
# this is now a pointer
x_ptr
In [ ]:
# now we can SEND THE POINTER to alice!!!
pointer_to_x_ptr = x_ptr.send(alice)
pointer_to_x_ptr
সুতরাং, পূর্ববর্তী উদাহরণে আমরা x
নামক একটি টেন্সর তৈরি করেছি এবং এটি Bob-কে প্রেরণ করি। আমাদের স্থানীয় মেশিনে একটি পয়েন্টার তৈরি করি (x_ptr
)
তারপরে, আমরা x_ptr.send(alice)
-কে কল করি, যেটি Alice কে পয়েন্টারটি পাঠিয়ে দিয়েছে
বিঃদ্রঃ এটি তথ্য সরায়নি! পরিবর্তে, এটি ডেটাতে পয়েন্টার সরিয়েছে
In [ ]:
# As you can see above, Bob still has the actual data (data is always stored in a LocalTensor type).
bob._objects
In [ ]:
# Alice, on the other hand, has x_ptr!! (notice how it points at bob)
alice._objects
In [ ]:
# and we can use .get() to get x_ptr back from Alice
x_ptr = pointer_to_x_ptr.get()
x_ptr
In [ ]:
# and then we can use x_ptr to get x back from Bob!
x = x_ptr.get()
x
In [ ]:
bob._objects
In [ ]:
alice._objects
In [ ]:
p2p2x = torch.tensor([1,2,3,4,5]).send(bob).send(alice)
y = p2p2x + p2p2x
In [ ]:
bob._objects
In [ ]:
alice._objects
In [ ]:
y.get().get()
In [ ]:
bob._objects
In [ ]:
alice._objects
In [ ]:
p2p2x.get().get()
In [ ]:
bob._objects
In [ ]:
alice._objects
সুতরাং, শেষ বিভাগে যখনই আমরা .send() অথবা .get() অপারেশনকে কল করেছি, এটি আমাদের স্থানীয় মেশিনে সরাসরি টেনসরের সেই অপারেশনটিকে কল করতো। যাইহোক, যদি আপনার পয়েন্টারগুলির একটি শৃঙ্খল(chain) থাকে তবে কখনও কখনও আপনি চেইনের শেষ পয়েন্টারে .get() অথবা .send() জাতীয় অপারেশনগুলিকে কল করতে চান(যেমন সরাসরি একজন শ্রমিকের কাছ থেকে অন্য শ্রমিকের কাছে ডেটা প্রেরণ). এটি সম্পাদন করার জন্য, আপনি বিশেষ করে এই গোপনীয়তা সংরক্ষণের জন্য পরিচালিত ফাংশনগুলি ব্যবহার করতে চান।
এই অপারেশনগুলি হলো:
my_pointer2pointer.move(another_worker)
In [ ]:
# x is now a pointer to the data which lives on Bob's machine
x = torch.tensor([1,2,3,4,5]).send(bob)
In [ ]:
print(' bob:', bob._objects)
print('alice:',alice._objects)
In [ ]:
x = x.move(alice)
In [ ]:
print(' bob:', bob._objects)
print('alice:',alice._objects)
In [ ]:
x
অসাধারণ! এখন আমরা একটি বিশ্বস্ত অ্যাগ্রিগেটর ব্যবহার করে রিমোট gradient averaging সঞ্চালনের জন্য প্রয়োজনীয় সরঞ্জামগুলি দিয়ে সজ্জিত।
এই নোটবুক টিউটোরিয়ালটি সম্পন্ন করার জন্য অভিনন্দন! আপনি যদি এটি উপভোগ করেন এবং গোপনীয়তা সংরক্ষণ, এআই এবং এআই সরবরাহ চেইনের (ডেটা) বিকেন্দ্রীভূত মালিকানার দিকে আন্দোলনে যোগ দিতে চান, আপনি নিম্নলিখিত উপায়ে এটি করতে পারেন
আমাদের সম্প্রদায়কে সাহায্য করার সবচেয়ে সহজ উপায় হলো রিপোসিটোরি গুলোতে ষ্টার করা। এটি আমরা যে অসাধারণ সরঞ্জামগুলি তৈরি করছি তার সচেতনতা বাড়াতে সহায়তা করে।
সর্বশেষতম অগ্রগতিতে আপ টু ডেট রাখার সর্বোত্তম উপায় হল আমাদের সম্প্রদায়ে যোগদান করা! আপনি ফর্মটি পূরণ করে এটি করতে পারেন
আমাদের সম্প্রদায়ে অবদান রাখার সর্বোত্তম উপায় হলো কোড অবদানকারী হয়ে উঠুন। যে কোনও সময় আপনি পাইসাইফ্ট গিটহাবে ইস্যু পৃষ্ঠাতে যেতে পারেন এবং "প্রকল্পগুলি" এর জন্য ফিল্টার করতে পারেন। এটি আপনাকে শীর্ষ স্তরের সমস্ত টিকিট দেখিয়ে দেবে যে আপনি কোন প্রকল্পগুলিতে যোগদান করতে পারেন তার একটি ওভারভিউ দেয়! আপনি যদি কোনও প্রকল্পে যোগ দিতে না চান তবে আপনি কিছুটা কোডিং করতে চান তবে আপনি "ভাল প্রথম ইস্যু" চিহ্নিত গিটহাব ইস্যুগুলি অনুসন্ধান করে আরও "ওয়ান অফ" মিনি-প্রকল্পগুলির সন্ধান করতে পারেন।
আপনার যদি আমাদের কোডবেসে অবদান রাখার সময় না থাকে তবে তবুও সমর্থন দিতে চান, আপনি আমাদের ওপেন কালেক্টিভেরও Backer হয়ে উঠতে পারেন। সমস্ত অনুদান আমাদের ওয়েব হোস্টিং এবং অন্যান্য সম্প্রদায় ব্যয় যেমন হ্যাকাথনস এবং মেটআপগুলির (hackathons and meetups!) দিকে যায় OpenMined's Open Collective Page
In [ ]: