Zmanjšajte vpliv posodobitev modela ML na proizvodnjo s testiranjem v senci Amazon SageMaker PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.

Zmanjšajte vpliv posodobitev modela ML na proizvodnjo s testiranjem v senci Amazon SageMaker

Amazon SageMaker zdaj vam omogoča, da primerjate zmogljivost nove različice sklada za streženje modela s trenutno uvedeno različico pred popolno uvedbo proizvodnje z uporabo varnostne prakse uvajanja, znane kot testiranje senc. Testiranje v senci vam lahko pomaga prepoznati morebitne konfiguracijske napake in težave z delovanjem, preden vplivajo na končne uporabnike. S SageMakerjem vam ni treba vlagati v izgradnjo svoje infrastrukture za testiranje v senci, kar vam omogoča, da se osredotočite na razvoj modela. SageMaker skrbi za uvajanje nove različice skupaj s trenutno različico, ki služi produkcijskim zahtevam, in usmerja del zahtev v senčno različico. Nato lahko primerjate uspešnost obeh različic z uporabo meritev, kot sta zakasnitev in stopnja napak. To vam daje večje zaupanje, da uvedbe proizvodnje na končne točke sklepanja SageMaker ne bodo povzročile regresij zmogljivosti, in vam pomaga preprečiti izpade zaradi naključnih napačnih konfiguracij.

V tej objavi prikazujemo to novo zmogljivost SageMaker. Ustrezen vzorčni zvezek je na voljo v tem GitHubu Skladišče.

Pregled rešitve

Vaša strežna infrastruktura modela je sestavljena iz modela strojnega učenja (ML), strežnega vsebnika ali računalniške instance. Razmislimo o naslednjih scenarijih:

  • Razmišljate o promoviranju novega modela, ki je bil preverjen brez povezave v produkcijo, vendar želite oceniti metrike operativne zmogljivosti, kot so zakasnitev, stopnja napak itd., preden sprejmete to odločitev.
  • Razmišljate o spremembah vsebnika vaše strežniške infrastrukture, kot je popravljanje ranljivosti ali nadgradnja na novejše različice, in želite oceniti vpliv teh sprememb pred napredovanjem v produkcijo.
  • Razmišljate o spremembi svojega primerka ML in želite oceniti, kako bi novi primerek deloval z zahtevami za sklepanje v živo.

Naslednji diagram ponazarja našo arhitekturo rešitev.

Za vsakega od teh scenarijev izberite produkcijsko različico, ki jo želite preizkusiti, in SageMaker samodejno uvede novo različico v senčnem načinu in ji v realnem času znotraj iste končne točke usmeri kopijo zahtev za sklepanje. Klicni aplikaciji se vrnejo le odgovori produkcijske variante. Izberete lahko, da zavržete ali zabeležite odgovore senčne različice za primerjavo brez povezave. Po želji lahko spremljate različice prek vgrajene nadzorne plošče z vzporedno primerjavo meritev uspešnosti. To zmožnost lahko uporabite prek API-jev za posodobitev končne točke sklepanja SageMaker ali prek konzole SageMaker.

Senčne različice nadgrajujejo zmogljivost proizvodne različice v končnih točkah sklepanja SageMaker. Da ponovim, a proizvodna varianta je sestavljen iz modela ML, strežnega vsebnika in primerka ML. Ker je vsaka različica neodvisna od drugih, lahko imate med različicami različne modele, vsebnike ali vrste primerkov. SageMaker vam omogoča, da določite politike samodejnega skaliranja za vsako različico, tako da se lahko neodvisno spreminjajo glede na dohodno obremenitev. SageMaker podpira do 10 proizvodnih različic na končno točko. Različico lahko konfigurirate tako, da prejme del dohodnega prometa, tako da nastavite uteži različic, ali pa v dohodni zahtevi podate ciljno različico. Odgovor iz produkcijske različice se posreduje nazaj invokerju.

A senčna različica (novo) ima enake komponente kot proizvodna različica. Uporabniško določen del zahtev, znan kot odstotek vzorčenja prometa, se posreduje v senčno različico. Lahko se odločite za prijavo odziva senčne različice Preprosta storitev shranjevanja Amazon (Amazon S3) ali ga zavrzite.

Upoštevajte, da SageMaker podpira največ eno različico sence na končno točko. Za končno točko s senčno različico je lahko največ ena proizvodna različica.

Ko nastavite produkcijske in senčne različice, lahko spremljate metrike priklica za proizvodne in senčne različice v amazoncloudwatch pod AWS/SageMaker imenski prostor. Vse posodobitve končne točke SageMaker so orkestrirane z uporabo modro/zelene uvedbe in se zgodi brez izgube razpoložljivosti. Vaše končne točke se bodo še naprej odzivale na produkcijske zahteve, ko dodate, spremenite ali odstranite senčne različice.

To zmožnost lahko uporabite na enega od dveh načinov:

  • Upravljano testiranje senc s konzolo SageMaker – Konzolo lahko uporabite za vodeno izkušnjo za upravljanje celotnega potovanja senčnega testiranja. To vam omogoča nastavitev senčnih testov za vnaprej določeno časovno obdobje, spremljanje napredka prek nadzorne plošče v živo, čiščenje po zaključku in ukrepanje na podlagi rezultatov.
  • Samopostrežno testiranje sence z uporabo API-jev SageMaker Inference – Če vaš delovni tok uvajanja že uporablja API-je za ustvarjanje/posodabljanje/brisanje končne točke, jih lahko še naprej uporabljate za upravljanje senčnih različic.

V naslednjih razdelkih se sprehodimo skozi vsakega od teh scenarijev.

Scenarij 1 – Upravljano testiranje senc s konzolo SageMaker

Če želite izbrati SageMaker za upravljanje celotnega delovnega toka ustvarjanja, upravljanja in ukrepanja na podlagi rezultatov senčnih testov, razmislite o uporabi zmožnosti senčnih testov v razdelku Inference na konzoli SageMaker. Kot je bilo že omenjeno, vam to omogoča, da nastavite senčne teste za vnaprej določeno časovno obdobje, spremljate napredek prek nadzorne plošče v živo, predstavite možnosti čiščenja po zaključku in ukrepate na podlagi rezultatov. Če želite izvedeti več, obiščite senčne teste oddelek naše dokumentacije za postopno predstavitev te zmožnosti.

Predpogoji

Modele za proizvodnjo in senco je treba ustvariti na SageMakerju. Oglejte si CreateModel API tukaj.

1. korak – Ustvarite senčni test

Pomaknite se na Sklepanje levi navigacijski plošči konzole SageMaker in nato izberite Shadow tests. To vas bo popeljalo na nadzorno ploščo z vsemi načrtovanimi, tekočimi in zaključenimi senčnimi testi. Kliknite 'ustvari senčni test'. Vnesite ime za test in izberite Naprej.

To vas bo pripeljalo do strani z nastavitvami senčnega testa. Izberete lahko obstoječo vlogo IAM ali ustvarite vlogo, ki ima AmazonSageMakerFullAccess Politika IAM je priložena. Nato izberite 'Ustvarite novo končno točko' in vnesite ime (xgb-prod-shadow-1). Dodate lahko eno proizvodno in eno senčno različico, ki sta povezani s to končno točko, tako da kliknete 'dodaj' v razdelku Različice. Izberete lahko modele, ki ste jih ustvarili v 'Dodaj model' pogovorno okno. To ustvari proizvodnjo ali različico. Po želji lahko spremenite vrsto primerka in število, povezano z vsako različico.

Ves promet gre v produkcijsko različico in se odziva na zahteve za priklic. Del zahtev, ki je usmerjen v senčno različico, lahko nadzorujete tako, da spremenite Traffic Sampling Percentage.

Trajanje testa lahko nadzirate od ene ure do 30 dni. Če ni določeno, je privzeto 7 dni. Po tem obdobju je test označen kot dokončan. Če izvajate preizkus na obstoječi končni točki, bo ta po zaključku povrnjena v stanje pred začetkom preizkusa.

Izbirno lahko zajamete zahteve in odgovore različice Shadow z uporabo Zajem podatkov opcije. Če ni določeno, se odgovori senčne različice zavržejo.

Zmanjšajte vpliv posodobitev modela ML na proizvodnjo s testiranjem v senci Amazon SageMaker PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.

Zmanjšajte vpliv posodobitev modela ML na proizvodnjo s testiranjem v senci Amazon SageMaker PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.

2. korak – spremljajte test sence

Seznam senčnih testov si lahko ogledate tako, da se pomaknete na Shadow Tests razdelek pod Sklepanje. Kliknite senčni test, ustvarjen v prejšnjem koraku, da si ogledate podrobnosti senčnega testa in ga spremljate med potekom ali po zaključku.

Zmanjšajte vpliv posodobitev modela ML na proizvodnjo s testiranjem v senci Amazon SageMaker PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.

Razdelek Metrics ponuja primerjavo ključnih meritev in nudi prekrivne grafe med produkcijskimi in senčnimi različicami, skupaj z opisno statistiko. Primerjate lahko metrike klicev, kot je npr ModelLatency in Invocation4xxErrors kot tudi meritve primerkov, kot je CPUUtilization in DiskUtilization.

Zmanjšajte vpliv posodobitev modela ML na proizvodnjo s testiranjem v senci Amazon SageMaker PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.

3. korak – Promovirajte različico Shadow v novo proizvodno različico

Po primerjavi se lahko odločite, da boste senčno različico promovirali kot novo proizvodno različico ali pa senčno različico odstranite. Za obe možnosti izberite 'Označi dokončano' na vrhu strani. To vam ponuja možnost, da bodisi promovirate ali odstranite senčno različico.

Če se odločite za promocijo, boste preusmerjeni na stran za uvajanje, kjer lahko potrdite nastavitve različice pred uvedbo. Pred uvedbo priporočamo, da prilagodite svoje senčne različice tako, da bodo zmožne obvladovati 100 % priklicnega prometa. Če za ocenjevanje alternativnih vrst ali velikosti primerkov ne uporabljate testiranja v senci, lahko uporabite možnost »obdrži nastavitve proizvodne različice. V nasprotnem primeru lahko izberete 'ohrani nastavitve senčne različice. Če izberete to možnost, se prepričajte, da je vaše vzorčenje prometa nastavljeno na 100 %. Druga možnost je, da določite vrsto primerka in število, če želite preglasiti te nastavitve.

Ko potrdite uvedbo, bo SageMaker sprožil posodobitev vaše končne točke za promocijo senčne različice v novo proizvodno različico. Tako kot pri vseh posodobitvah SageMaker bo vaša končna točka med posodobitvijo še vedno delovala.

Zmanjšajte vpliv posodobitev modela ML na proizvodnjo s testiranjem v senci Amazon SageMaker PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.

Zmanjšajte vpliv posodobitev modela ML na proizvodnjo s testiranjem v senci Amazon SageMaker PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.

2. scenarij: Senčno testiranje z uporabo API-jev sklepanja SageMaker

Ta razdelek pokriva, kako uporabiti obstoječe API-je za ustvarjanje/posodabljanje/brisanje končne točke SageMaker za uvajanje senčnih različic.

Za ta primer imamo dva modela XGBoost, ki predstavljata dve različni različici modelov, ki sta bili predhodno usposobljeni. model.tar.gz je model, ki je trenutno uporabljen v proizvodnji. model2 je novejši model in želimo preizkusiti njegovo delovanje v smislu operativnih meritev, kot je zakasnitev, preden se odločimo za uporabo v proizvodnji. Razporedimo model2 kot senčna različica model.tar.gz. Oba predhodno usposobljena modela sta shranjena v javnem vedru S3 s3://sagemaker-sample-files. Najprej prenesemo model našega lokalnega računalniškega primerka in ga nato naložimo v S3.

Modeli v tem primeru se uporabljajo za napovedovanje verjetnosti, da bo mobilna stranka zapustila trenutnega mobilnega operaterja. Nabor podatkov, ki ga uporabljamo, je javno dostopen in je bil omenjen v knjigi Odkrivanje znanja v podatkih avtorja Daniel T. Larose. Ti modeli so bili usposobljeni z uporabo Prenosni računalnik XGB Churn Prediction v SageMakerju. Uporabite lahko tudi svoje vnaprej usposobljene modele, v tem primeru lahko preskočite prenos iz s3://sagemaker-sample-files in kopirajte lastne modele neposredno v model/mapo.

!aws s3 cp s3://sagemaker-sample-files/models/xgb-churn/xgb-churn-prediction-model.tar.gz model/
!aws s3 cp s3://sagemaker-sample-files/models/xgb-churn/xgb-churn-prediction-model2.tar.gz model/

1. korak – Ustvarite modele

Datoteke modela naložimo v lastno vedro S3 in ustvarimo dva modela SageMaker. Oglejte si naslednjo kodo:

model_url = S3Uploader.upload(
    local_path="model/xgb-churn-prediction-model.tar.gz",
    desired_s3_uri=f"s3://{bucket}/{prefix}",
)
model_url2 = S3Uploader.upload(
    local_path="model/xgb-churn-prediction-model2.tar.gz",
    desired_s3_uri=f"s3://{bucket}/{prefix}",
from sagemaker import image_uris
image_uri = image_uris.retrieve("xgboost", boto3.Session().region_name, "0.90-1")
image_uri2 = image_uris.retrieve("xgboost", boto3.Session().region_name, "0.90-2")

model_name = f"DEMO-xgb-churn-pred-{datetime.now():%Y-%m-%d-%H-%M-%S}"
model_name2 = f"DEMO-xgb-churn-pred2-{datetime.now():%Y-%m-%d-%H-%M-%S}"

resp = sm.create_model(
    ModelName=model_name,
    ExecutionRoleArn=role,
    Containers=[{"Image": image_uri, "ModelDataUrl": model_url}],
)

resp = sm.create_model(
    ModelName=model_name2,
    ExecutionRoleArn=role,
    Containers=[{"Image": image_uri2, "ModelDataUrl": model_url2}],
)

2. korak – Razmestite oba modela kot produkcijsko in senčno različico na končno točko sklepanja v realnem času

Ustvarimo konfiguracijo končne točke s produkcijsko in senčno različico. The ProductionVariants in ShadowProductionVariants so še posebej zanimivi. Obe različici imata primerke ml.m5.xlarge s 4 vCPU-ji in 16 GiB pomnilnika, začetno število primerkov pa je nastavljeno na 1. Oglejte si naslednjo kodo:

ep_config_name = f"Shadow-EpConfig-{datetime.now():%Y-%m-%d-%H-%M-%S}"
production_variant_name = "production"
shadow_variant_name = "shadow"
create_endpoint_config_response = sm.create_endpoint_config(
    EndpointConfigName=ep_config_name,
    ProductionVariants=[
    # Type: Array of ProductionVariant (https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ProductionVariant.html) objects
      { 
         "VariantName": shadow_variant_name,
        {
            "VariantName": production_variant_name,
            "ModelName": model_name,
            "InstanceType": "ml.m5.xlarge",
            "InitialInstanceCount": 2,
            "InitialVariantWeight": 1,
        }
    ],
     # Type: Array of ShadowProductionVariants 
    ShadowProductionVariants = [
         "ModelName": model_name2,
         "InitialInstanceCount": 1,
         "InitialVariantWeight": 0.5,
         "InstanceType": "ml.m5.xlarge" 
      }
   ]
)

Na koncu ustvarimo produkcijsko in senčno različico:

endpoint_name = f"xgb-prod-shadow-{datetime.now():%Y-%m-%d-%H-%M-%S}"
create_endpoint_api_response = sm.create_endpoint(
                                    EndpointName=endpoint_name,
                                    EndpointConfigName=ep_config_name,
                                )

3. korak – Prikličite končno točko za testiranje

Ko je končna točka uspešno ustvarjena, jo lahko začnete klicati. Pošiljamo približno 3,000 zahtev zaporedno:

def invoke_endpoint(endpoint_name, wait_interval_sec=0.01, should_raise_exp=False):
    with open("test_data/test-dataset-input-cols.csv", "r") as f:
        for row in f:
            payload = row.rstrip("n")
            try:
                for i in range(10): #send the same payload 10 times for testing purpose
                    response = sm_runtime.invoke_endpoint(
                        EndpointName=endpoint_name, ContentType="text/csv", Body=payload
                    )
            except Exception as e:
                print("E", end="", flush=True)
                if should_raise_exp:
                    raise e

invoke_endpoint(endpoint_name)

4. korak – Primerjajte meritve

Zdaj, ko smo namestili produkcijski in senčni model, primerjajmo metrike klicev. Za seznam metrik klicev, ki so na voljo za primerjavo, glejte Spremljajte Amazon SageMaker z Amazon CloudWatch. Začnimo s primerjavo klicev med produkcijsko in senčno različico.

O InvocationsPerInstance metrika se nanaša na število klicev, poslanih produkcijski različici. Del teh klicev, navedenih v teži različice, se pošlje v senčno različico. Priklic na primerek se izračuna tako, da se skupno število priklicov deli s številom primerkov v različici. Kot je prikazano v naslednjih grafikonih, lahko potrdimo, da produkcijska in senčna različica prejemata zahteve za priklic v skladu z utežmi, določenimi v konfiguraciji končne točke.

Zmanjšajte vpliv posodobitev modela ML na proizvodnjo s testiranjem v senci Amazon SageMaker PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.Zmanjšajte vpliv posodobitev modela ML na proizvodnjo s testiranjem v senci Amazon SageMaker PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.

Nato primerjajmo zakasnitev modela (ModelLatency metrika) med proizvodno in senčno različico. Zakasnitev modela je čas, ki ga potrebuje model za odziv, gledano iz SageMakerja. Opazujemo lahko, kako se zakasnitev modela senčne različice primerja s proizvodno različico, ne da bi končne uporabnike izpostavili senčni različici.

Zmanjšajte vpliv posodobitev modela ML na proizvodnjo s testiranjem v senci Amazon SageMaker PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.

Pričakujemo zakasnitev režijskih stroškov (OverheadLatency metrika), da bo primerljiva med proizvodnimi in senčnimi različicami. Zakasnitev nad stroški je interval, izmerjen od trenutka, ko SageMaker prejme zahtevo, dokler ne vrne odgovora odjemalcu, minus zakasnitev modela.

Zmanjšajte vpliv posodobitev modela ML na proizvodnjo s testiranjem v senci Amazon SageMaker PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.

5. korak - Oglašujte svojo senčno različico

Če želite promovirati senčni model v proizvodnjo, ustvarite novo konfiguracijo končne točke s trenutno ShadowProductionVariant kot novo ProductionVariant in odstranite ShadowProductionVariant. To bo odstranilo tok ProductionVariant in promovirajte senčno različico, da postane nova proizvodna različica. Kot vedno so vse posodobitve SageMaker orkestrirane kot modro/zelene uvedbe pod pokrovom in med izvajanjem posodobitve ni izgube razpoložljivosti.

Po želji lahko uporabite vzvod Zaščitne ograje za namestitev če želite med posodobitvijo uporabiti preusmeritev prometa in samodejne povrnitve na prejšnje stanje.

promote_ep_config_name = f"PromoteShadow-EpConfig-{datetime.now():%Y-%m-%d-%H-%M-%S}"

create_endpoint_config_response = sm.create_endpoint_config(
    EndpointConfigName=promote_ep_config_name,
    ProductionVariants=[
        {
            "VariantName": shadow_variant_name,
            "ModelName": model_name2,
            "InstanceType": "ml.m5.xlarge",
            "InitialInstanceCount": 2,
            "InitialVariantWeight": 1.0,
        }
    ],
)
print(f"Created EndpointConfig: {create_endpoint_config_response['EndpointConfigArn']}")

update_endpoint_api_response = sm.update_endpoint(
    EndpointName=endpoint_name,
    EndpointConfigName=promote_ep_config_name,
)

wait_for_endpoint_in_service(endpoint_name)

sm.describe_endpoint(EndpointName=endpoint_name)

6. korak – Čiščenje

Če te končne točke ne nameravate več uporabljati, jo izbrišite, da se izognete dodatnim stroškom in počistite druge vire, ustvarjene v tem blogu.

dsm.delete_endpoint(EndpointName=endpoint_name)
sm.delete_endpoint_config(EndpointConfigName=ep_config_name)
sm.delete_endpoint_config(EndpointConfigName=promote_ep_config_name)
sm.delete_model(ModelName=model_name)
sm.delete_model(ModelName=model_name2)

zaključek

V tej objavi smo predstavili novo zmožnost sklepanja SageMaker za primerjavo zmogljivosti nove različice sklada za streženje modela s trenutno uvedeno različico pred popolno uvedbo proizvodnje z uporabo varnostne prakse uvajanja, znane kot testiranje v senci. Predstavili smo vam prednosti uporabe senčnih različic in metode za konfiguracijo različic z primer od konca do konca. Če želite izvedeti več o senčnih različicah, glejte teste senc Dokumentacija.


O avtorjih

Zmanjšajte vpliv posodobitev modela ML na proizvodnjo s testiranjem v senci Amazon SageMaker PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.Raghu Ramesha je arhitekt rešitev za strojno učenje pri ekipi Amazon SageMaker Service. Osredotoča se na pomoč strankam pri izgradnji, uvajanju in selitvi proizvodnih delovnih obremenitev ML na SageMaker v velikem obsegu. Specializiran je za področje strojnega učenja, umetne inteligence in računalniškega vida ter ima magisterij iz računalništva na UT Dallas. V prostem času rada potuje in fotografira.

Zmanjšajte vpliv posodobitev modela ML na proizvodnjo s testiranjem v senci Amazon SageMaker PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.Qingwei Li je strokovnjak za strojno učenje pri Amazon Web Services. Doktoriral je v operacijskem raziskovanju, potem ko je zlomil račun svojega svetovalca za raziskovalno pomoč in mu ni uspel izročiti Nobelove nagrade, ki jo je obljubil. Trenutno strankam v finančni in zavarovalniški industriji pomaga pri izdelavi rešitev strojnega učenja na AWS. V prostem času rad bere in poučuje.

Zmanjšajte vpliv posodobitev modela ML na proizvodnjo s testiranjem v senci Amazon SageMaker PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.Qiyun Zhao je višji inženir za razvoj programske opreme pri skupini Amazon SageMaker Inference Platform. Je vodilni razvijalec Deployment Guardrails in Shadow Deployments ter se osredotoča na pomoč strankam pri upravljanju delovnih obremenitev in uvajanj ML v velikem obsegu z visoko razpoložljivostjo. Dela tudi na razvoju arhitekture platforme za hitro in varno uvajanje delovnih mest ML in enostavno izvajanje spletnih poskusov ML. V prostem času rad bere, igra igrice in potuje.

Zmanjšajte vpliv posodobitev modela ML na proizvodnjo s testiranjem v senci Amazon SageMaker PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.Tarun Sairam je višji produktni vodja za Amazon SageMaker Inference. Zanima ga spoznati najnovejše trende strojnega učenja in pomagati strankam, da jih izkoristijo. V prostem času rad kolesari, smuča in igra tenis.

Časovni žig:

Več od Strojno učenje AWS