不少時候,託管式的服務可以幫咱們省不少事。從應用開發到部署,到後續運維;從機器學習模型的建立到訓練,再到最終運行……這些環節中,不少步驟均可以選擇託管式雲服務來幫助咱們下降開發成本和工做量,讓本身更專一於真正重要的任務。html
今天,咱們就一塊兒來看看機器學習過程當中的數據處理和模型評估,若是這些任務也能借助託管式服務搞定,那是否是感受又輕鬆了一大截!python
Amazon SageMaker Processing 已於近期正式上線,這是 Amazon SageMaker 的一項新功能,能夠幫助用戶在徹底託管的基礎設施上輕鬆運行數據預處理、後處理和模型評估等工做負載。git
畢竟你們都知道,訓練一個準確的機器學習(ML)模型須要不少繁瑣的步驟,但沒什麼比預處理數據集更重要,例如:github
這些任務包括在數據集上運行定製腳本,並保存處理後的版本,以供後續訓練做業使用。可想而知,對 ML 團隊來講,手動運行它們,或必須構建和擴展自動化工具,這類作法的前景讓人堪憂。對於後處理做業(篩選、整理等)和模型評估做業(針對不一樣測試集對模型評分)而言也是如此。
爲解決此問題,AWS 構建了 Amazon SageMaker Processing。web
Amazon SageMaker Processing 新增的 Python 開發工具包,使得數據科學家和 ML 工程師能夠輕鬆地在 Amazon SageMaker 上運行預處理、後處理和模型評估工做負載。算法
該開發工具包使用 SageMaker 的內置容器來進行 scikit-learn,這多是最受歡迎的數據集轉換庫之一。app
若是還須要其餘工具,那麼你們也可使用本身的 Docker 映像,而沒必要遵循任何 Docker 映像規範:這爲用戶提供了最大的靈活性,不管是在 SageMaker Processing 仍是在 Amazon ECS 和 Amazon Elastic Kubernetes Service 之類的 AWS 容器服務上,甚至在內部,均是如此。框架
接下來咱們將使用 scikit-learn 進行一個快速演示,隨後將簡要討論如何使用本身的容器。完整示例請訪問 GitHub。運維
如下是使用 SageMaker Processing 開發工具包來運行 scikit-learn 做業的方法。
首先,讓咱們建立一個 SKLearnProcessor 對象,傳遞要使用的 scikit-learn 版本以及對託管基礎設施的要求:機器學習
from sagemaker.sklearn.processing import SKLearnProcessor sklearn_processor = SKLearnProcessor(framework_version='0.20.0', role=role, instance_count=1, instance_type='ml.m5.xlarge')
而後,咱們能夠像下面這樣運行預處理腳本(稍後將介紹更多有關該操做的內容):
from sagemaker.processing import ProcessingInput, ProcessingOutput sklearn_processor.run( code='preprocessing.py', # arguments = ['arg1', 'arg2'], inputs=[ProcessingInput( source='dataset.csv', destination='/opt/ml/processing/input')], outputs=[ProcessingOutput(source='/opt/ml/processing/output/train'), ProcessingOutput(source='/opt/ml/processing/output/validation'), ProcessingOutput(source='/opt/ml/processing/output/test')] )
就這麼簡單!讓咱們經過查看預處理腳本的框架將全部內容放在一塊兒:
import pandas as pd from sklearn.model_selection import train_test_split # Read data locally df = pd.read_csv('/opt/ml/processing/input/dataset.csv') # Preprocess the data set downsampled = apply_mad_data_science_skills(df) # Split data set into training, validation, and test train, test = train_test_split(downsampled, test_size=0.2) train, validation = train_test_split(train, test_size=0.2) # Create local output directories try: os.makedirs('/opt/ml/processing/output/train') os.makedirs('/opt/ml/processing/output/validation') os.makedirs('/opt/ml/processing/output/test') except: pass # Save data locally train.to_csv("/opt/ml/processing/output/train/train.csv") validation.to_csv("/opt/ml/processing/output/validation/validation.csv") test.to_csv("/opt/ml/processing/output/test/test.csv") print('Finished running processing job')
快速瀏覽 S3存儲桶,確認文件已成功處理並保存。如今,我能夠將它們直接用做 SageMaker 訓練做業的輸入。
$ aws s3 ls --recursive s3://sagemaker-us-west-2-123456789012/sagemaker-scikit-learn-2019-11-20-13-57-17-805/output 2019-11-20 15:03:22 19967 sagemaker-scikit-learn-2019-11-20-13-57-17-805/output/test.csv 2019-11-20 15:03:22 64998 sagemaker-scikit-learn-2019-11-20-13-57-17-805/output/train.csv 2019-11-20 15:03:22 18058 sagemaker-scikit-learn-2019-11-20-13-57-17-805/output/validation.csv
那麼又該如何使用本身的容器來處理數據?例如想使用熱門的 spaCy 庫預處理文本數據。此時可使用如下方法爲其定義一個普通 Docker 容器。
FROM python:3.7-slim-buster # Install spaCy, pandas, and an english language model for spaCy. RUN pip3 install spacy==2.2.2 && pip3 install pandas==0.25.3 RUN python3 -m spacy download en_core_web_md # Make sure python doesn't buffer stdout so we get logs ASAP. ENV PYTHONUNBUFFERED=TRUE ENTRYPOINT ["python3"]
隨後便可構建 Docker 容器在本地進行測試,而後將其推送到託管的Docker註冊表服務 Amazon Elastic Container Registry。
接下來可使用 ScriptProcessor 對象配置處理做業,並傳遞您已構建和推送的容器的名稱。
from sagemaker.processing import ScriptProcessor script_processor = ScriptProcessor(image_uri='123456789012.dkr.ecr.us-west-2.amazonaws.com/sagemaker-spacy-container:latest', role=role, instance_count=1, instance_type='ml.m5.xlarge')
最後,能夠像前面的示例同樣運行該做業:
script_processor.run(code='spacy_script.py', inputs=[ProcessingInput( source='dataset.csv', destination='/opt/ml/processing/input_data')], outputs=[ProcessingOutput(source='/opt/ml/processing/processed_data')], arguments=['tokenizer', 'lemmatizer', 'pos-tagger'] )
其他過程與上述過程徹底相同:將輸入複製到容器內部,將輸出從容器複製到 S3。
很簡單對吧!須要注意的是,本文重點討論了數據的預處理,但實際上你們也能夠經過這種方式運行相似的任務進行後處理和模型評估。更多案例可參閱 GitHub 中的示例。
Amazon SageMaker Processing 現已在提供 Amazon SageMaker 的全部商業區域中推出。歡迎你們親自體驗!