প্রম্পট এনক্রিপশন এসডিকে কোডল্যাব

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

এই কোডল্যাবটি আপনাকে প্রম্পট এনক্রিপশন এসডিকে ব্যবহার করে গুগল ক্লাউডের ট্রাস্টেড এক্সিকিউশন এনভায়রনমেন্ট (টিইই)-এ পরিবেশিত একটি মডেলের সাথে নিরাপদে যোগাযোগ করার পদ্ধতি ধাপে ধাপে দেখাবে।

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

  • একটি ক্লায়েন্ট এবং একটি রিমোট ইনফারেন্স সার্ভারের মধ্যে ক্রিপ্টোগ্রাফিকভাবে যাচাইকৃত এবং এনক্রিপ্টেড চ্যানেল স্থাপন করা।
  • অ্যাটেস্টেড টিএলএস ব্যবহার করে সার্ভারের পরিচয় (সফটওয়্যার হ্যাশ, হার্ডওয়্যার মডেল, লঞ্চ কনফিগারেশন) যাচাই করা হচ্ছে।
  • যাচাইকৃত এনক্লেভে পৌঁছানো পর্যন্ত প্রম্পটগুলোকে এনক্রিপ্ট করে ডেটার সার্বভৌমত্ব নিশ্চিত করা হয়।
  • কনফিডেনশিয়াল স্পেসে চলমান vLLM-এর সাথে ইন্টারঅ্যাক্ট করতে প্রম্পট এনক্রিপশন SDK ব্যবহার করা।

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

  • বিলিং সক্ষম একটি গুগল ক্লাউড প্রজেক্ট।
  • গুগল ক্লাউড এসডিকে (gcloud) ইনস্টল এবং প্রমাণীকৃত হয়েছে।
  • পাইথন ৩.১০+ পরিবেশ।
  • জেমা মডেল ডাউনলোড করার জন্য একটি আলিঙ্গনরত মুখের টোকেন।
  • VPC ফায়ারওয়াল এবং এক্সটার্নাল আইপি অ্যাড্রেস কোটা সম্পর্কে ধারণা থাকা।
  • স্থানীয়ভাবে SDK বিল্ড করার জন্য _ekm.c C এক্সটেনশনটি কম্পাইল করতে হয়। পাইথন C হেডার ইনস্টল করা না থাকলে এই ধাপটি ব্যর্থ হয়। এর সমাধান করতে python3-dev ইনস্টল করুন (যেমন, Debian/Ubuntu-এর জন্য sudo apt-get install python3-dev)।

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

শুরু করার আগে, নিশ্চিত করুন যে আপনি প্রয়োজনীয় API-গুলো সক্রিয় করেছেন এবং আপনার পরিবেশ কনফিগার করেছেন।

১. প্রয়োজনীয় এপিআইগুলো সক্রিয় করুন:

gcloud services enable compute.googleapis.com \
    confidentialcomputing.googleapis.com \
    logging.googleapis.com \
    artifactregistry.googleapis.com \
    cloudbuild.googleapis.com

২. ডকার কনফিগার করুন:

gcloud auth configure-docker gcr.io

৩. আলিঙ্গনরত মুখের টোকেন সেট করুন:

export HF_TOKEN="your_token"

৪. রিপোজিটরিটি ক্লোন করুন:

git clone https://github.com/google/prompt-encryption-sdk && cd prompt-encryption-sdk

৩. দৃশ্যকল্প

আমরা ব্যবহার করব:

  • ক্লায়েন্ট: আপনার স্থানীয় পাইথন পরিবেশ অথবা একটি স্ট্যান্ডার্ড ভিএম।
  • সার্ভার: একটি vLLM ইনস্ট্যান্স যা একটি গোপনীয় স্থানের (TDX/SEV-SNP) অভ্যন্তরে একটি ওপেন-সোর্স মডেল (যেমন, Gemma) পরিবেশন করে।
  • SDK: prompt_encryption_sdk পাইথন লাইব্রেরি।

৪. ধাপ ০: সার্ভার সেটআপ

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

./codelabs/setup.sh --project-id <PROJECT_ID>

setup.sh স্ক্রিপ্টটি নিম্নলিখিত কাজগুলো করে থাকে:

  1. প্রয়োজনীয় এপিআইগুলো (কম্পিউট, কনফিডেনশিয়াল কম্পিউটিং, লগিং, আর্টিফ্যাক্ট রেজিস্ট্রি, ক্লাউড বিল্ড) সক্রিয় করে।
  2. Attested TLS মিডলওয়্যার দিয়ে vLLM-কে র‍্যাপ করে ডকার ইমেজটি বিল্ড ও পুশ করে।
  3. প্রয়োজনীয় অনুমতিসহ একটি সার্ভিস অ্যাকাউন্ট প্রদান করে।
  4. গোপনীয় ভিএম তৈরি করে (H100 GPU এবং TDX সক্রিয় সহ একটি A3 ইনস্ট্যান্স)।
  5. নেটওয়ার্কিং এবং লোড ব্যালান্সিং কনফিগার করে (পাসথ্রু নেটওয়ার্ক লোড ব্যালান্সার)।
  6. আউটপুট (ইমেজ হ্যাশ এবং লোড ব্যালেন্সার আইপি) স্থানীয় ফাইলে সংরক্ষণ করে।

৫. ধাপ ১: সত্যায়িত ক্লায়েন্টটি চালান

এখন যেহেতু সার্ভারটি নিরাপদে চলছে, একটি সত্যায়িত সংযোগ স্থাপন করুন।

python3 -m venv venv
source venv/bin/activate
pip install -r examples/requirements.txt
pip install -e .
./codelabs/run_client.sh <PROJECT_ID>

`run_client.sh` স্ক্রিপ্টটি ডিপ্লয়মেন্টের বিবরণ পড়ে এবং `ConfidentialSDKClient` ব্যবহার করে একটি পাইথন রিকোয়েস্ট এক্সিকিউট করে। যদি অ্যাটেস্টেশন ব্যর্থ হয়, তাহলে একটি `AttestationError` উত্থাপিত হয় এবং প্রম্পটটি কখনোই পাঠানো হয় না।

৬. ধাপ ২: পরিষ্কার করা

চার্জ এড়াতে, কাজ শেষ হলে রিসোর্সগুলো পরিষ্কার করে ফেলুন।

./codelabs/cleanup.sh --project-id <PROJECT_ID>

৭. ভেতরের খবর

http.post চলাকালীন কী ঘটে?

  1. TCP/TLS: প্রমিত সংযোগ স্থাপিত হয়েছে।
  2. হ্যান্ডশেক ইন্টারসেপশন: বডি পাঠানোর আগে SDK কিছুক্ষণ বিরতি নেয়।
  3. AttestConnection RPC: SDK সার্ভারে একটি ননস (nonce) পাঠায়।
  4. মূল্য উদ্ধৃতি তৈরি: সার্ভার একটি TEE হার্ডওয়্যারের মূল্য উদ্ধৃতির জন্য অনুরোধ করে।
  5. যাচাইকরণ: এসডিকে উদ্ধৃতির স্বাক্ষর এবং নীতি যাচাই করে।
  6. বাইন্ড : এসডিকে যাচাই করে যে চ্যানেলটির "এক্সপোর্টেড কিয়িং ম্যাটেরিয়াল" উদ্ধৃতিতে বাইন্ড করা সেশনের সাথে মেলে কিনা।
  7. ডেটা ট্রান্সমিশন: সমস্ত যাচাই সফল হলেই মূল বার্তা পাঠানো হয়।

৮. সমস্যা সমাধান

  • প্রত্যয়ন ব্যর্থ: পলিসিতে থাকা image_hash কন্টেইনারের সাথে মেলে কিনা তা যাচাই করুন।
  • সংযোগ প্রত্যাখ্যাত: নিশ্চিত করুন যে সার্ভারটি প্রবেশযোগ্য এবং পোর্ট ৮০০০ খোলা আছে।
  • টাইমআউট: TEE কোট তৈরি হতে সময় লাগতে পারে; নিশ্চিত করুন যেন টাইমআউটগুলো পর্যাপ্ত থাকে।

৯. অভিনন্দন

আপনি সফলভাবে প্রম্পট এনক্রিপশন এসডিকে কোডল্যাবটি সম্পন্ন করেছেন! আপনি শিখেছেন কীভাবে আপনার ক্লায়েন্ট এবং একটি টিইই-ভিত্তিক ইনফারেন্স সার্ভারের মধ্যে একটি ক্রিপ্টোগ্রাফিকভাবে যাচাইকৃত এবং এনক্রিপ্টেড চ্যানেল স্থাপন করতে হয়।

এরপর কী?

  • উন্নত AttestationPolicy কনফিগারেশনগুলো অন্বেষণ করুন।
  • আপনার বিদ্যমান প্রোডাকশন অ্যাপ্লিকেশনগুলোর সাথে SDK-টি ইন্টিগ্রেট করুন।
  • কনফিডেনশিয়াল স্পেস এবং টিইই হার্ডওয়্যার মডেল সম্পর্কে আরও জানুন।

আরও পড়ুন