आधीच्या विभागात आपण फेडरेटेड लर्निंगचा (Federated Learning) वापर करून बनावट मॉडेलला प्रशिक्षण दिले. आपण आपल्या मॉडेलवर .send () आणि .get () वर करून, प्रशिक्षण डेटाच्या ठिकाणी पाठवून, अद्यतनित करुन आणि परत आणून हे केले. तथापि, उदाहरणाच्या शेवटी आपल्याला हे समजले की लोकांच्या गोपनीयतेचे रक्षण करण्यासाठी आपल्याला अजून थोडे पुढे जाणे आवश्यक आहे. म्हणजेच .get () कॉल करण्यापूर्वी आपल्याला क्रमांकाची (average gradient)सरासरी पाहिजे आहे. अशा प्रकारे, आपण कोणाचेही नेमका ग्रेडियंट (Gradient) कधीच पाहणार नाही (अशा प्रकारे त्यांच्या गोपनीयतेचे रक्षण करणे अधिक चांगले !!!)
परंतु हे करण्यासाठी आम्हाला आणखी काही माहिती आवश्यक आहेतः
आणि याव्यतिरिक्त, आपण येथे असताना आपण आणखी काही प्रगत टेन्सर (Tensor) ऑपरेशन्सबद्दल जाणून घेणार आहोत जे या उदाहरणात आणि भविष्यात काही मदत करेल!
लेखक:
अनुवादक/संपादक:
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
नावाचे टेंसर (Tensor) तयार केले आणि ते Bob ला पाठविले, आपल्या स्थानिक मशीनवर पॉईंटर (Pointer) तयार करून (x_ptr
).
त्यानंतर, आम्ही x_ptr.send(alice)
कॉल केला ज्याने Alice ला पॉईंटर (Pointer) पाठविला.
टीप, यामुळे डेटा हलला नाही! त्याऐवजी, त्याने डेटाकडे पॉईंटर (Pointer)हलविला !!
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 () ऑपरेशन कॉल केले तेव्हा त्या ऑपरेशनला आपल्या स्थानिक मशीनवरील टेन्सरवर थेट कॉल केले. तथापि, आपल्याकडे पॉइंटर्सची (Pointers) साखळी असल्यास, कधीकधी तुम्हाला साखळीच्या शेवटच्या पॉईंटरवर .get () किंवा .send () सारख्या ऑपरेशन्सवर कॉल करायचा असतो (जसे की एका कामगारांकडून (Worker) थेट दुसर्या कामगाराकडे (Worker) डेटा पाठवणे). हे साध्य करण्यासाठी, आपण विशेषत: या गोपनीयता संरक्षित ऑपरेशनसाठी तयार केलेली कार्ये वापरू इच्छित आहात.
ते ऑपरेशन्स आहेतः
my_pointer2pointer.move(another_worker)
In [ ]:
# x is now a pointer to 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) करण्यासाठी साधनांनी सुसज्ज आहोत!
हे नोटबुक ट्यूटोरियल पूर्ण केल्याबद्दल अभिनंदन! आपण याचा आनंद घेत असल्यास आणि एआय(AI) आणि एआय सप्लाय चेन (डेटा) च्या विकेंद्रित(Decentralized) मालकीच्या गोपनीयतेच्या संरक्षणाच्या दिशेने चळवळीत सामील होऊ इच्छित असाल तर आपण हे खालील प्रकारे करू शकता!
आमच्या समुदायाला मदत करण्याचा सर्वात सोपा मार्ग म्हणजे फक्त गिटहब(GitHub) रेपो(Repo) तारांकित(Star) करणे! हे आम्ही तयार करीत असलेल्या छान साधनांविषयी जागरूकता वाढविण्यास मदत करते.
नवीनतम प्रगतीवर अद्ययावत राहण्याचा उत्तम मार्ग म्हणजे आमच्या समुदायामध्ये सामील होणे! आपण http://slack.openmined.org येथे फॉर्म भरुन तसे करू शकता.
आमच्या समुदायामध्ये योगदानाचा उत्तम मार्ग म्हणजे कोड योगदानकर्ता बनणे! कोणत्याही वेळी आपण (PySyft GitHub Issues Page) वर जाऊ शकता आणि "Project" साठी फिल्टर करू शकता. हे आपण कोणत्या प्रकल्पांमध्ये सामील होऊ शकता याबद्दल विहंगावलोकन देणारी सर्व उच्च स्तरीय तिकिटे दर्शवेल! आपण एखाद्या प्रकल्पात सामील होऊ इच्छित नसल्यास, परंतु आपण थोडं कोडिंग करू इच्छित असाल तर आपण "good first issues" म्हणून चिन्हांकित गिटहब(GitHub) अंक शोधून आणखी "one off" मिनी-प्रकल्प(mini project) शोधू शकता.
आपल्याकडे आमच्या कोडेबेसमध्ये योगदान देण्यास वेळ नसल्यास, परंतु तरीही आपल्याला समर्थन द्यावयाचे असल्यास आपण आमच्या मुक्त संग्रहात बॅकर देखील होऊ शकता. सर्व देणगी आमच्या वेब होस्टिंग आणि हॅकॅथॉन आणि मेटअप्स सारख्या इतर सामुदायिक खर्चाकडे जातात!
In [ ]: