Amazon SageMaker çok modelli uç noktaları kullanarak birden çok TensorFlow bilgisayar görüşü modelini barındırın

Kaynak Düğüm: 1853804

Amazon Adaçayı Yapıcı Veri bilimcilerin ve geliştiricilerin, makine öğrenimi için özel olarak oluşturulmuş geniş bir dizi yeteneği bir araya getirerek yüksek kaliteli makine öğrenimi (ML) modellerini hızla hazırlamasına, oluşturmasına, eğitmesine ve dağıtmasına yardımcı olur. SageMaker, etiketleme, veri hazırlama, özellik mühendisliği, istatistiksel sapma algılama, AutoML, eğitim, ayarlama, barındırma, açıklanabilirlik, izleme ve iş akışı otomasyonu dahil olmak üzere ML geliştirmenin her adımı için amaca yönelik araçlar sağlayarak kuruluşunuzdaki yeniliği hızlandırır.

Şirketler, bireysel kullanıcı verilerine dayalı ML modellerini giderek daha fazla eğitiyor. Örneğin, internette bilgilerin keşfedilmesini sağlamak için tasarlanmış bir görüntü paylaşım hizmeti, o kullanıcı için önerileri kişiselleştirmek için her kullanıcının yüklediği görüntülere ve tarama geçmişine dayalı özel modeller eğitir. Şirket ayrıca, konu başına görsel önermek için arama konularına dayalı özel modeller de eğitebilir. Her bir kullanım durumu için özel makine öğrenimi modelleri oluşturmak, daha yüksek çıkarım doğruluğu sağlar, ancak modelleri dağıtma ve yönetme maliyetini artırır. Bu zorluklar, tüm modellere aynı oranda erişilmediğinde ancak yine de her zaman erişilebilir olması gerektiğinde daha belirgin hale gelir.

SageMaker çok modelli uç noktalar bulutta çok sayıda makine öğrenimi modelini dağıtmak için ölçeklenebilir ve uygun maliyetli bir yol sağlar. SageMaker çoklu model uç noktaları, birden çok ML modelini tek bir uç noktanın arkasına dağıtmanıza ve bunları tek bir hizmet kapsayıcı kullanarak sunmanıza olanak tanır. Düşük gecikmeli, yüksek verimli çıkarım elde etmek için uygulamanızın bu uç noktaya hedef modelle bir API çağrısı içermesi yeterlidir. Her bir model için ayrı bir uç nokta için ödeme yapmak yerine, tek bir uç nokta fiyatına birçok modeli barındırabilirsiniz. SageMaker çoklu model uç noktaları hakkında daha fazla bilgi için bkz. Amazon SageMaker çok model uç noktalarını kullanarak çıkarım maliyetlerinden tasarruf edin.

Bu yazıda, görüntü sınıflandırması için farklı model mimarilerine ve veri kümelerine sahip iki bilgisayarlı görü modelini barındırmak için SageMaker çoklu model uç noktalarının nasıl kullanılacağını gösteriyoruz. Pratikte, çok modelli uç noktalarda on binlerce modeli dağıtabilirsiniz.

Çözüme genel bakış

SageMaker çoklu model uç noktaları, TensorFlow, PyTorch, MXNet ve sklearn gibi çeşitli çerçevelerle çalışır ve şunları yapabilirsiniz: çok modelli bir sunucuyla kendi kapsayıcınızı oluşturun. Çoklu model uç noktaları ayrıca aşağıdaki popüler SageMaker yerleşik algoritmalarında yerel olarak desteklenir: XGBoost, Doğrusal Öğrenci, Rastgele Kesim Ormanı (RCF) ve K-En Yakın Komşular (KNN). Kendi özel kapsayıcınızı oluşturmak zorunda kalmadan bu algoritmaları kullanırken SageMaker tarafından sağlanan kapsayıcıları doğrudan kullanabilirsiniz.

Aşağıdaki şema, SageMaker çoklu model uç noktalarını kullanarak birden çok (bu gönderi için altı) modeli nasıl barındırabileceğinizin basitleştirilmiş bir gösterimidir. Uygulamada, çok modelli uç noktalar, bir uç noktanın arkasında yüzlerce ila on binlerce ML modelini barındırabilir. Mimarimizde, depolanan model artefaktlarını kullanarak daha fazla model barındırırsak Amazon Basit Depolama Hizmeti (Amazon S3), çok modelli uç noktalar, daha yeni modellere uyum sağlamak için en az kullanılan modellerden bazılarını dinamik olarak boşaltır.

Bu gönderide, TensorFlow çerçevesi kullanılarak eğitilmiş iki bilgisayarlı görü modelinin tek bir SageMaker çoklu model uç noktasının arkasında nasıl barındırılacağını gösteriyoruz. kullanıyoruz Akış Sunumu çok modelli uç noktaların bu modelleri barındırması için etkinleştirilen kapsayıcı. İlk modelimiz için daha küçük bir versiyonunu eğitiyoruz. AlexNet CNN görüntüleri sınıflandırmak için Cifar-10 veri kümesi. İkinci model için bir VGG16 CNN modeli önceden eğitilmiş IMAGEnet veri seti ve ince ayarlı İşaret Dili Rakamları Veri Kümesi el sembolü resimlerini sınıflandırmak için. Ayrıca tamamen işlevsel bir defter tüm adımları göstermek için.

Model 1: CIFAR-10 görüntü sınıflandırması

CIFAR-10, bilgisayarla görme ve makine öğreniminde görüntü sınıflandırması için bir kıyaslama veri setidir. CIFAR görüntüleri, nesnelerin nasıl göründüğüne dair çarpıcı değişikliklerle renklidir (üç kanal). Sınıf başına 32 görüntü olmak üzere 32 sınıfta 10 × 6,000 renkli görüntüden oluşur. 50,000 eğitim görüntüsü ve 10,000 test görüntüsü içerir. Aşağıdaki resim, etiketlere göre gruplandırılmış resimlerin bir örneğini göstermektedir.

Görüntü sınıflandırıcıyı oluşturmak için klasik AlexNet CNN'nin basitleştirilmiş bir sürümünü kullanıyoruz. Ağ, beş evrişim ve havuzlama katmanından ve üç tam bağlantılı katmandan oluşur. Basitleştirilmiş mimarimiz, üç evrişim katmanı ve iki tam bağlantılı (yoğun) katmandan oluşur.

İlk adım, veri kümesini trene yüklemek ve nesneleri test etmektir. TensorFlow çerçevesi, load_data() yöntemini kullanarak yüklememiz için CIFAR veri kümesi sağlar. Ardından, piksel değerlerini 255: [0,255] ⇒ [0,1]'e bölerek giriş görüntülerini yeniden ölçeklendiririz. Ayrıca etiketleri kullanarak hazırlamamız gerekiyor. tek sıcak kodlama. Bir sıcak kodlama, kategorik değişkenlerin sayısal bir forma dönüştürüldüğü bir işlemdir. Aşağıdaki kod parçacığı, bu adımları eylem halinde gösterir:

from tensorflow.keras.datasets import cifar10 # load dataset
(X_train, y_train), (X_test, y_test) = cifar10.load_data() # rescale input images
X_train = X_train.astype('float32')/255
X_test = X_test.astype('float32')/255 # one hot encode target labels
num_classes = len(np.unique(y_train))
y_train = utils.to_categorical(y_train, num_classes)
y_test = utils.to_categorical(y_test, num_classes)

Veri kümesi hazırlanıp eğitime hazır hale getirildikten sonra SageMaker tarafından kullanılmak üzere Amazon S3'e kaydedilir. Görüntü sınıflandırıcı için model mimarisi ve eğitim kodu, bir eğitim komut dosyasında birleştirilir (cifar_train.py). Eğitim süreci için toplu tensör görüntü verileri oluşturmak için ImageDataGenerator kullanıyoruz. Bu, dönüş, genişlik ve yükseklik kaymaları gibi veri büyütme dönüşümlerini eğitim verilerimize uygulamamızı sağlar.

Sonraki adımda, SageMaker SDK'yı kullanarak bir TensorFlow tahmincisi oluşturmak için eğitim komut dosyasını kullanırız (aşağıdaki koda bakın). Tahmin ediciyi CNN modeline CIFAR-10 girişlerine uydurmak için kullanıyoruz. Eğitim tamamlandığında model Amazon S3'e kaydedilir.

from sagemaker.tensorflow import TensorFlow model_name = 'cifar-10' hyperparameters = {'epochs': 50} estimator_parameters = {'entry_point':'cifar_train.py', 'instance_type': 'ml.m5.2xlarge', 'instance_count': 2, 'model_dir': f'/opt/ml/model', 'role': role, 'hyperparameters': hyperparameters, 'output_path': f's3://{BUCKET}/{PREFIX}/cifar_10/out', 'base_job_name': f'mme-cv-{model_name}', 'framework_version': TF_FRAMEWORK_VERSION, 'py_version': 'py37', 'script_mode': True} estimator_1 = TensorFlow(**estimator_parameters) estimator_1.fit(inputs)

Daha sonra, ikinci modelimizin (işaret dili basamak sınıflandırıcısı) yanı sıra SageMaker çoklu model uç noktasını kullanarak bu modelin nasıl barındırılacağını göstereceğiz.

Model 2: İşaret dili basamak sınıflandırması

İkinci modelimiz için işaret dili rakamları veri setini kullanıyoruz. Bu veri seti, işaret dili rakamlarını 0–9 arasında ayırt eder. Aşağıdaki resim, veri kümesinin bir örneğini göstermektedir.

Veri kümesi, RGB renginde 100 x 100 görüntü içerir ve 10 sınıfa sahiptir (0-9 arası rakamlar). Eğitim seti 1,712 görüntü, doğrulama seti 300 ve test seti 50 içerir.

Bu veri seti çok küçük. Bir ağı bu küçük veri kümesi üzerinde sıfırdan eğitmek iyi sonuçlar vermez. Daha yüksek doğruluk elde etmek için kullanıyoruz transfer öğrenme. Transfer öğrenimi, özellikle çok fazla eğitim veriniz olmadığında, bir sınıflandırma projesine başlarken genellikle tercih edilen yaklaşımdır. Eğitim süresinden ve hesaplama maliyetinden tasarruf etmek için kaynak veri kümesinden öğrenilen bilgileri hedef veri kümesine taşır.

Bu modeli eğitmek için, ImageNet veri setinde eğitilmiş önceden eğitilmiş bir VGG16 CNN modeli kullanıyoruz ve işaret dili rakamları veri setimizde çalışması için ince ayarını yapıyoruz. Önceden eğitilmiş bir model, daha önce büyük bir veri kümesinde, tipik olarak büyük ölçekli bir görüntü sınıflandırma görevinde eğitilmiş bir ağdır. Kullandığımız VGG16 model mimarisinde toplamda 13 konvolüsyon katmanı bulunmaktadır. İşaret dili veri kümesi için, etki alanı ImageNet veri kümesinin kaynak etki alanından farklı olduğundan, yalnızca son birkaç katmanda ince ayar yapıyoruz. Buradaki ince ayar, özellik çıkarımı için kullanılan birkaç ağ katmanının dondurulması ve hem dondurulmamış katmanların hem de önceden eğitilmiş modelin yeni eklenen sınıflandırıcı katmanlarının birlikte eğitilmesi anlamına gelir.

Eğitim komut dosyası (sign_language_train.py) işaret dili basamak sınıflandırıcısı için model mimarisini ve eğitim mantığını kapsar. İlk olarak, ImageNet veri setinde eğitilmiş VGG16 ağından önceden eğitilmiş ağırlıkları yüklüyoruz. Ardından, özellik çıkarıcı bölümünün bir kısmını dondurur ve ardından yeni sınıflandırıcı katmanları ekleriz. Son olarak, ağı derler ve modeli daha küçük veri kümesi için optimize etmek için eğitim sürecini çalıştırırız.

Ardından, SageMaker SDK'yı kullanarak bir TensorFlow tahmincisi oluşturmak için bu eğitim komut dosyasını kullanırız. Bu tahmin edici, sağlanan girişlere işaret dili basamak sınıflandırıcısını sığdırmak için kullanılır. Eğitim tamamlandığında model, SageMaker çoklu model uç noktaları tarafından barındırılmak üzere Amazon S3'e kaydedilir. Aşağıdaki koda bakın:

model_name = 'sign-language' hyperparameters = {'epochs': 50} estimator_parameters = {'entry_point':'sign_language_train.py', 'instance_type': 'ml.m5.2xlarge', 'instance_count': 2, 'hyperparameters': hyperparameters, 'model_dir': f'/opt/ml/model', 'role': role, 'output_path': f's3://{BUCKET}/{PREFIX}/sign_language/out', 'base_job_name': f'cv-{model_name}', 'framework_version': TF_FRAMEWORK_VERSION, 'py_version': 'py37', 'script_mode': True} estimator_2 = TensorFlow(**estimator_parameters) estimator_2.fit({'train': train_input, 'val': val_input})

Çok modelli bir uç nokta dağıtın

SageMaker çoklu model uç noktaları, çok sayıda modeli dağıtmak için ölçeklenebilir ve uygun maliyetli bir çözüm sunar. Birden çok modeli barındırmak için etkinleştirilen bir paylaşılan hizmet kapsayıcısı kullanır. Bu, tek model uç noktaları kullanmaya kıyasla uç nokta kullanımını iyileştirerek barındırma maliyetlerini azaltır. Ayrıca, SageMaker modelleri belleğe yüklemeyi ve bunlara yönelik trafik modellerine göre ölçeklendirmeyi yönettiğinden, dağıtım ek yükünü de azaltır.

Çoklu model uç noktası oluşturmak için öncelikle bireysel tahminciler (1 ve 2) için eğitilmiş modelleri kayıtlı S3 konumlarından çoklu model uç noktası tarafından kullanılabilecek ortak bir S3 önekine kopyalamamız gerekir:

tf_model_1 = estimator_1.model_data
output_1 = f's3://{BUCKET}/{PREFIX}/mme/cifar.tar.gz' tf_model_2 = estimator_2.model_data
output_2 = f's3://{BUCKET}/{PREFIX}/mme/sign-language.tar.gz' !aws s3 cp {tf_model_1} {output_1}
!aws s3 cp {tf_model_2} {output_2}

Modeller S3 öneki ile belirtilen ortak konuma kopyalandıktan sonra SageMaker SDK'dan TensorFlowModel sınıfını kullanarak bir sunum modeli oluşturuyoruz. Sunum modeli, çoklu model uç noktası altında barındırılacak modellerden biri için oluşturulur. Bu durumda ilk modeli kullanıyoruz (CIFAR-10 görüntü sınıflandırıcı). Ardından, önceki adımda oluşturduğumuz model-1 için sunum modelini kullanarak çok modelli bir veri modeli oluşturmak için SageMaker SDK'dan MultiDataModel sınıfını kullanırız:

from sagemaker.tensorflow.serving import TensorFlowModel
from sagemaker.multidatamodel import MultiDataModel model_1 = TensorFlowModel(model_data=output_1, role=role, image_uri=IMAGE_URI) mme = MultiDataModel(name=f'mme-tensorflow-{current_time}', model_data_prefix=model_data_prefix, model=model_1, sagemaker_session=sagemaker_session)

Son olarak, çok modelli uç noktayı desteklemek için gereken barındırma altyapısını oluşturmak için gereken öznitelikleri sağlayarak dağıtım() yöntemini çağırarak MultiDataModel'i dağıtırız:

predictor = mme.deploy(initial_instance_count=2, instance_type='ml.m5.2xlarge', endpoint_name=f'mme-tensorflow-{current_time}')

Dağıtım çağrısı, çıkarım çağrıları yapmak için kullanabileceğimiz bir tahmin örneği döndürür. Bunu bir sonraki bölümde görüyoruz.

Gerçek zamanlı çıkarım için çoklu model uç noktasını test edin

Çok modelli uç noktalar, modelleriniz arasında bellek kaynaklarının paylaşılmasına olanak tanır. Başvurulacak model zaten önbelleğe alınmışsa, çoklu model uç noktaları hemen çıkarımı çalıştırır. Öte yandan, istenen model önbelleğe alınmamışsa, SageMaker'ın modeli indirmesi gerekir, bu da ilk istek için gecikmeyi artırır. Ancak bu, modeli ayrı ayrı SageMaker'da barındırmak için tamamen yeni bir altyapı (örnekler) başlatmak için gereken sürenin yalnızca küçük bir kısmını alır. Bir model çok modelli uç noktada önbelleğe alındıktan sonra, sonraki istekler gerçek zamanlı olarak başlatılır (model kaldırılmadığı sürece). Sonuç olarak, birçok modeli tek bir örnekten çalıştırabilir, model miktarımızı dağıtım maliyetimizden etkin bir şekilde ayırabilirsiniz. Bu, ML dağıtımlarını geniş ölçekte yönetmeyi kolaylaştırır ve uç noktanın ve onun altında yatan bilgi işlem örneklerinin artan kullanımı yoluyla model dağıtım maliyetlerinizi düşürür. 90 modellik bir örnek için %1,000'ın üzerinde maliyet tasarrufunun gösterilmesi ve daha fazla bilgi için, bkz. Amazon SageMaker çoklu model uç noktalarını kullanarak çıkarım maliyetlerinden tasarruf edin.

Çok modelli uç noktalar, uç noktayı destekleyen örnekler bellek kapasitesine ulaştığında ve kapsayıcısına daha fazla model yüklenmesi gerektiğinde kapsayıcıdan kullanılmayan modelleri de boşaltır. SageMaker, birim kapasiteye ulaştığında ve yeni modellerin indirilmesi gerektiğinde örnek depolama biriminden kullanılmayan model yapılarını siler. Uç noktanın modeli Amazon S3'ten kapsayıcının çoklu model uç noktasını destekleyen örneklerin belleğine indirmesi zaman aldığından, yeni eklenen bir modele yönelik ilk çağrı daha uzun sürer. Kaldırılan modeller, örneğin depolama biriminde kalır ve daha sonra S3 klasöründen tekrar indirilmeden kapsayıcının belleğine yüklenebilir.

Çoklu model uç noktası altında barındırılan CIFAR-10 görüntü sınıflandırıcısından (model-1) nasıl çıkarım yapılacağını görelim. İlk olarak, sınıflardan birinden (uçak) örnek bir görüntü yüklüyoruz ve önceki adımda oluşturduğumuz tahminciyi kullanarak çoklu model uç noktasına gönderilmek üzere hazırlıyoruz.

Bu öngörücü ile, çağrılacak hedef modelin adını belirten initial_args parametresiyle birlikte tahmin() yöntemini çağırabiliriz. Bu durumda hedef model cifar.tar.gz'dir. Aşağıdaki snippet, bu işlemi ayrıntılı olarak gösterir:

img = load_img('./data/cifar_10/raw_images/airplane.png', target_size=(32, 32))
data = img_to_array(img)
data = data.astype('float32')
data = data / 255.0
data = data.reshape(1, 32, 32, 3)
payload = {'instances': data}
y_pred = predictor.predict(data=payload, initial_args={'TargetModel': 'cifar.tar.gz'})
predicted_label = CIFAR10_LABELS[np.argmax(y_pred)]
print(f'Predicted Label: [{predicted_label}]')

Önceki kodu çalıştırmak, hizmet verilen modelimiz tarafından doğru bir şekilde yorumlanan etiket uçağı olarak tahmin çıktısını döndürür:

Predicted Label: [airplane]

Ardından, hedef model olarak işaret dili.tar.gz ile uç noktayı çağırarak işaret dili rakam sınıflandırıcısını (model-2) çok modelli bir uç noktaya dinamik olarak nasıl yükleyeceğimizi görelim.

El işareti basamağı 0'ın aşağıdaki örnek görüntüsünü kullanıyoruz.

Aşağıdaki kod parçası, doğru yanıtı geri almak için örnek görüntüyle çoklu model uç noktasının nasıl çağrılacağını gösterir:

test_path = './data/sign_language/test'
img = mpimg.imread(f'{test_path}/0/IMG_4159.JPG') def path_to_tensor(img_path): # loads RGB image as PIL.Image.Image type img = image.load_img(img_path, target_size=(224, 224)) # convert PIL.Image.Image type to 3D tensor with shape (224, 224, 3) x = image.img_to_array(img) # convert 3D tensor to 4D tensor with shape (1, 224, 224, 3) and return 4D tensor return np.expand_dims(x, axis=0) data = path_to_tensor(f'{test_path}/0/IMG_4159.JPG')
payload = {'instances': data}
y_pred = predictor.predict(data=payload, initial_args={'TargetModel': 'sign-language.tar.gz'})predicted_label = np.argmax(y_pred)
print(f'Predicted Label: [{predicted_label}]')

Aşağıdaki kod, 0 etiketli yanıtımızdır:

Predicted Label: [0]

Sonuç

Bu yazıda SageMaker özelliğini gösterdik çok modelli uç noktalar çıkarım maliyetlerini optimize etmek için. Çok modelli uç noktalar, yüzlerce ila on binlerce modelle uğraşırken ve her modeli ayrı bir uç nokta olarak dağıtmanıza gerek olmadığında kullanışlıdır. Modeller, kullanıma ve uç noktada kullanılabilir bellek miktarına göre dinamik olarak yüklenir ve kaldırılır.

Bu gönderi, TensorFlow çerçevesi kullanılarak eğitilmiş birden fazla bilgisayarlı görü modelinin tek bir SageMaker çoklu model uç noktası altında nasıl barındırılacağını tartıştı. Görüntü sınıflandırma modelleri, farklı model mimarilerine sahipti ve farklı veri kümeleri üzerinde eğitildi. defter gönderiyle birlikte verilenler, modellerin eğitimi ve barındırılması hakkında ayrıntılı talimatlar sağlar.

Kullanım durumunuz için SageMaker çoklu model uç noktalarını deneyin ve geri bildiriminizi yorumlarda bırakın.


Yazarlar Hakkında

Arunprasath Şankar AWS'li bir Yapay Zeka ve Makine Öğrenimi (AI / ML) Uzman Çözüm Mimarıdır ve küresel müşterilerin yapay zeka çözümlerini bulutta etkili ve verimli bir şekilde ölçeklendirmelerine yardımcı olur. Arun boş zamanlarında bilim kurgu filmleri izlemekten ve klasik müzik dinlemekten hoşlanıyor.

Mark Roy AWS için Ana Makine Öğrenimi Mimarıdır ve AWS müşterilerinin AI/ML çözümleri tasarlamasına ve oluşturmasına yardımcı olur. Mark'ın çalışması, bilgisayar vizyonu, derin öğrenme ve kurum genelinde ML'yi ölçeklendirmeye ilgi duyan çok çeşitli ML kullanım örneklerini kapsar. Sigorta, Finansal Hizmetler, Medya ve Eğlence, Sağlık, Kamu Hizmetleri ve İmalat dahil olmak üzere birçok sektördeki şirketlere yardımcı olmuştur. Mark, ML Specialty Certification da dahil olmak üzere altı AWS sertifikasına sahiptir. AWS'ye katılmadan önce Mark, 25 yılı finansal hizmetlerde olmak üzere 19 yılı aşkın süredir mimar, geliştirici ve teknoloji lideriydi.

Kaynak: https://aws.amazon.com/blogs/machine-learning/host-multiple-tensorflow-computer-vision-models-using-amazon-sagemaker-multi-model-endpoints/

Zaman Damgası:

Den fazla AWS Makine Öğrenimi Blogu