全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 数据分析与数据挖掘
1395 0
2020-12-08
在云中部署ML模型– AWS SageMaker(内置算法)
企业建立自己的内部服务器并在存储基础架构和维护上花费巨额预算的日子已经一去不复返了。随着主要参与者(亚马逊,谷歌和微软)以及许多其他新兴竞争对手的云计算技术的引入,公司正在向无服务器平台迁移。这个好主意可以帮助组织专注于其核心业务战略。
本文的主题是Amazon(AWS)提供的机器学习服务(Sagemaker),以及如何利用Sagemaker中提供的内置算法在AWS中训练,测试和部署模型。
AWS SageMaker是由Amazon提供的完全托管的机器学习服务。该服务的目标用户是ML开发人员和数据科学家,他们希望构建机器学习模型并将其部署到云中。但是,在模型部署期间不必担心基础架构,因为它将由AWS无缝处理。
当将任何概念应用于实际问题时,都可以以明确的方式传达。因此,让我们拉起 Analytics Vidhya中发布的贷款预测挑战。基于不同的输入预测变量,目标是预测是否应为客户批准贷款。
目录
1.创建一个笔记本实例
2.加载数据集,EDA和训练验证拆分
3.在s3存储桶中上传数据集
4.培训过程
5.模型部署和端点创建
第1步-创建笔记本实例:从创建笔记本实例开始整个过程??,在该实例中,为我们的目标分配了虚拟机(EC2-弹性云)和存储(EBS卷)。用户可以选择EC2的类型和大小以及EBS容量。为了执行大量计算,可以在常规EC2的顶部附加其他虚拟实例。任务完成后,可以通过单击操作下的“停止”来关闭EC2实例。另一方面,即使未使用虚拟机,EBS卷仍保留分配的数据。
出于学习目的,可以免费试用创建一个帐户,并且应从服务中提取“ Amazon SageMaker”。可以从右上角选择区域。在AWS SageMaker的“笔记本实例”下,单击“创建笔记本实例”。
注意:拥有不同区域的原因是为了遵守GDPR规则,并且使区域更靠近客户所在地也可以提高速度。
AWS SageMaker创建笔记本图1 —将“创建笔记本实例”和区域显示为“ N.California”
在“创建笔记本实例”之后,分配EC2实例和EBS卷。
AWS SageMaker-笔记本实例设置
图2 —显示EC2实例和EBS量
此步骤的最后过程是分配访问角色,因为笔记本实例需要权限才能调用其他服务,包括SageMaker和S3(下面讨论的另一个内存存储)。
图3 —显示访问的角色
步骤2-加载数据集,EDA和培训验证拆分:现在,我们已经为目标分配了虚拟机,后续步骤将是创建文件夹,数据集和笔记本。 在这里,我们上传数据集(培训和测试),对培训数据集进行探索性数据分析,并将培训数据集拆分为培训和验证集。因为我们要根据验证集的性能来调整超参数。
AWS SageMaker-加载数据集
   图4 —显示创建的笔记本实例
通过单击“打开Jupyter”,将打开一个新窗口,我们可以在其中为我们的项目创建一个文件夹。
Jupyter-AWS SageMaker
                                                                                               图5 —显示文件夹“贷款预测”
我们可以双击该文件夹并加载火车,测试数据集,以及在本地计算机上已经完成的探索性数据分析。在培训过程中,AWS Sagemaker不需要标题,并且目标列也应该是数据框中的第一列。
EDA
                                                                               图6 —显示EDA处理后拆分的文件列表
第3步-在S3存储桶中上传数据集:在开始培训之前,应将所有数据集(培训,验证和测试)上传到S3存储桶中,从中在培训期间检索详细信息。S3存储桶基本上是Amazon提供的简单存储云服务。与文件夹相似的Amazon S3存储桶存储的对象由数据及其描述性元数据组成(取自原始描述)。 我们可以通过在AWS服务下单击“ S3”并分别提供名称,区域来为我们的流程创建一个S3存储桶。S3存储桶也应与笔记本实例位于同一区域。
细节
                                                                          图7 —显示了S3存储桶名称和区域
以下python代码显示了如何将所有数据集放置在“ S3”存储桶中。可能会有一些不熟悉的术语,例如“ boto3”,它们是为AWS服务设计的库。
#boto3 => Pyhton库用于调用AWS服务
导入boto3
进口圣人
从sagemaker import get_execution_role
#提供要存储在S3存储桶中的文件的名称和位置
bucket_name ='s3bucketloanprediction'
train_file_name ='贷款预测/Train_final.csv'
val_file_name ='贷款预测/Val_final.csv'
test_file_name ='贷款预测/Test_final.csv'
model_output_location = r's3:// {0} /LoanPrediction/model'.format(bucket_name)
train_file_location = r's3:// {0} / {1}'.format(bucket_name,train_file_name)
val_file_location = r's3:// {0} / {1}'.format(bucket_name,val_file_name)
test_file_location = r's3:// {0} / {1}'.format(存储桶名称,测试文件名称)
#定义一种写入s3存储桶的方法
def write_to_s3(文件名,存储桶,密钥):
    使用open(filename,'rb')as f:
        返回boto3.Session()。resource('s3')。Bucket(bucket).Object(key).upload_fileobj(f)
write_to_s3('Train_final.csv',bucket_name,train_file_name)
write_to_s3('Val_final.csv',bucket_name,val_file_name)
write_to_s3('Test_final.csv',bucket_name,test_file_name)
AWS SageMaker数据概述
图8 —显示了移到s3存储桶的文件
所有数据集均已成功上传到给定的s3存储桶中。
第4步-训练过程:由于我们使用的是内置算法,因此需要致电这些算法进行训练。这些算法作为容器存储在ECR(弹性容器注册表)中,并针对每个区域进行维护。通过在代码中提供这些容器的路径,将调用这些算法。可以在链接中找到按区域划分的注册表路径的详细信息。
例如,如果我们要使用美国西部(加利福尼亚北部)地区的XGBoost分类器,则Docker容器路径为“ 746614075791.dkr.ecr.us-west-1.amazonaws.com”。后续步骤是使用ECR中的docker容器构建模型。
训练过程完成后,具有最终权重和偏差的更新模型将根据提供的说明存储在s3存储桶中。
#提供ECR集装箱路径,因为我们使用的是北加利福尼亚
容器= {'us-west-1':'746614075791.dkr.ecr.us-west-1.amazonaws.com/sagemaker-xgboost:1.0-1-cpu-py3'}
#创建一个sagemaker会话
sess = sagemaker.Session()
bucket_name ='s3bucketloanprediction'
model_output_location = r's3:// {0} /LoanPrediction/model'.format(bucket_name)
estimator = sagemaker.estimator.Estimator(container [boto3.Session()。region_name],
                                          角色,
                                          train_instance_count = 1,
                                          train_instance_type ='ml.m4.xlarge',
                                          output_path = model_output_location,
                                          sagemaker_session = sess,
                                          base_job_name ='xgboost-贷款预测'
                                         )
该容器具有算法路径的详细信息,作用主要是允许笔记本访问s3和Sagemaker。在此,应根据计算要求明确指定训练机(train_instance_type)。计数定义了培训期间我们需要的机器数量。如果需要大量计算,则必须分配更大的计算机。最后,在output_path中指定的路径包含最终模型。在训练期间,从ECR访问该算法,并从s3存储桶中检索数据集。
在拟合模型之前,必须设置与每种算法相对应的超参数。有些白皮书包含超参数列表和相应的详细信息。
#设置与XGBoost算法相对应的超参数
estimator.set_hyperparameters(max_depth = 5,
                              目标='binary:logistic',
                              eta = 0.1,
                              子样本= 0.7,
                              num_round = 10,
                              eval_metric ='auc')
#使用拟合模型训练模型
training_file = sagemaker.session.s3_input(s3_data = train_file_location,content_type =“ csv”)
validation_file = sagemaker.session.s3_input(s3_data = val_file_location,content_type =“ csv”)
data_channels = {'train':training_file,'validation':validation_file}
estimator.fit(inputs = data_channels,logs = True)
一旦fit命令发出了训练和验证文件,训练实例中分配的单独GPU将被拉起,训练将开始。可以在“培训”->“培训工作”下监视培训工作。训练完成后,将根据超参数部分中提到的评估指标显示性能结果。
步骤5 —模型部署和端点创建:整个过程的最后一步是部署最终模型并创建将由外部接口访问的端点。端点中分配的计算机将处于运行状态,并且成本将相应扣除。因此,当其他外部应用程序不使用它时,应使用delete选项将端点删除。
#部署模型并创建终点
预测变量= estimator.deploy(initial_instance_count = 1,
                             instance_type ='ml.m4.xlarge',
                             endpoint_name ='xgboost-loanprediction-ver1')
xgboost
图9 —显示了从外部应用程序访问的URL
使用右上角的删除选项,可以删除端点。
完整的代码和数据集可以在Github仓库链接中找到。
结论:
到目前为止,我们已经讨论了使用内置算法在AWS Sagemaker中构建ML模型的选项之一。下一步将使用我们自己的模型,而不是Sagemaker随附的ECR中已经存在的模型。以下是我的建议,以获取有关如何将自定义模型部署到AWS中的宝贵见解。
题库
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群