Amazon SageMaker JumpStart temel modellerinin dağıtım maliyetini Amazon SageMaker eşzamansız uç noktalarıyla optimize edin | Amazon Web Hizmetleri

Amazon SageMaker JumpStart temel modellerinin dağıtım maliyetini Amazon SageMaker eşzamansız uç noktalarıyla optimize edin | Amazon Web Hizmetleri

Üretken yapay zeka uygulamalarının çok çeşitli sektörlerdeki başarısı, dünya çapında rakiplerinin başarılarını yeniden üretip aşmak veya yeni ve heyecan verici kullanım senaryolarını çözmek isteyen şirketlerin dikkatini ve ilgisini çekti. Bu müşteriler, üretken yapay zeka yeniliğine güç veren motorlar olarak TII Falcon, Stable Diffusion XL veya OpenAI'nin GPT-3.5'i gibi temel modellere bakıyor.

Temel modeller, üzerinde eğitildikleri büyük miktardaki yapılandırılmamış veriler sayesinde insan benzeri içerikleri anlama ve üretme kapasitesine sahip bir üretken yapay zeka modelleri sınıfıdır. Bu modeller, görüntü oluşturma, çeviri ve soru yanıtlama dahil olmak üzere çeşitli bilgisayarlı görme (CV) ve doğal dil işleme (NLP) görevlerinde devrim yarattı. Birçok yapay zeka uygulamasının yapı taşları olarak hizmet veriyorlar ve gelişmiş akıllı sistemlerin geliştirilmesinde çok önemli bir bileşen haline geldiler.

Ancak temel modellerin uygulamaya konulması, özellikle maliyet ve kaynak gereksinimleri açısından önemli zorlukları beraberinde getirebilir. Bu modeller, genellikle yüz milyonlarca parametreden milyarlarca parametreye kadar değişen boyutlarıyla bilinir. Büyük boyutları, güçlü donanım ve önemli bellek kapasitesi de dahil olmak üzere kapsamlı bilgi işlem kaynakları gerektirir. Aslında, temel modellerin dağıtılması, hesaplama yükünü verimli bir şekilde ele almak için genellikle en az bir (genellikle daha fazla) GPU gerektirir. Örneğin, TII Falcon-40B Instruct modelinin belleğe başarıyla yüklenmesi için en az bir ml.g5.12xlarge örneğinin olması gerekir, ancak daha büyük örneklerle en iyi performansı gösterir. Sonuç olarak, bu modellerin dağıtımı ve bakımının yatırım getirisi (ROI), özellikle geliştirme döngüleri sırasında veya ani iş yükleri sırasında iş değerini kanıtlamak için çok düşük olabilir. Bunun nedeni, uzun oturumlar için (potansiyel olarak 24/7) GPU destekli bulut sunucularına sahip olmanın işletme maliyetleridir.

Bu yılın başında duyurmuştuk Amazon Ana KayasıAmazon ve üretken yapay zeka ortaklarımızın temel modellerine erişim sağlayan sunucusuz bir API. Şu anda Özel Önizleme'de olmasına rağmen sunucusuz API'si, herhangi bir uç noktayı kendiniz dağıtmanıza gerek kalmadan Amazon, Anthropic, Stability AI ve AI21'in temel modellerini kullanmanıza olanak tanır. Ancak Hugging Face gibi toplulukların açık kaynaklı modelleri oldukça artıyor ve bunların hepsi Amazon Bedrock aracılığıyla kullanıma sunulmuyor.

Bu yazıda bu durumları hedefliyoruz ve büyük temel modellerini dağıtarak yüksek maliyetleri riske atma sorununu çözüyoruz. Amazon Adaçayı Yapıcı eşzamansız uç noktalar itibaren Amazon SageMaker Hızlı Başlangıç. Bu, mimarinin maliyetlerinin azaltılmasına yardımcı olabilir, uç noktanın yalnızca istekler kuyruktayken ve kısa bir yaşam süresi için çalışmasına olanak tanırken, hizmet verilmeyi bekleyen hiçbir istek olmadığında ölçeği sıfıra düşürür. Bu, pek çok kullanım durumu için kulağa harika geliyor; ancak sıfıra küçültülmüş bir uç nokta, çıkarımlarda bulunmadan önce soğuk bir başlangıç ​​zamanı getirecektir.

Çözüme genel bakış

Aşağıdaki şema çözüm mimarimizi göstermektedir.

Amazon SageMaker JumpStart temel modellerinin dağıtım maliyetini Amazon SageMaker eşzamansız uç noktalarıyla optimize edin | Amazon Web Hizmetleri PlatoBlockchain Veri Zekası. Dikey Arama. Ai.

Kullandığımız mimari oldukça basittir:

  • Kullanıcı arayüzü, Streamlit veya benzer teknoloji üzerine kurulu bir web kullanıcı arayüzü ile değiştirilebilen bir dizüstü bilgisayardır. Bizim durumumuzda defter bir Amazon SageMaker Stüdyosu PyTorch 5 Python 2.0 CPU çekirdeği ile ml.m3.10.large örneğinde çalışan dizüstü bilgisayar.
  • Dizüstü bilgisayar uç noktayı üç şekilde sorgular: SageMaker Python SDK, Python için AWS SDK (Boto3) ve LangChain.
  • Uç nokta, SageMaker'da eşzamansız olarak çalışıyor ve uç noktada Falcon-40B Instruct modelini konuşlandırıyoruz. Şu anda talimat modelleri açısından son teknoloji ürünüdür ve SageMaker JumpStart'ta mevcuttur. Tek bir API çağrısı, modeli uç noktaya dağıtmamıza olanak tanır.

SageMaker eşzamansız çıkarım nedir?

SageMaker eşzamansız çıkarım, gerçek zamanlı uç noktalar, toplu çıkarım ve sunucusuz çıkarımla birlikte SageMaker'daki dört dağıtım seçeneğinden biridir. Farklı dağıtım seçenekleri hakkında daha fazla bilgi edinmek için bkz. Çıkarım için modelleri dağıtma.

SageMaker eşzamansız çıkarım, gelen istekleri sıraya koyar ve bunları eşzamansız olarak işler; bu seçenek, 1 GB'a kadar büyük veri yükü boyutlarına, uzun işlem sürelerine ve neredeyse gerçek zamanlı gecikme gereksinimlerine sahip istekler için idealdir. Bununla birlikte, büyük temel modellerle uğraşırken, özellikle de kavram kanıtı (POC) veya geliştirme sırasında sağladığı temel avantaj, herhangi bir istek olmadığında sıfır örnek sayısına ölçeklendirmek için eşzamansız çıkarımı yapılandırma yeteneğidir. süreç, böylece maliyetten tasarruf sağlar. SageMaker eşzamansız çıkarımı hakkında daha fazla bilgi için bkz. asenkron çıkarım. Aşağıdaki diyagram bu mimariyi göstermektedir.

Amazon SageMaker JumpStart temel modellerinin dağıtım maliyetini Amazon SageMaker eşzamansız uç noktalarıyla optimize edin | Amazon Web Hizmetleri PlatoBlockchain Veri Zekası. Dikey Arama. Ai.

Eşzamansız bir çıkarım uç noktası dağıtmak için bir oluşturmanız gerekir. AsyncInferenceConfig nesne. Eğer yaratırsan AsyncInferenceConfig argümanlarını belirtmeden, varsayılan S3OutputPath olacak s3://sagemaker-{REGION}-{ACCOUNTID}/async-endpoint-outputs/{UNIQUE-JOB-NAME} ve S3FailurePath olacak s3://sagemaker-{REGION}-{ACCOUNTID}/async-endpoint-failures/{UNIQUE-JOB-NAME}.

SageMaker JumpStart nedir?

Modelimiz, önceden eğitilmiş modeller, çözüm şablonları ve örnek not defterleri sunarak makine öğrenimi (ML) yolculuğunu hızlandıran bir SageMaker özelliği olan SageMaker JumpStart'tan geliyor. Farklı sorun türleri için çok çeşitli önceden eğitilmiş modellere erişim sağlayarak makine öğrenimi görevlerinize sağlam bir temelle başlamanıza olanak tanır. SageMaker JumpStart ayrıca yaygın kullanım durumları için çözüm şablonları ve öğrenim için örnek not defterleri sunar. SageMaker JumpStart ile, tek tıklamayla çözüm lansmanları ve pratik makine öğrenimi deneyimi için kapsamlı kaynaklarla makine öğrenimi projelerinizi başlatmak için gereken zamanı ve çabayı azaltabilirsiniz.

Aşağıdaki ekran görüntüsü SageMaker JumpStart Kullanıcı Arayüzünde mevcut olan modellerden sadece bazılarının bir örneğini göstermektedir.

Amazon SageMaker JumpStart temel modellerinin dağıtım maliyetini Amazon SageMaker eşzamansız uç noktalarıyla optimize edin | Amazon Web Hizmetleri PlatoBlockchain Veri Zekası. Dikey Arama. Ai.

Modeli dağıtın

İlk adımımız modeli SageMaker'a dağıtmaktır. Bunu yapmak için, modeli eşzamansız uç noktaya dağıtmak için kullanabileceğimiz bir API sağlayan SageMaker JumpStart kullanıcı arayüzünü veya SageMaker Python SDK'yı kullanabiliriz:

%%time
from sagemaker.jumpstart.model import JumpStartModel, AsyncInferenceConfig
from sagemaker.serializers import JSONSerializer
from sagemaker.deserializers import JSONDeserializer model_id, model_version = "huggingface-llm-falcon-40b-instruct-bf16", "*"
my_model = JumpStartModel(model_id=model_id)
predictor = my_model.deploy( initial_instance_count=0, instance_type="ml.g5.12xlarge", async_inference_config=AsyncInferenceConfig()
)

Bu aramanın tamamlanması yaklaşık 10 dakika sürebilir. Bu süre zarfında uç nokta etkinleştirilir, kapsayıcı model yapılarıyla birlikte uç noktaya indirilir, model konfigürasyonu SageMaker JumpStart'tan yüklenir ve ardından eşzamansız uç nokta bir DNS uç noktası aracılığıyla kullanıma sunulur. Uç noktamızın sıfıra kadar ölçeklenebildiğinden emin olmak için Uygulama Otomatik Ölçeklendirmeyi kullanarak eşzamansız uç noktada otomatik ölçeklendirmeyi yapılandırmamız gerekir. Öncelikle uç nokta değişkeninizi Uygulama Otomatik Ölçeklendirme'ye kaydetmeniz, bir ölçeklendirme ilkesi tanımlamanız ve ardından ölçeklendirme ilkesini uygulamanız gerekir. Bu yapılandırmada özel bir metrik kullanıyoruz: CustomizedMetricSpecificationDenilen ApproximateBacklogSizePerInstance, aşağıdaki kodda gösterildiği gibi. Detaylı liste için Amazon Bulut İzleme eşzamansız çıkarım uç noktanızda kullanılabilen ölçümler için bkz. CloudWatch ile İzleme.

import boto3 client = boto3.client("application-autoscaling")
resource_id = "endpoint/" + my_model.endpoint_name + "/variant/" + "AllTraffic" # Configure Autoscaling on asynchronous endpoint down to zero instances
response = client.register_scalable_target( ServiceNamespace="sagemaker", ResourceId=resource_id, ScalableDimension="sagemaker:variant:DesiredInstanceCount", MinCapacity=0, # Miminum number of instances we want to scale down to - scale down to 0 to stop incurring in costs MaxCapacity=1, # Maximum number of instances we want to scale up to - scale up to 1 max is good enough for dev
) response = client.put_scaling_policy( PolicyName="Invocations-ScalingPolicy", ServiceNamespace="sagemaker", # The namespace of the AWS service that provides the resource. ResourceId=resource_id, # Endpoint name ScalableDimension="sagemaker:variant:DesiredInstanceCount", # SageMaker supports only Instance Count PolicyType="TargetTrackingScaling", # 'StepScaling'|'TargetTrackingScaling' TargetTrackingScalingPolicyConfiguration={ "TargetValue": 5.0, # The target value for the metric. - here the metric is - SageMakerVariantInvocationsPerInstance "CustomizedMetricSpecification": { "MetricName": "ApproximateBacklogSizePerInstance", "Namespace": "AWS/SageMaker", "Dimensions": [{"Name": "EndpointName", "Value": my_model.endpoint_name}], "Statistic": "Average", }, "ScaleInCooldown": 600, # The amount of time, in seconds, after a scale in activity completes before another scale in activity can start. "ScaleOutCooldown": 300, # ScaleOutCooldown - The amount of time, in seconds, after a scale out activity completes before another scale out activity can start. # 'DisableScaleIn': True|False - indicates whether scale in by the target tracking policy is disabled. # If the value is true, scale in is disabled and the target tracking policy won't remove capacity from the scalable resource. },
)

Bu politikanın başarıyla ayarlandığını SageMaker konsoluna gidip şu seçeneği belirleyerek doğrulayabilirsiniz: Uç noktalar altında sonuç Gezinti bölmesinde ve yeni konuşlandırdığımız uç noktayı arıyoruz.

Amazon SageMaker JumpStart temel modellerinin dağıtım maliyetini Amazon SageMaker eşzamansız uç noktalarıyla optimize edin | Amazon Web Hizmetleri PlatoBlockchain Veri Zekası. Dikey Arama. Ai.

Eşzamansız uç noktayı çağırma

Uç noktayı çağırmak için istek yükünü buraya yerleştirmeniz gerekir. Amazon Basit Depolama Hizmeti (Amazon S3) ve bu yükün bir parçası olarak bir işaretçi sağlayın. InvokeEndpointAsync rica etmek. Çağrı üzerine SageMaker, isteği işleme almak üzere kuyruğa alır ve yanıt olarak bir tanımlayıcı ve çıktı konumu döndürür. SageMaker, işlendikten sonra sonucu Amazon S3 konumuna yerleştirir. İsteğe bağlı olarak başarı veya hata bildirimlerini almayı seçebilirsiniz. Amazon Basit Bildirim Servisi (Amazon SNS'si).

SageMaker Python SDK'sı

Dağıtım tamamlandıktan sonra, bir geri dönecektir. AsyncPredictor nesne. Eşzamansız çıkarım gerçekleştirmek için verileri Amazon S3'e yüklemeniz ve predict_async() giriş olarak S3 URI'si olan yöntem. Bir geri dönecek AsyncInferenceResponse nesneyi kullanarak sonucu kontrol edebilirsiniz. get_response() yöntemi.

Alternatif olarak, bir sonucu periyodik olarak kontrol etmek ve oluşturulduktan sonra geri döndürmek istiyorsanız, predict() yöntem. Bu ikinci yöntemi aşağıdaki kodda kullanıyoruz:

import time # Invoking the asynchronous endpoint with the SageMaker Python SDK
def query_endpoint(payload): """Query endpoint and print the response""" response = predictor.predict_async( data=payload, input_path="s3://{}/{}".format(bucket, prefix), ) while True: try: response = response.get_result() break except: print("Inference is not ready ...") time.sleep(5) print(f"33[1m Input:33[0m {payload['inputs']}") print(f"33[1m Output:33[0m {response[0]['generated_text']}") query_endpoint(payload)

Boto3

Şimdi keşfedelim invoke_endpoint_async Boto3'ün yöntemi sagemaker-runtime müşteri. Geliştiricilerin bir SageMaker uç noktasını eşzamansız olarak çağırmasına olanak tanıyarak ilerlemenin izlenmesi ve daha sonra yanıtın alınması için bir belirteç sağlar. Boto3, SageMaker Python SDK'sında olduğu gibi eşzamansız çıkarımın tamamlanmasını beklemek için bir yol sunmuyor get_result() operasyon. Bu nedenle Boto3'ün çıkarım çıktısını Amazon S3'te depolayacağı gerçeğinden yararlanıyoruz. response["OutputLocation"]. Çıkarım dosyasının Amazon S3'e yazılmasını beklemek için aşağıdaki işlevi kullanabiliriz:

import json
import time
import boto3
from botocore.exceptions import ClientError s3_client = boto3.client("s3") # Wait until the prediction is generated
def wait_inference_file(bucket, prefix): while True: try: response = s3_client.get_object(Bucket=bucket, Key=prefix) break except ClientError as ex: if ex.response['Error']['Code'] == 'NoSuchKey': print("Waiting for file to be generated...") time.sleep(5) next else: raise except Exception as e: print(e.__dict__) raise return response

Bu fonksiyonla artık uç noktayı sorgulayabiliriz:

# Invoking the asynchronous endpoint with the Boto3 SDK
import boto3 sagemaker_client = boto3.client("sagemaker-runtime") # Query the endpoint function
def query_endpoint_boto3(payload): """Query endpoint and print the response""" response = sagemaker_client.invoke_endpoint_async( EndpointName=my_model.endpoint_name, InputLocation="s3://{}/{}".format(bucket, prefix), ContentType="application/json", Accept="application/json" ) output_url = response["OutputLocation"] output_prefix = "/".join(output_url.split("/")[3:]) # Read the bytes of the file from S3 in output_url with Boto3 output = wait_inference_file(bucket, output_prefix) output = json.loads(output['Body'].read())[0]['generated_text'] # Emit output print(f"33[1m Input:33[0m {payload['inputs']}") print(f"33[1m Output:33[0m {output}") query_endpoint_boto3(payload)

Dil Zinciri

LangChain, Ekim 2022'de Harrison Chase tarafından başlatılan açık kaynaklı bir çerçevedir. Çeşitli sistem ve veri kaynaklarıyla entegrasyonlar sağlayarak, büyük dil modelleri (LLM) kullanan uygulamaların geliştirilmesini kolaylaştırır. LangChain belge analizi, özetleme, sohbet robotu oluşturma, kod analizi ve daha fazlasına olanak tanır. Yüzlerce geliştiricinin katkılarıyla ve girişim şirketlerinden gelen önemli fonlarla popülerlik kazandı. LangChain, LLM'lerin harici kaynaklarla bağlantısını sağlayarak dinamik, verilere duyarlı uygulamalar oluşturmayı mümkün kılar. Geliştirme sürecini kolaylaştırmak için kitaplıklar, API'ler ve belgeler sunar.

LangChain, çerçevesiyle birlikte SageMaker uç noktalarının kullanımına yönelik kütüphaneler ve örnekler sağlayarak SageMaker'da barındırılan ML modellerinin zincirin "beyni" olarak kullanılmasını kolaylaştırır. LangChain'in SageMaker ile nasıl entegre olduğu hakkında daha fazla bilgi edinmek için bkz. SageMaker Uç Noktası LangChain belgelerinde.

LangChain'in mevcut uygulamasının sınırlamalarından biri, eşzamansız uç noktaları yerel olarak desteklememesidir. LangChain'e eşzamansız bir uç nokta kullanmak için yeni bir sınıf tanımlamamız gerekir, SagemakerAsyncEndpoint, uzayan SagemakerEndpoint sınıfı LangChain'de zaten mevcuttur. Ek olarak aşağıdaki bilgileri sağlıyoruz:

  • Eşzamansız çıkarımın girişleri (ve çıkışları) depolayacağı S3 grubu ve öneki
  • Zaman aşımına uğramadan önce beklenecek maksimum saniye sayısı
  • An updated _call() uç noktayı sorgulama işlevi invoke_endpoint_async() yerine invoke_endpoint()
  • Soğuk başlangıçtaysa eşzamansız uç noktayı uyandırmanın bir yolu (sıfıra küçültülmüş)

Yeni oluşturulanları incelemek için SagemakerAsyncEndpoint, Sen kontrol edebilirsiniz sagemaker_async_endpoint.py dosya GitHub'da mevcut.

from typing import Dict
from langchain import PromptTemplate
from langchain.llms.sagemaker_endpoint import LLMContentHandler
from langchain.chains import LLMChain
from sagemaker_async_endpoint import SagemakerAsyncEndpoint class ContentHandler(LLMContentHandler): content_type:str = "application/json" accepts:str = "application/json" len_prompt:int = 0 def transform_input(self, prompt: str, model_kwargs: Dict) -> bytes: self.len_prompt = len(prompt) input_str = json.dumps({"inputs": prompt, "parameters": {"max_new_tokens": 100, "do_sample": False, "repetition_penalty": 1.1}}) return input_str.encode('utf-8') def transform_output(self, output: bytes) -> str: response_json = output.read() res = json.loads(response_json) ans = res[0]['generated_text'] return ans chain = LLMChain( llm=SagemakerAsyncEndpoint( input_bucket=bucket, input_prefix=prefix, endpoint_name=my_model.endpoint_name, region_name=sagemaker.Session().boto_region_name, content_handler=ContentHandler(), ), prompt=PromptTemplate( input_variables=["query"], template="{query}", ),
) print(chain.run(payload['inputs']))

Temizlemek

Uç noktadan çıkarımların oluşturulmasını test etmeyi tamamladığınızda, ek ücret ödemekten kaçınmak için uç noktayı silmeyi unutmayın:

predictor.delete_endpoint()

Sonuç

TII Falcon gibi büyük temel modellerini devreye alırken maliyeti optimize etmek çok önemlidir. Bu modeller güçlü donanım ve önemli miktarda bellek kapasitesi gerektirir ve bu da yüksek altyapı maliyetlerine yol açar. İstekleri eşzamansız olarak işleyen bir dağıtım seçeneği olan SageMaker eşzamansız çıkarımı, bekleyen istek olmadığında örnek sayısını sıfıra ölçeklendirerek masrafları azaltır. Bu yazıda, büyük SageMaker JumpStart temel modellerinin SageMaker eşzamansız uç noktalarına nasıl dağıtılacağını gösterdik. Eşzamansız uç noktaları çağırmak ve sonuçları almak için farklı yöntemleri göstermek amacıyla SageMaker Python SDK, Boto3 ve LangChain'i kullanarak kod örnekleri sağladık. Bu teknikler, geliştiricilerin ve araştırmacıların, gelişmiş dil anlama sistemleri için temel modellerin yeteneklerini kullanırken maliyetleri optimize etmelerine olanak tanır.

Eşzamansız çıkarım ve SageMaker JumpStart hakkında daha fazla bilgi edinmek için aşağıdaki gönderilere göz atın:


Yazar hakkında

Davide'nin resmiDavide Gallitelli EMEA bölgesinde AI/ML için Uzman Çözüm Mimarıdır. Merkezi Brüksel'dedir ve Benelüks genelindeki müşterilerle yakın işbirliği içinde çalışmaktadır. Çok küçük yaşlardan beri geliştiricidir, 7 yaşında kodlamaya başlar. Üniversitede AI/ML öğrenmeye başladı ve o zamandan beri ona aşık oldu.

Zaman Damgası:

Den fazla AWS Makine Öğrenimi