Ütemezzen Amazon SageMaker notebook feladatokat, és kezelje a többlépcsős notebook munkafolyamatokat API-k segítségével | Amazon webszolgáltatások

Ütemezzen Amazon SageMaker notebook feladatokat, és kezelje a többlépcsős notebook munkafolyamatokat API-k segítségével | Amazon webszolgáltatások

Forrás csomópont: 2985648

Amazon SageMaker Studio teljes körűen felügyelt megoldást kínál az adattudósok számára a gépi tanulási (ML) modellek interaktív felépítéséhez, betanításához és üzembe helyezéséhez. Amazon SageMaker notebook munkák lehetővé teszi az adatkutatók számára, hogy igény szerint vagy ütemezetten futtathassák notebookjaikat néhány kattintással a SageMaker Studio alkalmazásban. Ezzel az indítással programozottan futtathatja a notebookokat feladatként a által biztosított API-k használatával Amazon SageMaker csővezetékek, az ML munkafolyamat hangszerelési funkciója Amazon SageMaker. Ezenkívül ezekkel az API-kkal többlépcsős ML munkafolyamatot hozhat létre több függő jegyzetfüzettel.

A SageMaker Pipelines egy natív munkafolyamat-irányítási eszköz ML-folyamatok készítéséhez, amelyek kihasználják a közvetlen SageMaker integrációt. Minden SageMaker csővezeték a következőkből áll lépések, amelyek olyan egyedi feladatoknak felelnek meg, mint a feldolgozás, képzés vagy adatfeldolgozás Amazon EMR. A SageMaker notebook feladatok már beépített lépéstípusként is elérhetők a SageMaker folyamatokban. Ezzel a notebook-feladat-lépéssel egyszerűen futtathatja a notebookokat néhány sornyi kóddal, a következővel Amazon SageMaker Python SDK. Ezenkívül több függő jegyzetfüzet összefűzésével munkafolyamatot hozhat létre irányított aciklikus grafikonok (DAG) formájában. Ezután futtathatja ezeket a notebook-feladatokat vagy DAG-kat, és kezelheti és megjelenítheti őket a SageMaker Studio segítségével.

Az adattudósok jelenleg a SageMaker Studiót használják Jupyter notebookjaik interaktív fejlesztésére, majd a SageMaker notebook jobok segítségével ütemezett jobokként futtatják ezeket a notebookokat. Ezek a jobok azonnal vagy ismétlődő ütemezés szerint futtathatók, anélkül, hogy az adatmunkásoknak Python-modulokká kell átalakítaniuk a kódot. Néhány gyakori felhasználási eset ehhez:

  • Hosszú, futó notebookok futása a háttérben
  • Rendszeresen futó modellkövetkeztetés jelentések generálásához
  • Növekedés a kis mintaadatkészletek elkészítésétől a petabájtos nagy adathalmazok használatáig
  • A modellek átképzése és bevezetése bizonyos ütemben
  • Feladatok ütemezése a modell minőségéhez vagy az adatsodródás figyeléséhez
  • A jobb modellek paraméterterének feltárása

Bár ez a funkció egyszerűvé teszi az adatkezelők számára az önálló jegyzetfüzetek automatizálását, az ML-munkafolyamatok gyakran több notebookból állnak, amelyek mindegyike egy adott feladatot hajt végre összetett függőséggel. Például a modelladatok eltolódását figyelő notebooknak rendelkeznie kell egy előlépéssel, amely lehetővé teszi az új adatok kinyerését, átalakítását és betöltését (ETL) és feldolgozását, valamint egy utólagos modellfrissítési és betanítási lépést arra az esetre, ha jelentős eltolódást észlel. . Ezenkívül az adattudósok esetleg ismétlődő ütemezés szerint szeretnék elindítani ezt a teljes munkafolyamatot, hogy új adatok alapján frissítsék a modellt. A jegyzetfüzetek egyszerű automatizálása és az ilyen összetett munkafolyamatok létrehozása érdekében a SageMaker notebook-feladatok mostantól elérhetők a SageMaker Pipelines-ben. Ebben a bejegyzésben megmutatjuk, hogyan oldhatod meg a következő használati eseteket néhány soros kóddal:

  • Automatikusan futtathat egy önálló notebookot azonnal vagy ismétlődő ütemezés szerint
  • Hozzon létre többlépcsős munkafolyamatokat notebookokhoz DAG-ként folyamatos integráció és folyamatos szállítás (CI/CD) célokra, amelyeket a SageMaker Studio UI-n keresztül lehet kezelni.

Megoldás áttekintése

Az alábbi ábra szemlélteti megoldásunk architektúráját. A SageMaker Python SDK segítségével egyetlen notebook-feladatot vagy munkafolyamatot futtathat. Ez a szolgáltatás egy SageMaker képzési feladatot hoz létre a notebook futtatásához.

A következő szakaszokban egy példakénti ML használati esetet mutatunk be, és bemutatjuk a jegyzetfüzet-feladatok munkafolyamatának létrehozásának lépéseit, a paraméterek átadását a különböző notebook lépések között, ütemezve a munkafolyamatot és a SageMaker Studio segítségével.

Ebben a példában az ML problémánkra egy hangulatelemzési modellt építünk, amely egyfajta szövegosztályozási feladat. A hangulatelemzés leggyakoribb alkalmazásai közé tartozik a közösségi média figyelése, az ügyfélszolgálat menedzsmentje és az ügyfelek visszajelzéseinek elemzése. A példában használt adatkészlet a Stanford Sentiment Treebank (SST2) adatkészlet, amely filmkritikákat tartalmaz, valamint egy egész számot (0 vagy 1), amely jelzi a vélemény pozitív vagy negatív hangulatát.

A következő példa egy a data.csv az SST2 adatkészletnek megfelelő fájlt, és az értékeket az első két oszlopában jeleníti meg. Vegye figyelembe, hogy a fájlnak nem lehet fejléce.

Oszlop 1 Oszlop 2
0 elrejteni az új váladékot a szülői egységek elől
0 nem tartalmaz szellemességet, csak fáradságos gegeket
1 amely szereti a karaktereit, és valami szépet közöl az emberi természetről
0 maximálisan elégedett azzal, hogy mindvégig ugyanaz marad
0 a legrosszabb bosszúvágyó klisékről, amiket a filmesek kitalálhatnak
0 ez túl tragikus ahhoz, hogy kiérdemelje az ilyen felületes kezelést
1 bemutatja , hogy az olyan hollywoodi kasszasikerek , mint a hazafias játékok rendezője még mindig képes egy kis , személyes filmet készíteni érzelmekkel teli falatokkal .

Ebben az ML példában több feladatot kell végrehajtanunk:

  1. Hajtsa végre a funkciótervezést, hogy ezt az adatkészletet a modellünk számára érthető formátumban készítse elő.
  2. A funkciótervezés után futtasson egy képzési lépést, amely Transformers-t használ.
  3. Állítson be kötegelt következtetést a finomhangolt modellel, hogy segítsen megjósolni a beérkező új vélemények hangulatát.
  4. Állítson be egy adatfigyelési lépést, hogy rendszeresen figyelhessük új adatainkat a minőségi eltérések tekintetében, amelyek miatt szükség lehet a modellsúlyok átképzésére.

A SageMaker folyamatok egyik lépéseként elindított notebookfeladattal megszervezhetjük ezt a munkafolyamatot, amely három különálló lépésből áll. A munkafolyamat minden egyes lépése egy másik notebookban kerül kifejlesztésre, amelyeket azután független notebook-feladatok lépésekké alakítanak át, és egy folyamatként kapcsolódnak össze:

  • Előfeldolgozás – Töltse le a nyilvános SST2 adatkészletet innen Amazon egyszerű tárolási szolgáltatás (Amazon S3), és hozzon létre egy CSV-fájlt a notebook számára a 2. lépésben a futtatáshoz. Az SST2 adatkészlet egy szöveges osztályozási adatkészlet két címkével (0 és 1), valamint egy kategorizálandó szövegoszloppal.
  • Képzések – Vegye ki a formázott CSV-fájlt, és futtassa a finomhangolást a BERT-tel a szövegosztályozáshoz a Transformers könyvtárak használatával. Ennek a lépésnek a részeként tesztadat-előkészítő jegyzetfüzetet használunk, amely a finomhangolás és a kötegelt következtetés lépésének függősége. Amikor a finomhangolás befejeződött, ez a notebook a run magic segítségével fut, és tesztadatkészletet készít a finomhangolt modell mintakövetkeztetéséhez.
  • Átalakítsa és figyelje – Kötegelt következtetés végrehajtása és adatminőség beállítása modellfigyeléssel, hogy kiindulási adatkészlet-javaslatot kapjon.

Futtassa a notebookokat

A megoldás mintakódja itt érhető el GitHub.

A SageMaker jegyzetfüzet munkalépésének létrehozása hasonló a SageMaker Pipeline többi lépésének létrehozásához. Ebben a jegyzetfüzetpéldában a SageMaker Python SDK-t használjuk a munkafolyamat összehangolására. Jegyzetfüzet lépés létrehozásához a SageMaker Pipelinesben a következő paramétereket adhatja meg:

  • Bemeneti jegyzetfüzet – Annak a jegyzetfüzetnek a neve, amelyet ez a jegyzetfüzet lépés fogja hangszerelni. Itt átadhatja a helyi elérési utat a bemeneti jegyzetfüzethez. Opcionálisan, ha ez a jegyzetfüzet más futó notebookokkal is rendelkezik, átadhatja ezeket a következőben AdditionalDependencies paraméter a notebook feladat lépéséhez.
  • Kép URI – A Docker-kép a notebook feladat lépése mögött. Ezek lehetnek az előre meghatározott képek, amelyeket a SageMaker már biztosít, vagy egy egyéni kép, amelyet definiált és továbbított Amazon Elastic Container Registry (Amazon ECR). A támogatott képekért tekintse meg a bejegyzés végén található megfontolások részt.
  • Kernel neve – A SageMaker Studio-ban használt kernel neve. Ez a rendszermag-specifikáció az Ön által megadott képfájlban van regisztrálva.
  • Példány típusa (nem kötelező) - A Amazon rugalmas számítási felhő (Amazon EC2) példánytípus a definiált és futtatandó notebookfeladat mögött.
  • Paraméterek (opcionális) – Azok a paraméterek, amelyeket megadhat, és amelyek elérhetők lesznek a notebook számára. Ezek kulcs-érték párokban definiálhatók. Ezenkívül ezek a paraméterek módosíthatók a különböző notebook-feladatok vagy folyamatfuttatások között.

Példánkban összesen öt jegyzetfüzet található:

  • nb-job-pipeline.ipynb – Ez a fő notebookunk, ahol meghatározzuk a folyamatunkat és a munkafolyamatunkat.
  • előfeldolgozás.ipynb – Ez a jegyzetfüzet a munkafolyamatunk első lépése, és tartalmazza azt a kódot, amely lekéri a nyilvános AWS-adatkészletet, és létrehoz egy CSV-fájlt belőle.
  • képzés.ipynb – Ez a notebook a munkafolyamatunk második lépése, és kódot tartalmaz az előző lépés CSV-fájljának átvételéhez, valamint a helyi oktatás és finomhangolás végrehajtásához. Ez a lépés is függ a prepare-test-set.ipynb notebook, hogy lehúzzon egy tesztadatkészletet a finomhangolt modell mintakövetkeztetéséhez.
  • ready-test-set.ipynb – Ez a jegyzetfüzet egy tesztadatkészletet hoz létre, amelyet a képzési jegyzetfüzetünk a második folyamatlépésben fog használni, és a finomhangolt modell mintakövetkeztetésére használ.
  • transform-monitor.ipynb – Ez a notebook a munkafolyamatunk harmadik lépése, és az alap BERT modellt használja, és egy SageMaker kötegelt átalakítási feladatot futtat, miközben az adatok minőségét is beállítja a modellfigyeléssel.

Ezután a fő jegyzetfüzetet járjuk végig nb-job-pipeline.ipynb, amely az összes aljegyzetfüzetet egy folyamatba egyesíti, és a végpontok közötti munkafolyamatot futtatja. Vegye figyelembe, hogy bár a következő példa csak egyszer futtatja a jegyzetfüzetet, ütemezheti a folyamatot a jegyzetfüzet ismételt futtatására is. Hivatkozni SageMaker dokumentáció részletes útmutatásért.

Az első notebook feladat lépésünkhöz egy paramétert adunk át egy alapértelmezett S3 gyűjtőrésszel. Használhatjuk ezt a vödröt minden olyan műtermék kiürítésére, amelyet a folyamat többi lépéséhez elérhetővé szeretnénk tenni. Az első jegyzetfüzethez (preprocess.ipynb), lebontjuk az AWS nyilvános SST2 vonatadatkészletét, és létrehozunk belőle egy képzési CSV-fájlt, amelyet továbbítunk ehhez az S3 tárolóhoz. Lásd a következő kódot:

# Parameters
print(default_s3_bucket)

!aws s3 cp s3://sagemaker-sample-files/datasets/text/SST2/sst2.train sst2.train

# will read just the first 500 lines for quicker execution
with open('sst2.train', 'r') as f:
    lines = f.readlines()[:500] 

data = []
for line in lines:
    label, text = line.strip().split(' ', 1)
    data.append((int(label), text))

df = pd.DataFrame(data, columns=['label', 'text'])
df.to_csv("train.csv", index=False) #create csv file with smaller dataset
!aws s3 cp "train.csv" {default_s3_bucket}

Ezután ezt a notebookot átalakíthatjuk a NotebookJobStep a következő kóddal a fő notebookunkban:

# provide S3 Bucket to dump artifacts in
nb_job_params = {"default_s3_bucket": notebook_artifacts}

preprocess_nb_step = NotebookJobStep(
name=preprocess_step_name,
description=preprocess_description,
notebook_job_name=preprocess_job_name,
image_uri=image_uri,
kernel_name=kernel_name,
display_name=display_name,
role=role,
input_notebook=preprocess_notebook,
instance_type="ml.m5.4xlarge",
parameters=nb_job_params,
)

Most, hogy van egy minta CSV-fájlunk, megkezdhetjük modellünk betanítását a képzési jegyzetfüzetünkben. Az edzési jegyzetfüzetünk ugyanazt a paramétert veszi fel, mint az S3 vödör, és onnan húzza le az edzési adatkészletet. Ezután finomhangolást végzünk a Transformers tréner objektum használatával a következő kódrészlettel:

from transformers import TrainingArguments, Trainer
training_args = TrainingArguments(output_dir="test_trainer", evaluation_strategy="epoch")

trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=small_train_dataset,
    eval_dataset=small_eval_dataset,
    compute_metrics=compute_metrics,
)

trainer.train()

A finomhangolás után egy kötegelt következtetést szeretnénk lefuttatni, hogy megnézzük, hogyan teljesít a modell. Ez egy külön notebook segítségével történik (prepare-test-set.ipynb). A kiegészítő jegyzetfüzetet a következő varázscellával futtathatjuk a tréningfüzetünkben:

%run 'prepare-test-set.ipynb'

Ezt az extra notebook-függőséget a AdditionalDependencies paraméter a második notebook munkalépésünkben:

train_nb_step = NotebookJobStep(
name=training_step_name,
description=training_description,
notebook_job_name=training_job_name,
input_notebook=training_notebook,
additional_dependencies=[test_data_prep_notebook],
image_uri=image_uri,
kernel_name=kernel_name,
display_name=display_name,
instance_type="ml.m5.12xlarge",
role=role,
parameters=nb_job_params,
)

Azt is meg kell adnunk, hogy a betanítási jegyzetfüzet feladat lépése (2. lépés) a Notebook előfeldolgozási feladat lépésétől (1. lépés) függ, a add_depends_on API hívás a következőképpen:

train_nb_step.add_depends_on([preprocess_nb_step])

Utolsó lépésünk, hogy a BERT modellt SageMaker Batch Transform-on futtatjuk, miközben beállítjuk az adatrögzítést és a minőséget a SageMaker Model Monitor segítségével. Vegye figyelembe, hogy ez eltér a beépített használattól Átalakítás or Elfog lépések a csővezetékeken keresztül. Az ehhez a lépéshez tartozó jegyzetfüzetünk ugyanazokat az API-kat fogja végrehajtani, de Notebook Job Stepként lesz nyomon követve. Ez a lépés az általunk korábban definiált betanítási munkalépéstől függ, ezért azt is rögzítjük a depend_on jelzővel.

batch_monitor_step = NotebookJobStep(
name=batch_monitor_step_name,
description=batch_monitor_description,
notebook_job_name=batch_monitor_job_name,
input_notebook=batch_monitor_notebook,
image_uri=image_uri,
kernel_name=kernel_name,
display_name=display_name,
instance_type="ml.m5.12xlarge",
role=role,
parameters=nb_job_params,
)
batch_monitor_step.add_depends_on([train_nb_step])

Miután meghatároztuk a munkafolyamat különböző lépéseit, létrehozhatjuk és futtathatjuk a végpontok közötti folyamatot:

# create pipeline
pipeline = Pipeline(
name=pipeline_name,
steps=[preprocess_nb_step, train_nb_step, batch_monitor_step],
)

# execute pipeline
pipeline.create(session.get_execution_role())
execution = pipeline.start(parameters={})
execution.wait(delay=30, max_attempts=60)
execution_steps = execution.list_steps()
print(execution_steps)

Figyelje a csővezeték futását

A SageMaker Pipelines DAG segítségével nyomon követheti és figyelheti a notebook lépéseit, amint az a következő képernyőképen látható.

Opcionálisan figyelemmel kísérheti az egyes notebook-futtatásokat a notebookfeladatok irányítópultján, és átkapcsolhatja a SageMaker Studio felhasználói felületén keresztül létrehozott kimeneti fájlokat. Ha ezt a funkciót a SageMaker Studión kívül használja, címkék segítségével meghatározhatja azokat a felhasználókat, akik nyomon követhetik a futás állapotát a notebook munka irányítópultján. A beillesztendő címkékkel kapcsolatos további részletekért lásd: Tekintse meg notebook feladatait és töltse le a kimeneteket a Studio UI irányítópultján.

Ebben a példában az eredményül kapott notebook-feladatokat egy nevű könyvtárba írjuk ki outputs a helyi elérési útvonalon a folyamatkóddal. Ahogy a következő képernyőképen látható, itt láthatja a bemeneti notebook kimenetét, valamint az ehhez a lépéshez megadott paramétereket.

Tisztítsuk meg

Ha követte a példánkat, feltétlenül törölje a létrehozott folyamatot, a notebook-feladatokat és a mintajegyzetfüzetek által letöltött s3-adatokat.

Szempontok

A következő néhány fontos szempont ehhez a funkcióhoz:

  • SDK-korlátok – A notebook feladat lépése csak a SageMaker Python SDK-n keresztül hozható létre.
  • Képkorlátozások – A notebook feladat lépése a következő képeket támogatja:

Következtetés

Ezzel a bevezetéssel az adatkezelők néhány soros kóddal programozottan futtathatják notebookjaikat a következő használatával SageMaker Python SDK. Ezenkívül bonyolult, többlépcsős munkafolyamatokat hozhat létre a notebookok használatával, jelentősen lerövidítve a notebookról a CI/CD folyamatra való átálláshoz szükséges időt. A folyamat létrehozása után a SageMaker Studio segítségével megtekintheti és futtathatja a folyamatok DAG-jait, valamint kezelheti és összehasonlíthatja a futtatásokat. Akár végpontok közötti ML-munkafolyamatokat ütemez, akár azok egy részét, azt javasoljuk, hogy próbálja meg notebook alapú munkafolyamatok.


A szerzőkről

Anchit Gupta az Amazon SageMaker Studio vezető termékmenedzsere. Arra összpontosít, hogy lehetővé tegye az interaktív adattudományi és adatmérnöki munkafolyamatokat a SageMaker Studio IDE-n belül. Szabadidejében szeret főzni, társasozni/kártyajátékozni és olvasni.

Ram Vegiraju ML építész a SageMaker Service csapatánál. Arra összpontosít, hogy segítse ügyfeleit AI/ML megoldásaik kiépítésében és optimalizálásában az Amazon SageMakeren. Szabadidejében szeret utazni és írni.

Edward Sun Senior SDE, az Amazon Web Services SageMaker Studio-nál dolgozik. Az interaktív ML-megoldások kiépítésére és az ügyfélélmény egyszerűsítésére összpontosít, hogy integrálja a SageMaker Studio-t az adattervezés és az ML ökoszisztéma népszerű technológiáival. Szabadidejében Edward nagy rajongója a kempingezésnek, túrázásnak és horgászatnak, és szereti a családjával eltöltött időt.

Időbélyeg:

Még több AWS gépi tanulás