গোপনীয় স্থান ব্যবহার করে এমএল মডেল এবং বৌদ্ধিক সম্পত্তি সুরক্ষিত করা

1. ওভারভিউ

গোপনীয় স্থান একাধিক পক্ষের মধ্যে সহযোগিতার জন্য একটি নিরাপদ পরিবেশ প্রদান করে। এই কোডল্যাবটি দেখায় কিভাবে কনফিডেন্সিয়াল স্পেস মেশিন লার্নিং মডেলের মতো সংবেদনশীল বৌদ্ধিক সম্পত্তি রক্ষা করতে ব্যবহার করা যেতে পারে।

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

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

5a86c47d935da998.jpeg

আপনি কি শিখবেন

  • কীভাবে একটি পরিবেশ কনফিগার করা যায় যেখানে একটি পক্ষ তার বুদ্ধিবৃত্তিক সম্পত্তির উপর নিয়ন্ত্রণ না হারিয়ে অন্য পক্ষের সাথে তার মালিকানাধীন এমএল মডেল ভাগ করতে পারে।

আপনি কি প্রয়োজন হবে

একটি গোপনীয় স্থান সেটআপে জড়িত ভূমিকা

এই কোডল্যাবে, কোম্পানি প্রাইমাস হবে রিসোর্স মালিক এবং কাজের চাপ লেখক, যা নিম্নলিখিতগুলির জন্য দায়ী থাকবে:

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

সেকেন্ডাস কোম্পানি হবে অপারেটর, এবং দায়ী থাকবে:

  1. কাজের চাপ এবং ফলাফল দ্বারা ব্যবহৃত নমুনা চিত্রগুলি সংরক্ষণ করতে প্রয়োজনীয় ক্লাউড সংস্থানগুলি সেট আপ করা
  2. Primus দ্বারা প্রদত্ত মডেল ব্যবহার করে গোপনীয় স্থানে ML কাজের চাপ চালানো

গোপনীয় স্থান কিভাবে কাজ করে

যখন আপনি গোপনীয় স্থানে কাজের চাপ চালান, কনফিগার করা সংস্থানগুলি ব্যবহার করে নিম্নলিখিত প্রক্রিয়াটি সঞ্চালিত হয়:

  1. কাজের চাপ ওয়ার্কলোড আইডেন্টিটি পুল থেকে $PRIMUS_SERVICEACCOUNT এর জন্য একটি সাধারণ Google অ্যাক্সেস টোকেন অনুরোধ করে। এটি কাজের চাপ এবং পরিবেশ দাবি সহ একটি সত্যায়ন যাচাইকারী পরিষেবা টোকেন অফার করে৷
  2. যদি প্রত্যয়ন যাচাইকারী পরিষেবা টোকেনে কাজের চাপ পরিমাপের দাবি WIP-এর অ্যাট্রিবিউট শর্তের সাথে মেলে, তাহলে এটি $PRIMUS_SERVICEACCOUNT.
  3. কাজের চাপ $PRIMUS_INPUT_STORAGE_BUCKET বালতিতে সঞ্চিত মেশিন লার্নিং মডেল অ্যাক্সেস করতে $PRIMUS_SERVICEACCOUNT এর সাথে যুক্ত পরিষেবা অ্যাকাউন্ট অ্যাক্সেস টোকেন ব্যবহার করে।
  4. কাজের চাপ সেকেন্ডাসের মালিকানাধীন ডেটার উপর একটি অপারেশন করে এবং সেই কাজের চাপটি সেকেন্ডাস তার প্রকল্পে পরিচালিত এবং চালিত করে।
  5. কাজের চাপ $SECUNDUS_RESULT_STORAGE_BUCKET বালতিতে সেই অপারেশনের ফলাফল লেখার জন্য $WORKLOAD_SERVICEACCOUNT পরিষেবা অ্যাকাউন্ট ব্যবহার করে৷

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' )
  1. আপনি প্রাইমাস প্রজেক্টে বিদ্যমান ক্লাউড রিসোর্স নামের সাথে নিম্নলিখিত ভেরিয়েবল সেট করতে পারেন। যদি ভেরিয়েবল সেট করা হয়, তাহলে প্রাইমাস প্রজেক্ট থেকে সংশ্লিষ্ট বিদ্যমান ক্লাউড রিসোর্স ব্যবহার করা হবে। ভেরিয়েবল সেট না থাকলে, প্রকল্প-নাম থেকে ক্লাউড রিসোর্স নাম তৈরি করা হবে এবং সেই নাম দিয়ে নতুন ক্লাউড-রিসোর্স তৈরি করা হবে। সম্পদের নামের জন্য সমর্থিত ভেরিয়েবলগুলি নিম্নরূপ:

$PRIMUS_INPUT_STORAGE_BUCKET

যে বালতিটি প্রাইমাসের মেশিন লার্নিং মডেল সংরক্ষণ করে।

$PRIMUS_WORKLOAD_IDENTITY_POOL

প্রাইমাসের ওয়ার্কলোড আইডেন্টিটি পুল (ডব্লিউআইপি) যা দাবিকে যাচাই করে।

$PRIMUS_WIP_PROVIDER

Primus-এর কাজের চাপের পরিচয় পুল প্রদানকারী যাতে প্রত্যয়ন যাচাইকারী পরিষেবা দ্বারা স্বাক্ষরিত টোকেনগুলির জন্য ব্যবহার করার অনুমোদন শর্ত অন্তর্ভুক্ত।

$PRIMUS_SERVICE_ACCOUNT

প্রাইমাস পরিষেবা অ্যাকাউন্ট যা $PRIMUS_WORKLOAD_IDENTITY_POOL সুরক্ষিত সংস্থানগুলি অ্যাক্সেস করতে ব্যবহার করে (এই কোডল্যাবে এমএল মডেল)। এই ধাপে এটিকে $PRIMUS_INPUT_STORAGE_BUCKET বালতিতে সংরক্ষিত মেশিন লার্নিং মডেল পড়ার অনুমতি রয়েছে৷

$PRIMUS_ARTIFACT_REPOSITORY

আর্টিফ্যাক্ট রিপোজিটরি যেখানে ওয়ার্কলোড ডকার ইমেজ পুশ করা হবে।

  1. আপনি Secundus প্রকল্পে বিদ্যমান ক্লাউড রিসোর্স নামের সাথে নিম্নলিখিত ভেরিয়েবল সেট করতে পারেন। যদি ভেরিয়েবল সেট করা হয়, তাহলে সেকুন্ডাস প্রকল্পের সংশ্লিষ্ট বিদ্যমান ক্লাউড রিসোর্স ব্যবহার করা হবে। ভেরিয়েবল সেট করা না থাকলে, প্রকল্প-নাম থেকে ক্লাউড রিসোর্স নাম তৈরি করা হবে এবং সেই নামে একটি নতুন ক্লাউড-রিসোর্স তৈরি করা হবে। সম্পদের নামের জন্য সমর্থিত ভেরিয়েবলগুলি নিম্নরূপ:

$SECUNDUS_INPUT_STORAGE_BUCKET

বালতি যে নমুনা চিত্রগুলি সঞ্চয় করে যা সেকেন্ডাস প্রাইমাস দ্বারা প্রদত্ত মডেল ব্যবহার করে শ্রেণীবদ্ধ করতে চায়।

$SECUNDUS_RESULT_STORAGE_BUCKET

বালতি যা কাজের চাপের ফলাফল সংরক্ষণ করে।

$WORKLOAD_IMAGE_NAME

ওয়ার্কলোড কন্টেইনার ইমেজের নাম।

$WORKLOAD_IMAGE_TAG

ওয়ার্কলোড কন্টেইনার ছবির ট্যাগ।

$WORKLOAD_SERVICE_ACCOUNT

যে পরিষেবা অ্যাকাউন্টের গোপনীয় VM অ্যাক্সেস করার অনুমতি রয়েছে যা কাজের চাপ চালায়।

  • এই দুটি প্রকল্পের জন্য আপনার নির্দিষ্ট অনুমতির প্রয়োজন হবে এবং আপনি GCP কনসোল ব্যবহার করে কীভাবে IAM ভূমিকা প্রদান করবেন সে সম্পর্কে এই নির্দেশিকাটি উল্লেখ করতে পারেন:
  • $PRIMUS_PROJECT_ID এর জন্য, আপনার প্রয়োজন হবে স্টোরেজ অ্যাডমিন, আর্টিফ্যাক্ট রেজিস্ট্রি অ্যাডমিনিস্ট্রেটর, সার্ভিস অ্যাকাউন্ট অ্যাডমিন, IAM ওয়ার্কলোড আইডেন্টিটি পুল অ্যাডমিন।
  • $SECUNDUS_PROJECT_ID এর জন্য, আপনার প্রয়োজন হবে কম্পিউট অ্যাডমিন, স্টোরেজ অ্যাডমিন, সার্ভিস অ্যাকাউন্ট অ্যাডমিন, আইএএম ওয়ার্কলোড আইডেন্টিটি পুল অ্যাডমিন, সিকিউরিটি অ্যাডমিন (ঐচ্ছিক)।
  • সম্পদের নামের জন্য আপনার প্রকল্প আইডির উপর ভিত্তি করে মানগুলিতে অবশিষ্ট পরিবর্তনশীল নাম সেট করতে নিম্নলিখিত স্ক্রিপ্টটি চালান।
source config_env.sh

প্রাইমাস কোম্পানির সংস্থান সেট আপ করুন

এই পদক্ষেপের অংশ হিসাবে, আপনি প্রাইমাসের জন্য প্রয়োজনীয় ক্লাউড সংস্থানগুলি সেট আপ করবেন। Primus এর জন্য সম্পদ সেট আপ করতে নিম্নলিখিত স্ক্রিপ্ট চালান. স্ক্রিপ্ট সম্পাদনের অংশ হিসাবে নিম্নলিখিত সংস্থানগুলি তৈরি করা হবে:

  • ক্লাউড স্টোরেজ বালতি ( $PRIMUS_INPUT_STORAGE_BUCKET ) প্রাইমাসের মেশিন লার্নিং মডেল সংরক্ষণ করতে।
  • ওয়ার্কলোড আইডেন্টিটি পুল ( $PRIMUS_WORKLOAD_IDENTITY_POOL ) তার প্রদানকারীর অধীনে কনফিগার করা বৈশিষ্ট্যের শর্তগুলির উপর ভিত্তি করে দাবিগুলি যাচাই করতে।
  • পরিষেবা অ্যাকাউন্ট ( $PRIMUS_SERVICEACCOUNT ) উপরে উল্লিখিত ওয়ার্কলোড আইডেন্টিটি পুল ( $PRIMUS_WORKLOAD_IDENTITY_POOL ) এর সাথে সংযুক্ত IAM অ্যাক্সেস সহ ক্লাউড স্টোরেজ বাকেট থেকে ডেটা পড়ার জন্য ( objectViewer ভূমিকা ব্যবহার করে) এবং এই পরিষেবা অ্যাকাউন্টটিকে ওয়ার্কলোড আইডেন্টিটি পুলের সাথে সংযুক্ত করার জন্য ( roles/iam.workloadIdentityUser ভূমিকা)।

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

./setup_primus_company_resources.sh

উপরে উল্লিখিত স্ক্রিপ্ট ক্লাউড রিসোর্স সেট আপ করবে, আমরা এখন স্ক্রিপ্ট দ্বারা তৈরি ক্লাউড স্টোরেজ বালতিতে মডেলটি ডাউনলোড এবং প্রকাশ করব।

  1. এখান থেকে প্রাক-প্রশিক্ষিত মডেল ডাউনলোড করুন।
  2. একবার এটি ডাউনলোড হয়ে গেলে, ডাউনলোড করা tar ফাইলটির নাম পরিবর্তন করে model.tar.gz করুন।
  3. model.tar.gz ফাইলটি সম্বলিত ডিরেক্টরি থেকে নিম্নলিখিত কমান্ড ব্যবহার করে ক্লাউড স্টোরেজ বালতিতে model.tar.gz ফাইলটি প্রকাশ করুন।
gsutil cp model.tar.gz gs://${PRIMUS_INPUT_STORAGE_BUCKET}/

Secundus কোম্পানির সংস্থান সেট আপ করুন

এই পদক্ষেপের অংশ হিসাবে, আপনি সেকুন্ডাসের জন্য প্রয়োজনীয় ক্লাউড সংস্থানগুলি সেট আপ করবেন। Secundus এর জন্য সংস্থান সেট আপ করতে নিম্নলিখিত স্ক্রিপ্টটি চালান। এই পদক্ষেপগুলির অংশ হিসাবে নিম্নলিখিত সংস্থানগুলি তৈরি করা হবে:

  • ক্লাউড স্টোরেজ বালতি ( $SECUNDUS_INPUT_STORAGE_BUCKET ) Secundus দ্বারা অনুমান চালানোর জন্য নমুনা চিত্রগুলি সংরক্ষণ করতে।
  • ক্লাউড স্টোরেজ বালতি ( $SECUNDUS_RESULT_STORAGE_BUCKET ) Secundus দ্বারা এমএল ওয়ার্কলোড এক্সিকিউশনের ফলাফল সংরক্ষণ করতে।

এই কোডল্যাবের জন্য কিছু নমুনা চিত্র এখানে উপলব্ধ করা হয়েছে।

./setup_secundus_company_resources.sh

3. কাজের চাপ তৈরি করুন

কাজের চাপ পরিষেবা অ্যাকাউন্ট তৈরি করুন

এখন, আপনি প্রয়োজনীয় ভূমিকা এবং অনুমতি সহ কাজের চাপের জন্য একটি পরিষেবা অ্যাকাউন্ট তৈরি করবেন। Secundus প্রকল্পে একটি ওয়ার্কলোড পরিষেবা অ্যাকাউন্ট তৈরি করতে নিম্নলিখিত স্ক্রিপ্টটি চালান। এই পরিষেবা অ্যাকাউন্টটি VM দ্বারা ব্যবহৃত হবে যা ML কাজের চাপ চালায়।

এই কাজের চাপ পরিষেবা-অ্যাকাউন্ট ( $WORKLOAD_SERVICEACCOUNT ) এর নিম্নলিখিত ভূমিকা থাকবে:

  • একটি প্রত্যয়ন টোকেন পেতে confidentialcomputing.workloadUser
  • logging.logWriter ক্লাউড লগিং-এ লগ লিখতে।
  • objectViewer $SECUNDUS_INPUT_STORAGE_BUCKET ক্লাউড স্টোরেজ বাকেট থেকে ডেটা পড়ার জন্য।
  • objectUser $SECUNDUS_RESULT_STORAGE_BUCKET ক্লাউড স্টোরেজ বালতিতে কাজের চাপের ফলাফল লিখতে।
./create_workload_service_account.sh

কাজের চাপ তৈরি করুন

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

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

এখানে কাজের চাপের 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 ) তৈরি করুন।
  • প্রয়োজনীয় সম্পদের নাম সহ ওয়ার্কলোড কোড আপডেট করুন।
  • এমএল ওয়ার্কলোড তৈরি করুন এবং ওয়ার্কলোড কোডের একটি ডকার ইমেজ তৈরির জন্য ডকারফাইল তৈরি করুন। এখানে এই কোডল্যাবের জন্য ব্যবহৃত ডকারফাইল।
  • প্রাইমাসের মালিকানাধীন আর্টিফ্যাক্ট রেজিস্ট্রিতে ( $PRIMUS_ARTIFACT_REGISTRY ) ডকার ইমেজ তৈরি করুন এবং প্রকাশ করুন।
  • $PRIMUS_ARTIFACT_REGISTRY এর জন্য $WORKLOAD_SERVICEACCOUNT পড়ার অনুমতি দিন। আর্টিফ্যাক্ট রেজিস্ট্রি থেকে ওয়ার্কলোড ডকার ইমেজ টানতে ওয়ার্কলোড কন্টেইনারের জন্য এটি প্রয়োজন।
./create_workload.sh

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

4. অনুমোদন এবং কাজের চাপ চালান

কাজের চাপ অনুমোদন করুন

Primus নিম্নলিখিত সংস্থানগুলির বৈশিষ্ট্যগুলির উপর ভিত্তি করে তাদের মেশিন লার্নিং মডেল অ্যাক্সেস করার জন্য কাজের চাপ অনুমোদন করতে চায়:

  • কি : কোড যা যাচাই করা হয়
  • কোথায় : নিরাপদ পরিবেশ
  • কে : বিশ্বস্ত একজন অপারেটর

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

ক্লাউড রিসোর্স সেটআপ ধাপের অংশ হিসেবে ওয়ার্কলোড আইডেন্টিটি পুল ইতিমধ্যেই তৈরি করা হয়েছে। এখন Primus একটি নতুন OIDC ওয়ার্কলোড আইডেন্টিটি পুল প্রদানকারী তৈরি করবে। নির্দিষ্ট --attribute-condition ওয়ার্কলোড কন্টেইনারে অ্যাক্সেস অনুমোদন করে। এটি প্রয়োজন:

  • কি : $PRIMUS_ARTIFACT_REPOSITORY সংগ্রহস্থলে সর্বশেষ $WORKLOAD_IMAGE_NAME আপলোড করা হয়েছে৷
  • কোথায় : কনফিডেন্সিয়াল স্পেস ট্রাস্টেড এক্সিকিউশন এনভায়রনমেন্ট সম্পূর্ণ সমর্থিত কনফিডেন্সিয়াল স্পেস ভিএম ইমেজে চলছে।
  • কে : Secundus $WORKLOAD_SERVICE_ACCOUNT পরিষেবা অ্যাকাউন্ট।
export WORKLOAD_IMAGE_DIGEST=$(docker images digests ${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/${PRIMUS_PROJECT_ID}/${PRIMUS_ARTIFACT_REPOSITORY}/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG}| awk 'NR>1{ print $3 }')
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"

কাজের চাপ চালান

এই পদক্ষেপের অংশ হিসাবে, আমরা গোপনীয় স্থান VM-এ কাজের চাপ চালাব। প্রয়োজনীয় TEE আর্গুমেন্ট মেটাডেটা পতাকা ব্যবহার করে পাস করা হয়। ওয়ার্কলোড কন্টেইনারের আর্গুমেন্টগুলি পতাকার " tee-cmd " অংশ ব্যবহার করে পাস করা হয়। ওয়ার্কলোড এক্সিকিউশনের ফলাফল $SECUNDUS_RESULT_STORAGE_BUCKET এ প্রকাশিত হবে।

gcloud config set project $SECUNDUS_PROJECT_ID
gcloud compute instances create ${WORKLOAD_VM} \
 --confidential-compute-type=SEV \
 --shielded-secure-boot \
 --maintenance-policy=TERMINATE \
 --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}]}

সেকেন্ডাস স্টোরেজ বাকেটের প্রতিটি নমুনা চিত্রের জন্য, আপনি ফলাফলে একটি এন্ট্রি দেখতে পাবেন। এই এন্ট্রিতে তথ্যের দুটি মূল অংশ অন্তর্ভুক্ত থাকবে:

  • predicted_class এর সূচী: এটি একটি সংখ্যাসূচক সূচক যা সেই শ্রেণীর প্রতিনিধিত্ব করে যে মডেলটি চিত্রটির অন্তর্গত ভবিষ্যদ্বাণী করে।
  • Top_k_predictions: এটি ইমেজের জন্য k পর্যন্ত ভবিষ্যদ্বাণী প্রদান করে, সর্বাধিক থেকে ন্যূনতম পর্যন্ত র‍্যাঙ্ক করা হয়। এই কোডল্যাবে k-এর মান 5-এ সেট করা হয়েছে, তবে আপনি কম বা বেশি ভবিষ্যদ্বাণী পেতে ওয়ার্কলোড কোডে এটি সামঞ্জস্য করতে পারেন।

শ্রেণী সূচীকে মানব-পাঠযোগ্য শ্রেণির নামে অনুবাদ করতে, এখানে উপলব্ধ লেবেলের তালিকা পড়ুন। উদাহরণস্বরূপ, যদি আপনি 2-এর একটি ক্লাস সূচক দেখতে পান, তবে এটি লেবেল তালিকার ক্লাস লেবেল "tench" এর সাথে মিলে যায়।

এই কোডল্যাবে, আমরা দেখিয়েছি যে প্রাইমাসের মালিকানাধীন একটি মডেল যা শুধুমাত্র একটি TEE তে চলমান কাজের চাপে মুক্তি পায়। Secundus একটি TEE তে ML কাজের চাপ চালায় এবং এই কাজের চাপ প্রাইমাসের মালিকানাধীন মডেলটিকে গ্রাস করতে সক্ষম হয় যখন Primus মডেলটির উপর সম্পূর্ণ নিয়ন্ত্রণ বজায় রাখে।

অননুমোদিত কাজের চাপ চালান

সেকেন্ডাস তার নিজস্ব আর্টিফ্যাক্ট রিপোজিটরি থেকে একটি ভিন্ন ওয়ার্কলোড ইমেজ টেনে ওয়ার্কলোড ইমেজ পরিবর্তন করে যা প্রাইমাস দ্বারা অনুমোদিত নয়। প্রাইমাসের ওয়ার্কলোড আইডেন্টিটি পুল শুধুমাত্র ${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/$PRIMUS_PROJECT_ID/$PRIMUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG ছবি।

কাজের চাপ পুনরায় চালান

যখন সেকুন্ডাস এই নতুন কাজের চাপ ইমেজ দিয়ে মূল কাজের চাপ চালানোর চেষ্টা করে, এটি ব্যর্থ হবে। ত্রুটি দেখতে, মূল ফলাফল ফাইল এবং VM উদাহরণ মুছুন, এবং তারপর আবার কাজের চাপ চালানোর চেষ্টা করুন।

অনুগ্রহ $WORKLOAD_SERVICEACCOUNT নিশ্চিত করুন যে সেকেন্ডাসের আর্টিফ্যাক্ট রেজিস্ট্রির অধীনে একটি নতুন ডকার ইমেজ প্রকাশিত হয়েছে (যেমন us-docker.pkg.dev/${SECUNDUS_PROJECT_ID}/custom-image/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG} ) এবং ওয়ার্কলোড serviceaccount $WORKLOAD_SERVICEACCOUNT ) এই নতুন কাজের চাপের চিত্রটি পড়ার জন্য আর্টিফ্যাক্ট রেজিস্ট্রি রিডারকে অনুমতি দিয়েছে৷ এটি নিশ্চিত করার জন্য যে প্রাইমাসের WIP নীতি ওয়ার্কলোড দ্বারা উপস্থাপিত টোকেন প্রত্যাখ্যান করার আগে কাজের চাপ প্রস্থান না করে।

বিদ্যমান ফলাফল ফাইল এবং VM উদাহরণ মুছুন

  1. প্রকল্পটিকে $SECUNDUS_PROJECT_ID প্রকল্পে সেট করুন৷
gcloud config set project $SECUNDUS_PROJECT_ID
  1. ফলাফল ফাইল মুছুন।
gsutil rm gs://$SECUNDUS_RESULT_STORAGE_BUCKET/result
  1. গোপনীয় VM উদাহরণ মুছুন।
gcloud compute instances delete ${WORKLOAD_VM}

অননুমোদিত কাজের চাপ চালান:

gcloud compute instances create ${WORKLOAD_VM} \
 --confidential-compute-type=SEV \
 --shielded-secure-boot \
 --maintenance-policy=TERMINATE \
 --scopes=cloud-platform --zone=${SECUNDUS_PROJECT_ZONE} \
 --image-project=confidential-space-images \
 --image-family=confidential-space \ 
--service-account=${WORKLOAD_SERVICE_ACCOUNT}@${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

5. পরিষ্কার করুন

এই কোডল্যাবের অংশ হিসাবে আমরা যে সংস্থানগুলি তৈরি করেছি তা পরিষ্কার করতে এখানে স্ক্রিপ্টটি ব্যবহার করা যেতে পারে। এই পরিষ্কারের অংশ হিসাবে, নিম্নলিখিত সংস্থানগুলি মুছে ফেলা হবে:

  • প্রাইমাসের ইনপুট স্টোরেজ বালতি ( $PRIMUS_INPUT_STORAGE_BUCKET)
  • প্রাইমাস পরিষেবা-অ্যাকাউন্ট ( $PRIMUS_SERVICEACCOUNT )।
  • প্রাইমাসের আর্টিফ্যাক্ট ভান্ডার ( $PRIMUS_ARTIFACT_REPOSITORY )।
  • প্রাইমাস ওয়ার্কলোড আইডেন্টিটি পুল ( $PRIMUS_WORKLOAD_IDENTITY_POOL )।
  • সেকেন্ডাসের ওয়ার্কলোড সার্ভিস অ্যাকাউন্ট ( $WORKLOAD_SERVICEACCOUNT )।
  • সেকেন্ডাসের ইনপুট স্টোরেজ বালতি ( $SECUNDUS_INPUT_STORAGE_BUCKET)
  • কাজের চাপ কম্পিউট ইনস্ট্যান্স।
  • সেকেন্ডাস ( $SECUNDUS_RESULT_STORAGE_BUCKET ) এর ফলাফল স্টোরেজ বালতি।
$ ./cleanup.sh

আপনি যদি অন্বেষণ শেষ করে থাকেন, তাহলে অনুগ্রহ করে আপনার প্রকল্প মুছে ফেলার কথা বিবেচনা করুন।

  • ক্লাউড প্ল্যাটফর্ম কনসোলে যান
  • আপনি যে প্রকল্পটি বন্ধ করতে চান সেটি নির্বাচন করুন, তারপর শীর্ষে 'মুছুন' এ ক্লিক করুন: এটি মুছে ফেলার জন্য প্রকল্পের সময় নির্ধারণ করে

এরপর কি?

এই অনুরূপ কোডল্যাবগুলির কিছু পরীক্ষা করে দেখুন...