Latih dan terapkan model ML kustom yang didukung GPU di Amazon SageMaker - AWS Prescriptive Guidance

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Latih dan terapkan model ML kustom yang didukung GPU di Amazon SageMaker

Ankur Shukla, Amazon Web Services

Ringkasan

Pelatihan dan penerapan model machine learning (ML) yang didukung oleh unit pemrosesan grafis (GPU) memerlukan penyiapan awal dan inisialisasi variabel lingkungan tertentu untuk sepenuhnya membuka manfaat NVIDIA. GPUs Namun, menyiapkan lingkungan dapat memakan waktu dan membuatnya kompatibel dengan SageMaker arsitektur Amazon di Amazon Web Services (AWS) Cloud.

Pola ini membantu Anda melatih dan membuat model ML yang didukung GPU kustom menggunakan Amazon. SageMaker Ini menyediakan langkah-langkah untuk melatih dan menerapkan CatBoost model khusus yang dibangun di atas kumpulan data ulasan Amazon sumber terbuka. Anda kemudian dapat membandingkan kinerjanya pada instans p3.16xlarge Amazon Elastic Compute Cloud EC2 (Amazon).

Pola ini berguna jika organisasi Anda ingin menerapkan model ML yang didukung GPU yang ada. SageMaker Ilmuwan data Anda dapat mengikuti langkah-langkah dalam pola ini untuk membuat kontainer yang didukung GPU NVIDIA dan menerapkan model ML pada kontainer tersebut.

Prasyarat dan batasan

Prasyarat

  • Akun AWS yang aktif.

  • Bucket sumber Amazon Simple Storage Service (Amazon S3) untuk menyimpan artefak dan prediksi model.

  • Pemahaman tentang instance SageMaker notebook dan notebook Jupyter.

  • Pemahaman tentang cara membuat peran AWS Identity and Access Management (IAM) dengan izin SageMaker peran dasar, akses bucket S3 dan izin pembaruan, serta izin tambahan untuk Amazon Elastic Container Registry (Amazon ECR).

Batasan

  • Pola ini ditujukan untuk beban kerja ML yang diawasi dengan kode train dan deploy yang ditulis dengan Python.

Arsitektur

Alur kerja untuk melatih dan membangun model HTML yang didukung GPU kustom menggunakan. SageMaker

Tumpukan teknologi

  • SageMaker

  • Amazon ECR

Alat

Alat

  • Amazon ECR — Amazon Elastic Container Registry (Amazon ECR) adalah layanan registri gambar kontainer terkelola AWS yang aman, terukur, dan andal.

  • Amazon SageMaker - SageMaker adalah layanan ML yang dikelola sepenuhnya.

  • Docker — Docker adalah platform perangkat lunak untuk membangun, menguji, dan menyebarkan aplikasi dengan cepat.

  • Python — Python adalah bahasa pemrograman.

Kode

Kode untuk pola ini tersedia pada GitHub Menerapkan model klasifikasi tinjauan dengan Catboost dan SageMaker repositori.

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

Buat peran IAM dan lampirkan kebijakan yang diperlukan.

Masuk ke AWS Management Console, buka konsol IAM, dan buat peran IAM baru. Lampirkan kebijakan berikut ke peran IAM: 

  • AmazonEC2ContainerRegistryFullAccess

  • AmazonS3FullAccess

  • AmazonSageMakerFullAccess

Untuk informasi selengkapnya tentang ini, lihat Membuat instance buku catatan di SageMaker dokumentasi Amazon.

Ilmuwan data

Buat instance SageMaker notebook.

Buka SageMaker konsol, pilih instance Notebook, lalu pilih Buat instance notebook. Untuk peran IAM, pilih peran IAM yang Anda buat sebelumnya. Konfigurasikan instance notebook sesuai dengan kebutuhan Anda, lalu pilih Buat instance notebook.

Untuk langkah dan petunjuk mendetail, lihat Membuat instance buku catatan di SageMaker dokumentasi Amazon.

Ilmuwan data

Kloning repositori.

Buka terminal dalam instance SageMaker notebook dan kloning model GitHub Implementing a review classification dengan Catboost dan SageMaker repositori dengan menjalankan perintah berikut:

git clone https://github.com/aws-samples/review-classification-using-catboost-sagemaker.git

Mulai notebook Jupyter.

Mulai Review classification model with Catboost and SageMaker.ipynb notebook Jupyter, yang berisi langkah-langkah yang telah ditentukan.

Ilmuwan data
TugasDeskripsiKeterampilan yang dibutuhkan

Jalankan perintah di notebook Jupyter.

Buka notebook Jupyter dan jalankan perintah dari cerita berikut untuk menyiapkan data untuk melatih model ML Anda.

Ilmuwan data

Baca data dari bucket S3.

import pandas as pd import csv fname = 's3://amazon-reviews-pds/tsv/amazon_reviews_us_Digital_Video_Download_v1_00.tsv.gz' df = pd.read_csv(fname,sep='\t',delimiter='\t',error_bad_lines=False)
Ilmuwan data

Pra-proses data.

import numpy as np def pre_process(df): df.fillna(value={'review_body': '', 'review_headline': ''}, inplace=True) df.fillna( value={'verified_purchase': 'Unk'}, inplace=True) df.fillna(0, inplace=True) return df df = pre_process(df) df.review_date = pd.to_datetime(df.review_date) df['target'] = np.where(df['star_rating']>=4,1,0)
catatan

Kode ini menggantikan nilai null di 'review_body' dengan string kosong dan menggantikan 'verified_purchase' kolom dengan'Unk', yang berarti “tidak diketahui.”

 

Ilmuwan data

Pisahkan data menjadi kumpulan data pelatihan, validasi, dan pengujian.

Untuk menjaga distribusi label target tetap identik di seluruh set terpisah, Anda harus membuat stratifikasi pengambilan sampel dengan menggunakan pustaka scikit-learn.

from sklearn.model_selection import StratifiedShuffleSplit sss = StratifiedShuffleSplit(n_splits=2, test_size=0.10, random_state=0) sss.get_n_splits(df, df['target']) for train_index, test_index in sss.split(df, df['target']): X_train_vallid , X_test = df.iloc[train_index], df.iloc[test_index] sss.get_n_splits(X_train_vallid, X_train_vallid['target']) for train_index, test_index in sss.split(X_train_vallid, X_train_vallid['target']): X_train , X_valid = X_train_vallid.iloc[train_index], X_train_vallid.iloc[test_index]
Ilmuwan data
TugasDeskripsiKeterampilan yang dibutuhkan

Siapkan dan dorong gambar Docker.

Di notebook Jupyter, jalankan perintah dari cerita berikut untuk menyiapkan gambar Docker dan mendorongnya ke Amazon ECR.

Insinyur ML

Buat repositori di Amazon ECR.

%%sh algorithm_name=sagemaker-catboost-github-gpu-img chmod +x code/train chmod +x code/serve account=$(aws sts get-caller-identity --query Account --output text) # Get the region defined in the current configuration (default to us-west-2 if none defined) region=$(aws configure get region) region=${region:-us-east-1} fullname="${account}.dkr.ecr.${region}.amazonaws.com/${algorithm_name}:latest" aws ecr create-repository --repository-name "${algorithm_name}" > /dev/nul
Insinyur ML

Bangun image Docker secara lokal.

docker build -t "${algorithm_name}" . docker tag ${algorithm_name} ${fullname}
Insinyur ML

Jalankan image Docker dan dorong ke Amazon ECR.

docker push ${fullname}
Insinyur ML
TugasDeskripsiKeterampilan yang dibutuhkan

Buat pekerjaan tuning SageMaker hyperparameter.

Di notebook Jupyter, jalankan perintah dari cerita berikut untuk membuat pekerjaan tuning SageMaker hyperparameter menggunakan image Docker Anda.

Ilmuwan data

Buat SageMaker estimator.

Buat SageMaker estimator dengan menggunakan nama image Docker.

import sagemaker as sage from time import gmtime, strftime sess = sage.Session() from sagemaker.tuner import IntegerParameter, CategoricalParameter, ContinuousParameter, HyperparameterTuner account = sess.boto_session.client('sts').get_caller_identity()['Account'] region = sess.boto_session.region_name image = '{}.dkr.ecr.{}.amazonaws.com/sagemaker-catboost-github-gpu-img:latest'.format(account, region) tree_hpo = sage.estimator.Estimator(image, role, 1, 'ml.p3.16xlarge', train_volume_size = 100, output_path="s3://{}/sagemaker/DEMO-GPU-Catboost/output".format(bucket), sagemaker_session=sess)
Ilmuwan data

Buat pekerjaan HPO.

Buat pekerjaan penyetelan optimasi hyperparameter (HPO) dengan rentang parameter dan lewati set kereta dan validasi sebagai parameter ke fungsi.

hyperparameter_ranges = {'iterations': IntegerParameter(80000, 130000), 'max_depth': IntegerParameter(6, 10), 'max_ctr_complexity': IntegerParameter(4, 10), 'learning_rate': ContinuousParameter(0.01, 0.5)} objective_metric_name = 'auc' metric_definitions = [{'Name': 'auc', 'Regex': 'auc: ([0-9\\.]+)'}] tuner = HyperparameterTuner(tree_hpo, objective_metric_name, hyperparameter_ranges, metric_definitions, objective_type='Maximize', max_jobs=50, max_parallel_jobs=2)
Ilmuwan data

Jalankan pekerjaan HPO.

train_location = 's3://'+bucket+'/sagemaker/DEMO-GPU-Catboost/data/train/' valid_location = 's3://'+bucket+'/sagemaker/DEMO-GPU-Catboost/data/valid/' tuner.fit({'train': train_location, 'validation': valid_location })
Ilmuwan data

Menerima pekerjaan pelatihan berkinerja terbaik.

import sagemaker as sage from time import gmtime, strftime sess = sage.Session() best_job =tuner.best_training_job()
Ilmuwan data
TugasDeskripsiKeterampilan yang dibutuhkan

Buat pekerjaan transformasi SageMaker batch pada data pengujian untuk prediksi model.

Di notebook Jupyter, jalankan perintah dari cerita berikut untuk membuat model dari tugas penyetelan SageMaker hyperparameter Anda dan kirimkan pekerjaan transformasi SageMaker batch pada data pengujian untuk prediksi model.

Ilmuwan data

Buat SageMaker modelnya.

Buat model dalam SageMaker model menggunakan pekerjaan pelatihan terbaik.

attached_estimator = sage.estimator.Estimator.attach(best_job) output_path ='s3://'+bucket+'/sagemaker/DEMO-GPU-Catboost/data/test-predictions/' input_path ='s3://'+bucket+'/sagemaker/DEMO-GPU-Catboost/data/test/' transformer = attached_estimator.transformer(instance_count=1, instance_type='ml.p3.16xlarge', assemble_with='Line', accept='text/csv', max_payload=1, output_path=output_path, env = {'SAGEMAKER_MODEL_SERVER_TIMEOUT' : '3600' })
Ilmuwan data

Buat pekerjaan transformasi batch.

Buat pekerjaan transformasi batch pada kumpulan data pengujian.

transformer.transform(input_path, content_type='text/csv', split_type='Line')
Ilmuwan data
TugasDeskripsiKeterampilan yang dibutuhkan

Baca hasilnya dan evaluasi kinerja model.

Di notebook Jupyter, jalankan perintah dari cerita berikut untuk membaca hasil dan mengevaluasi kinerja model pada metrik model Area Under the ROC Curve (ROC-AUC) dan Area Under the Precision Recall Curve (PR-AUC).

Untuk informasi selengkapnya tentang hal ini, lihat konsep kunci Amazon Machine Learning dalam dokumentasi Amazon Machine Learning (Amazon ML).

Ilmuwan data

Baca hasil pekerjaan transformasi batch.

Baca batch mengubah hasil pekerjaan menjadi bingkai data.

file_name = 's3://'+bucket+'/sagemaker/DEMO-GPU-Catboost/data/test-predictions/file_1.out' results = pd.read_csv(file_name, names=['review_id','target','score'] ,sep='\t',escapechar ='\\' , quoting=csv.QUOTE_NONE, lineterminator='\n',quotechar='"').dropna()
Ilmuwan data

Evaluasi metrik kinerja.

Mengevaluasi kinerja model pada ROC-AUC dan PR-AUC.

from sklearn import metrics import matplotlib import pandas as pd matplotlib.use('agg', warn=False, force=True) from matplotlib import pyplot as plt %matplotlib inline def analyze_results(labels, predictions): precision, recall, thresholds = metrics.precision_recall_curve(labels, predictions) auc = metrics.auc(recall, precision) fpr, tpr, _ = metrics.roc_curve(labels, predictions) roc_auc_score = metrics.roc_auc_score(labels, predictions) print('Neural-Nets: ROC auc=%.3f' % ( roc_auc_score)) plt.plot(fpr, tpr, label="data 1, auc=" + str(roc_auc_score)) plt.xlabel('1-Specificity') plt.ylabel('Sensitivity') plt.legend(loc=4) plt.show() lr_precision, lr_recall, _ = metrics.precision_recall_curve(labels, predictions) lr_auc = metrics.auc(lr_recall, lr_precision) # summarize scores print('Neural-Nets: PR auc=%.3f' % ( lr_auc)) # plot the precision-recall curves no_skill = len(labels[labels==1.0]) / len(labels) plt.plot([0, 1], [no_skill, no_skill], linestyle='--', label='No Skill') plt.plot(lr_recall, lr_precision, marker='.', label='Neural-Nets') # axis labels plt.xlabel('Recall') plt.ylabel('Precision') # show the legend plt.legend() # show the plot plt.show() return auc analyze_results(results['target'].values,results['score'].values)
Ilmuwan data

Sumber daya terkait

Informasi tambahan

Daftar berikut menunjukkan elemen berbeda dari Dockerfile yang dijalankan di Build, run, dan push image Docker ke epik Amazon ECR.

Instal Python dengan aws-cli.

FROM amazonlinux:1 RUN yum update -y && yum install -y python36 python36-devel python36-libs python36-tools python36-pip && \ yum install gcc tar make wget util-linux kmod man sudo git -y && \ yum install wget -y && \ yum install aws-cli -y && \ yum install nginx -y && \ yum install gcc-c++.noarch -y && yum clean all

Instal paket Python

RUN pip-3.6 install --no-cache-dir --upgrade pip && \pip3 install --no-cache-dir --upgrade setuptools && \ pip3 install Cython && \ pip3 install --no-cache-dir numpy==1.16.0 scipy==1.4.1 scikit-learn==0.20.3 pandas==0.24.2 \ flask gevent gunicorn boto3 s3fs matplotlib joblib catboost==0.20.2

Instal CUDA dan cuDNN

RUN wget https://developer.nvidia.com/compute/cuda/9.0/Prod/local_installers/cuda_9.0.176_384.81_linux-run \ && chmod u+x cuda_9.0.176_384.81_linux-run \ && ./cuda_9.0.176_384.81_linux-run --tmpdir=/data --silent --toolkit --override \ && wget https://custom-gpu-sagemaker-image.s3.amazonaws.com/installation/cudnn-9.0-linux-x64-v7.tgz \ && tar -xvzf cudnn-9.0-linux-x64-v7.tgz \ && cp /data/cuda/include/cudnn.h /usr/local/cuda/include \ && cp /data/cuda/lib64/libcudnn* /usr/local/cuda/lib64 \ && chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn* \ && rm -rf /data/*

Buat struktur direktori yang diperlukan untuk SageMaker

RUN mkdir /opt/ml /opt/ml/input /opt/ml/input/config /opt/ml/input/data /opt/ml/input/data/training /opt/ml/model /opt/ml/output /opt/program

Mengatur variabel lingkungan NVIDIA

ENV PYTHONPATH=/opt/program ENV PYTHONUNBUFFERED=TRUE ENV PYTHONDONTWRITEBYTECODE=TRUE ENV PATH="/opt/program:${PATH}" # Set NVIDIA mount environments ENV LD_LIBRARY_PATH=/usr/local/nvidia/lib:/usr/local/nvidia/lib64:$LD_LIBRARY_PATH ENV NVIDIA_VISIBLE_DEVICES="all" ENV NVIDIA_DRIVER_CAPABILITIES="compute,utility" ENV NVIDIA_REQUIRE_CUDA "cuda>=9.0"

Salin file pelatihan dan inferensi ke dalam gambar Docker

COPY code/* /opt/program/ WORKDIR /opt/program