Poenostavitev obdelave podatkov ETL na Talent.com z Amazon SageMaker | Spletne storitve Amazon

Poenostavitev obdelave podatkov ETL na Talent.com z Amazon SageMaker | Spletne storitve Amazon

To objavo sta soavtorja Anatoly Khomenko, inženir strojnega učenja, in Abdenour Bezzouh, glavni tehnološki direktor pri Talent.com.

Ustanovljen je bil leta 2011, Talent.com združuje sezname plačanih delovnih mest svojih strank in javne sezname delovnih mest ter je ustvaril enotno platformo, po kateri je enostavno iskati. Talent.com pokriva več kot 30 milijonov seznamov zaposlitev v več kot 75 državah in zajema različne jezike, panoge in distribucijske kanale ter skrbi za raznolike potrebe iskalcev zaposlitve in učinkovito povezuje milijone iskalcev zaposlitve z zaposlitvenimi priložnostmi.

Poslanstvo Talent.com je olajšati globalne povezave delovne sile. Da bi to dosegel, Talent.com združuje sezname delovnih mest iz različnih virov na spletu in iskalcem zaposlitve ponuja dostop do obsežnega nabora več kot 30 milijonov zaposlitvenih priložnosti, prilagojenih njihovim sposobnostim in izkušnjam. V skladu s to misijo je Talent.com sodeloval z AWS pri razvoju vrhunskega mehanizma za priporočila za zaposlitev, ki ga poganja globoko učenje in je namenjen pomoči uporabnikom pri napredovanju v njihovi karieri.

Da bi zagotovili učinkovito delovanje tega mehanizma za priporočila za delovna mesta, je ključnega pomena implementacija obsežnega cevovoda za obdelavo podatkov, ki je odgovoren za pridobivanje in izboljšanje funkcij iz združenih seznamov delovnih mest Talent.com. Ta cevovod lahko obdela 5 milijonov dnevnih zapisov v manj kot eni uri in omogoča obdelavo večdnevnih zapisov vzporedno. Poleg tega ta rešitev omogoča hitro uvedbo v proizvodnjo. Primarni vir podatkov za ta cevovod je oblika vrstic JSON, shranjena v Preprosta storitev shranjevanja Amazon (Amazon S3) in razdeljen po datumu. Vsak dan se zaradi tega ustvari na desettisoče datotek vrstic JSON, pri čemer se vsak dan izvajajo postopne posodobitve.

Glavni cilj tega cevovoda za obdelavo podatkov je olajšati ustvarjanje funkcij, potrebnih za usposabljanje in uvajanje mehanizma za priporočila za zaposlitev na Talent.com. Treba je omeniti, da mora ta cevovod podpirati postopne posodobitve in poskrbeti za zapletene zahteve ekstrakcije funkcij, ki so potrebne za module za usposabljanje in uvajanje, ki so bistveni za sistem priporočil za zaposlitev. Naš cevovod spada v družino splošnih procesov ETL (izvleček, transformacija in nalaganje), ki združuje podatke iz več virov v veliko osrednje skladišče.

Za nadaljnji vpogled v to, kako sta Talent.com in AWS skupaj zgradila vrhunsko obdelavo naravnega jezika in tehnike usposabljanja modela globokega učenja z uporabo Amazon SageMaker za izdelavo sistema priporočil za delo, glejte Od besedila do sanjske službe: ustvarjanje priporočevalca zaposlitve na podlagi NLP na Talent.com z Amazon SageMaker. Sistem vključuje inženiring funkcij, načrtovanje arhitekture modela globokega učenja, optimizacijo hiperparametrov in vrednotenje modela, kjer se vsi moduli izvajajo z uporabo Pythona.

Ta objava prikazuje, kako smo uporabili SageMaker za izgradnjo obsežnega cevovoda za obdelavo podatkov za pripravo funkcij za mehanizem za priporočila delovnih mest na Talent.com. Nastala rešitev omogoča Data Scientistu, da zamisli ekstrakcijo funkcij v prenosnem računalniku SageMaker z uporabo knjižnic Python, kot je npr. scikit-learn or PyTorch, in nato za hitro uvedbo iste kode v cevovod za obdelavo podatkov, ki izvaja ekstrakcijo funkcij v velikem obsegu. Rešitev ne zahteva prenosa kode za ekstrakcijo funkcij za uporabo PySpark, kot je zahtevano pri uporabi AWS lepilo kot rešitev ETL. Našo rešitev lahko razvije in uvede izključno Data Scientist od konca do konca z uporabo samo SageMakerja in ne zahteva poznavanja drugih rešitev ETL, kot je npr. Serija AWS. To lahko bistveno skrajša čas, potreben za uvedbo cevovoda strojnega učenja (ML) v produkcijo. Cevovod se upravlja prek Pythona in se brezhibno integrira s poteki dela za pridobivanje funkcij, zaradi česar je prilagodljiv širokemu naboru aplikacij za analizo podatkov.

Pregled rešitev

Pregled cevovoda ETL z uporabo SageMaker Processing

Cevovod je sestavljen iz treh primarnih faz:

  1. Uporabite an Obdelava Amazon SageMaker opravilo za obdelavo neobdelanih datotek JSONL, povezanih z določenim dnevom. Večdnevne podatke lahko obdelujejo ločena opravila obdelave hkrati.
  2. Zaposliti AWS lepilo za pajkanje podatkov po obdelavi večdnevnih podatkov.
  3. Naloži obdelane funkcije za določeno časovno obdobje z uporabo SQL iz Amazonska Atena tabelo, nato usposobite in uvedite model priporočevalca delovnih mest.

Obdelajte neobdelane datoteke JSONL

Neobdelane datoteke JSONL obdelujemo za določen dan z uporabo opravila SageMaker Processing. Posel izvaja ekstrakcijo funkcij in stiskanje podatkov ter shrani obdelane funkcije v datoteke Parquet z 1 milijonom zapisov na datoteko. Izkoriščamo paralelizacijo procesorja, da vzporedno izvajamo ekstrakcijo funkcij za vsako neobdelano datoteko JSONL. Rezultati obdelave vsake datoteke JSONL se shranijo v ločeno datoteko Parquet znotraj začasnega imenika. Ko so obdelane vse datoteke JSONL, izvedemo stiskanje na tisoče majhnih datotek Parquet v več datotek z 1 milijonom zapisov na datoteko. Stisnjene datoteke Parquet se nato naložijo v Amazon S3 kot rezultat opravila obdelave. Zgoščevanje podatkov zagotavlja učinkovito pajkanje in poizvedbe SQL v naslednjih fazah cevovoda.

Sledi vzorčna koda za načrtovanje opravila SageMaker Processing za določen dan, na primer 2020-01-01, z uporabo SDK-ja SageMaker. Opravilo bere neobdelane datoteke JSONL iz Amazona S3 (na primer iz s3://bucket/raw-data/2020/01/01) in shrani stisnjene datoteke Parquet v Amazon S3 (na primer v s3://bucket/processed/table-name/day_partition=2020-01-01/).

### install dependencies %pip install sagemaker pyarrow s3fs awswrangler import sagemaker
import boto3 from sagemaker.processing import FrameworkProcessor
from sagemaker.sklearn.estimator import SKLearn
from sagemaker import get_execution_role
from sagemaker.processing import ProcessingInput, ProcessingOutput region = boto3.session.Session().region_name
role = get_execution_role()
bucket = sagemaker.Session().default_bucket() ### we use instance with 16 CPUs and 128 GiB memory
### note that the script will NOT load the entire data into memory during compaction
### depending on the size of individual jsonl files, larger instance may be needed
instance = "ml.r5.4xlarge"
n_jobs = 8 ### we use 8 process workers
date = "2020-01-01" ### process data for one day est_cls = SKLearn
framework_version_str = "0.20.0" ### schedule processing job
script_processor = FrameworkProcessor( role=role, instance_count=1, instance_type=instance, estimator_cls=est_cls, framework_version=framework_version_str, volume_size_in_gb=500,
) script_processor.run( code="processing_script.py", ### name of the main processing script source_dir="../src/etl/", ### location of source code directory ### our processing script loads raw jsonl files directly from S3 ### this avoids long start-up times of the processing jobs, ### since raw data does not need to be copied into instance inputs=[], ### processing job input is empty outputs=[ ProcessingOutput(destination="s3://bucket/processed/table-name/", source="/opt/ml/processing/output"), ], arguments=[ ### directory with job's output "--output", "/opt/ml/processing/output", ### temporary directory inside instance "--tmp_output", "/opt/ml/tmp_output", "--n_jobs", str(n_jobs), ### number of process workers "--date", date, ### date to process ### location with raw jsonl files in S3 "--path", "s3://bucket/raw-data/", ], wait=False
)

Naslednji oris kode za glavni skript (processing_script.py), ki izvaja opravilo obdelave SageMaker, je naslednje:

import concurrent
import pyarrow.dataset as ds
import os
import s3fs
from pathlib import Path ### function to process raw jsonl file and save extracted features into parquet file from process_data import process_jsonl ### parse command line arguments
args = parse_args() ### we use s3fs to crawl S3 input path for raw jsonl files
fs = s3fs.S3FileSystem()
### we assume raw jsonl files are stored in S3 directories partitioned by date
### for example: s3://bucket/raw-data/2020/01/01/
jsons = fs.find(os.path.join(args.path, *args.date.split('-'))) ### temporary directory location inside the Processing job instance
tmp_out = os.path.join(args.tmp_output, f"day_partition={args.date}") ### directory location with job's output
out_dir = os.path.join(args.output, f"day_partition={args.date}") ### process individual jsonl files in parallel using n_jobs process workers
futures=[]
with concurrent.futures.ProcessPoolExecutor(max_workers=args.n_jobs) as executor: for file in jsons: inp_file = Path(file) out_file = os.path.join(tmp_out, inp_file.stem + ".snappy.parquet") ### process_jsonl function reads raw jsonl file from S3 location (inp_file) ### and saves result into parquet file (out_file) inside temporary directory futures.append(executor.submit(process_jsonl, file, out_file)) ### wait until all jsonl files are processed for future in concurrent.futures.as_completed(futures): result = future.result() ### compact parquet files
dataset = ds.dataset(tmp_out) if len(dataset.schema) > 0: ### save compacted parquet files with 1MM records per file ds.write_dataset(dataset, out_dir, format="parquet", max_rows_per_file=1024 * 1024)

Razširljivost je ključna lastnost našega cevovoda. Prvič, več opravil SageMaker Processing je mogoče uporabiti za obdelavo podatkov več dni hkrati. Drugič, izogibamo se nalaganju celotnih obdelanih ali neobdelanih podatkov v pomnilnik hkrati, medtem ko obdelujemo podatke za vsak določen dan. To omogoča obdelavo podatkov z uporabo vrst primerkov, ki ne morejo sprejeti podatkov za cel dan v primarnem pomnilniku. Edina zahteva je, da mora biti vrsta primerka sposobna hkrati naložiti N neobdelanih datotek JSONL ali obdelanih datotek Parquet v pomnilnik, pri čemer je N število uporabljenih procesnih delavcev.

Preglejte obdelane podatke z uporabo AWS Glue

Ko so obdelani vsi neobdelani podatki za več dni, lahko ustvarimo tabelo Athena iz celotnega nabora podatkov z uporabo pajka AWS Glue. Uporabljamo AWS SDK za pande (awswrangler) knjižnico za ustvarjanje tabele z uporabo naslednjega delčka:

import awswrangler as wr ### crawl processed data in S3
res = wr.s3.store_parquet_metadata( path='s3://bucket/processed/table-name/', database="database_name", table="table_name", dataset=True, mode="overwrite", sampling=1.0, path_suffix='.parquet',
) ### print table schema
print(res[0])

Naloži obdelane funkcije za usposabljanje

Obdelane funkcije za določeno časovno obdobje je zdaj mogoče naložiti iz tabele Athena z uporabo SQL, te funkcije pa je mogoče nato uporabiti za usposabljanje modela priporočevalca delovnih mest. Naslednji delček na primer naloži en mesec obdelanih funkcij v DataFrame z uporabo awswrangler knjižnica:

import awswrangler as wr query = """ SELECT * FROM table_name WHERE day_partition BETWEN '2020-01-01' AND '2020-02-01' """ ### load 1 month of data from database_name.table_name into a DataFrame
df = wr.athena.read_sql_query(query, database='database_name')

Poleg tega je mogoče uporabo SQL za nalaganje obdelanih funkcij za usposabljanje razširiti na različne druge primere uporabe. Na primer, lahko uporabimo podoben cevovod za vzdrževanje dveh ločenih tabel Athena: eno za shranjevanje prikazov uporabnikov in drugo za shranjevanje klikov uporabnikov na te prikaze. Z uporabo izjav o pridružitvi SQL lahko pridobimo prikaze, ki so jih uporabniki kliknili ali niso kliknili, in nato te prikaze posredujemo nalogi usposabljanja modela.

Prednosti rešitve

Implementacija predlagane rešitve prinaša več prednosti našemu obstoječemu delovnemu toku, vključno z:

  • Poenostavljena izvedba – Rešitev omogoča implementacijo ekstrakcije funkcij v Python z uporabo priljubljenih knjižnic ML. In ne zahteva, da se koda prenese v PySpark. To poenostavi ekstrakcijo funkcij, saj bo ta cevovod izvajal isto kodo, ki jo je razvil Data Scientist v prenosnem računalniku.
  • Hitra pot do proizvodnje – Rešitev lahko razvije in uvede Data Scientist, da izvede ekstrakcijo funkcij v velikem obsegu, kar jim omogoči, da razvijejo priporočeni model ML glede na te podatke. Istočasno lahko inženir ML z majhnimi spremembami uvede isto rešitev v proizvodnjo.
  • Ponovna uporabnost – Rešitev zagotavlja vzorec za večkratno uporabo za ekstrakcijo funkcij v velikem obsegu in jo je mogoče enostavno prilagoditi za druge primere uporabe, ki presegajo modele za izdelavo priporočil.
  • Učinkovitost – Rešitev ponuja dobro zmogljivost: obdelava enega dneva Talent.comPodatki osebe so trajali manj kot 1 uro.
  • Postopne posodobitve – Rešitev podpira tudi postopne posodobitve. Nove dnevne podatke je mogoče obdelati z opravilom SageMaker Processing, lokacijo S3, ki vsebuje obdelane podatke, pa je mogoče ponovno preiskati, da posodobite tabelo Athena. Prav tako lahko uporabimo opravilo cron za posodobitev današnjih podatkov večkrat na dan (na primer vsake 3 ure).

Ta cevovod ETL smo uporabili za pomoč Talent.com pri obdelavi 50,000 datotek na dan, ki vsebujejo 5 milijonov zapisov, in ustvarili podatke o usposabljanju z uporabo funkcij, pridobljenih iz 90 dni neobdelanih podatkov s Talent.com – skupaj 450 milijonov zapisov v 900,000 datotekah. Naš načrt je pomagal Talent.com zgraditi in uvesti sistem priporočil v produkcijo v samo 2 tednih. Rešitev je izvajala vse postopke ML, vključno z ETL, na Amazon SageMaker brez uporabe drugih storitev AWS. Sistem za priporočila za zaposlitev je povzročil 8.6-odstotno povečanje razmerja med prikazi in kliki pri spletnem A/B testiranju v primerjavi s prejšnjo rešitvijo, ki temelji na XGBoost, in je milijonom uporabnikov Talent.com pomagal priti do boljših delovnih mest.

zaključek

Ta objava opisuje cevovod ETL, ki smo ga razvili za obdelavo funkcij za usposabljanje in uvajanje modela priporočila za zaposlitev na Talent.com. Naš cevovod uporablja opravila SageMaker Processing za učinkovito obdelavo podatkov in pridobivanje funkcij v velikem obsegu. Koda za ekstrakcijo funkcij je implementirana v Python, kar omogoča uporabo priljubljenih knjižnic ML za izvajanje ekstrakcije funkcij v velikem obsegu, ne da bi bilo treba kodo prenesti za uporabo PySpark.

Bralce spodbujamo, da raziščejo možnost uporabe cevovoda, predstavljenega v tem spletnem dnevniku, kot predloge za svoje primere uporabe, kjer je potrebno pridobivanje funkcij v velikem obsegu. Podatkovni znanstvenik lahko izkoristi cevovod za izdelavo modela ML, isti cevovod pa lahko nato prevzame inženir ML za uporabo v proizvodnji. To lahko znatno skrajša čas, potreben za izdelavo rešitve ML od konca do konca, kot je bilo v primeru Talent.com. Bralci se lahko sklicujejo na vadnica za nastavitev in izvajanje opravil SageMaker Processing. Bralce napotimo tudi k ogledu objave Od besedila do sanjske službe: ustvarjanje priporočevalca zaposlitve na podlagi NLP na Talent.com z Amazon SageMaker, kjer razpravljamo o uporabi tehnik usposabljanja modelov globokega učenja Amazon SageMaker za izgradnjo sistema priporočil za zaposlitev Talent.com.


O avtorjih

Dmitrij BespalovDmitrij Bespalov je višji aplikativni znanstvenik v laboratoriju Amazon Machine Learning Solutions Lab, kjer strankam AWS v različnih panogah pomaga pospešiti uvajanje umetne inteligence in oblaka.

Yi XiangYi Xiang je uporabna znanstvenica II v laboratoriju Amazon Machine Learning Solutions Lab, kjer pomaga strankam AWS v različnih panogah pri pospeševanju umetne inteligence in sprejemanja oblaka.

Tong WangTong Wang je višji aplikativni znanstvenik v laboratoriju Amazon Machine Learning Solutions Lab, kjer strankam AWS v različnih panogah pomaga pospešiti uvajanje umetne inteligence in oblaka.

Anatolij HomenkoAnatolij Homenko je višji inženir strojnega učenja pri Talent.com s strastjo do obdelave naravnega jezika, ki povezuje dobre ljudi z dobrimi službami.

Abdenour BezzouhAbdenour Bezzouh je izvršni direktor z več kot 25-letnimi izkušnjami pri gradnji in zagotavljanju tehnoloških rešitev, ki so prilagojene milijonom strank. Abdenour je opravljal funkcijo glavnega tehnološkega direktorja (CTO) pri Talent.com ko je ekipa AWS oblikovala in izvedla to posebno rešitev za Talent.com.

Yanjun QiYanjun Qi je višji vodja uporabnih znanosti v Amazon Machine Learning Solution Lab. Uvaja inovacije in uporablja strojno učenje, da bi strankam AWS pomagala pospešiti njihovo umetno inteligenco in uporabo v oblaku.

Časovni žig:

Več od Strojno učenje AWS