Amazon SageMaker'da TorchServe ile dinamik toplu çıkarımı kullanarak çıkarım işlerinizi optimize edin

Kaynak Düğüm: 1884601

Derin öğrenmede toplu işleme, birden çok girdiyi bir modele beslemeyi ifade eder. Eğitim sırasında gerekli olmasına rağmen, maliyeti yönetmek ve çıkarım süresi boyunca verimi optimize etmek de çok yararlı olabilir. Donanım hızlandırıcıları paralellik için optimize edilmiştir ve toplu işleme, bilgi işlem kapasitesinin doyurulmasına yardımcı olur ve genellikle daha yüksek iş hacmine yol açar.

Toplu işlem, üretimde model dağıtımı sırasında çeşitli senaryolarda yardımcı olabilir. Burada bunları genel olarak iki kullanım durumuna ayırıyoruz:

  • Farklı müşterilerden çeşitli çıkarım isteklerinin alındığı ve dinamik olarak gruplandırıldığı ve hizmet veren modele beslendiği gerçek zamanlı uygulamalar. Gecikme genellikle bu kullanım durumlarında önemlidir.
  • Birkaç girdinin veya isteğin istemci tarafında toplu hale getirildiği ve hizmet veren modele gönderildiği çevrimdışı uygulamalar. Maliyetin yönetilmesine yardımcı olan bu kullanım durumlarının hedefi genellikle daha yüksek verimdir. Örnek kullanım durumları, video analizi ve model değerlendirmesini içerir.

Amazon Adaçayı Yapıcı çıkarım işleriniz için iki popüler seçenek sunar. Gerçek zamanlı uygulamalar için, SageMaker Hosting, alınan isteklerin dinamik gruplandırmasını işleyen arka uç hizmet kitaplığı olarak TorchServe'i kullanır. Çevrimdışı uygulamalar için SageMaker toplu dönüştürme işlerini kullanabilirsiniz. Bu gönderide, başlamanıza yardımcı olmak için her seçeneğin bir örneğini inceleyeceğiz.

Çünkü TorchServe yerel olarak SageMaker ile entegre ile SageMaker PyTorch çıkarım araç takımı, SageMaker Hosting'i kullanarak bir PyTorch modelini TorchServe'e kolayca dağıtabilirsiniz. Özel Docker görüntülerini kullanarak ortamınızı daha fazla özelleştirmeniz gereken zamanlar da olabilir. Bu yazıda, ilk olarak yerel SageMaker PyTorch çıkarım araç setini kullanarak gerçek zamanlı bir uç noktanın nasıl konuşlandırılacağını ve iş hacmini optimize etmek için parti boyutunun nasıl yapılandırılacağını gösteriyoruz. İkinci örnekte, toplu çıkarım işinizi optimize etmek için bir ortam değişkeni olarak bulunmayan gelişmiş TorchServe yapılandırmalarını yapılandırmak için özel bir Docker görüntüsünün nasıl kullanılacağını gösteriyoruz.

Toplu çıkarım için en iyi uygulamalar

Toplu işleme, gecikme pahasına belirli bir süre içinde daha fazla sayıda çıkarımın tamamlanmasına yardımcı olduğundan verimi artırabilir ve kaynaklarınızı optimize edebilir. Daha yüksek verim için model dağıtımını optimize etmek için genel kılavuz, verim azalana kadar parti boyutunu artırmaktır. Bu genellikle, tahmin çıktıları almak için birkaç girdinin (video kareleri, resimler veya metin gibi) gruplandığı çevrimdışı uygulamalara uygundur.

Gerçek zamanlı uygulamalar için gecikme genellikle ana endişe kaynağıdır. Daha yüksek verim ile artan toplu iş boyutu ve gecikme süresi arasında bir denge vardır; gecikme SLA'nızı karşılamak için gerektiği gibi ayarlamanız gerekebilir. Buluttaki en iyi uygulamalar açısından, belirli sayıda çıkarım başına maliyet, iş gereksinimlerinizi karşılayan bilgiye dayalı bir karar vermede yardımcı bir kılavuzdur. Maliyet yönetimine katkıda bulunan bir faktör, doğru hızlandırıcıyı seçmektir. Daha fazla bilgi için, bkz Amazon SageMaker ile bilgisayarla görü çıkarımı için en iyi AI hızlandırıcısını ve model derlemesini seçin.

SageMaker'da TorchServe dinamik toplu işleme

TorchServis üretimdeki modelleri geniş ölçekte sunmak için yerel PyTorch kitaplığıdır. Facebook ve AWS'nin ortak geliştirmesidir. TorchServe, izlemenize, özel ölçümler eklemenize, birden çok modeli desteklemenize, güvenli yönetim API'leri aracılığıyla çalışan sayısını artırmanıza ve azaltmanıza ve çıkarım ve açıklama uç noktaları sağlamanıza olanak tanır.

Toplu işlemeyi desteklemek için TorchServe, dinamik bir gruplama özelliği sağlar. Alınan istekleri belirli bir zaman çerçevesi içinde toplar, bir araya toplar ve grubu çıkarım için gönderir. Alınan talepler, işleyicileri TorchServe'de. TorchServe'in birkaç varsayılan işleyicisi vardır ve kullanım durumunuz kapsanmıyorsa özel bir işleyici yazabilirsiniz. Özel bir işleyici kullanırken, işleyicide toplu çıkarım mantığının uygulandığından emin olun. Toplu çıkarım desteğine sahip bir özel işleyici örneği şu adreste mevcuttur: GitHub.

Dinamik toplu işlemeyi iki ayar kullanarak yapılandırabilirsiniz, batch_size ve max_batch_delay, SageMaker'daki ortam değişkenleri aracılığıyla veya config.properties dosyası (özel bir kapsayıcı kullanılıyorsa). TorchServe, maksimum toplu iş boyutu (batch_size) veya belirli bir zaman penceresi aracılığıyla isteklerin toplu olarak beklenmesi max_batch_delay.

SageMaker ile TorchServe entegrasyonları sayesinde, artık PyTorch modellerini bir SageMaker PyTorch modeli tanımlayabileceğiniz SageMaker üzerinde yerel olarak konuşlandırabilirsiniz. SageMaker PyTorch'a giriş noktası olarak iletilen bir komut dosyasına özel model yükleme, çıkarım, ön işleme ve son işleme mantığı ekleyebilirsiniz (aşağıdaki örnek koda bakın). Alternatif olarak, modellerinizi dağıtmak için özel bir kapsayıcı kullanabilirsiniz. Daha fazla bilgi için, bkz SageMaker PyTorch Model Sunucusu.

PyTorch modelleri için parti boyutunu SageMaker'da ortam değişkenleri aracılığıyla ayarlayabilirsiniz. Özel bir kapsayıcı kullanmayı seçerseniz, ayarlar in config.properties modelinizi TorchServe'de paketlerken modelinizle birlikte. Aşağıdaki kod parçacığı, ortam değişkenlerini kullanarak parti boyutunun nasıl ayarlanacağını ve bir PyTorch modelinin SageMaker'da nasıl konuşlandırılacağını gösteren bir örnek gösterir:

from SageMaker.pytorch.model import PyTorchModel env_variables_dict = { "SAGEMAKER_TS_BATCH_SIZE": "3", "SAGEMAKER_TS_MAX_BATCH_DELAY": "100000"
} pytorch_model = PyTorchModel( model_data=model_artifact, role=role, source_dir="code", framework_version='1.9', entry_point="inference.py", env=env_variables_dict
) predictor = pytorch_model.deploy(initial_instance_count=1, instance_type="ml.c5.2xlarge", serializer=SageMaker.serializers.JSONSerializer(), deserializer=SageMaker.deserializers.BytesDeserializer())

Kod parçacığında, model_artifact bir .tar dosyasında arşivlenen ve bir Amazon Basit Depolama Hizmeti (Amazon S3) paketi. inference.py, TorchServe özel işleyicisine benzer; model başlatmayı, alınan isteklerin ön işlemesini ve son işlemesini ve çıkarım mantığını barındırmak için geçersiz kılabileceğiniz çeşitli işlevlere sahiptir.

Aşağıdaki defter Hugging Face BERT modelinin konuşlandırılmasının tam bir örneğini gösterir.

Özel bir kapsayıcıya ihtiyacınız varsa, özel bir kapsayıcı görüntüsü oluşturabilir ve onu Amazon Elastik Konteyner Kayıt Defteri (Amazon ECR) deposu. Bu durumda model yapıtı, işleyici ile birlikte model yapıtlarını bir araya getiren bir TorchServe .mar dosyası olabilir. Bunu, bir SageMaker toplu dönüştürme işini kullandığımız bir sonraki bölümde gösteriyoruz.

SageMaker toplu dönüştürme işi

Veri kümesi gibi bir veri kaynağından isteklerin gruplandırıldığı çevrimdışı kullanım durumları için SageMaker şunları sağlar: toplu dönüştürme işleri. Bu işler, bir S3 klasöründeki verileri okumanıza ve sonuçları bir hedef S3 klasörüne yazmanıza olanak tanır. Daha fazla bilgi için, bkz Büyük Veri Kümelerinden Çıkarımlar Elde Etmek İçin Toplu Dönüşümü Kullanın. Toplu dönüştürme işlerini kullanan toplu çıkarımın tam bir örneği aşağıda bulunabilir. defter, burada FLORES yarışmasından bir makine çevirisi modeli kullanıyoruz. Bu örnekte, SageMaker kullanarak modelimizi puanlamak için özel bir konteynerin nasıl kullanılacağını gösteriyoruz. Özel bir çıkarım kapsayıcısı kullanmak, TorchServe yapılandırmanızı daha fazla özelleştirmenizi sağlar. Bu örnekte, TorchServe aracılığıyla yapabileceğimiz JSON kod çözmeyi değiştirmek ve devre dışı bırakmak istiyoruz. config.properties dosyası.

TorchServe için özel bir işleyici kullanırken, işleyicinin toplu çıkarım mantığını uyguladığından emin olmamız gerekir. Her işleyici, ön işleme, çıkarım ve son işleme gerçekleştirmek için özel işlevlere sahip olabilir. Toplu çıkarım desteğine sahip bir özel işleyici örneği şu adreste mevcuttur: GitHub.

TorchServe'de yaptığımız gibi model yapıtlarını işleyici ile bir araya getirmek için özel kapsayıcımızı kullanıyoruz (.mar dosyası oluşturma). TorchServe'i toplu iş boyutu ve JSON kod çözme ayarlı olarak başlatan Docker kapsayıcısına da bir giriş noktasına ihtiyacımız var. config.properties. Bunu örnekte gösteriyoruz defter.

SageMaker toplu dönüştürme işi, giriş dosyalarını mini gruplara ayırdığı ve çıkarım için gönderdiği bir S3 klasöründen giriş dosyalarına erişim gerektirir. Toplu dönüştürme işini yapılandırırken aşağıdaki noktaları göz önünde bulundurun:

  • Girdi dosyalarını (veri kümesi gibi) bir S3 klasörüne yerleştirin ve iş ayarlarında veri kaynağı olarak ayarlayın.
  • Toplu dönüştürme işinin sonuçlarının kaydedileceği bir S3 klasörü atayın.
  • set Toplu Strateji için MultiRecord ve SplitType için Line girdi dosyasından mini toplu işler yapmak için toplu dönüştürme işine ihtiyacınız varsa. Veri kümesini otomatik olarak mini gruplara ayıramıyorsa, her bir grubu veri kaynağı S3 kovasına yerleştirilmiş ayrı bir giriş dosyasına koyarak mini gruplara bölebilirsiniz.
  • Parti boyutunun belleğe sığdığından emin olun. SageMaker genellikle bunu otomatik olarak halleder; ancak partileri manuel olarak bölerken bunun belleğe göre ayarlanması gerekir.

Aşağıdaki kod, toplu dönüştürme işi için bir örnektir:

s3_bucket_name= 'SageMaker-us-west-2-XXXXXXXX'
batch_input = f"s3://{s3_bucket_name}/folder/jobename_TorchServe_SageMaker/"
batch_output = f"s3://{s3_bucket_name}/folder/jobname_TorchServe_SageMaker_output/" batch_job_name = 'job-batch' + time.strftime("%Y-%m-%d-%H-%M-%S", time.gmtime())
batch_job_name request = { "ModelClientConfig": { "InvocationsTimeoutInSeconds": 3600, "InvocationsMaxRetries": 1, }, "TransformJobName": batch_job_name, "ModelName": model_name, "MaxConcurrentTransforms":1, "BatchStrategy": "MultiRecord", "TransformOutput": {"S3OutputPath": batch_output, "AssembleWith": "Line", "Accept": "application/json"}, "TransformInput": { "DataSource": { "S3DataSource": {"S3DataType": "S3Prefix", "S3Uri": batch_input} }, "SplitType" : "Line", "ContentType": "application/json", }, "TransformResources": {"InstanceType": "ml.p2.xlarge", "InstanceCount": 1},
}

Önceki ayarları kullandığımızda ve dönüştürme işimizi başlattığımızda, kaynak S3 kovasındaki giriş dosyalarını toplu halde okur ve çıkarım için gönderir. Sonuçlar, çıkışlarda belirtilen S3 klasörüne geri yazılır.

Aşağıdaki kod parçacığı, önceki ayarlar kullanılarak bir işin nasıl oluşturulacağını ve başlatılacağını gösterir:

sm.create_transform_job(**request) while True: response = sm.describe_transform_job(TransformJobName=batch_job_name) status = response["TransformJobStatus"] if status == "Completed": print("Transform job ended with status: " + status) break if status == "Failed": message = response["FailureReason"] print("Transform failed with the following error: {}".format(message)) raise Exception("Transform job failed") print("Transform job is still in status: " + status) time.sleep(30)

Sonuç

Bu gönderide, SageMaker'ın çevrimiçi ve çevrimdışı çıkarım için sunduğu iki modu inceledik. İlki, birden çok istemciden gelen istekleri gruplandırmak için TorchServe'de sağlanan dinamik toplu işlemeyi kullanır. İkincisi, bir S3 kovasındaki girdi dosyalarından gelen istekleri gruplandırmak ve çıkarımı çalıştırmak için bir SageMaker dönüştürme işini kullanır.

Ayrıca, SageMaker'da yerel SageMaker PyTorch çıkarım araç seti kapsayıcı görüntüleri kullanılarak modellerin nasıl sunulacağını ve gelişmiş TorchServe yapılandırma ayarları gerektiren kullanım durumları için özel kapların nasıl kullanılacağını da gösterdik.

TorchServe, PyTorch topluluğunun ihtiyaçlarını karşılamak üzere gelişmeye devam ederken, üretimdeki modellere hizmet vermek için yüksek performanslı yöntemler sağlamak üzere SageMaker'a yeni özellikler entegre edildi. Daha fazla bilgi için şuraya göz atın: TorchServe GitHub deposu ve SageMaker örnekleri.


Yazarlar Hakkında

Phi Nguyen AWS'de veri gölü, analitik, anlambilim teknolojileri ve makine öğrenimine özel olarak odaklanarak müşterilere bulut yolculuklarında yardımcı olan bir çözüm mimarıdır. Boş zamanlarında, onu işe bisikletle giderken, oğlunun futbol takımına koçluk yaparken veya ailesiyle doğa yürüyüşünün tadını çıkarırken bulabilirsiniz.

Nikhil Kulkarni makine öğrenimi iş yüklerini bulutta daha performanslı hale getirmeye odaklanan AWS Machine Learning yazılım geliştiricisidir ve eğitim ve çıkarım için AWS Deep Learning Containers'ın ortak yaratıcısıdır. Dağıtılmış Derin Öğrenme Sistemleri konusunda tutkulu. İş dışında kitap okumayı, gitarla oynamayı ve pizza yapmayı seviyor.

Hamid Şojanazeri Pytorch'ta OSS yüksek performanslı model optimizasyonu ve sunumu üzerinde çalışan bir İş Ortağı Mühendisidir. Hamid, Bilgisayar görüşü alanında doktora derecesine sahiptir ve Avustralya, Malezya'daki multimedya laboratuvarlarında araştırmacı olarak ve Opus.ai'de NLP lideri olarak çalıştı. Zor sorunlara daha basit çözümler bulmayı sever ve boş zamanlarında sanat meraklısıdır.

Geeta Chauhan yeni başlayanlar ve Fortune 500'ler için dayanıklı, kırılgan olmayan, büyük ölçekli dağıtılmış platformlar oluşturma uzmanlığıyla Meta AI'da AI İş Ortağı Mühendisliğine liderlik ediyor. Ekibi, yeni AI ürün hizmetleri ve deneyimleri oluşturmak ve başlatmak için stratejik ortaklar, sektördeki makine öğrenimi liderleri ve tüm büyük bulut hizmeti sağlayıcılarıyla birlikte çalışır; ve PyTorch modellerini araştırmadan üretime taşımak.. 2019 yılında BT'de Kadınlar – Silikon Vadisi – CTO'su kazananı, ACM Seçkin Konuşmacısı ve Yapay Zekada Etik, Derin Öğrenme, Blockchain, IoT gibi konularda düşünce lideri. AI for Good kullanımını teşvik etme konusunda tutkulu.

Kaynak: https://aws.amazon.com/blogs/machine-learning/optimize-your-inference-jobs-using-dynamic-batch-inference-with-torchserve-on-amazon-sagemaker/

Zaman Damgası:

Den fazla AWS Makine Öğrenimi Blogu