ETL-tietojen käsittelyn tehostaminen Talent.comissa Amazon SageMakerin avulla | Amazon Web Services

ETL-tietojen käsittelyn tehostaminen Talent.comissa Amazon SageMakerin avulla | Amazon Web Services

Tämän viestin ovat kirjoittaneet Anatoly Khomenko, koneoppimisinsinööri, ja Abdenour Bezzouh, Talent.comin teknologiajohtaja.

Perustettu vuonna 2011, talent.com kokoaa asiakkaidensa palkalliset työpaikkailmoitukset ja julkiset työpaikkailmoitukset ja on luonut yhtenäisen, helposti haettavan alustan. Talent.com kattaa yli 30 miljoonaa työpaikkailmoitusta yli 75 maassa ja kattaa useita kieliä, toimialoja ja jakelukanavia, ja se palvelee työnhakijoiden monipuolisia tarpeita ja yhdistää miljoonia työnhakijoita tehokkaasti työmahdollisuuksiin.

Talent.comin missio on helpottaa maailmanlaajuisia työvoimayhteyksiä. Tämän saavuttamiseksi Talent.com kokoaa työpaikkailmoituksia eri verkkolähteistä ja tarjoaa työnhakijoille pääsyn laajaan yli 30 miljoonan työmahdollisuuden joukkoon, jotka on räätälöity heidän taitojensa ja kokemustensa mukaan. Tämän tehtävän mukaisesti Talent.com teki yhteistyötä AWS:n kanssa kehittääkseen huippuluokan työsuositusmoottorin, joka perustuu syvään oppimiseen ja jonka tarkoituksena on auttaa käyttäjiä etenemään urallaan.

Tämän työsuositusmoottorin tehokkaan toiminnan varmistamiseksi on ratkaisevan tärkeää ottaa käyttöön laajamittainen tietojenkäsittelyputki, joka vastaa ominaisuuksien poimimisesta ja tarkentamisesta Talent.comin kootuista työpaikkaluetteloista. Tämä putkisto pystyy käsittelemään 5 miljoonaa päivittäistä tietuetta alle tunnissa ja mahdollistaa useiden päivien tietueiden rinnakkaisen käsittelyn. Lisäksi tämä ratkaisu mahdollistaa nopean käyttöönoton tuotantoon. Tämän putkilinjan ensisijainen tietolähde on JSON Lines -muoto, joka on tallennettu Amazonin yksinkertainen tallennuspalvelu (Amazon S3) ja osioitu päivämäärän mukaan. Tämä johtaa joka päivä kymmenien tuhansien JSON Lines -tiedostojen luomiseen, ja päivityksiä tapahtuu päivittäin.

Tämän tietojenkäsittelyputken ensisijaisena tavoitteena on helpottaa koulutukseen tarvittavien ominaisuuksien luomista ja työsuositusmoottorin käyttöönottoa Talent.comissa. On syytä huomata, että tämän putkilinjan on tuettava vaiheittaisia ​​päivityksiä ja täytettävä monimutkaiset ominaisuuspoiminnan vaatimukset, jotka ovat välttämättömiä työn suositusjärjestelmän koulutus- ja käyttöönottomoduuleille. Liukulinjamme kuuluu yleiseen ETL-prosessiperheeseen (extract, transform and load), joka yhdistää useista lähteistä peräisin olevat tiedot suureen keskustietovarastoon.

Lisätietoa siitä, kuinka Talent.com ja AWS rakensivat yhdessä huippuluokan luonnollisen kielen käsittelyn ja syväoppimismallin koulutustekniikoita hyödyntäen Amazon Sage Maker työn suositusjärjestelmän luomiseksi, katso Tekstistä unelmatyöksi: NLP-pohjaisen työnsuosittajan luominen osoitteessa Talent.com Amazon SageMakerin avulla. Järjestelmä sisältää ominaisuussuunnittelun, syväoppimisen malliarkkitehtuurin suunnittelun, hyperparametrien optimoinnin ja mallin arvioinnin, jossa kaikki moduulit ajetaan Pythonilla.

Tämä viesti näyttää, kuinka rakensimme SageMakerin avulla laajamittaisen tietojenkäsittelyputken ominaisuuksien valmistelemiseksi Talent.comin työsuositusmoottorille. Tuloksena oleva ratkaisu antaa tietotutkijalle mahdollisuuden poimia ominaisuuksia SageMaker-muistikirjassa käyttämällä Python-kirjastoja, kuten Scikit-Opi or PyTorch, ja ottaa sitten nopeasti käyttöön saman koodin tietojenkäsittelyputkistoon suorittaen ominaisuuksien poimimista mittakaavassa. Ratkaisu ei vaadi ominaisuuden purkukoodin siirtämistä PySparkin käyttöä varten, kuten käytön aikana vaaditaan AWS-liima ETL-ratkaisuna. Ratkaisumme voi kehittää ja ottaa käyttöön vain Data Scientist päästä päähän käyttämällä vain SageMakeria, eikä se vaadi tietoa muista ETL-ratkaisuista, kuten esim. AWS-erä. Tämä voi lyhentää merkittävästi aikaa, joka tarvitaan koneoppimisprosessin (ML) käyttöönottoon tuotantoon. Liukulinjaa ohjataan Pythonin kautta ja se integroituu saumattomasti ominaisuuksien poiminnan työnkulkuihin, mikä tekee siitä mukautuvan monenlaisiin data-analytiikkasovelluksiin.

Ratkaisun yleiskatsaus

Yleiskatsaus SageMaker-käsittelyä käyttävästä ETL-putkista

Putkilinja koostuu kolmesta päävaiheesta:

  1. Käytä an Amazon SageMaker -käsittely työ tiettyyn päivään liittyvien raaka-JSONL-tiedostojen käsittelemiseksi. Useiden päivien dataa voidaan käsitellä erillisillä käsittelytöillä samanaikaisesti.
  2. Käyttää AWS-liima tietojen indeksointiin useiden päivien tietojen käsittelyn jälkeen.
  3. Lataa käsitellyt ominaisuudet määritetylle ajanjaksolle käyttämällä SQL:ää osoitteesta Amazon Athena taulukkoon, kouluta ja ota työsuositusmalli käyttöön.

Käsittele raaka JSONL-tiedostoja

Käsittelemme raaka-JSONL-tiedostoja tietyn päivän ajan SageMaker Processing -työn avulla. Työ toteuttaa ominaisuuksien purkamista ja tietojen pakkaamista ja tallentaa käsitellyt ominaisuudet Parkettitiedostoihin miljoonalla tietueella tiedostoa kohden. Hyödynnämme suorittimen rinnakkaistoimintoa suorittaaksemme ominaisuuksien purkamisen jokaiselle raaka-JSONL-tiedostolle rinnakkain. Jokaisen JSONL-tiedoston käsittelytulokset tallennetaan erilliseen parkettitiedostoon väliaikaiseen hakemistoon. Kun kaikki JSONL-tiedostot on käsitelty, pakkaamme tuhansia pieniä Parquet-tiedostoja useiksi tiedostoiksi miljoonalla tietueella tiedostoa kohden. Tiivistetyt parkettitiedostot ladataan sitten Amazon S1:een käsittelytyön tulostena. Tietojen tiivistäminen varmistaa tehokkaan indeksoinnin ja SQL-kyselyt liukuhihnan seuraavissa vaiheissa.

Seuraavassa on esimerkkikoodi SageMaker-käsittelytyön ajoittamiseen tietylle päivälle, esimerkiksi 2020-01-01, käyttämällä SageMaker SDK:ta. Työ lukee raaka-JSONL-tiedostoja Amazon S3:sta (esim s3://bucket/raw-data/2020/01/01) ja tallentaa tiivistetyt Parquet-tiedostot Amazon S3:een (esimerkiksi 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
)

Seuraava koodi ääriviivat pääskriptille (processing_script.py), joka suorittaa SageMaker Processing -työn, on seuraava:

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)

Skaalautuvuus on putkistomme keskeinen ominaisuus. Ensinnäkin useita SageMaker Processing -töitä voidaan käyttää tietojen käsittelyyn useiden päivien ajan samanaikaisesti. Toiseksi vältämme lataamasta koko käsiteltyä tai raakadataa muistiin kerralla, kun käsittelemme jokaisen määritetyn päivän dataa. Tämä mahdollistaa tietojen käsittelyn käyttämällä ilmentymätyyppejä, jotka eivät mahdu koko päivän dataa ensisijaiseen muistiin. Ainoa vaatimus on, että ilmentymän tyypin tulee pystyä lataamaan N raakaa JSONL- tai käsiteltyä Parquet-tiedostoa muistiin samanaikaisesti, jolloin N on käytössä olevien prosessityöntekijöiden lukumäärä.

Indeksoi käsitellyt tiedot AWS Glue -liimalla

Kun kaikki useiden päivien raakatiedot on käsitelty, voimme luoda Athena-taulukon koko tietojoukosta käyttämällä AWS Glue -indeksointirobottia. Käytämme AWS SDK pandoille (awswrangler) kirjasto taulukon luomiseen seuraavan katkelman avulla:

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])

Lataa käsitellyt ominaisuudet harjoittelua varten

Määritetyn ajanjakson käsitellyt ominaisuudet voidaan nyt ladata Athena-taulukosta SQL:n avulla, ja näitä ominaisuuksia voidaan sitten käyttää työnsuositusmallin koulutukseen. Esimerkiksi seuraava katkelma lataa yhden kuukauden käsitellyt ominaisuudet DataFrameen käyttämällä awswrangler kirjasto:

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')

Lisäksi SQL:n käyttöä prosessoitujen ominaisuuksien lataamiseen koulutusta varten voidaan laajentaa erilaisiin muihin käyttötapauksiin. Voimme esimerkiksi käyttää samanlaista putkistoa ylläpitämään kahta erillistä Athena-taulukkoa: yksi käyttäjien näyttökertojen tallentamiseen ja toinen näiden näyttökertojen käyttäjien napsautusten tallentamiseen. SQL-liitoslausekkeiden avulla voimme noutaa näyttökerrat, joita käyttäjät joko napsauttavat tai eivät napsauttaneet, ja sitten välittää nämä näyttökerrat malliharjoituksiin.

Ratkaisun edut

Ehdotetun ratkaisun käyttöönotto tuo useita etuja nykyiseen työnkulkuumme, mukaan lukien:

  • Yksinkertaistettu toteutus – Ratkaisu mahdollistaa ominaisuuksien purkamisen Pythonissa suosittujen ML-kirjastojen avulla. Ja se ei vaadi koodin siirtämistä PySparkiin. Tämä virtaviivaistaa ominaisuuksien purkamista, koska sama koodi, jonka Data Scientist on kehittänyt kannettavassa tietokoneessa, suoritetaan tässä prosessissa.
  • Nopea polku tuotantoon – Data Scientist voi kehittää ja ottaa käyttöön ratkaisun ominaisuuksien poimimisen mittakaavassa, jolloin he voivat kehittää ML-suositusmallin tätä dataa vastaan. Samanaikaisesti ML-insinööri voi ottaa saman ratkaisun käyttöön tuotantoon vähäisin muokkauksin.
  • Reus Kyky – Ratkaisu tarjoaa uudelleen käytettävän kuvion piirteiden poimimiseen mittakaavassa, ja se voidaan helposti mukauttaa muihin käyttötapauksiin kuin rakennussuositusmallien rakentamiseen.
  • Tehokkuus – Ratkaisu tarjoaa hyvän suorituskyvyn: yhden päivän käsittely talent.comKäyttäjän data kesti alle tunnin.
  • Lisäpäivitykset – Ratkaisu tukee myös inkrementaalisia päivityksiä. Uusia päivittäisiä tietoja voidaan käsitellä SageMaker Processing -työllä, ja käsitellyt tiedot sisältävä S3-sijainti voidaan indeksoida uudelleen Athena-taulukon päivittämiseksi. Voimme myös käyttää cron-työtä päivittääksemme tämän päivän tiedot useita kertoja päivässä (esimerkiksi 3 tunnin välein).

Käytimme tätä ETL-putkia auttamaan Talent.comia käsittelemään 50,000 5 tiedostoa päivässä, jotka sisältävät 90 miljoonaa tietuetta, ja loimme koulutusdataa käyttämällä ominaisuuksia, jotka on poimittu 450 päivän Talent.comin raakatiedoista – yhteensä 900,000 miljoonaa tietuetta 2 8.6 tiedostossa. Putkimme auttoi Talent.comia rakentamaan ja ottamaan suositusjärjestelmän tuotantoon vain kahdessa viikossa. Ratkaisu suoritti kaikki ML-prosessit, mukaan lukien ETL, Amazon SageMakerissa käyttämättä muita AWS-palveluita. Työpaikkojen suositusjärjestelmä nosti XNUMX % napsautussuhdetta online-A/B-testauksessa aiempaan XGBoost-pohjaiseen ratkaisuun verrattuna, mikä auttoi yhdistämään miljoonat Talent.comin käyttäjät parempiin töihin.

Yhteenveto

Tämä viesti esittelee ETL-putkilinjan, jonka olemme kehittäneet koulutusta ja työnsuositusmallin käyttöönottoa varten Talent.comissa. Putkilinjamme käyttää SageMaker Processing -töitä tehokkaaseen tietojenkäsittelyyn ja ominaisuuksien poimimiseen suuressa mittakaavassa. Ominaisuuden purkukoodi on toteutettu Pythonissa, mikä mahdollistaa suosittujen ML-kirjastojen käytön ominaisuuksien poimimiseen mittakaavassa ilman, että koodia tarvitsee siirtää PySparkin käyttöä varten.

Kannustamme lukijoita tutkimaan mahdollisuutta käyttää tässä blogissa esitettyä putkistoa mallina käyttötapauksissaan, joissa vaaditaan ominaisuuksien poistamista mittakaavassa. Data Scientist voi käyttää putkilinjaa ML-mallin rakentamiseen, ja ML-insinööri voi sitten ottaa saman putkilinjan käyttöön tuotannossa. Tämä voi vähentää merkittävästi aikaa, joka tarvitaan ML-ratkaisun tuotteistamiseen päästä päähän, kuten Talent.comin tapauksessa. Lukijat voivat viitata opetusohjelma SageMaker Processing -töiden määrittämiseen ja suorittamiseen. Suosittelemme myös lukijoita tutustumaan julkaisuun Tekstistä unelmatyöksi: NLP-pohjaisen työnsuosittajan luominen osoitteessa Talent.com Amazon SageMakerin avulla, jossa keskustelemme syväoppimismallin koulutustekniikoista hyödyntäen Amazon Sage Maker rakentaa Talent.comin työpaikkasuositusjärjestelmä.


Tietoja kirjoittajista

Dmitri BespalovDmitri Bespalov on vanhempi soveltuva tutkija Amazon Machine Learning Solutions Labissa, jossa hän auttaa AWS-asiakkaita eri toimialoilla nopeuttamaan tekoälyn ja pilven käyttöönottoa.

Yi XiangYi Xiang on Applied Scientist II Amazon Machine Learning Solutions Labissa, jossa hän auttaa AWS-asiakkaita eri toimialoilla nopeuttamaan tekoälyn ja pilven käyttöönottoa.

Tong WangTong Wang on vanhempi soveltuva tutkija Amazon Machine Learning Solutions Labissa, jossa hän auttaa AWS-asiakkaita eri toimialoilla nopeuttamaan tekoälyn ja pilven käyttöönottoa.

Anatoli KhomenkoAnatoli Khomenko on vanhempi koneoppimisinsinööri osoitteessa talent.com intohimolla luonnollisen kielen käsittelyyn sovittamalla hyviä ihmisiä hyviin töihin.

Abdenour BezzouhAbdenour Bezzouh on johtaja, jolla on yli 25 vuoden kokemus miljoonille asiakkaille skaalautuvien teknologiaratkaisujen rakentamisesta ja toimittamisesta. Abdenour toimi teknologiajohtajana (CTO) klo talent.com kun AWS-tiimi suunnitteli ja toteutti tämän ratkaisun talent.com.

Yanjun QiYanjun Qi on vanhempi soveltavan tieteen johtaja Amazon Machine Learning Solution Labissa. Hän innovoi ja soveltaa koneoppimista auttaakseen AWS-asiakkaita nopeuttamaan tekoälyn ja pilven käyttöönottoa.

Aikaleima:

Lisää aiheesta AWS-koneoppiminen