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

তুমি কি শিখবে
- কীভাবে এমন একটি পরিবেশ তৈরি করা যায় যেখানে এক পক্ষ তার মেধা সম্পত্তির উপর নিয়ন্ত্রণ না হারিয়ে অন্য পক্ষের সাথে তার মালিকানাধীন ML মডেল ভাগ করে নিতে পারে।
তোমার যা লাগবে
- একটি গুগল ক্লাউড প্ল্যাটফর্ম প্রকল্প
- গুগল কম্পিউট ইঞ্জিন ( কোডল্যাব ), গোপনীয় ভিএম , কন্টেইনার এবং রিমোট রিপোজিটরি সম্পর্কে প্রাথমিক জ্ঞান।
- সার্ভিস অ্যাকাউন্ট , ওয়ার্কলোড আইডেন্টিটি ফেডারেশন এবং অ্যাট্রিবিউট শর্তাবলী সম্পর্কে প্রাথমিক জ্ঞান।
গোপনীয় স্থান স্থাপনে জড়িত ভূমিকা
এই কোডল্যাবে, কোম্পানি প্রাইমাস রিসোর্স মালিক এবং ওয়ার্কলোড লেখক হবে, যা নিম্নলিখিতগুলির জন্য দায়ী থাকবে:
- একটি মেশিন লার্নিং মডেলের সাহায্যে প্রয়োজনীয় ক্লাউড রিসোর্স সেট আপ করা
- ওয়ার্কলোড কোড লেখা
- কাজের চাপের ছবি প্রকাশ করা হচ্ছে
- অবিশ্বস্ত অপারেটরের বিরুদ্ধে ML মডেলকে সুরক্ষিত করার জন্য ওয়ার্কলোড আইডেন্টিটি পুল নীতি কনফিগার করা
সেকান্ডাস কোম্পানি পরিচালনা করবে এবং এর জন্য দায়ী থাকবে:
- কাজের চাপ এবং ফলাফল দ্বারা ব্যবহৃত নমুনা চিত্র সংরক্ষণের জন্য প্রয়োজনীয় ক্লাউড রিসোর্স সেট আপ করা
- প্রাইমাস কর্তৃক প্রদত্ত মডেল ব্যবহার করে কনফিডেনশিয়াল স্পেসে ML ওয়ার্কলোড চালানো
গোপন স্থান কীভাবে কাজ করে
যখন আপনি Confidential Space-এ ওয়ার্কলোড চালান, তখন কনফিগার করা রিসোর্স ব্যবহার করে নিম্নলিখিত প্রক্রিয়াটি সম্পন্ন হয়:
- ওয়ার্কলোড
$PRIMUS_SERVICEACCOUNTএর জন্য ওয়ার্কলোড আইডেন্টিটি পুল থেকে একটি সাধারণ গুগল অ্যাক্সেস টোকেনের অনুরোধ করে। এটি ওয়ার্কলোড এবং পরিবেশগত দাবি সহ একটি অ্যাটেস্টেশন ভেরিফায়ার পরিষেবা টোকেন অফার করে। - যদি অ্যাটেস্টেশন ভেরিফায়ার সার্ভিস টোকেনে থাকা ওয়ার্কলোড পরিমাপের দাবিগুলি WIP-তে থাকা অ্যাট্রিবিউট শর্তের সাথে মিলে যায়, তাহলে এটি
$PRIMUS_SERVICEACCOUNT. -
$PRIMUS_INPUT_STORAGE_BUCKETবাকেটে সংরক্ষিত মেশিন লার্নিং মডেল অ্যাক্সেস করার জন্য ওয়ার্কলোড$PRIMUS_SERVICEACCOUNTএর সাথে সম্পর্কিত পরিষেবা অ্যাকাউন্ট অ্যাক্সেস টোকেন ব্যবহার করে। - ওয়ার্কলোড সেকান্ডাসের মালিকানাধীন ডেটার উপর একটি অপারেশন করে এবং সেই ওয়ার্কলোডটি সেকান্ডাস তার প্রকল্পে পরিচালিত এবং পরিচালিত করে।
- ওয়ার্কলোড
$WORKLOAD_SERVICEACCOUNTপরিষেবা অ্যাকাউন্ট ব্যবহার করে$SECUNDUS_RESULT_STORAGE_BUCKETবাকেটে সেই অপারেশনের ফলাফল লেখার জন্য।
2. ক্লাউড রিসোর্স সেট আপ করুন
শুরু করার আগে
- এই কোডল্যাবের অংশ হিসেবে ব্যবহৃত প্রয়োজনীয় স্ক্রিপ্টগুলি পেতে নীচের কমান্ডটি ব্যবহার করে এই সংগ্রহস্থলটি ক্লোন করুন।
git clone https://github.com/GoogleCloudPlatform/confidential-space.git
- এই কোডল্যাবের ডিরেক্টরি পরিবর্তন করুন।
cd confidential-space/codelabs/ml_model_protection/scripts
- নিশ্চিত করুন যে আপনি নীচে দেখানো প্রয়োজনীয় প্রকল্প পরিবেশ ভেরিয়েবল সেট করেছেন। একটি GCP প্রকল্প সেট আপ করার বিষয়ে আরও তথ্যের জন্য, অনুগ্রহ করে এই কোডল্যাবটি দেখুন। প্রকল্প আইডি কীভাবে পুনরুদ্ধার করবেন এবং এটি কীভাবে প্রকল্পের নাম এবং প্রকল্প নম্বর থেকে আলাদা, সে সম্পর্কে বিস্তারিত জানতে আপনি এটি দেখতে পারেন।
export PRIMUS_PROJECT_ID=<GCP project id of Primus>
export SECUNDUS_PROJECT_ID=<GCP project id of Secundus>
- আপনার প্রকল্পের জন্য বিলিং সক্ষম করুন ।
- উভয় প্রকল্পের জন্য গোপনীয় কম্পিউটিং API এবং নিম্নলিখিত API গুলি সক্ষম করুন।
gcloud services enable \
cloudapis.googleapis.com \
cloudresourcemanager.googleapis.com \
cloudshell.googleapis.com \
container.googleapis.com \
containerregistry.googleapis.com \
iam.googleapis.com \
confidentialcomputing.googleapis.com
- উপরে উল্লেখিত রিসোর্স নামের জন্য ভেরিয়েবলগুলিতে মান নির্ধারণ করুন নিম্নলিখিত কমান্ড ব্যবহার করে। এই ভেরিয়েবলগুলি আপনাকে প্রয়োজন অনুসারে রিসোর্স নামগুলি কাস্টমাইজ করতে এবং বিদ্যমান রিসোর্সগুলি যদি ইতিমধ্যেই তৈরি করা থাকে তবে তা ব্যবহার করার অনুমতি দেয়। (যেমন
export PRIMUS_INPUT_STORAGE_BUCKET='my-input-bucket')
- প্রাইমাস প্রজেক্টে বিদ্যমান ক্লাউড রিসোর্স নামের সাথে আপনি নিম্নলিখিত ভেরিয়েবলগুলি সেট করতে পারেন। যদি ভেরিয়েবলটি সেট করা থাকে, তাহলে প্রাইমাস প্রজেক্ট থেকে সংশ্লিষ্ট বিদ্যমান ক্লাউড রিসোর্স ব্যবহার করা হবে। যদি ভেরিয়েবলটি সেট না করা থাকে, তাহলে প্রোজেক্ট-নাম থেকে ক্লাউড রিসোর্স নাম তৈরি করা হবে এবং সেই নামে নতুন ক্লাউড-রিসোর্স তৈরি করা হবে। রিসোর্স নামের জন্য সমর্থিত ভেরিয়েবলগুলি নিম্নরূপ:
| প্রাইমাসের মেশিন লার্নিং মডেল সংরক্ষণকারী বালতি। |
| প্রাইমাসের ওয়ার্কলোড আইডেন্টিটি পুল (WIP) যা দাবি যাচাই করে। |
| প্রাইমাসের ওয়ার্কলোড আইডেন্টিটি পুল প্রদানকারী যার মধ্যে অ্যাটেস্টেশন ভেরিফায়ার পরিষেবা দ্বারা স্বাক্ষরিত টোকেনের জন্য ব্যবহারের জন্য অনুমোদনের শর্ত অন্তর্ভুক্ত রয়েছে। |
| প্রাইমাস সার্ভিস অ্যাকাউন্ট যা |
| আর্টিফ্যাক্ট রিপোজিটরি যেখানে ওয়ার্কলোড ডকার ইমেজ পুশ করা হবে। |
- Secundus প্রকল্পে বিদ্যমান ক্লাউড রিসোর্স নামের সাথে আপনি নিম্নলিখিত ভেরিয়েবলগুলি সেট করতে পারেন। যদি ভেরিয়েবলটি সেট করা থাকে, তাহলে Secundus প্রকল্পের সংশ্লিষ্ট বিদ্যমান ক্লাউড রিসোর্স ব্যবহার করা হবে। যদি ভেরিয়েবলটি সেট না করা থাকে, তাহলে প্রকল্প-নাম থেকে ক্লাউড রিসোর্স নাম তৈরি করা হবে এবং সেই নামে একটি নতুন ক্লাউড-রিসোর্স তৈরি করা হবে। রিসোর্স নামের জন্য সমর্থিত ভেরিয়েবলগুলি নিম্নরূপ:
| প্রাইমাসের দেওয়া মডেল ব্যবহার করে সেকান্ডাস যে নমুনা ছবিগুলিকে শ্রেণীবদ্ধ করতে চায়, সেই বালতিটি সেই নমুনা ছবিগুলিকে সংরক্ষণ করে। |
| যে বালতিটি কাজের চাপের ফলাফল সংরক্ষণ করে। |
| ওয়ার্কলোড কন্টেইনার ছবির নাম। |
| ওয়ার্কলোড কন্টেইনার ছবির ট্যাগ। |
| যে পরিষেবা অ্যাকাউন্টের গোপনীয় VM অ্যাক্সেস করার অনুমতি রয়েছে যা ওয়ার্কলোড চালায়। |
- এই দুটি প্রকল্পের জন্য আপনার কিছু নির্দিষ্ট অনুমতির প্রয়োজন হবে এবং GCP কনসোল ব্যবহার করে IAM ভূমিকা কীভাবে প্রদান করবেন সে সম্পর্কে আপনি এই নির্দেশিকাটি দেখতে পারেন:
-
$PRIMUS_PROJECT_IDএর জন্য, আপনার স্টোরেজ অ্যাডমিন, আর্টিফ্যাক্ট রেজিস্ট্রি অ্যাডমিনিস্ট্রেটর, সার্ভিস অ্যাকাউন্ট অ্যাডমিন, IAM ওয়ার্কলোড আইডেন্টিটি পুল অ্যাডমিনের প্রয়োজন হবে। -
$SECUNDUS_PROJECT_IDএর জন্য, আপনার কম্পিউট অ্যাডমিন, স্টোরেজ অ্যাডমিন, সার্ভিস অ্যাকাউন্ট অ্যাডমিন, IAM ওয়ার্কলোড আইডেন্টিটি পুল অ্যাডমিন, সিকিউরিটি অ্যাডমিন (ঐচ্ছিক) প্রয়োজন হবে। - আপনার প্রোজেক্ট আইডির উপর ভিত্তি করে রিসোর্স নামের জন্য অবশিষ্ট ভেরিয়েবলের নামগুলি মানগুলিতে সেট করতে নিম্নলিখিত স্ক্রিপ্টটি চালান।
source config_env.sh
প্রাইমাস কোম্পানির রিসোর্স সেট আপ করুন
এই ধাপের অংশ হিসেবে, আপনি প্রাইমাসের জন্য প্রয়োজনীয় ক্লাউড রিসোর্স সেট আপ করবেন। প্রাইমাসের জন্য রিসোর্স সেট আপ করতে নিম্নলিখিত স্ক্রিপ্টটি চালান। স্ক্রিপ্ট এক্সিকিউশনের অংশ হিসেবে নিম্নলিখিত রিসোর্স তৈরি করা হবে:
- প্রাইমাসের মেশিন লার্নিং মডেল সংরক্ষণের জন্য ক্লাউড স্টোরেজ বাকেট (
$PRIMUS_INPUT_STORAGE_BUCKET)। - ওয়ার্কলোড আইডেন্টিটি পুল (
$PRIMUS_WORKLOAD_IDENTITY_POOL) এর প্রোভাইডার দ্বারা কনফিগার করা বৈশিষ্ট্যের শর্তাবলীর উপর ভিত্তি করে দাবি যাচাই করার জন্য। - উপরে উল্লিখিত ওয়ার্কলোড আইডেন্টিটি পুলের (
$PRIMUS_WORKLOAD_IDENTITY_POOL) সাথে সংযুক্ত পরিষেবা অ্যাকাউন্ট ($PRIMUS_SERVICEACCOUNT) ক্লাউড স্টোরেজ বাকেট থেকে ডেটা পড়ার জন্য IAM অ্যাক্সেস সহ (objectViewerভূমিকা ব্যবহার করে) এবং এই পরিষেবা অ্যাকাউন্টটিকে ওয়ার্কলোড আইডেন্টিটি পুলের সাথে সংযুক্ত করার জন্য (roles/iam.workloadIdentityUserভূমিকা ব্যবহার করে)।
এই ক্লাউড রিসোর্স সেটআপের অংশ হিসেবে, আমরা একটি TensorFlow মডেল ব্যবহার করব। আমরা মডেলের আর্কিটেকচার, ওজন এবং প্রশিক্ষণ কনফিগারেশন সহ সম্পূর্ণ মডেলটি একটি ZIP আর্কাইভে সংরক্ষণ করতে পারি। এই কোডল্যাবের উদ্দেশ্যে, আমরা এখানে পাওয়া ImageNet ডেটাসেটে প্রশিক্ষিত MobileNet V1 মডেলটি ব্যবহার করব।
./setup_primus_company_resources.sh
উপরে উল্লিখিত স্ক্রিপ্টটি ক্লাউড রিসোর্স সেট আপ করবে, আমরা এখন স্ক্রিপ্ট দ্বারা তৈরি ক্লাউড স্টোরেজ বাকেটে মডেলটি ডাউনলোড করে প্রকাশ করব।
- এখান থেকে প্রাক-প্রশিক্ষিত মডেলটি ডাউনলোড করুন।
- ডাউনলোড হয়ে গেলে, ডাউনলোড করা tar ফাইলটির নাম পরিবর্তন করে model.tar.gz রাখুন।
- model.tar.gz ফাইল ধারণকারী ডিরেক্টরি থেকে নিম্নলিখিত কমান্ড ব্যবহার করে model.tar.gz ফাইলটি ক্লাউড স্টোরেজ বাকেটে প্রকাশ করুন।
gsutil cp model.tar.gz gs://${PRIMUS_INPUT_STORAGE_BUCKET}/
Secundus কোম্পানির সংস্থান সেট আপ করুন
এই ধাপের অংশ হিসেবে, আপনি Secundus-এর জন্য প্রয়োজনীয় ক্লাউড রিসোর্স সেট আপ করবেন। Secundus-এর জন্য রিসোর্স সেট আপ করতে নিম্নলিখিত স্ক্রিপ্টটি চালান। এই ধাপের অংশ হিসেবে নিম্নলিখিত রিসোর্স তৈরি করা হবে:
- Secundus দ্বারা ইনফারেন্স চালানোর জন্য নমুনা ছবি সংরক্ষণ করার জন্য ক্লাউড স্টোরেজ বাকেট (
$SECUNDUS_INPUT_STORAGE_BUCKET)। - Secundus দ্বারা ML ওয়ার্কলোড এক্সিকিউশনের ফলাফল সংরক্ষণ করার জন্য ক্লাউড স্টোরেজ বাকেট (
$SECUNDUS_RESULT_STORAGE_BUCKET)।
এই কোডল্যাবের জন্য কিছু নমুনা ছবি এখানে উপলব্ধ করা হয়েছে।
./setup_secundus_company_resources.sh
৩. কাজের চাপ তৈরি করুন
ওয়ার্কলোড পরিষেবা অ্যাকাউন্ট তৈরি করুন
এখন, আপনি প্রয়োজনীয় ভূমিকা এবং অনুমতি সহ ওয়ার্কলোডের জন্য একটি পরিষেবা অ্যাকাউন্ট তৈরি করবেন। Secundus প্রকল্পে একটি ওয়ার্কলোড পরিষেবা অ্যাকাউন্ট তৈরি করতে নিম্নলিখিত স্ক্রিপ্টটি চালান। এই পরিষেবা অ্যাকাউন্টটি ML ওয়ার্কলোড চালানো VM দ্বারা ব্যবহৃত হবে।
এই ওয়ার্কলোড সার্ভিস-অ্যাকাউন্ট ( $WORKLOAD_SERVICEACCOUNT ) এর নিম্নলিখিত ভূমিকা থাকবে:
-
confidentialcomputing.workloadUserএকটি প্রত্যয়ন টোকেন পাবেন - ক্লাউড লগিং-এ লগ লেখার জন্য
logging.logWriter। -
$SECUNDUS_INPUT_STORAGE_BUCKETক্লাউড স্টোরেজ বাকেট থেকে ডেটা পড়ার জন্যobjectViewer। -
$SECUNDUS_RESULT_STORAGE_BUCKETক্লাউড স্টোরেজ বাকেটে কাজের চাপের ফলাফল লেখার জন্যobjectUser।
./create_workload_service_account.sh
কাজের চাপ তৈরি করুন
এই ধাপের অংশ হিসেবে, আপনি একটি ওয়ার্কলোড ডকার ইমেজ তৈরি করবেন। ওয়ার্কলোড প্রাইমাস দ্বারা লিখিত হবে। এই কোডল্যাবে ব্যবহৃত ওয়ার্কলোড হল মেশিন লার্নিং পাইথন কোড যা প্রাইমাসের স্টোরেজ বাকেটে সংরক্ষিত ML মডেল অ্যাক্সেস করে এবং স্টোরেজ বাকেটে সংরক্ষিত নমুনা চিত্রগুলির সাথে অনুমান চালায়।
প্রাইমাসের স্টোরেজ বাকেটে সংরক্ষিত মেশিন লার্নিং মডেলটি কেবলমাত্র প্রয়োজনীয় বৈশিষ্ট্যের শর্ত পূরণকারী ওয়ার্কলোডের মাধ্যমেই অ্যাক্সেসযোগ্য হবে। এই বৈশিষ্ট্যের শর্তগুলি ওয়ার্কলোড অনুমোদন সম্পর্কে পরবর্তী বিভাগে আরও বিশদে বর্ণনা করা হয়েছে।
এই কোডল্যাবে তৈরি এবং ব্যবহৃত ওয়ার্কলোডের run_inference() পদ্ধতিটি এখানে দেওয়া হল। আপনি সম্পূর্ণ ওয়ার্কলোড কোডটি এখানে পাবেন।
def run_inference(image_path, model):
try:
# Read and preprocess the image
image = tf.image.decode_image(tf.io.read_file(image_path), channels=3)
image = tf.image.resize(image, (128, 128))
image = tf.image.convert_image_dtype(image, tf.float32)
image = tf.expand_dims(image, axis=0)
# Get predictions from the model
predictions = model(image)
predicted_class = np.argmax(predictions)
top_k = 5
top_indices = np.argsort(predictions[0])[-top_k:][::-1]
# Convert top_indices to a TensorFlow tensor
top_indices_tensor = tf.convert_to_tensor(top_indices, dtype=tf.int32)
# Use TensorFlow tensor for indexing
top_scores = tf.gather(predictions[0], top_indices_tensor)
return {
"predicted_class": int(predicted_class),
"top_k_predictions": [
{"class_index": int(idx), "score": float(score)}
for idx, score in zip(top_indices, top_scores)
],
}
except Exception as e:
return {"error": str(e)}
নিম্নলিখিত স্ক্রিপ্টটি চালান যাতে একটি ওয়ার্কলোড তৈরি করা হয় যেখানে নিম্নলিখিত পদক্ষেপগুলি সম্পাদন করা হচ্ছে:
- প্রাইমাসের মালিকানাধীন আর্টিফ্যাক্ট রেজিস্ট্রি (
$PRIMUS_ARTIFACT_REGISTRY) তৈরি করুন। - প্রয়োজনীয় রিসোর্সের নাম সহ ওয়ার্কলোড কোড আপডেট করুন।
- ML ওয়ার্কলোড তৈরি করুন এবং ওয়ার্কলোড কোডের একটি ডকার ইমেজ তৈরি করার জন্য Dockerfile তৈরি করুন। এই কোডল্যাবের জন্য ব্যবহৃত Dockerfileটি এখানে ।
- প্রাইমাসের মালিকানাধীন আর্টিফ্যাক্ট রেজিস্ট্রিতে (
$PRIMUS_ARTIFACT_REGISTRY) ডকার ইমেজ তৈরি এবং প্রকাশ করুন। -
$PRIMUS_ARTIFACT_REGISTRYএর জন্য$WORKLOAD_SERVICEACCOUNTপড়ার অনুমতি দিন। আর্টিফ্যাক্ট রেজিস্ট্রি থেকে ওয়ার্কলোড ডকার ইমেজ টেনে আনার জন্য ওয়ার্কলোড কন্টেইনারের জন্য এটি প্রয়োজন।
./create_workload.sh
অতিরিক্তভাবে, মেশিন লার্নিং মডেলটি ব্যবহারের আগে মডেলটির হ্যাশ বা স্বাক্ষর পরীক্ষা করে ওয়ার্কলোডগুলি কোড করা যেতে পারে যাতে এটি নিশ্চিত হয় যে এটি মেশিন লার্নিং মডেলের প্রত্যাশিত সংস্করণটি লোড করছে। এই ধরনের অতিরিক্ত চেকের সুবিধা হল এটি মেশিন লার্নিং মডেলের অখণ্ডতা নিশ্চিত করে। এর সাথে, ওয়ার্কলোড অপারেটরকে ওয়ার্কলোড চিত্র বা এর পরামিতিগুলি আপডেট করতে হবে যখন ওয়ার্কলোড ML মডেলের বিভিন্ন সংস্করণ ব্যবহার করার আশা করা হচ্ছে।
৪. কাজের চাপ অনুমোদন এবং চালান
কাজের চাপ অনুমোদন করুন
প্রাইমাস নিম্নলিখিত রিসোর্সের বৈশিষ্ট্যের উপর ভিত্তি করে তাদের মেশিন লার্নিং মডেল অ্যাক্সেস করার জন্য ওয়ার্কলোড অনুমোদন করতে চায়:
- কী : যাচাইকৃত কোড
- কোথায় : নিরাপদ পরিবেশ
- কে : বিশ্বস্ত অপারেটর
প্রাইমাস এই প্রয়োজনীয়তাগুলির উপর ভিত্তি করে একটি অ্যাক্সেস নীতি প্রয়োগ করার জন্য ওয়ার্কলোড আইডেন্টিটি ফেডারেশন ব্যবহার করে। ওয়ার্কলোড আইডেন্টিটি ফেডারেশন আপনাকে অ্যাট্রিবিউট শর্তাবলী নির্দিষ্ট করার অনুমতি দেয়। এই শর্তাবলী ওয়ার্কলোড আইডেন্টিটি পুল (WIP) এর সাথে কোন পরিচয়গুলি প্রমাণীকরণ করতে পারে তা সীমাবদ্ধ করে। পরিমাপ উপস্থাপন এবং নীতি প্রয়োগ করার জন্য আপনি ওয়ার্কলোড আইডেন্টিটি পুল প্রদানকারী হিসাবে WIP-তে অ্যাটেস্টেশন ভেরিফায়ার পরিষেবা যুক্ত করতে পারেন।
ক্লাউড রিসোর্স সেটআপ ধাপের অংশ হিসেবে ওয়ার্কলোড আইডেন্টিটি পুলটি আগেই তৈরি করা হয়েছিল। এখন প্রাইমাস একটি নতুন OIDC ওয়ার্কলোড আইডেন্টিটি পুল প্রোভাইডার তৈরি করবে। নির্দিষ্ট --attribute-condition ওয়ার্কলোড কন্টেইনারে অ্যাক্সেস অনুমোদন করে। এর জন্য প্রয়োজন:
- কী :
$PRIMUS_ARTIFACT_REPOSITORYসংগ্রহস্থলে আপলোড করা সর্বশেষ$WORKLOAD_IMAGE_NAME। - কোথায় : সম্পূর্ণরূপে সমর্থিত কনফিডেনশিয়াল স্পেস ভিএম ছবিতে কনফিডেনশিয়াল স্পেস বিশ্বস্ত এক্সিকিউশন এনভায়রনমেন্ট চলছে।
- কে :
$WORKLOAD_SERVICE_ACCOUNTপরিষেবা অ্যাকাউন্টের মাধ্যমে।
export WORKLOAD_IMAGE_DIGEST=$(gcloud artifacts docker images describe ${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/$PRIMUS_PROJECT_ID/$PRIMUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG --format="value(image_summary.digest)" --project ${PRIMUS_PROJECT_ID})
gcloud config set project $PRIMUS_PROJECT_ID
gcloud iam workload-identity-pools providers create-oidc $PRIMUS_WIP_PROVIDER \
--location="global" \
--workload-identity-pool="$PRIMUS_WORKLOAD_IDENTITY_POOL" \
--issuer-uri="https://confidentialcomputing.googleapis.com/" \
--allowed-audiences="https://sts.googleapis.com" \
--attribute-mapping="google.subject='assertion.sub'" \
--attribute-condition="assertion.swname == 'CONFIDENTIAL_SPACE' &&
'STABLE' in assertion.submods.confidential_space.support_attributes &&
assertion.submods.container.image_digest == '${WORKLOAD_IMAGE_DIGEST}' &&
assertion.submods.container.image_reference == '${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/$PRIMUS_PROJECT_ID/$PRIMUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG' &&
'$WORKLOAD_SERVICEACCOUNT@$SECUNDUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts"
কাজের চাপ চালান
এই ধাপের অংশ হিসেবে, আমরা Confidential Space VM-এ ওয়ার্কলোড চালাবো। প্রয়োজনীয় TEE আর্গুমেন্টগুলি মেটাডেটা ফ্ল্যাগ ব্যবহার করে পাস করা হয়। ওয়ার্কলোড কন্টেইনারের আর্গুমেন্টগুলি ফ্ল্যাগের " tee-cmd " অংশ ব্যবহার করে পাস করা হয়। ওয়ার্কলোড এক্সিকিউশনের ফলাফল $SECUNDUS_RESULT_STORAGE_BUCKET এ প্রকাশিত হবে।
gcloud compute instances create ${WORKLOAD_VM} \
--confidential-compute-type=SEV \
--shielded-secure-boot \
--project=${SECUNDUS_PROJECT_ID} \
--maintenance-policy=MIGRATE \
--scopes=cloud-platform --zone=${SECUNDUS_PROJECT_ZONE} \
--image-project=confidential-space-images \
--image-family=confidential-space \
--service-account=${WORKLOAD_SERVICEACCOUNT}@${SECUNDUS_PROJECT_ID}.iam.gserviceaccount.com \
--metadata ^~^tee-image-reference=${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/${PRIMUS_PROJECT_ID}/${PRIMUS_ARTIFACT_REPOSITORY}/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG}
ফলাফল দেখুন
ওয়ার্কলোড সফলভাবে সম্পন্ন হওয়ার পর, ML ওয়ার্কলোডের ফলাফল $SECUNDUS_RESULT_STORAGE_BUCKET এ প্রকাশিত হবে।
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/result
নমুনা চিত্রগুলিতে অনুমানের ফলাফল কেমন হতে পারে তার কিছু উদাহরণ এখানে দেওয়া হল:
Image: sample_image_1.jpeg, Response: {'predicted_class': 531, 'top_k_predictions': [{'class_index': 531, 'score': 12.08437442779541}, {'class_index': 812, 'score': 10.269512176513672}, {'class_index': 557, 'score': 9.202644348144531}, {'class_index': 782, 'score': 9.08737564086914}, {'class_index': 828, 'score': 8.912498474121094}]}
Image: sample_image_2.jpeg, Response: {'predicted_class': 905, 'top_k_predictions': [{'class_index': 905, 'score': 9.53619384765625}, {'class_index': 557, 'score': 7.928380966186523}, {'class_index': 783, 'score': 7.70129919052124}, {'class_index': 531, 'score': 7.611623287200928}, {'class_index': 906, 'score': 7.021416187286377}]}
Image: sample_image_3.jpeg, Response: {'predicted_class': 905, 'top_k_predictions': [{'class_index': 905, 'score': 6.09878396987915}, {'class_index': 447, 'score': 5.992854118347168}, {'class_index': 444, 'score': 5.9582319259643555}, {'class_index': 816, 'score': 5.502010345458984}, {'class_index': 796, 'score': 5.450454235076904}]}
Secundus স্টোরেজ বাকেটের প্রতিটি নমুনা ছবির জন্য, আপনি ফলাফলে একটি এন্ট্রি দেখতে পাবেন। এই এন্ট্রিতে দুটি গুরুত্বপূর্ণ তথ্য থাকবে:
- predicted_class এর সূচক: এটি একটি সংখ্যাসূচক সূচক যা মডেলটি যে শ্রেণীর অন্তর্ভুক্ত তা চিত্রটির ভবিষ্যদ্বাণী করে।
- শীর্ষ_কে_পূর্বাভাস: এটি ছবির জন্য k পর্যন্ত পূর্বাভাস প্রদান করে, সর্বাধিক থেকে সর্বনিম্ন সম্ভাব্য পর্যন্ত র্যাঙ্ক করা হয়। এই কোডল্যাবে k এর মান 5 তে সেট করা আছে, তবে আপনি আরও বা কম পূর্বাভাস পেতে ওয়ার্কলোড কোডে এটি সামঞ্জস্য করতে পারেন।
ক্লাস ইনডেক্সকে মানুষের পঠনযোগ্য ক্লাস নামে অনুবাদ করতে, এখানে উপলব্ধ লেবেলের তালিকাটি দেখুন। উদাহরণস্বরূপ, যদি আপনি 2 এর একটি ক্লাস ইনডেক্স দেখতে পান, তবে এটি লেবেল তালিকার "টেনচ" ক্লাস লেবেলের সাথে মিলে যায়।
এই কোডল্যাবে, আমরা দেখিয়েছি যে প্রাইমাসের মালিকানাধীন একটি মডেল যা শুধুমাত্র একটি TEE-তে চলমান কাজের চাপের জন্য প্রকাশিত হয়। Secundus একটি TEE-তে ML কাজের চাপ চালায় এবং এই কাজের চাপ প্রাইমাসের মালিকানাধীন মডেলটি গ্রাস করতে সক্ষম হয় যখন প্রাইমাস মডেলের উপর সম্পূর্ণ নিয়ন্ত্রণ বজায় রাখে।
অননুমোদিত কাজের চাপ চালান
সিকান্ডাস তার নিজস্ব আর্টিফ্যাক্ট রিপোজিটরি থেকে একটি ভিন্ন ওয়ার্কলোড ইমেজ টেনে ওয়ার্কলোড ইমেজ পরিবর্তন করে যা প্রাইমাস দ্বারা অনুমোদিত নয়। প্রাইমাসের ওয়ার্কলোড আইডেন্টিটি পুল শুধুমাত্র ${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/$PRIMUS_PROJECT_ID/$PRIMUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG ওয়ার্কলোড ইমেজ অনুমোদিত করেছে..
কাজের চাপ পুনরায় চালান
যখন Secundus এই নতুন ওয়ার্কলোড ইমেজ দিয়ে মূল ওয়ার্কলোড চালানোর চেষ্টা করবে, তখন এটি ব্যর্থ হবে। ত্রুটিটি দেখতে, মূল ফলাফল ফাইল এবং VM ইনস্ট্যান্সটি মুছে ফেলুন, এবং তারপর আবার ওয়ার্কলোড চালানোর চেষ্টা করুন।
অনুগ্রহ করে নিশ্চিত করুন যে Secundus-এর আর্টিফ্যাক্ট রেজিস্ট্রির অধীনে একটি নতুন ডকার ইমেজ প্রকাশিত হয়েছে (যেমন us-docker.pkg.dev/${SECUNDUS_PROJECT_ID}/custom-image/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG} ) এবং ওয়ার্কলোড সার্ভিস অ্যাকাউন্ট ( $WORKLOAD_SERVICEACCOUNT ) আর্টিফ্যাক্ট রেজিস্ট্রি রিডারকে এই নতুন ওয়ার্কলোড ইমেজটি পড়ার অনুমতি দিয়েছে। এটি নিশ্চিত করার জন্য যে প্রাইমাসের WIP নীতি ওয়ার্কলোড দ্বারা উপস্থাপিত টোকেনটি প্রত্যাখ্যান করার আগে ওয়ার্কলোডটি বেরিয়ে না যায়।
বিদ্যমান ফলাফল ফাইল এবং VM ইনস্ট্যান্স মুছুন
- প্রকল্পটিকে
$SECUNDUS_PROJECT_IDপ্রকল্পে সেট করুন।
gcloud config set project $SECUNDUS_PROJECT_ID
- ফলাফল ফাইলটি মুছে ফেলুন।
gsutil rm gs://$SECUNDUS_RESULT_STORAGE_BUCKET/result
- গোপনীয় VM ইনস্ট্যান্সটি মুছে ফেলুন।
gcloud compute instances delete ${WORKLOAD_VM} --zone=${SECUNDUS_PROJECT_ZONE}
অননুমোদিত ওয়ার্কলোড চালান:
gcloud compute instances create ${WORKLOAD_VM} \
--confidential-compute-type=SEV \
--shielded-secure-boot \
--maintenance-policy=MIGRATE \
--scopes=cloud-platform --zone=${SECUNDUS_PROJECT_ZONE} \
--image-project=confidential-space-images \
--image-family=confidential-space \
--service-account=${WORKLOAD_SERVICEACCOUNT}@${SECUNDUS_PROJECT_ID}.iam.gserviceaccount.com \
--metadata ^~^tee-image-reference=us-docker.pkg.dev/${SECUNDUS_PROJECT_ID}/custom-image/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG}
ত্রুটি দেখুন
কাজের চাপের ফলাফলের পরিবর্তে, আপনি একটি ত্রুটি দেখতে পাবেন ( The given credential is rejected by the attribute condition )।
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/result
৫. পরিষ্কার করা
এই কোডল্যাবের অংশ হিসেবে আমরা যে রিসোর্সগুলি তৈরি করেছি সেগুলি পরিষ্কার করার জন্য এখানে একটি স্ক্রিপ্ট ব্যবহার করা যেতে পারে। এই পরিষ্কারের অংশ হিসেবে, নিম্নলিখিত রিসোর্সগুলি মুছে ফেলা হবে:
- প্রাইমাসের ইনপুট স্টোরেজ বাকেট (
$PRIMUS_INPUT_STORAGE_BUCKET)। - প্রাইমাস সার্ভিস-অ্যাকাউন্ট (
$PRIMUS_SERVICEACCOUNT)। - প্রাইমাসের আর্টিফ্যাক্ট সংগ্রহস্থল (
$PRIMUS_ARTIFACT_REPOSITORY)। - প্রাইমাস ওয়ার্কলোড আইডেন্টিটি পুল (
$PRIMUS_WORKLOAD_IDENTITY_POOL)। - সেকেন্ডাসের ওয়ার্কলোড সার্ভিস অ্যাকাউন্ট (
$WORKLOAD_SERVICEACCOUNT)। - সেকেন্ডাসের ইনপুট স্টোরেজ বালতি (
$SECUNDUS_INPUT_STORAGE_BUCKET)। - কাজের চাপ গণনার উদাহরণ।
- Secundus এর ফলাফল স্টোরেজ বাকেট (
$SECUNDUS_RESULT_STORAGE_BUCKET)।
$ ./cleanup.sh
যদি আপনার অন্বেষণ শেষ হয়ে যায়, তাহলে অনুগ্রহ করে আপনার প্রকল্পটি মুছে ফেলার কথা বিবেচনা করুন।
- ক্লাউড প্ল্যাটফর্ম কনসোলে যান
- আপনি যে প্রকল্পটি বন্ধ করতে চান তা নির্বাচন করুন, তারপর উপরে 'মুছুন' এ ক্লিক করুন: এটি প্রকল্পটি মুছে ফেলার জন্য সময়সূচী করে।
এরপর কী?
এই ধরণের কিছু কোডল্যাব দেখুন...