Zephyrnet Logosu

Güvenli, gerçek zamanlı çıkarım için Amazon SageMaker uç noktalarıyla tamamen homomorfik şifrelemeyi etkinleştirin

Tarih:

Bu, ortak yazar tarafından yazılan ortak gönderidir. Leidos ve AWS. Leidos, savunma, istihbarat, iç güvenlik, sivil ve sağlık pazarlarında dünyanın en zorlu zorluklarından bazılarını ele almak için çalışan bir FORTUNE 500 bilim ve teknoloji çözümleri lideridir.

Leidos, bulut özellikli, şifrelenmiş işlem hatları oluşturduğunuz, gizliliği koruyan, gizli makine öğrenimi (ML) modellemesine yönelik bir yaklaşım geliştirmek için AWS ile ortaklık kurdu.

Homomorfik şifreleme, verilerin şifresinin asla çözülmemesi gerektiğini belirten bir politikanız olduğu durumlarda gizliliği korumak için, önce şifresini çözmek zorunda kalmadan şifrelenmiş veriler üzerinde hesaplamaların ve analitik işlevlerin çalıştırılmasına izin veren yeni bir şifreleme yaklaşımıdır. Tamamen homomorfik şifreleme (FHE), bu tür bir yaklaşımın en güçlü kavramıdır ve sıfır güvenin anahtar olduğu durumlarda verilerinizin değerini ortaya çıkarmanıza olanak tanır. Temel gereksinim, verilerin sayısal, metinsel ve görüntü tabanlı veri kümelerine uygulanabilen bir kodlama tekniği aracılığıyla sayılarla temsil edilebilmesidir. FHE kullanan verilerin boyutu daha büyüktür, bu nedenle, çıkarımın neredeyse gerçek zamanlı olarak veya boyut sınırlamalarıyla gerçekleştirilmesine ihtiyaç duyan uygulamalar için test yapılmalıdır. Tüm hesaplamaları doğrusal denklemler olarak ifade etmek de önemlidir.

Bu gönderide, en üst düzey düzenlemelere tabi ortamlar için gizliliği koruyan makine öğrenimi tahminlerinin nasıl etkinleştirileceğini gösteriyoruz. Tahminler (çıkarım) şifrelenmiş verileri kullanır ve sonuçların şifresi yalnızca son tüketici (müşteri tarafı) tarafından çözülür.

Bunu göstermek için, bir özelleştirme örneğini gösteriyoruz. Amazon Adaçayı Yapıcı Scikit-learn, açık kaynaklı, derin öğrenme kabı konuşlandırılmış bir uç noktanın istemci tarafında şifrelenmiş çıkarım isteklerini kabul etmesini sağlamak için. Bu örnek çıkarım işlemleri için bunun nasıl gerçekleştirileceğini gösterse de, çözümü eğitim ve diğer makine öğrenimi adımlarına genişletebilirsiniz.

Uç noktalar, geliştiricilerin ve makine öğrenimi uzmanlarının bulutta makine öğrenimi ve derin öğrenme modelleri oluşturma ve eğitme sürecini basitleştiren SageMaker kullanılarak birkaç tıklamayla veya kod satırıyla dağıtılır. SageMaker kullanılarak oluşturulan modeller daha sonra şu şekilde dağıtılabilir: gerçek zamanlı uç noktalar, gerçek zamanlı, sabit durum, düşük gecikme gereksinimlerine sahip olduğunuz çıkarım iş yükleri için kritik öneme sahiptir. Uygulamalar ve hizmetler, dağıtılan uç noktayı doğrudan veya dağıtılan sunucusuz bir ağ üzerinden arayabilir Amazon API Ağ Geçidi mimari. Gerçek zamanlı uç nokta mimarisi en iyi uygulamaları hakkında daha fazla bilgi edinmek için bkz. Amazon API Gateway eşleme şablonları ve Amazon SageMaker ile makine öğrenimi destekli bir REST API oluşturma. Aşağıdaki şekil, bu kalıpların her iki versiyonunu da göstermektedir.

zaman uç noktası mimari en iyi uygulamaları

Bu modellerin her ikisinde de aktarım sırasında şifreleme, veriler çıkarım işlemini gerçekleştirmek için hizmetlerden geçerken gizlilik sağlar. SageMaker uç noktası tarafından alındığında, çalışma zamanında çıkarım işlemini gerçekleştirmek için verilerin şifresi genellikle çözülür ve herhangi bir harici kod ve işlem tarafından erişilemez. Ek koruma seviyeleri elde etmek için FHE, çıkarım işleminin güvenilir bir uygulama veya istemci tarafından sonuçların şifresinin çözülebileceği şifreli sonuçlar oluşturmasını sağlar.

Tamamen homomorfik şifreleme hakkında daha fazlası

FHE, sistemlerin şifrelenmiş veriler üzerinde hesaplamalar gerçekleştirmesini sağlar. Ortaya çıkan hesaplamalar, şifresi çözüldüğünde, şifreleme işlemi olmadan üretilenlere kontrol edilebilir bir şekilde yakındır. FHE, hesaplamaya eklenen gürültü nedeniyle kayan nokta hatasına benzer şekilde küçük bir matematiksel belirsizliğe neden olabilir. Soruna özgü, ayarlanmış bir parametre olan uygun FHE şifreleme parametreleri seçilerek kontrol edilir. Daha fazla bilgi için videoyu izleyin Homomorfik şifrelemeyi nasıl açıklarsınız?

Aşağıdaki diyagram, bir FHE sisteminin örnek bir uygulamasını sağlar.

bir FHE sisteminin örnek uygulaması

Bu sistemde siz veya güvenilir müşteriniz aşağıdakileri yapabilirsiniz:

  1. Bir genel anahtar FHE şeması kullanarak verileri şifreleyin. Birkaç farklı kabul edilebilir şema vardır; bu örnekte CKKS şemasını kullanıyoruz. Seçtiğimiz FHE ortak anahtar şifreleme süreci hakkında daha fazla bilgi edinmek için bkz. CKKS açıkladı.
  2. İstemci tarafı şifrelenmiş verileri işlenmek üzere bir sağlayıcıya veya sunucuya gönderin.
  3. Şifrelenmiş veriler üzerinde model çıkarımı gerçekleştirin; FHE ile şifre çözme gerekmez.
  4. Şifrelenmiş sonuçlar arayana döndürülür ve daha sonra, yalnızca sizin veya istemcideki güvenilir kullanıcılarınız tarafından kullanılabilen özel bir anahtar kullanılarak sonucunuzun şifresi çözülür.

SageMaker uç noktalarını kullanan bir örnek oluşturmak için önceki mimariyi kullandık, Pyfhel ML uygulamalarıyla entegrasyonu basitleştiren bir FHE API paketleyici olarak ve SEAL temel FHE şifreleme araç setimiz olarak.

Çözüme genel bakış

AWS'de bir ölçeklenebilir FHE işlem hattı örneği oluşturduk. SKLearn lojistik regresyon ile derin öğrenme kapsayıcısı Iris veri kümesi. Bir SageMaker not defteri kullanarak veri keşfi ve özellik mühendisliği gerçekleştiriyoruz ve ardından bir SageMaker kullanarak model eğitimi gerçekleştiriyoruz. SageMaker eğitim işi. Ortaya çıkan model konuşlandırılmış aşağıdaki şemada gösterildiği gibi istemci hizmetleri tarafından kullanılmak üzere bir SageMaker gerçek zamanlı uç noktasına.

AWS'de ölçeklenebilir bir FHE işlem hattı örneği

Bu mimaride, yalnızca istemci uygulaması şifrelenmemiş verileri görür. Çıkarım için model aracılığıyla işlenen veriler, izole edilmiş sistemdeki işlemci içindeki çalışma zamanında bile yaşam döngüsü boyunca şifreli kalır. AWS Nitro Bölgesi. Aşağıdaki bölümlerde, bu işlem hattını oluşturmak için kodu gözden geçireceğiz.

Önkoşullar

Takip etmek için, bir kampanya başlattığınızı varsayıyoruz. SageMaker not defteri bir ile AWS Kimlik ve Erişim Yönetimi (IAM) rolü ile AmazonSageMakerTam Erişim yönetilen politika

Modeli eğitin

Aşağıdaki diyagram, model eğitimi iş akışını göstermektedir.

model eğitimi iş akışı

Aşağıdaki kod, SageMaker not defterlerini kullanarak eğitim veri kümemizi çekerek, gerekli temizleme işlemlerini gerçekleştirerek ve ardından verileri bir Amazon Basit Depolama Hizmeti (Amazon S3) paketi. Bu aşamada, veri setinizin ek özellik mühendisliğini de yapmanız veya farklı çevrimdışı özellik depolarıyla entegre etmeniz gerekebilir.

# Setup/Train Logistic Regression Estimator # load and preprocess iris dataset
iris = datasets.load_iris()
iris_df = pd.DataFrame(data=iris.data, columns=iris.feature_names)
target_df = pd.DataFrame(data=iris.target, columns=["species"])
iris_df = (iris_df - iris_df.mean(0)) / (iris_df.std(0)) # save iris dataset
iris_df = pd.concat([iris_df, target_df], axis=1)
fname = "iris.csv"
iris_df.to_csv(fname, index=False) # upload dataset to S3
bucket = Session().default_bucket()
upload _path = f"training data/fhe train.csv"
boto3.Session().resource("s3").Bucket (bucket) .Object (upload path).upload file(fname)

Bu örnekte, kullandığımız komut dosyası modu SageMaker içinde yerel olarak desteklenen bir çerçevede (scikit-öğrenme), burada çıkarım sırasında şifrelenmiş verileri işlemek için varsayılan SageMaker SKLearn tahmin aracımızı özel bir eğitim betiğiyle başlatıyoruz. Yerel olarak desteklenen çerçeveler ve betik modu hakkında daha fazla bilgi görmek için bkz. Amazon SageMaker ile Makine Öğrenimi Çerçevelerini, Python ve R'yi kullanın.

# instantiate estimator
sklearn estimator = SKLearn( role=get_execution_ role(), entry point="fhe train.py", source_dir="fhe_files", instance_type="ml.c4.xlarge" framework version="0.23-1",
)

Son olarak, modelimizi veri kümesi üzerinde eğitiyoruz ve eğitilmiş modelimizi tercih ettiğimiz örnek türüne dağıtıyoruz.

# fit the model
sklearn estimator.fit("s3://" + bucket + "/training data") # construct predictor from trained model
predictor = sklearn_estimator.deploy(instance_type="ml.c4.xlarge", initial_instance_count=1)

Bu noktada, özel bir SKLearn FHE modeli eğittik ve onu, şifrelenmiş verileri kabul etmeye hazır bir SageMaker gerçek zamanlı çıkarım uç noktasına yerleştirdik.

İstemci verilerini şifreleyin ve gönderin

Aşağıdaki diyagram, müşteri verilerini şifreleme ve modele gönderme iş akışını göstermektedir.

istemci verilerini şifreleme ve modele gönderme iş akışı

Çoğu durumda, çıkarım uç noktasına yapılan çağrının yükü, önce Amazon S3'te depolamak yerine şifrelenmiş verileri içerir. Bunu bu örnekte, çıkarım çağrısı için çok sayıda kaydı bir araya topladığımız için yapıyoruz. Uygulamada, bu parti boyutu daha küçük olacak veya bunun yerine parti dönüşümü kullanılacaktır. Amazon S3'ün aracı olarak kullanılması FHE için gerekli değildir.

Artık çıkarım uç noktası ayarlandığına göre, verileri göndermeye başlayabiliriz. Normalde farklı test ve eğitim veri kümeleri kullanırız, ancak bu örnek için aynı eğitim veri kümelerini kullanırız.

İlk olarak client tarafına Iris veri setini yüklüyoruz. Ardından, Pyfhel kullanarak FHE bağlamını kurduk. Bu işlem için Pyfhel'i seçtik çünkü kurulumu ve çalışması basit, popüler FHE şemaları içeriyor ve altta yatan güvenilir açık kaynaklı şifreleme uygulamasına dayanıyor. SEAL. Bu örnekte, şifrelenmiş verileri, bu FHE şeması için ortak anahtar bilgileriyle birlikte sunucuya gönderiyoruz; gelen verilerin şifresini çözme yeteneği. Özel anahtar, yalnızca sonuçların şifresini çözme yeteneğine sahip olan istemcide kalır.

# Encrypt Data Locally # load and preprocess potentially private data
iris = datasets.load_iris()
iris_df = pd.DataFrame(data=iris.data, columns=iris.feature_names)
target_df = pd.DataFrame(data=iris.target, columns=["species"])
iris_df = (iris_df - iris_df.mean(0)) / (iris_df.std(0)) # setup FHE
HE = Pyfhel()
ckks_params = { “scheme”: "CKKS", "n": 2 ** 14, "scale": 2 ** 30, "qi_sizes": [60, 30, 30, 30, 60],
}
HE.contextGen(**ckks_params)
HE.keyGen()
HE.relinKeyGen()
HE.rotateKeyGen() # encrypt the data
iris_np = np.append( iris_df.to_numpy(), np.ones((len(iris_df), 1)), -1 # append 1 for bias term
)
encrypted_iris = [HE.encryptFrac(row).to_bytes() for row in iris np]

Verilerimizi şifreledikten sonra, Amazon S3'te depolanmak üzere (ilgili anahtarlar ve şifrelenmiş veriler dahil) eksiksiz bir veri sözlüğü oluştururuz. Daha sonra model, tahminlerini istemciden gelen şifrelenmiş veriler üzerinden aşağıdaki kodda gösterildiği gibi yapar. Özel anahtarı iletmediğimize dikkat edin, bu nedenle model ana bilgisayar verilerin şifresini çözemez. Bu örnekte, verileri bir S3 nesnesi olarak geçiriyoruz; alternatif olarak, bu veriler doğrudan Sagemaker uç noktasına gönderilebilir. Gerçek zamanlı bir uç nokta olarak yük, istek gövdesinde belirtilen veri parametresini içerir. SageMaker belgeleri.

# Send data to get prediction # store data and encryption paramters
data dict = { "data": encrypted_iris, "public_key": HE.to_bytes_public_key(), "relin_key": HE.to_bytes_relin key(), "rotate_key": HE.to_bytes_rotate_key(), "context": HE.to_bytes_context(),
} # upload data and encryption parameters to s3
pickle.dump(data_dict, open("request.pkl”, "wb"))
boto3.Session().resource("s3").Bucket(bucket).Object("request.pkl").upload_file("request.pkl") # get predictions from our instance
response = predictor.predict({ "bucket": bucket, "uri": "request.pkl"})
predictions = pickle.loads(response)

Aşağıdaki ekran görüntüsü, içindeki merkezi tahmini gösterir. fhe_train.py (ek, tüm eğitim senaryosunu gösterir).

predictions = []
for data in encrypted_data: encrypted_prediction = [ HE.scalar_prod_plain(data, encoded_coef, in_new_ctxt=True).to_bytes() for encoded_coef in encoded_coefs ] predictions.append(encrypted_prediction)

Şifreli lojistik regresyonumuzun sonuçlarını hesaplıyoruz. Bu kod, olası her sınıf için şifrelenmiş bir skaler ürünü hesaplar ve sonuçları istemciye döndürür. Sonuçlar, tüm örneklerde her sınıf için tahmin edilen logitlerdir.

İstemci şifresi çözülmüş sonuçlar döndürür

Aşağıdaki diyagram, çıkarım sonucunu ortaya çıkarmak için istemcinin şifrelenmiş sonucunu alma ve şifresini çözme (yalnızca onların erişebildiği özel anahtarla) iş akışını göstermektedir.

şifrelenmiş sonucunu alan ve şifresini çözen istemcinin iş akışı

Bu örnekte, sonuçlar Amazon S3'te depolanır, ancak bu genellikle gerçek zamanlı uç noktanın yükü aracılığıyla döndürülür. Amazon S3'ün aracı olarak kullanılması FHE için gerekli değildir.

Çıkarım sonucu, FHE kullanmadan kendileri hesaplamış gibi sonuçlara kontrollü bir şekilde yakın olacaktır.

# Decrypt results locally # extract predictions from class probabilities
cl_preds = []
for prediction in predictions: logits = [PyCtxt(bytestring=p, scheme="CKKS", pyfhel=HE) for p in prediction] cl = np.argmax([HE.decryptFrac(logit)[0] for logit in logits]) c1_preds.append(cl) # compute accuracy
np.mean(cl_preds == target_df.to_numpy().squeeze()) * 100 # clean up
predictor.delete_endpoint()

Temizlemek

Bu işlemden sonra kullanılmayan bir işlem kalmadığından emin olmak için oluşturduğumuz uç noktayı silerek bu işlemi sonlandırıyoruz.

Sonuçlar ve düşünceler

FHE'yi modellerin üzerinde kullanmanın yaygın dezavantajlarından biri, pratikte ortaya çıkan modeli etkileşimli kullanım durumları için çok yavaş hale getiren hesaplama yükü eklemesidir. Ancak, verilerin çok hassas olduğu durumlarda, bu gecikme değiş tokuşunu kabul etmek faydalı olabilir. Ancak, basit lojistik regresyonumuz için, 140 girdi verisi örneğini 60 saniye içinde işleyebilir ve doğrusal performansı görebiliriz. Aşağıdaki grafik, müşteri tarafından girişi şifrelemek ve sonuçların şifresini çözmek için gerçekleştirilen süre dahil olmak üzere toplam uçtan uca süreyi içerir. Ayrıca gecikme ekleyen ve bu durumlar için gerekli olmayan Amazon S3'ü kullanır.

örnek sayısını 1'den 150'ye çıkardıkça doğrusal ölçekleme

Örnek sayısını 1'den 150'ye çıkardıkça doğrusal ölçekleme görüyoruz. Bu bekleniyor çünkü her örnek birbirinden bağımsız olarak şifreleniyor, bu nedenle hesaplamada sabit bir kurulum maliyeti ile doğrusal bir artış bekliyoruz.

Bu aynı zamanda, SageMaker uç noktanızın arkasında daha fazla istek verimi için çıkarım filonuzu yatay olarak ölçeklendirebileceğiniz anlamına gelir. Kullanabilirsiniz Amazon SageMaker Çıkarım Öneri Aracı iş ihtiyaçlarınıza göre filonuzu optimize etmek için.

Sonuç

Ve işte karşınızda: birkaç satır kodla kurabileceğiniz bir SKLearn lojistik regresyon modeli için tamamen homomorfik şifreleme ML'si. Bazı özelleştirmelerle, aynı şifreleme işlemini eğitim verilerinden bağımsız olarak farklı model türleri ve çerçeveler için uygulayabilirsiniz.

Homomorfik şifreleme kullanan bir makine öğrenimi çözümü oluşturma hakkında daha fazla bilgi edinmek istiyorsanız daha fazla bilgi edinmek için AWS hesap ekibiniz veya iş ortağınız Leidos ile iletişime geçin. Daha fazla örnek için aşağıdaki kaynaklara da başvurabilirsiniz:

Bu gönderideki içerik ve görüşler, üçüncü taraf yazarların görüşlerini içerir ve AWS, bu gönderinin içeriğinden veya doğruluğundan sorumlu değildir.

Ek

Tam eğitim senaryosu aşağıdaki gibidir:

import argparse
import os
import pickle
from io import BytesIO import boto3
import joblib
import numpy as np
import pandas as pd
from Pyfhel import PyCtxt, Pyfhel
from sklearn.linear_model import LogisticRegression def model_fn(model_dir): clf = joblib.load(os.path.join(model_dir, "model.joblib")) return clf def input_fn(request_body, request_content_type): loaded_data = np.load(BytesIO(request_body), allow_pickle=True).item() boto3.Session().resource("s3").Bucket(loaded_data["bucket"]).download_file( loaded_data["uri"], "request.pkl" ) loaded_data = pickle.load(open("request.pkl", "rb")) return loaded_data def predict_fn(input_data, model): HE = Pyfhel() data = input_data["data"] HE.from_bytes_context(input_data["context"]) HE.from_bytes_public_key(input_data["public_key"]) HE.from_bytes_relin_key(input_data["relin_key"]) HE.from_bytes_rotate_key(input_data["rotate_key"]) encrypted_data = [PyCtxt(bytestring=row, scheme="CKKS", pyfhel=HE) for row in data] coefs = [ np.append(coef, intercept).astype("float64") for coef, intercept in zip(model.coef_, model.intercept_) ] encoded_coefs = [HE.encodeFrac(coef) for coef in coefs] predictions = [] for data in encrypted_data: encrypted_prediction = [ HE.scalar_prod_plain(data, encoded_coef, in_new_ctxt=True).to_bytes() for encoded_coef in encoded_coefs ] predictions.append(encrypted_prediction) encoded_output = pickle.dumps(predictions) output = np.frombuffer(encoded_output, dtype="byte") return output if __name__ == "__main__": parser = argparse.ArgumentParser() # Data and model directories parser.add_argument("--model-dir", type=str, default=os.environ.get("SM_MODEL_DIR")) parser.add_argument( "--train", type=str, default=os.environ.get("SM_CHANNEL_TRAINING") ) args, _ = parser.parse_known_args() train_df = pd.read_csv(args.train + "/" + "fhe_train.csv") model = LogisticRegression() model.fit(train_df.iloc[:, :-1], train_df.iloc[:, -1]) acc = np.mean(model.predict(train_df.iloc[:, :-1]) == train_df.iloc[:, -1]) * 100 print("****Accuracy****", acc) joblib.dump(model, os.path.join(args.model_dir, "model.joblib"))


Yazarlar Hakkında

Liv d'Aliberti Teknoloji Ofisi'ne bağlı Leidos AI/ML Accelerator bünyesinde bir araştırmacıdır. Araştırmaları gizliliği koruyan makine öğrenimine odaklanıyor.

Menbir Gulati Teknoloji Ofisi'ne bağlı Leidos AI/ML Accelerator bünyesinde bir araştırmacıdır. Araştırması, siber güvenlik ve ortaya çıkan AI tehditlerinin kesişimine odaklanmaktadır.

Joe Kovba Teknoloji Ofisi'ne bağlı Leidos Dijital Modernizasyon Hızlandırıcı bünyesinde bir Bulut Mükemmeliyet Merkezi Uygulama Lideridir. Boş zamanlarında futbol maçlarında hakemlik yapmaktan ve softbol oynamaktan hoşlanır.

Ben Snily Kamu Sektörü Uzmanı Çözüm Mimarıdır. Devlet kurumları, kar amacı gütmeyen kuruluşlar ve eğitim müşterileri ile büyük veri ve analitik projeler üzerinde çalışarak AWS kullanarak çözüm oluşturmalarına yardımcı olur. Boş zamanlarında evinin her yerine IoT sensörleri ekliyor ve bunlar üzerinde analizler yapıyor.

Sami Hoca Dünya Çapında Kamu Sektörünü kapsayan Partners Consulting bölümünde Kıdemli Çözüm Mimarıdır. Sami, eşit parçaların tasarım düşüncesi, yenilikçilik ve duygusal zekanın, ihtiyaç sahibi insanlar için sorunları çözmek ve onları etkilemek için kullanılabileceği projeler konusunda tutkulu.

spot_img

En Son İstihbarat

spot_img

Bizimle sohbet

Merhaba! Size nasıl yardım edebilirim?