Amazon SageMaker ile Talent.com'da ETL veri işlemeyi kolaylaştırma | Amazon Web Hizmetleri

Amazon SageMaker ile Talent.com'da ETL veri işlemeyi kolaylaştırma | Amazon Web Hizmetleri

Bu yazı, Makine Öğrenimi Mühendisi Anatoly Khomenko ve Talent.com'un Baş Teknoloji Sorumlusu Abdenour Bezzouh tarafından ortak yazılmıştır.

2011 yılında kurulan, Yetenek.com müşterilerinin ücretli iş ilanlarını ve kamuya açık iş ilanlarını bir araya getirir ve birleşik, kolayca aranabilir bir platform oluşturmuştur. 30'ten fazla ülkede 75 milyondan fazla iş ilanını kapsayan ve çeşitli dilleri, sektörleri ve dağıtım kanallarını kapsayan Talent.com, iş arayanların çeşitli ihtiyaçlarını karşılayarak milyonlarca iş arayan kişiyi iş fırsatlarıyla etkili bir şekilde buluşturuyor.

Talent.com'un misyonu küresel iş gücü bağlantılarını kolaylaştırmaktır. Bunu başarmak için Talent.com, web üzerindeki çeşitli kaynaklardan iş ilanlarını bir araya getirerek iş arayanlara, becerilerine ve deneyimlerine göre uyarlanmış 30 milyondan fazla iş fırsatından oluşan kapsamlı bir havuza erişim olanağı sunuyor. Bu misyon doğrultusunda Talent.com, kullanıcıların kariyerlerini ilerletmelerine yardımcı olmayı amaçlayan, derin öğrenmeyle desteklenen son teknoloji ürünü bir iş öneri motoru geliştirmek için AWS ile iş birliği yaptı.

Bu iş önerisi motorunun etkili bir şekilde çalışmasını sağlamak için Talent.com'un toplu iş listelerinden özelliklerin çıkarılmasından ve iyileştirilmesinden sorumlu büyük ölçekli bir veri işleme hattının uygulanması çok önemlidir. Bu hat, 5 milyon günlük kaydı 1 saatten daha kısa sürede işleyebilmektedir ve birden fazla günlük kaydın paralel olarak işlenmesine olanak sağlamaktadır. Ayrıca bu çözüm, üretime hızlı bir şekilde konuşlandırmaya olanak tanır. Bu işlem hattının birincil veri kaynağı, JSON Satırları biçimidir; Amazon Basit Depolama Hizmeti (Amazon S3) ve tarihe göre bölümlendirilmiş. Bu, her gün on binlerce JSON Satırı dosyasının oluşturulmasıyla sonuçlanır ve günlük olarak artan güncellemeler meydana gelir.

Bu veri işleme hattının temel amacı, eğitim için gerekli özelliklerin oluşturulmasını ve Talent.com'daki iş önerisi motorunun dağıtılmasını kolaylaştırmaktır. Bu hattın artımlı güncellemeleri desteklemesi ve iş öneri sistemi için gerekli olan eğitim ve dağıtım modülleri için gerekli olan karmaşık özellik çıkarma gereksinimlerini karşılaması gerektiğini belirtmekte fayda var. İşlem hattımız, birden fazla kaynaktan gelen verileri büyük, merkezi bir depoda birleştiren genel ETL (çıkarma, dönüştürme ve yükleme) süreç ailesine aittir.

Talent.com ve AWS'nin işbirliği içinde, son teknoloji doğal dil işleme ve derin öğrenme modeli eğitim tekniklerini nasıl geliştirdikleri hakkında daha fazla bilgi için Amazon Adaçayı Yapıcı Bir iş öneri sistemi oluşturmak için bkz. Metinden hayalinizdeki işe: Amazon SageMaker ile Talent.com'da NLP tabanlı bir iş tavsiye aracı oluşturma. Sistem, tüm modüllerin Python kullanılarak çalıştırıldığı özellik mühendisliği, derin öğrenme modeli mimarisi tasarımı, hiperparametre optimizasyonu ve model değerlendirmeyi içerir.

Bu gönderi, Talent.com'daki iş önerisi motoruna yönelik özellikleri hazırlamak amacıyla büyük ölçekli bir veri işleme hattı oluşturmak için SageMaker'ı nasıl kullandığımızı gösterir. Ortaya çıkan çözüm, bir Veri Bilimcisinin aşağıdakiler gibi Python kitaplıklarını kullanarak bir SageMaker not defterinde özellik çıkarma fikri oluşturmasına olanak tanır: Scikit-Öğren or PyTorchve daha sonra aynı kodu, uygun ölçekte özellik çıkarımı gerçekleştirerek veri işleme ardışık düzenine hızlı bir şekilde dağıtmak için. Çözüm, PySpark'ı kullanırken gerektiği gibi özellik çıkarma kodunun taşınmasını gerektirmez. AWS Tutkal ETL çözümü olarak. Çözümümüz yalnızca bir Veri Bilimcisi tarafından uçtan uca yalnızca bir SageMaker kullanılarak geliştirilebilir ve dağıtılabilir ve aşağıdakiler gibi diğer ETL çözümleri hakkında bilgi gerektirmez. AWS Toplu İş. Bu, Makine Öğrenimi (ML) ardışık düzenini üretime dağıtmak için gereken süreyi önemli ölçüde kısaltabilir. İşlem hattı Python aracılığıyla çalıştırılır ve özellik çıkarma iş akışlarıyla sorunsuz bir şekilde bütünleşerek onu çok çeşitli veri analizi uygulamalarına uyarlanabilir hale getirir.

Çözüme genel bakış

SageMaker Processing'i kullanan ETL işlem hattına genel bakış

Boru hattı üç ana aşamadan oluşur:

  1. Bir Amazon SageMaker İşleme belirli bir günle ilişkili ham JSONL dosyalarını işlemek için iş. Birden fazla güne ait veriler, ayrı İşleme işleri tarafından aynı anda işlenebilir.
  2. Kullanmak AWS Tutkal birden fazla günlük veri işlendikten sonra veri taraması için.
  3. Belirli bir tarih aralığı için işlenmiş özellikleri SQL kullanarak yükleyin Amazon Atina tablosunu oluşturun, ardından iş önerme modelini eğitin ve dağıtın.

Ham JSONL dosyalarını işleyin

Ham JSONL dosyalarını belirli bir gün için SageMaker İşleme işini kullanarak işleriz. İş, özellik çıkarma ve veri sıkıştırmayı uygular ve işlenen özellikleri, dosya başına 1 milyon kayıtla Parke dosyalarına kaydeder. Her ham JSONL dosyası için paralel olarak özellik çıkarımı gerçekleştirmek amacıyla CPU paralelleştirmesinden yararlanırız. Her JSONL dosyasının işlenme sonuçları, geçici bir dizin içindeki ayrı bir Parquet dosyasına kaydedilir. JSONL dosyalarının tamamı işlendikten sonra binlerce küçük Parke dosyasını, dosya başına 1 milyon kayıt olacak şekilde birkaç dosya halinde sıkıştırıyoruz. Sıkıştırılmış Parke dosyaları daha sonra işleme işinin çıktısı olarak Amazon S3'e yüklenir. Veri sıkıştırma, işlem hattının sonraki aşamalarında verimli tarama ve SQL sorguları sağlar.

Aşağıda, SageMaker SDK'yı kullanarak belirli bir gün için (örneğin 2020-01-01) bir SageMaker İşleme işini planlamaya yönelik örnek kod verilmiştir. İş, Amazon S3'teki ham JSONL dosyalarını okur (örneğin s3://bucket/raw-data/2020/01/01) ve sıkıştırılmış Parke dosyalarını Amazon S3'e kaydeder (örneğin 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
)

Ana komut dosyası için aşağıdaki kod taslağı (processing_script.py) SageMaker İşleme işini çalıştıran komut aşağıdaki gibidir:

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)

Ölçeklenebilirlik, üretim hattımızın önemli bir özelliğidir. İlk olarak, birden fazla SageMaker Processing işi, verileri aynı anda birkaç gün boyunca işlemek için kullanılabilir. İkinci olarak, belirtilen her günlük veriyi işlerken işlenmiş veya ham verinin tamamının bir kerede belleğe yüklenmesini önlüyoruz. Bu, birincil bellekte tam günlük veriyi barındıramayan örnek türleri kullanılarak verilerin işlenmesine olanak sağlar. Tek gereksinim, örnek türünün, N adet ham JSONL veya işlenmiş Parquet dosyasını belleğe aynı anda yükleyebilmesidir; N, kullanımdaki işlem çalışanlarının sayısıdır.

AWS Glue kullanarak işlenmiş verileri tarayın

Birden fazla güne ait tüm ham veriler işlendikten sonra, bir AWS Glue tarayıcısını kullanarak veri kümesinin tamamından bir Athena tablosu oluşturabiliriz. biz kullanıyoruz Pandalar için AWS SDK (awswrangler) Aşağıdaki pasajı kullanarak tabloyu oluşturmak için kütüphane:

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

Eğitim için işlenmiş özellikleri yükleyin

Belirli bir tarih aralığı için işlenmiş özellikler artık SQL kullanılarak Athena tablosundan yüklenebiliyor ve bu özellikler daha sonra iş tavsiye modelinin eğitimi için kullanılabiliyor. Örneğin, aşağıdaki kod parçası, bir aylık işlenmiş özellikleri kullanarak bir DataFrame'e yükler. awswrangler kütüphane:

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

Ek olarak, eğitim amacıyla işlenmiş özelliklerin yüklenmesi için SQL'in kullanımı, diğer çeşitli kullanım durumlarını kapsayacak şekilde genişletilebilir. Örneğin, iki ayrı Athena tablosunu korumak için benzer bir ardışık düzen uygulayabiliriz: biri kullanıcı gösterimlerini depolamak için, diğeri ise bu gösterimlere yapılan kullanıcı tıklamalarını depolamak için. SQL join ifadelerini kullanarak kullanıcıların tıkladığı veya tıklamadığı gösterimleri alabilir ve bu gösterimleri bir model eğitim işine aktarabiliriz.

Çözüm avantajları

Önerilen çözümün uygulanması, mevcut iş akışımıza aşağıdakiler de dahil olmak üzere çeşitli avantajlar sağlar:

  • Basitleştirilmiş uygulama – Çözüm, popüler makine öğrenimi kitaplıkları kullanılarak özellik çıkarmanın Python'da uygulanmasına olanak tanır. Ve kodun PySpark'a taşınmasını gerektirmez. Bu, bir Veri Bilimcisi tarafından bir not defterinde geliştirilen kodun aynısı bu işlem hattı tarafından yürütüleceğinden özellik çıkarımını kolaylaştırır.
  • Üretime giden hızlı yol – Çözüm, uygun ölçekte özellik çıkarımı gerçekleştirmek için bir Veri Bilimcisi tarafından geliştirilip dağıtılabilir ve böylece bu verilere karşı bir ML öneri modeli geliştirmelerine olanak sağlanır. Aynı zamanda aynı çözüm, bir ML Mühendisi tarafından küçük değişikliklere ihtiyaç duyularak üretime dağıtılabilir.
  • Reus yeteneği – Çözüm, geniş ölçekte özellik çıkarımı için yeniden kullanılabilir bir model sağlar ve öneri modelleri oluşturmanın ötesinde diğer kullanım senaryolarına kolayca uyarlanabilir.
  • verim – Çözüm iyi bir performans sunuyor: tek bir günün işlenmesi Yetenek.comadlı kişinin verileri 1 saatten az sürdü.
  • Artımlı güncellemeler – Çözüm ayrıca artımlı güncellemeleri de destekler. Yeni günlük veriler bir SageMaker İşleme işiyle işlenebilir ve işlenen verileri içeren S3 konumu, Athena tablosunu güncellemek için yeniden taranabilir. Bugünün verilerini günde birkaç kez (örneğin her 3 saatte bir) güncellemek için bir cron işi de kullanabiliriz.

Talent.com'un günde 50,000 milyon kayıt içeren 5 dosyayı işlemesine yardımcı olmak için bu ETL hattını kullandık ve Talent.com'dan 90 günlük ham verilerden (450 dosyada toplam 900,000 milyon kayıt) çıkarılan özellikleri kullanarak eğitim verileri oluşturduk. İşlem hattımız Talent.com'un öneri sistemini yalnızca 2 hafta içinde oluşturup üretime geçirmesine yardımcı oldu. Çözüm, ETL dahil tüm makine öğrenimi işlemlerini Amazon SageMaker üzerinde başka bir AWS hizmeti kullanmadan gerçekleştirdi. İş tavsiye sistemi, önceki XGBoost tabanlı çözüme kıyasla çevrimiçi A/B testinde tıklama oranında %8.6 artış sağlayarak milyonlarca Talent.com kullanıcısını daha iyi işlere bağlamaya yardımcı oldu.

Sonuç

Bu gönderi, Talent.com'da bir iş önerme modelinin eğitimi ve dağıtımı için özellik işleme için geliştirdiğimiz ETL hattını özetlemektedir. Boru hattımız, büyük ölçekte verimli veri işleme ve özellik çıkarımı için SageMaker Processing işlerini kullanıyor. Özellik çıkarma kodu Python'da uygulanarak, PySpark'ı kullanmak için kodu taşımaya gerek kalmadan, geniş ölçekte özellik çıkarımı gerçekleştirmek için popüler makine öğrenimi kitaplıklarının kullanılmasına olanak tanır.

Okuyucuları, bu blogda sunulan işlem hattını, geniş ölçekte özellik çıkarmanın gerekli olduğu kullanım durumları için bir şablon olarak kullanma olasılığını keşfetmeye teşvik ediyoruz. İşlem hattı, bir Veri Bilimcisi tarafından bir ML modeli oluşturmak için kullanılabilir ve aynı işlem hattı daha sonra bir ML Mühendisi tarafından üretimde çalıştırılmak üzere benimsenebilir. Bu, Talent.com'da olduğu gibi makine öğrenimi çözümünü uçtan uca ürün haline getirmek için gereken süreyi önemli ölçüde azaltabilir. Okuyucular başvurabilirler SageMaker Processing işlerini kurma ve çalıştırma eğitimi. Ayrıca okuyucuları yazıyı görüntülemeye davet ediyoruz Metinden hayalinizdeki işe: Amazon SageMaker ile Talent.com'da NLP tabanlı bir iş tavsiye aracı oluşturmakullanarak derin öğrenme modeli eğitim tekniklerini tartıştığımız yer Amazon Adaçayı Yapıcı Talent.com'un iş tavsiye sistemini oluşturmak.


yazarlar hakkında

Dmitry BespalovDmitry Bespalov Amazon Makine Öğrenimi Çözümleri Laboratuvarı'nda Kıdemli Uygulamalı Bilim İnsanı olarak görev yapıyor ve burada farklı sektörlerdeki AWS müşterilerinin yapay zeka ve bulut benimsemelerini hızlandırmalarına yardımcı oluyor.

Yi XiangYi Xiang Amazon Machine Learning Solutions Lab'da Uygulamalı Bilim Adamı II olarak görev yapıyor ve burada farklı sektörlerdeki AWS müşterilerinin yapay zeka ve bulutu benimseme süreçlerini hızlandırmasına yardımcı oluyor.

Tong WangTong Wang Amazon Makine Öğrenimi Çözümleri Laboratuvarı'nda Kıdemli Uygulamalı Bilim İnsanı olarak görev yapıyor ve burada farklı sektörlerdeki AWS müşterilerinin yapay zeka ve bulut benimsemelerini hızlandırmalarına yardımcı oluyor.

Anatoly KhomenkoAnatoly Khomenko şirketinde Kıdemli Makine Öğrenimi Mühendisidir Yetenek.com iyi insanları iyi işlerle eşleştiren doğal dil işleme tutkusuyla.

Abdenur BezzouhAbdenur Bezzouh Milyonlarca müşteriye ölçeklenebilen teknoloji çözümleri oluşturma ve sunma konusunda 25 yılı aşkın deneyime sahip bir yöneticidir. Abdenour, Teknolojiden Sorumlu Başkan (CTO) olarak görev yaptı. Yetenek.com AWS ekibi bu özel çözümü tasarlayıp uyguladığında Yetenek.com.

Yanjun QiYanjun Qi Amazon Machine Learning Solution Lab'de Kıdemli Uygulamalı Bilim Yöneticisidir. AWS müşterilerinin yapay zekayı ve bulutu benimseme sürecini hızlandırmasına yardımcı olmak için makine öğreniminde yenilikler yapıyor ve uyguluyor.

Zaman Damgası:

Den fazla AWS Makine Öğrenimi