Verpak en implementeer klassieke ML en LLM's eenvoudig met Amazon SageMaker, deel 1: PySDK-verbeteringen | Amazon-webservices

Verpak en implementeer klassieke ML en LLM's eenvoudig met Amazon SageMaker, deel 1: PySDK-verbeteringen | Amazon-webservices

Amazon Sage Maker is een volledig beheerde service waarmee ontwikkelaars en datawetenschappers snel en moeiteloos machine learning (ML)-modellen op elke schaal kunnen bouwen, trainen en implementeren. SageMaker maakt het eenvoudig om modellen rechtstreeks in productie te nemen via API-aanroepen naar de service. Modellen worden verpakt in containers voor robuuste en schaalbare implementaties. Hoewel het verschillende toegangspunten biedt, zoals de SageMaker Python SDK, AWS SDK's, de SageMaker-console en Amazon SageMaker Studio notebooks om het proces van training en implementatie van ML-modellen op schaal te vereenvoudigen, zijn klanten nog steeds op zoek naar betere manieren om hun modellen in te zetten voor testen op speelplaatsen en om productie-implementaties te optimaliseren.

We lanceren twee nieuwe manieren om het proces van het verpakken en implementeren van modellen met SageMaker te vereenvoudigen.

In dit bericht introduceren we de nieuwe SageMaker Python SDK ModelBuilder ervaring, die tot doel heeft de leercurve voor nieuwe SageMaker-gebruikers zoals datawetenschappers te minimaliseren, terwijl ook ervaren MLOps-ingenieurs worden geholpen het gebruik van SageMaker-hostingservices te maximaliseren. Het vermindert de complexiteit van de initiรซle installatie en implementatie, en biedt richtlijnen voor best practices om te profiteren van de volledige mogelijkheden van SageMaker. We bieden gedetailleerde informatie en GitHub-voorbeelden voor deze nieuwe SageMaker-mogelijkheid.

De andere nieuwe lancering is het gebruik van de nieuwe interactieve implementatie-ervaring in SageMaker Studio. We bespreken dit in deel 2.

Het implementeren van modellen op een SageMaker-eindpunt omvat een reeks stappen om het model klaar te maken om te worden gehost op een SageMaker-eindpunt. Dit omvat het verkrijgen van de modelartefacten in het juiste formaat en de juiste structuur, het creรซren van inferentiecode en het specificeren van essentiรซle details zoals de URL van de modelafbeelding, Amazon eenvoudige opslagservice (Amazon S3) locatie van modelartefacten, serialisatie- en deserialisatiestappen, en noodzakelijk AWS Identiteits- en toegangsbeheer (IAM)-rollen om de juiste toegangsrechten te vergemakkelijken. Hierna vereist een eindpuntconfiguratie het bepalen van het gevolgtrekkingstype en het configureren van respectieve parameters zoals instantietypen, aantallen en verkeersverdeling tussen modelvarianten.

Om onze klanten verder te helpen bij het gebruik van SageMaker-hosting, hebben we de nieuwe geรฏntroduceerd ModelBuilder klasse in de SageMaker Python SDK, wat de volgende belangrijke voordelen biedt bij het implementeren van modellen op SageMaker-eindpunten:

  • Verenigt de implementatie-ervaring in alle frameworks โ€“ De nieuwe ervaring biedt een consistente workflow voor het implementeren van modellen die zijn gebouwd met behulp van verschillende frameworks zoals PyTorch, TensorFlow en XGBoost. Dit vereenvoudigt het implementatieproces.
  • Automatiseert modelimplementatie โ€“ Taken zoals het selecteren van de juiste containers, het vastleggen van afhankelijkheden en het afhandelen van serialisatie/deserialisatie zijn geautomatiseerd, waardoor de handmatige inspanning voor de implementatie wordt verminderd.
  • Biedt een soepele overgang van lokaal naar door SageMaker gehost eindpunt โ€“ Met minimale codewijzigingen kunnen modellen eenvoudig worden overgezet van lokaal testen naar implementatie op een SageMaker-eindpunt. Live logs zorgen ervoor dat foutopsporing naadloos verloopt.

Kortom, SageMaker ModelBuilder vereenvoudigt en stroomlijnt het modelverpakkingsproces voor SageMaker-inferentie door details op laag niveau te verwerken en biedt tools voor het testen, valideren en optimaliseren van eindpunten. Dit verbetert de productiviteit van ontwikkelaars en vermindert fouten.

In de volgende secties gaan we dieper in op de details van deze nieuwe functie. We bespreken ook hoe u modellen kunt implementeren op SageMaker-hosting met behulp van ModelBuilder, wat het proces vereenvoudigt. Vervolgens laten we u enkele voorbeelden zien van verschillende raamwerken om zowel traditionele ML-modellen als de basismodellen in te zetten die generatieve AI-gebruiksscenario's mogelijk maken.

Kennismaken met SageMaker ModelBuilder

De nieuwe ModelBuilder is een Python-klasse die zich richt op het omzetten van ML-modellen die zijn gebouwd met behulp van frameworks, zoals XGBoost of PyTorch, naar modellen die klaar zijn voor implementatie op SageMaker. ModelBuilder biedt build() functie, die de artefacten genereert volgens de modelserver, en a deploy() functie om lokaal of op een SageMaker-eindpunt te implementeren. De introductie van deze functie vereenvoudigt de integratie van modellen met de SageMaker-omgeving, waardoor ze worden geoptimaliseerd voor prestaties en schaalbaarheid. Het volgende diagram laat zien hoe ModelBuilder werkt op hoog niveau.

Verpak en implementeer klassieke ML en LLM's eenvoudig met Amazon SageMaker, deel 1: PySDK-verbeteringen | Amazon Web Services PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

ModelBuilder-klasse

De Modelbouwer klasse bieden verschillende opties voor aanpassing. Om het raamwerkmodel in te zetten, verwacht de modelbouwer echter alleen het model, de input, de output en de rol:

class ModelBuilder( model, # model id or model object role_arn, # IAM role schema_builder, # defines the input and output mode, # select between local deployment and depoy to SageMaker Endpoints ...
)

SchemaBuilder

De SchemaBuilder Met class kunt u de invoer en uitvoer voor uw eindpunt definiรซren. Hiermee kan de schemabouwer de overeenkomstige rangeerfuncties genereren voor het serialiseren en deserialiseren van de invoer en uitvoer. Het volgende klassenbestand biedt alle aanpassingsmogelijkheden:

class SchemaBuilder( sample_input: Any, sample_output: Any, input_translator: CustomPayloadTranslator = None, output_translator: CustomPayloadTranslator = None
)

In de meeste gevallen zou echter alleen voorbeeldinvoer en -uitvoer werken. Bijvoorbeeld:

input = "How is the demo going?"
output = "Comment la dรฉmo va-t-elle?"
schema = SchemaBuilder(input, output)

Door voorbeeldinvoer en -uitvoer aan te bieden, SchemaBuilder kan automatisch de noodzakelijke transformaties bepalen, waardoor het integratieproces eenvoudiger wordt. Voor geavanceerdere gebruiksscenario's is er de flexibiliteit om aangepaste vertaalfuncties te bieden voor zowel invoer als uitvoer, zodat ook complexere datastructuren efficiรซnt kunnen worden afgehandeld. We demonstreren dit in de volgende paragrafen door verschillende modellen met verschillende raamwerken in te zetten ModelBuilder.

Ervaring in lokale modus

In dit voorbeeld gebruiken we ModelBuilder om het XGBoost-model lokaal te implementeren. U kunt Mode gebruiken om te schakelen tussen lokaal testen en implementeren op een SageMaker-eindpunt. We trainen eerst het XGBoost-model (lokaal of in SageMaker) en slaan de modelartefacten op in de werkmap:

# Train the model
model = XGBClassifier()
model.fit(X_train, y_train)
model.save_model(model_dir + "/my_model.xgb")

Vervolgens maken we een ModelBuilder-object door het daadwerkelijke modelobject, de SchemaBuilder dat de voorbeeldtestinvoer- en uitvoerobjecten gebruikt (dezelfde invoer en uitvoer die we hebben gebruikt bij het trainen en testen van het model) om de benodigde serialisatie af te leiden. Let op: wij gebruiken Mode.LOCAL_CONTAINER om een โ€‹โ€‹lokale implementatie op te geven. Daarna bellen wij met de bouw functie om automatisch de ondersteunde framework-containerimage te identificeren en te scannen op afhankelijkheden. Zie de volgende code:

model_builder_local = ModelBuilder( model=model, schema_builder=SchemaBuilder(X_test, y_pred), role_arn=execution_role, mode=Mode.LOCAL_CONTAINER
)
xgb_local_builder = model_builder_local.build()

Tot slot kunnen we de deploy functie in het modelobject, die ook live loggen biedt voor eenvoudiger debuggen. U hoeft het exemplaartype of aantal niet op te geven, omdat het model lokaal wordt geรฏmplementeerd. Als u deze parameters heeft opgegeven, worden ze genegeerd. Deze functie retourneert het voorspellerobject dat we kunnen gebruiken om voorspellingen te doen met de testgegevens:

# note: all the serialization and deserialization is handled by the model builder.
predictor_local = xgb_local_builder.deploy(
# instance_type='ml.c5.xlarge',
# initial_instance_count=1
) # Make prediction for test data. predictor_local.predict(X_test)

Optioneel kunt u ook het laden van het model en de voor- en nabewerking regelen met behulp van InferenceSpec. Meer details geven we verderop in dit bericht. Gebruik makend van LOCAL_CONTAINER is een geweldige manier om uw script lokaal te testen voordat u het op een SageMaker-eindpunt implementeert.

Verwijs naar de modelbouwer-xgboost.ipynb voorbeeld om de implementatie zowel lokaal als op een SageMaker-eindpunt te testen met behulp van ModelBuilder.

Implementeer traditionele modellen op SageMaker-eindpunten

In de volgende voorbeelden laten we zien hoe u dit kunt gebruiken ModelBuilder om traditionele ML-modellen in te zetten.

XGBoost-modellen

Net als in de vorige sectie kunt u een XGBoost-model implementeren op een SageMaker-eindpunt door de mode parameter bij het maken van de ModelBuilder voorwerp:

model_builder = ModelBuilder( model=model, schema_builder=SchemaBuilder(sample_input=sample_input, sample_output=sample_output), role_arn=execution_role, mode=Mode.SAGEMAKER_ENDPOINT
)
xgb_builder = model_builder.build()
predictor = xgb_builder.deploy( instance_type='ml.c5.xlarge', initial_instance_count=1
)

Houd er rekening mee dat u bij implementatie op SageMaker-eindpunten het exemplaartype en het aantal exemplaren moet opgeven bij het aanroepen van de deploy functie.

Verwijs naar de modelbouwer-xgboost.ipynb voorbeeld om een โ€‹โ€‹XGBoost-model te implementeren.

Triton-modellen

Je kunt gebruiken ModelBuilder om PyTorch-modellen op te bedienen Triton Inference-server. Daarvoor moet u de model_server parameter als ModelServer.TRITON, geef een model door en krijg een SchemaBuilder object, waarvoor voorbeeldinvoer en -uitvoer van het model vereist is. ModelBuilder regelt de rest voor u.

model_builder = ModelBuilder( model=model, schema_builder=SchemaBuilder(sample_input=sample_input, sample_output=sample_output), role_arn=execution_role, model_server=ModelServer.TRITON, mode=Mode.SAGEMAKER_ENDPOINT
) triton_builder = model_builder.build() predictor = triton_builder.deploy( instance_type='ml.g4dn.xlarge', initial_instance_count=1
)

Verwijzen naar modelbouwer-triton.ipynb om een โ€‹โ€‹model met Triton in te zetten.

Knuffelende Gezichtsmodellen

In dit voorbeeld laten we u zien hoe u een vooraf getraind transformatormodel van Hugging Face to SageMaker kunt implementeren. We willen het knuffelgezicht gebruiken pipeline om het model te laden, dus maken we een aangepaste gevolgtrekkingsspecificatie voor ModelBuilder:

# custom inference spec with hugging face pipeline
class MyInferenceSpec(InferenceSpec): def load(self, model_dir: str): return pipeline("translation_en_to_fr", model="t5-small") def invoke(self, input, model): return model(input) inf_spec = MyInferenceSpec()

We definiรซren ook de invoer en uitvoer van de gevolgtrekkingswerklast door het definiรซren van de SchemaBuilder object gebaseerd op de modelinvoer en -uitvoer:

schema = SchemaBuilder(value,output)

Vervolgens creรซren wij de ModelBuilder object en implementeer het model op een SageMaker-eindpunt volgens dezelfde logica als in het andere voorbeeld:

builder = ModelBuilder( inference_spec=inf_spec, mode=Mode.SAGEMAKER_ENDPOINT, # you can change it to Mode.LOCAL_CONTAINER for local testing schema_builder=schema, image_uri=image,
)
model = builder.build( role_arn=execution_role, sagemaker_session=sagemaker_session,
)
predictor = model.deploy( initial_instance_count=1, instance_type='ml.g5.2xlarge'
)

Verwijzen naar modelbouwer-knuffelface.ipynb om een โ€‹โ€‹Hugging Face-pijplijnmodel in te zetten.

Implementeer basismodellen op SageMaker-eindpunten

In de volgende voorbeelden laten we zien hoe u dit kunt gebruiken ModelBuilder funderingsmodellen inzetten. Net als bij de eerder genoemde modellen is het enige dat nodig is de model-ID.

Knuffelen Gezicht Hub

Als u een funderingsmodel wilt implementeren van Knuffelen Gezicht Hub, hoeft u alleen maar de vooraf getrainde model-ID door te geven. Met het volgende codefragment wordt bijvoorbeeld de meta-lama/Llama-2-7b-hf lokaal modelleren. U kunt de modus wijzigen in Mode.SAGEMAKER_ENDPOINT om te implementeren op SageMaker-eindpunten.

model_builder = ModelBuilder( model="meta-llama/Llama-2-7b-hf", schema_builder=SchemaBuilder(sample_input, sample_output), model_path="/home/ec2-user/SageMaker/LoadTestResources/meta-llama2-7b", #local path where artifacts will be saved mode=Mode.LOCAL_CONTAINER, env_vars={ # Llama 2 is a gated model and requires a Hugging Face Hub token. "HUGGING_FACE_HUB_TOKEN": "<YourHuggingFaceToken>" }
)
model = model_builder.build()
local_predictor = model.deploy()

Voor gated modellen op Hugging Face Hub moet u toegang aanvragen via Hugging Face Hub en de bijbehorende sleutel gebruiken door deze door te geven als de omgevingsvariabele HUGGING_FACE_HUB_TOKEN. Voor sommige Hugging Face-modellen is mogelijk een vertrouwde afstandsbedieningscode vereist. Het kan ook worden ingesteld als een omgevingsvariabele met behulp van HF_TRUST_REMOTE_CODE. Standaard, ModelBuilder zal een knuffelgezicht-tekstgeneratie-inferentie gebruiken (TGI) container als de onderliggende container voor Hugging Face-modellen. Als u AWS Large Model Inference wilt gebruiken (LMI)-containers, kunt u de model_server parameter als ModelServer.DJL_SERVING wanneer u de ModelBuilder voorwerp.

Een leuke functie van ModelBuilder is de mogelijkheid om lokale afstemming van de containerparameters uit te voeren wanneer u deze gebruikt LOCAL_CONTAINER modus. Deze functie kan worden gebruikt door simpelweg te rennen tuned_model = model.tune().

Verwijzen naar demo-modelbouwer-knuffelgezicht-llama2.ipynb om een โ€‹โ€‹Hugging Face Hub-model in te zetten.

SageMaker JumpStart

Amazon SageMaker JumpStart biedt ook een aantal voorgetrainde funderingsmodellen aan. Net als bij het implementeren van een model vanuit Hugging Face Hub is de model-ID vereist. Het implementeren van een SageMaker JumpStart-model op een SageMaker-eindpunt is net zo eenvoudig als het uitvoeren van de volgende code:

model_builder = ModelBuilder( model="huggingface-llm-falcon-7b-bf16", schema_builder=SchemaBuilder(sample_input, sample_output), role_arn=execution_role
) sm_ep_model = model_builder.build() predictor = sm_ep_model.deploy()

Voor alle beschikbare SageMaker JumpStart-model-ID's raadpleegt u Ingebouwde algoritmen met vooraf getrainde modeltabel. Verwijzen naar modelbouwer-jumpstart-falcon.ipynb om een โ€‹โ€‹SageMaker JumpStart-model te implementeren.

Inferentiecomponent

ModelBulder Hiermee kunt u de nieuwe mogelijkheid voor inferentiecomponenten in SageMaker gebruiken om modellen te implementeren. Zie voor meer informatie over inferentiecomponenten Verlaag de implementatiekosten van modellen met gemiddeld 50% met behulp van de nieuwste functies van SageMaker. U kunt inferentiecomponenten gebruiken voor implementatie met ModelBuilder door te specificeren endpoint_type=EndpointType.INFERENCE_COMPONENT_BASED in de deploy() methode. Je kunt ook gebruik maken van de tune() methode, die het optimale aantal versnellers ophaalt, en deze indien nodig aanpast.

resource_requirements = ResourceRequirements( requests={ "num_accelerators": 4, "memory": 1024, "copies": 1, }, limits={},
) goldfinch_predictor_2 = model_2.deploy( mode=Mode.SAGEMAKER_ENDPOINT, endpoint_type=EndpointType.INFERENCE_COMPONENT_BASED, ... )

Verwijzen naar modelbouwer-inferentiecomponent.ipynb om een โ€‹โ€‹model in te zetten als een inferentiecomponent.

Pas de ModelBuilder-klasse aan

De ModelBuilder Met class kunt u het laden van modellen aanpassen met behulp van InferenceSpec.

Bovendien kunt u de serialisatie en deserialisatie van de payload en de respons beheren en de voor- en naverwerking aanpassen met behulp van CustomPayloadTranslator. Als u bovendien onze vooraf gebouwde containers wilt uitbreiden voor modelimplementatie op SageMaker, kunt u deze gebruiken ModelBuilder om het modelverpakkingsproces af te handelen. In dit volgende gedeelte geven we meer details over deze mogelijkheden.

InferentieSpec

InferentieSpec biedt een extra laag maatwerk. Hiermee kunt u definiรซren hoe het model wordt geladen en hoe het binnenkomende inferentieverzoeken zal afhandelen. Door InferenceSpec, kunt u aangepaste laadprocedures voor uw modellen definiรซren, waarbij u de standaard laadmechanismen omzeilt. Deze flexibiliteit is vooral gunstig bij het werken met niet-standaardmodellen of aangepaste inferentiepijplijnen. De invoke-methode kan worden aangepast, waardoor u de mogelijkheid heeft om aan te passen hoe het model binnenkomende verzoeken verwerkt (voorverwerking en naverwerking). Deze aanpassing kan essentieel zijn om ervoor te zorgen dat het inferentieproces aansluit bij de specifieke behoeften van het model. Zie de volgende code:

class InferenceSpec(abc.ABC): @abc.abstractmethod def load(self, model_dir: str): pass @abc.abstractmethod def invoke(self, input_object: object, model: object): pass

De volgende code toont een voorbeeld van het gebruik van deze klasse:

class MyInferenceSpec(InferenceSpec): def load(self, model_dir: str): return // model object def invoke(self, input, model): return model(input)

AangepastePayloadTranslator

Bij het aanroepen van SageMaker-eindpunten worden de gegevens verzonden via HTTP-payloads met verschillende MIME-typen. Een afbeelding die voor gevolgtrekking naar het eindpunt wordt verzonden, moet bijvoorbeeld aan de clientzijde worden geconverteerd naar bytes en via de HTTP-payload naar het eindpunt worden verzonden. Wanneer het eindpunt de payload ontvangt, moet het de bytereeks deserialiseren naar het gegevenstype dat door het model wordt verwacht (ook bekend als deserialisatie aan de serverzijde). Nadat het model de voorspelling heeft voltooid, moeten de resultaten worden geserialiseerd in bytes die via de HTTP-payload kunnen worden teruggestuurd naar de gebruiker of client. Wanneer de client de responsbytegegevens ontvangt, moet deze deserialisatie aan de clientzijde uitvoeren om de bytesgegevens terug te converteren naar het verwachte gegevensformaat, zoals JSON. Ten minste, u moet de gegevens voor het volgende converteren (zoals genummerd in het volgende diagram):

  1. Serialisatie van inferentieverzoeken (afgehandeld door de klant)
  2. Deserialisatie van inferentieverzoeken (afgehandeld door de server of het algoritme)
  3. Het model aanroepen tegen de payload
  4. Antwoordpayload terugsturen
  5. Serialisatie van gevolgtrekkingsreacties (verwerkt door de server of het algoritme)
  6. Deserialisatie van gevolgtrekkingsreacties (afgehandeld door de client)

Het volgende diagram toont het proces van serialisatie en deserialisatie tijdens het aanroepproces.

Verpak en implementeer klassieke ML en LLM's eenvoudig met Amazon SageMaker, deel 1: PySDK-verbeteringen | Amazon Web Services PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

In het volgende codefragment laten we een voorbeeld zien van CustomPayloadTranslator wanneer aanvullende aanpassingen nodig zijn om zowel serialisatie als deserialisatie aan de client- en serverzijde af te handelen:

from sagemaker.serve import CustomPayloadTranslator # request translator
class MyRequestTranslator(CustomPayloadTranslator): # This function converts the payload to bytes - happens on client side def serialize_payload_to_bytes(self, payload: object) -> bytes: # converts the input payload to bytes ... ... return //return object as bytes # This function converts the bytes to payload - happens on server side def deserialize_payload_from_stream(self, stream) -> object: # convert bytes to in-memory object ... ... return //return in-memory object # response translator class MyResponseTranslator(CustomPayloadTranslator): # This function converts the payload to bytes - happens on server side def serialize_payload_to_bytes(self, payload: object) -> bytes: # converts the response payload to bytes ... ... return //return object as bytes # This function converts the bytes to payload - happens on client side def deserialize_payload_from_stream(self, stream) -> object: # convert bytes to in-memory object ... ... return //return in-memory object

In het demo-modelbouwer-pytorch.ipynb notebook laten we zien hoe u eenvoudig een PyTorch-model kunt implementeren op een SageMaker-eindpunt met behulp van ModelBuilder met de CustomPayloadTranslator en InferenceSpec klasse.

Fasemodel voor implementatie

Als u het model wilt voorbereiden voor gevolgtrekking of in het modelregister, kunt u dit gebruiken model.create() or model.register(). Het ingeschakelde model wordt op de service gemaakt en kunt u later implementeren. Zie de volgende code:

model_builder = ModelBuilder( model=model, schema_builder=SchemaBuilder(X_test, y_pred), role_arn=execution_role, )
deployable_model = model_builder.build() deployable_model.create() # deployable_model.register() for model registry

Gebruik aangepaste containers

SageMaker biedt: vooraf gebouwde Docker-installatiekopieรซn vanwege de ingebouwde algoritmen en de ondersteunde deep learning-frameworks die worden gebruikt voor training en gevolgtrekking. Als een vooraf gebouwde SageMaker-container niet aan al uw eisen voldoet, kunt u de bestaande image uitbreiden om aan uw behoeften te voldoen. Door een vooraf gebouwde afbeelding uit te breiden, kunt u de meegeleverde deep learning-bibliotheken en instellingen gebruiken zonder dat u een geheel nieuwe afbeelding hoeft te maken. Raadpleeg het SageMaker-document voor meer informatie over het uitbreiden van de vooraf gebouwde containers. ModelBuilder ondersteunt gebruiksscenario's bij het meenemen van uw eigen containers die zijn uitgebreid vanuit onze vooraf gebouwde Docker-containers.

Om in dit geval uw eigen containerimage te gebruiken, moet u de velden instellen image_uri en model_server bij het definiรซren ModelBuilder:

model_builder = ModelBuilder( model=model, # Pass in the actual model object. its "predict" method will be invoked in the endpoint. schema_builder=SchemaBuilder(X_test, y_pred), # Pass in a "SchemaBuilder" which will use the sample test input and output objects to infer the serialization needed. role_arn=execution_role, image_uri=image_uri, # REQUIRED FOR BYOC: Passing in image hosted in personal ECR Repo model_server=ModelServer.TORCHSERVE, # REQUIRED FOR BYOC: Passing in model server of choice mode=Mode.SAGEMAKER_ENDPOINT, dependencies={"auto": True, "custom": ["protobuf==3.20.2"]}
)

Hier de image_uri is de containerafbeelding ARN die is opgeslagen in uw account Amazon Elastic Container-register (Amazon ECR)-repository. Eรฉn voorbeeld wordt als volgt weergegeven:

# Pulled the xgboost:1.7-1 DLC and pushed to personal ECR repo
image_uri = "<your_account_id>.dkr.ecr.us-west-2.amazonaws.com/my-byoc:xgb"

Wanneer de image_uri is ingesteld tijdens de ModelBuilder build-proces, wordt de automatische detectie van de afbeelding overgeslagen wanneer de afbeeldings-URI wordt opgegeven. Als model_server niet is ingesteld in ModelBuilder, ontvangt u een validatiefoutmelding, bijvoorbeeld:

ValueError: Model_server must be set when image_uri is set. Supported model servers: {<ModelServer.TRITON: 5>, <ModelServer.DJL_SERVING: 4>, <ModelServer.TORCHSERVE: 1>}

Vanaf de publicatie van dit bericht is ModelBuilder ondersteunt het meebrengen van eigen containers die bij ons zijn uitgebreid vooraf gebouwde DLC-containerimages of containers gebouwd met de modelservers zoals Diepe Java-bibliotheek (DJL), Tekstgeneratie-inferentie (TGI), FakkelServe en Triton-inferentieserver.

Aangepaste afhankelijkheden

Tijdens het hardlopen ModelBuilder.build(), legt het standaard uw Python-omgeving automatisch vast in een requirements.txt bestand en installeert dezelfde afhankelijkheid in de container. Soms zal uw lokale Python-omgeving echter conflicteren met de omgeving in de container. ModelBuilder biedt u een eenvoudige manier om de vastgelegde afhankelijkheden te wijzigen om dergelijke afhankelijkheidsconflicten op te lossen, door u toe te staan โ€‹โ€‹uw aangepaste configuraties in te voeren ModelBuilder. Let op: dit is alleen voor TorchServe en Triton met InferenceSpec. U kunt bijvoorbeeld de afhankelijkheden van de invoerparameters (een Python-woordenboek) in ModelBuilder als volgt opgeven:

dependency_config = { "auto" = True, "requirements" = "/path/to/your/requirements.txt" "custom" = ["module>=1.2.3,<1.5", "boto3==1.16.*", "some_module@http://some/url"]
} ModelBuilder( # Other params dependencies=dependency_config,
).build()

We definiรซren de volgende velden:

  • auto โ€“ Of u de afhankelijkheden in uw omgeving automatisch wilt vastleggen.
  • eisen โ€“ Een reeks van het pad naar het jouwe requirements.txt bestand. (Dit is optioneel.)
  • gewoonte โ€“ Een lijst met eventuele andere aangepaste afhankelijkheden die u wilt toevoegen of wijzigen. (Dit is optioneel.)

Als dezelfde module op meerdere plaatsen wordt gespecificeerd, custom zal dan de hoogste prioriteit hebben requirements en auto zal de laagste prioriteit hebben. Laten we bijvoorbeeld zeggen dat tijdens autodetectie: ModelBuilder detecteert numpy==1.25En een requirements.txt Er is een bestand aanwezig waarin dit wordt gespecificeerd numpy>=1.24,<1.26. Bovendien is er een aangepaste afhankelijkheid: custom = ["numpy==1.26.1"]. In dit geval, numpy==1.26.1 wordt gekozen wanneer we afhankelijkheden in de container installeren.

Opruimen

Wanneer u klaar bent met het testen van de modellen, kunt u het beste het eindpunt verwijderen om kosten te besparen als het eindpunt niet langer nodig is. Je kunt de volgen Opruimen sectie in elk van de demo-notebooks of gebruik de volgende code om het model en het eindpunt te verwijderen dat door de demo is gemaakt:

predictor.delete_model()
predictor.delete_endpoint()

Conclusie

De nieuwe SageMaker ModelBuilder-mogelijkheid vereenvoudigt het proces van het implementeren van ML-modellen in productie op SageMaker. Door veel van de complexe details achter de schermen af โ€‹โ€‹te handelen, verkleint ModelBuilder de leercurve voor nieuwe gebruikers en maximaliseert het gebruik voor ervaren gebruikers. Met slechts een paar regels code kunt u modellen met ingebouwde raamwerken zoals XGBoost, PyTorch, Triton en Hugging Face, evenals modellen van SageMaker JumpStart, implementeren in robuuste, schaalbare eindpunten op SageMaker.

We moedigen alle SageMaker-gebruikers aan om deze nieuwe mogelijkheid uit te proberen door te verwijzen naar de Modelbouwer documentatiepagina. ModelBuilder is nu zonder extra kosten beschikbaar voor alle SageMaker-gebruikers. Profiteer van deze vereenvoudigde workflow om uw modellen sneller te implementeren. We kijken ernaar uit om te horen hoe ModelBuilder de levenscyclus van uw modelontwikkeling versnelt!

Speciale dank aan Sirisha Upadhyayala, Raymond Liu, Gary Wang, Dhawal Patel, Deepak Garg en Ram Vegiraju.


Over de auteurs

Verpak en implementeer klassieke ML en LLM's eenvoudig met Amazon SageMaker, deel 1: PySDK-verbeteringen | Amazon Web Services PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.Melanie Li, PhD, is een Senior AI/ML-specialist TAM bij AWS in Sydney, Australiรซ. Ze helpt zakelijke klanten oplossingen te bouwen met behulp van de modernste AI/ML-tools op AWS en biedt begeleiding bij het ontwerpen en implementeren van ML-oplossingen met best practices. In haar vrije tijd houdt ze ervan om de natuur te verkennen en tijd door te brengen met familie en vrienden.

Verpak en implementeer klassieke ML en LLM's eenvoudig met Amazon SageMaker, deel 1: PySDK-verbeteringen | Amazon Web Services PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.Marc Karp is een ML-architect bij het Amazon SageMaker Service-team. Hij richt zich op het helpen van klanten bij het ontwerpen, implementeren en beheren van ML-workloads op schaal. In zijn vrije tijd houdt hij van reizen en nieuwe plekken ontdekken.

Verpak en implementeer klassieke ML en LLM's eenvoudig met Amazon SageMaker, deel 1: PySDK-verbeteringen | Amazon Web Services PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.Sam Edwards, is een Cloud Engineer (AI/ML) bij AWS Sydney, gespecialiseerd in machine learning en Amazon SageMaker. Hij heeft een passie voor het helpen van klanten bij het oplossen van problemen met betrekking tot machine learning-workflows en het creรซren van nieuwe oplossingen voor hen. Buiten zijn werk houdt hij van racketsporten en reizen.

Verpak en implementeer klassieke ML en LLM's eenvoudig met Amazon SageMaker, deel 1: PySDK-verbeteringen | Amazon Web Services PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.Raghu Ramesha is een Senior ML Solutions Architect bij het Amazon SageMaker Service-team. Hij richt zich op het helpen van klanten bij het op grote schaal bouwen, implementeren en migreren van ML-productieworkloads naar SageMaker. Hij is gespecialiseerd in machine learning, AI en computer vision-domeinen, en heeft een masterdiploma in computerwetenschappen van UT Dallas. In zijn vrije tijd houdt hij van reizen en fotografie.

Verpak en implementeer klassieke ML en LLM's eenvoudig met Amazon SageMaker, deel 1: PySDK-verbeteringen | Amazon Web Services PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.Shiva Raaj Kotini werkt als Principal Product Manager in de Amazon SageMaker inference productportfolio. Hij richt zich op modelimplementatie, prestatieafstemming en optimalisatie in SageMaker voor gevolgtrekking.

Verpak en implementeer klassieke ML en LLM's eenvoudig met Amazon SageMaker, deel 1: PySDK-verbeteringen | Amazon Web Services PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.Mohan Ghandi is Senior Software Engineer bij AWS. Hij werkt al 10 jaar bij AWS en heeft aan verschillende AWS-services gewerkt, zoals EMR, EFA en RDS. Momenteel richt hij zich op het verbeteren van de SageMaker Inference Experience. In zijn vrije tijd houdt hij van wandelen en marathons.

Tijdstempel:

Meer van AWS-machine learning