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

১. সংক্ষিপ্ত বিবরণ

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

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

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

5a86c47d935da998.jpeg

আপনি যা শিখবেন

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

আপনার যা যা লাগবে

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

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

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

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

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

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

যখন আপনি কনফিডেনশিয়াল স্পেসে ওয়ার্কলোডটি চালান, তখন কনফিগার করা রিসোর্সগুলো ব্যবহার করে নিম্নলিখিত প্রক্রিয়াটি সম্পন্ন হয়:

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

২. ক্লাউড রিসোর্স সেট আপ করুন

শুরু করার আগে

  • এই কোডল্যাবের অংশ হিসেবে ব্যবহৃত প্রয়োজনীয় স্ক্রিপ্টগুলো পেতে নিচের কমান্ডটি ব্যবহার করে এই রিপোজিটরিটি ক্লোন করুন।
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>
  • আপনার প্রোজেক্টগুলোর জন্য বিলিং চালু করুন
  • উভয় প্রোজেক্টের জন্য কনফিডেনশিয়াল কম্পিউটিং এপিআই এবং নিম্নলিখিত এপিআইগুলো সক্রিয় করুন।
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

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

$PRIMUS_WIP_PROVIDER

প্রাইমাসের ওয়ার্কলোড আইডেন্টিটি পুল প্রদানকারী, যার মধ্যে অ্যাটেস্টেশন ভেরিফায়ার পরিষেবা দ্বারা স্বাক্ষরিত টোকেন ব্যবহারের জন্য অনুমোদনের শর্ত অন্তর্ভুক্ত রয়েছে।

$PRIMUS_SERVICE_ACCOUNT

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

$PRIMUS_ARTIFACT_REPOSITORY

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

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

$SECUNDUS_INPUT_STORAGE_BUCKET

যে বাকেটটিতে নমুনা ছবিগুলো সংরক্ষিত থাকে, যেগুলোকে সেকেন্ডাস প্রাইমাস কর্তৃক প্রদত্ত মডেল ব্যবহার করে শ্রেণিবদ্ধ করতে চায়।

$SECUNDUS_RESULT_STORAGE_BUCKET

যে বাকেটটি ওয়ার্কলোডের ফলাফল সংরক্ষণ করে।

$WORKLOAD_IMAGE_NAME

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

$WORKLOAD_IMAGE_TAG

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

$WORKLOAD_SERVICE_ACCOUNT

যে সার্ভিস অ্যাকাউন্টের কাছে ওয়ার্কলোড চালনাকারী গোপনীয় ভিএম-টি অ্যাক্সেস করার অনুমতি আছে।

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

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

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

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

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

./setup_primus_company_resources.sh

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

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

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

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

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

এই কোডল্যাবের জন্য এখানে কিছু নমুনা ছবি দেওয়া হয়েছে।

./setup_secundus_company_resources.sh

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

ওয়ার্কলোড পরিষেবা অ্যাকাউন্ট তৈরি করুন

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

এই ওয়ার্কলোড সার্ভিস-অ্যাকাউন্ট ( $WORKLOAD_SERVICEACCOUNT )-এর নিম্নলিখিত ভূমিকাগুলো থাকবে:

  • confidentialcomputing.workloadUser একটি প্রত্যয়ন টোকেন পেতে হবে।
  • ক্লাউড লগিং-এ লগ লেখার জন্য logging.logWriter ব্যবহার করা হয়।
  • $SECUNDUS_INPUT_STORAGE_BUCKET ক্লাউড স্টোরেজ বাকেট থেকে ডেটা পড়ার জন্য objectViewer
  • 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

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

৪. ওয়ার্কলোড অনুমোদন ও চালনা করুন

ওয়ার্কলোড অনুমোদন করুন

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

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

প্রাইমাস এই প্রয়োজনীয়তাগুলোর উপর ভিত্তি করে একটি অ্যাক্সেস পলিসি প্রয়োগ করতে ওয়ার্কলোড আইডেন্টিটি ফেডারেশন ব্যবহার করে। ওয়ার্কলোড আইডেন্টিটি ফেডারেশন আপনাকে অ্যাট্রিবিউট কন্ডিশন নির্দিষ্ট করার সুযোগ দেয়। এই শর্তগুলো সীমাবদ্ধ করে যে কোন আইডেন্টিটিগুলো ওয়ার্কলোড আইডেন্টিটি পুল (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"

রান ওয়ার্কলোড

এই ধাপের অংশ হিসেবে, আমরা কনফিডেনশিয়াল স্পেস ভিএম-এ ওয়ার্কলোডটি চালাব। প্রয়োজনীয় 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}

ফলাফল দেখুন

ওয়ার্কলোডটি সফলভাবে সম্পন্ন হওয়ার পর, এমএল ওয়ার্কলোডের ফলাফল $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}]}

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

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

ক্লাস ইনডেক্সকে সহজে পঠনযোগ্য ক্লাস নামে অনুবাদ করতে, এখানে উপলব্ধ লেবেলের তালিকাটি দেখুন। উদাহরণস্বরূপ, যদি আপনি ক্লাস ইনডেক্স ২ দেখেন, তবে এটি লেবেল তালিকায় 'tench' ক্লাস লেবেলটির সাথে সঙ্গতিপূর্ণ।

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

অননুমোদিত ওয়ার্কলোড চালান

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

ওয়ার্কলোডটি পুনরায় চালান

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

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

বিদ্যমান ফলাফল ফাইল এবং ভিএম ইনস্ট্যান্স মুছে ফেলুন

  1. প্রজেক্টটি $SECUNDUS_PROJECT_ID প্রজেক্টে সেট করুন।
gcloud config set project $SECUNDUS_PROJECT_ID
  1. ফলাফল ফাইলটি মুছে ফেলুন।
gsutil rm gs://$SECUNDUS_RESULT_STORAGE_BUCKET/result
  1. গোপনীয় ভিএম ইনস্ট্যান্সটি মুছে ফেলুন।
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_RESULT_STORAGE_BUCKET )।
$ ./cleanup.sh

আপনার অনুসন্ধান শেষ হলে, অনুগ্রহ করে আপনার প্রজেক্টটি মুছে ফেলার কথা বিবেচনা করুন।

  • ক্লাউড প্ল্যাটফর্ম কনসোলে যান
  • যে প্রজেক্টটি বন্ধ করতে চান সেটি নির্বাচন করুন, তারপর উপরে থাকা 'ডিলিট' বোতামে ক্লিক করুন: এটি প্রজেক্টটিকে মুছে ফেলার জন্য নির্ধারিত করবে।

এরপর কী?

এই ধরনের কয়েকটি কোডল্যাব দেখে নিন...