不少时候,托管式的服务可以帮咱们省不少事。从应用开发到部署,到后续运维;从机器学习模型的建立到训练,再到最终运行……这些环节中,不少步骤均可以选择托管式云服务来帮助咱们下降开发成本和工做量,让本身更专一于真正重要的任务。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 的全部商业区域中推出。欢迎你们亲自体验!