Yeni ve geliştirilmiş Amazon SageMaker Python SDK'sını kullanarak ML yaşam döngünüzü hızlandırın – Bölüm 2: ModelBuilder

Facebok sayfasını beğenin :
sevilen

Tarih:

In Bölüm 1 Bu seride, yeni başlatılan ModelTrainer sınıfını tanıttık Amazon Adaçayı Yapıcı Python SDK ve avantajları ve size özel bir veri kümesinde bir Meta Llama 3.1 8B modelinin nasıl ince ayar yapılacağını gösterdik. Bu gönderide, Model Oluşturucu ModelTrainer'dan SageMaker uç noktasına sorunsuz bir şekilde bir model dağıtmanıza olanak tanıyan ve birden fazla dağıtım yapılandırması için tek bir arayüz sağlayan sınıf.

Kasım 2023'te ModelBuilder sınıfını başlattık (bkz. Amazon SageMaker'daki yeni araçlar ve rehberli iş akışlarıyla modelleri daha hızlı paketleyin ve dağıtın ve Amazon SageMaker ile klasik ML ve LLM'leri kolayca paketleyin ve dağıtın, 1. bölüm: PySDK İyileştirmeleri), bir uç nokta yapılandırması oluşturma, kapsayıcıyı seçme, serileştirme ve serileştirmeyi kaldırma gibi bir SageMaker uç noktası oluşturmanın ilk kurulumunun karmaşıklığını azaltan ve tek bir adımda dağıtılabilir bir model oluşturmanıza yardımcı olan. Son güncelleme, özellikle hızla gelişen üretken AI alanında, ModelBuilder sınıfının çok çeşitli kullanım durumları için kullanılabilirliğini artırıyor. Bu gönderide, ModelBuilder sınıfında yapılan geliştirmelere derinlemesine dalıyoruz ve ince ayarlı modeli sorunsuz bir şekilde nasıl dağıtacağınızı gösteriyoruz Bölüm 1 SageMaker uç noktasına.

ModelBuilder sınıfında iyileştirmeler

ModelBuilder sınıfında aşağıdaki kullanılabilirlik iyileştirmelerini yaptık:

  • Eğitimden çıkarıma sorunsuz geçiş – ModelBuilder artık en son eğitilen model eserine giden doğru dosya yolunun otomatik olarak hesaplanmasını sağlamak için doğrudan SageMaker eğitim arayüzleriyle entegre oluyor ve bu sayede model eğitiminden dağıtıma kadar iş akışı basitleşiyor.
  • Birleşik çıkarım arayüzü – Daha önce SageMaker SDK, gerçek zamanlı, toplu, sunucusuz ve eşzamansız çıkarım gibi farklı çıkarım türleri için ayrı arayüzler ve iş akışları sunuyordu. Model dağıtım sürecini basitleştirmek ve tutarlı bir deneyim sağlamak için ModelBuilder'ı, birden fazla çıkarım türünü destekleyen birleşik bir arayüz olarak hizmet verecek şekilde geliştirdik.
  • Geliştirme, test etme ve üretime geçiş kolaylığı – Kullanıcıların daha hızlı yerel testlerle, bir konteyner eklemeden, işleme ve çıkarım betiklerini zahmetsizce hata ayıklayabilmeleri ve test edebilmeleri için ModelBuilder ile yerel mod testi desteği ekliyoruz. Ayrıca, belirli bir çerçeve için en son konteyner görüntüsünü çıkaran yeni bir işlev ekliyoruz; böylece her yeni LMI sürümü çıktığında kodu güncellemenize gerek kalmıyor.
  • Özelleştirilebilir çıkarım ön işleme ve son işleme – ModelBuilder artık çıkarım için ön işleme ve son işleme adımlarını özelleştirmenize olanak tanır. Betiklerin içeriği filtrelemesini ve kişisel olarak tanımlanabilir bilgileri (PII) kaldırmasını sağlayarak, bu entegrasyon dağıtım sürecini kolaylaştırır, belirli çıkarım gereksinimleri olan modellerin daha iyi yönetimi ve dağıtımı için gerekli adımları model yapılandırması içinde kapsüller.
  • Karşılaştırmalı değerlendirme desteği – ModelBuilder'daki yeni kıyaslama desteği, gecikme ve maliyet gibi temel performans ölçütlerine göre uç noktalar ve kapsayıcılar gibi dağıtım seçeneklerini değerlendirmenizi sağlar. Bir Kıyaslama API'sinin sunulmasıyla senaryoları test edebilir ve bilinçli kararlar alabilir, üretim öncesinde modellerinizi en yüksek performans için optimize edebilirsiniz. Bu, verimliliği artırır ve uygun maliyetli dağıtımlar sağlar.

Aşağıdaki bölümlerde bu geliştirmeleri daha ayrıntılı olarak ele alıyor ve modelinizi nasıl özelleştireceğinizi, test edeceğinizi ve dağıtacağınızı gösteriyoruz.

ModelTrainer sınıfından kusursuz dağıtım

ModelBuilder, sorunsuz bir şekilde entegre olur Model Eğitmeni sınıf; modeli eğitmek için kullanılan ModelTrainer nesnesini doğrudan Model parametresindeki ModelBuilder'a geçirebilirsiniz. ModelTrainer'a ek olarak, ModelBuilder ayrıca Estimator sınıfını ve SageMaker Core'un sonucunu da destekler TrainingJob.create() işlevi ve otomatik olarak model yapıtlarını ayrıştırarak bir SageMaker Model nesnesi oluşturur. Kaynak zincirlemeyle, aşağıdaki örnekte gösterildiği gibi modeli oluşturabilir ve dağıtabilirsiniz. Eğer takip ettiyseniz Bölüm 1 Bu seride Meta Llama 3.1 8B modelini ince ayarlamak için, model_trainer aşağıdaki gibi nesne:

# set container URI
image_uri = "763104351884.dkr.ecr.us-west-2.amazonaws.com/huggingface-pytorch-tgi-inference:2.3.0-tgi2.2.0-gpu-py310-cu121-ubuntu22.04-v2.0"

model_builder = ModelBuilder(
    model=model_trainer,  # ModelTrainer object passed onto ModelBuilder directly
    role_arn=role,
    image_uri=image_uri,
    inference_spec=inf_spec,
    instance_type="ml.g5.2xlarge"
)
# deploy the model
model_builder.build().deploy()

InferenceSpec kullanarak modeli özelleştirin

The InferenceSpec sınıf, modeli yüklemek ve çağırmak için özel mantık sağlayarak modeli özelleştirmenize ve gerektiğinde herhangi bir ön işleme mantığı veya son işleme mantığını belirtmenize olanak tanır. SageMaker uç noktaları için, ön işleme ve son işleme betikleri genellikle, özellikle karmaşık iş akışları veya standart dışı modeller durumunda, veriler tahminler için modele gönderilmeden önce ve sonra gereken görevleri işlemek için çıkarım kanalının bir parçası olarak kullanılır. Aşağıdaki örnek, özel mantığı kullanarak nasıl belirtebileceğinizi gösterir InferenceSpec:

from sagemaker.serve.spec.inference_spec import InferenceSpec

class CustomerInferenceSpec(InferenceSpec):
    def load(self, model_dir):
        from transformers import AutoModel
        return AutoModel.from_pretrained(HF_TEI_MODEL, trust_remote_code=True)

    def invoke(self, x, model):
        return model.encode(x)

    def preprocess(self, input_data):
        return json.loads(input_data)["inputs"]

    def postprocess(self, predictions):
        assert predictions is not None
        return predictions

Yerel ve işlem modunda test edin

Eğitilmiş bir modeli bir SageMaker uç noktasına dağıtmak, bir SageMaker modeli oluşturmayı ve uç noktayı yapılandırmayı içerir. Bu, çıkarım betiğini, gereken herhangi bir serileştirme veya serileştirmeyi kaldırmayı, model yapıt konumunu içerir Amazon Basit Depolama Hizmeti (Amazon S3), kapsayıcı görüntü URI'si, doğru örnek türü ve sayısı ve daha fazlası. Makine öğrenimi (ML) uygulayıcılarının, çıkarım için uç noktayı SageMaker'a dağıtmadan önce bu ayarlar üzerinde yineleme yapması gerekir. ModelBuilder, hızlı prototipleme için iki mod sunar:

  • İşlem modunda – Bu durumda, çıkarımlar doğrudan aynı çıkarım süreci içinde yapılır. Bu, sağlanan çıkarım mantığını hızlı bir şekilde test etmede oldukça faydalıdır. InferenceSpec ve deneyler sırasında anında geri bildirim sağlar.
  • Yerel mod – Model yerel bir kapsayıcı olarak dağıtılır ve çalıştırılır. Bu, modun şu şekilde ayarlanmasıyla elde edilir: LOCAL_CONTAINER modeli oluşturduğunuzda. Bu, SageMaker uç noktasıyla aynı ortamı taklit etmek için yararlıdır. Aşağıdakilere bakın defter Örneğin.

Aşağıdaki kod, özel bir işlem modunda çıkarım çalıştırmanın bir örneğidir InferenceSpec:

from sagemaker.serve.spec.inference_spec import InferenceSpec
from transformers import pipeline
from sagemaker.serve import Mode
from sagemaker.serve.builder.schema_builder import SchemaBuilder
from sagemaker.serve.builder.model_builder import ModelBuilder

value: str = "Girafatron is obsessed with giraffes, the most glorious animal on the face of this Earth. Giraftron believes all other animals are irrelevant when compared to the glorious majesty of the giraffe.nDaniel: Hello, Girafatron!nGirafatron:"
schema = SchemaBuilder(value,
            {"generated_text": "Girafatron is obsessed with giraffes, the most glorious animal on the face of this Earth. Giraftron believes all other animals are irrelevant when compared to the glorious majesty of the giraffe.nDaniel: Hello, Girafatron!nGirafatron: Hi, Daniel. I was just thinking about how magnificent giraffes are and how they should be worshiped by all.nDaniel: You and I think alike, Girafatron. I think all animals should be worshipped! But I guess that could be a bit impractical...nGirafatron: That's true. But the giraffe is just such an amazing creature and should always be respected!nDaniel: Yes! And the way you go on about giraffes, I could tell you really love them.nGirafatron: I'm obsessed with them, and I'm glad to hear you noticed!nDaniel: I'"})

# custom inference spec with hugging face pipeline
class MyInferenceSpec(InferenceSpec):
    def load(self, model_dir: str):
        ...
    def invoke(self, input, model):
        ...
    def preprocess(self, input_data):
        ...
    def postprocess(self, predictions):
        ...
        
inf_spec = MyInferenceSpec()

# Build ModelBuilder object in IN_PROCESS mode
builder = ModelBuilder(inference_spec=inf_spec,
                       mode=Mode.IN_PROCESS,
                       schema_builder=schema
                      )
                      
# Build and deploy the model
model = builder.build()
predictor=model.deploy()

# make predictions
predictor.predict("How are you today?")

Sonraki adımlarda, aşağıdaki kodda gösterildiği gibi yerel kapsayıcı modunda test edebilirsiniz; image_uri. Şunları eklemeniz gerekecek: model_server argümanı eklediğinizde image_uri.

image_uri = '763104351884.dkr.ecr.us-west-2.amazonaws.com/huggingface-pytorch-inference:2.0.0-transformers4.28.1-gpu-py310-cu118-ubuntu20.04'

builder = ModelBuilder(inference_spec=inf_spec,
                       mode=Mode.LOCAL_CONTAINER,  # you can change it to Mode.SAGEMAKER_ENDPOINT for endpoint deployment
                       schema_builder=schema,
                       image_uri=image,
                       model_server=ModelServer.TORCHSERVE
                      )

model = builder.build()                      
predictor = model.deploy()

predictor.predict("How are you today?")

Modeli dağıtın

Test tamamlandığında, modu güncelleyerek modeli tahminler için gerçek zamanlı bir uç noktaya dağıtabilirsiniz. mode.SAGEMAKER_ENDPOINT ve bir örnek türü ve boyutu sağlayarak:

sm_predictor = model.deploy(
    initial_instance_count=1,
    instance_type="ml.g5.2xlarge",
    mode=Mode.SAGEMAKER_ENDPOINT,
    role=execution_role,
)

sm_predictor.predict("How is the weather?")

Gerçek zamanlı çıkarıma ek olarak, SageMaker dağıtım için sunucusuz çıkarım, eşzamansız çıkarım ve toplu çıkarım modlarını destekler. Ayrıca şunları da kullanabilirsiniz: InferenceComponents modellerinizi soyutlamak ve model başına CPU, GPU, hızlandırıcılar ve ölçekleme politikaları atamak için. Daha fazla bilgi edinmek için bkz. Amazon SageMaker'ın en yeni özelliklerini kullanarak model dağıtım maliyetlerini ortalama %50 azaltın.

Sahip olduktan sonra ModelBuilder nesne, modeli dağıtırken karşılık gelen çıkarım yapılandırmalarını ekleyerek bu seçeneklerden herhangi birine dağıtabilirsiniz. Varsayılan olarak, mod sağlanmazsa, model bir gerçek zaman uç nokta. Diğer yapılandırmaların örnekleri aşağıdadır:

from sagemaker.serverless.serverless_inference_config import ServerlessInferenceConfig
predictor = model_builder.deploy(
    endpoint_name="serverless-endpoint",
    inference_config=ServerlessInferenceConfig(memory_size_in_mb=2048))
from sagemaker.async_inference.async_inference_config import AsyncInferenceConfig
from sagemaker.s3_utils import s3_path_join

predictor = model_builder.deploy(
    endpoint_name="async-endpoint",
    inference_config=AsyncInferenceConfig(
        output_path=s3_path_join("s3://", bucket, "async_inference/output")))

from sagemaker.batch_inference.batch_transform_inference_config import BatchTransformInferenceConfig

transformer = model_builder.deploy(
    endpoint_name="batch-transform-job",
    inference_config=BatchTransformInferenceConfig(
        instance_count=1,
        instance_type='ml.m5.large',
        output_path=s3_path_join("s3://", bucket, "batch_inference/output"),
        test_data_s3_path = s3_test_path
    ))
print(transformer)

  • Dağıtın çok modelli uç nokta kullanarak InferenceComponent:
from sagemaker.compute_resource_requirements.resource_requirements import ResourceRequirements

predictor = model_builder.deploy(
    endpoint_name="multi-model-endpoint",
    inference_config=ResourceRequirements(
        requests={
            "num_cpus": 0.5,
            "memory": 512,
            "copies": 2,
        },
        limits={},
))

Temizlemek

Bu gönderiyi takip ederken herhangi bir uç nokta oluşturduysanız, yayın devam ederken ücretlendirileceksiniz. En iyi uygulama olarak, artık gerekmeyen uç noktaları silin, ya da AWS Yönetim Konsoluveya aşağıdaki kodu kullanarak:

predictor.delete_model() 
predictor.delete_endpoint()

Sonuç

Bu iki bölümlük seride, SageMaker Python SDK'daki ModelTrainer ve ModelBuilder geliştirmelerini tanıttık. Her iki sınıf da veri bilimcileri için karmaşıklığı ve bilişsel yükü azaltmayı, hem SageMaker dizüstü bilgisayarlarınızda yerel olarak hem de uzak SageMaker uç noktalarında modelleri eğitmek ve dağıtmak için basit ve sezgisel bir arayüz sağlamayı hedefliyor.

SageMaker SDK geliştirmelerini (SageMaker Core, ModelTrainer ve ModelBuilder) aşağıdakilere başvurarak denemenizi öneririz: SDK belgeleri ve örnek not defterleri GitHub repove yorumlarda geri bildirimlerinizi bize bildirin!


Yazarlar Hakkında

Durga Suri Amazon SageMaker ekibinde Kıdemli Çözüm Mimarıdır. Son 5 yıldır, SageMaker üzerine kurulu güvenli, ölçeklenebilir bir AI/ML platformu kurmak için birden fazla kurumsal müşteriyle birlikte çalıştı.

Shweta Singh AWS'deki Amazon SageMaker Makine Öğrenmesi (ML) platform ekibinde Kıdemli Ürün Yöneticisidir ve SageMaker Python SDK'ya liderlik etmektedir. 5 yıldan uzun süredir Amazon'da çeşitli ürün rollerinde çalışmıştır. New York Üniversitesi'nden Bilgisayar Mühendisliği alanında Lisans ve Finans Mühendisliği alanında Yüksek Lisans derecesine sahiptir.

İlgili Makaleler

spot_img

Son Makaleler

spot_img