SageMaker-自动化更进一步ML模型也能自己生成

5次阅读

共计 5227 个字符,预计需要花费 14 分钟才能阅读完成。

机器学习技术让原本很多繁琐、耗时的操作都能自动实现,大幅提升工作和生活效率,然而为了实现这一点,首先需要有足够高质量的 ML 模型,要想获得这东西可并不容易。

1959 年,Arthur Samuel 将机器学习定义为让计算机能够无需明确编程而进行学习。在实践中,这意味着要找到一种算法,可以从现有数据集中提取模式,然后使用这些模式来构建可很好地泛化到新数据的预测模型。从那时起,人们发明了许多机器学习算法,为科学家和工程师提供了充足地选择,帮助他们构建了惊人的应用程序。

但是丰富的算法也带来了一个难题:应该选择哪种算法?如何可靠地找出哪种算法在特定业务问题上表现最佳?此外,机器学习算法通常会列出很长的训练参数(也称为超参数),如果想从模型中获得所有额外精度,则需要将其设置为“刚好合适”。更糟糕的是,算法还需要以特定方式(也称为特征工程)准备和转换数据,才能实现最佳学习效果,并且我们还需要选择最佳实例类型。

所以实际上,「无需明确编程」这一点到底体现在哪?

体现在最近正式发布的 Amazon SageMaker Autopilot 中!该功能可以 在完全控制和可见的情况下,自动创建最佳分类和回归机器学习模型

认识一下:Amazon SageMaker Neo

通过使用单个 API 调用或在 Amazon SageMaker Studio 中单击几下,SageMaker Autopilot 首先会检查数据集,并运行大量候选项以找出数据预处理步骤、机器学习算法和超参数的最佳组合。然后,它将使用这种组合来训练推断管道,我们可以轻松地将其部署在实时终端节点上或进行批处理。与 Amazon SageMaker 一样,所有这些操作都在完全托管的基础设施上进行。

最后同样重要的是:SageMaker Autopilot 还会生成 Python 代码,确切显示数据的预处理方式:我们不仅可以了解 SageMaker Autopilot 的工作方式,如果愿意,还可以重新使用该代码进行进一步的手动调整。
截止目前,SageMaker Autopilot 支持:

  • 表格格式的输入数据,以及自动数据清理和预处理
  • 用于线性回归、二进制分类和多级分类的自动算法选择
  • 自动超参数优化
  • 分布式训练
  • 自动实例和集群大小选择

将 AutoML 与 Amazon SageMaker Autopilot 配合使用

让我们以这个笔记本示例为起点:借此建立一个二进制分类模型,预测客户是接受还是拒绝营销报价。请花几分钟阅读,大家会发现业务问题本身很容易理解,数据集既不大也不复杂。但是需要几个非直观的预处理步骤,还需要挑选算法及其参数。而 SageMaker Autopilot 可以解决这一难题!

首先获取数据集的副本,快速浏览前几行:

随后将其上传到 Amazon Simple Storage Service(S3)中,但不进行任何预处理。

sess.upload_data(path="automl-train.csv", key_prefix=prefix + "/input")
 
's3://sagemaker-us-west-2-123456789012/sagemaker/DEMO-automl-dm/input/automl-train.csv'

随后配置 AutoML 作业:

  • 设置数据集的位置;
  • 选择我希望模型预测的目标属性:在本例中,“y”列显示客户是否接受了报价;
  • 设置训练工件的位置。
input_data_config = [{
      'DataSource': {
        'S3DataSource': {
          'S3DataType': 'S3Prefix',
          'S3Uri': 's3://{}/{}/input'.format(bucket,prefix)
        }
      },
      'TargetAttributeName': 'y'
    }
  ]
 
output_data_config = {'S3OutputPath': 's3://{}/{}/output'.format(bucket,prefix)
  }

就这么简单!当然,随着对于数据和模型的了解深入,SageMaker Autopilot 的许多选项会派上用场,例如:

  • 设置要训练的问题类型:线性回归、二进制分类或多级分类。如果不确定,SageMaker Autopilot 会通过分析目标属性值自动找出类型;
  • 使用特定指标进行模型评估;
  • 定义完成标准:最长运行时间等。

不过有件事不需要我们去做,那就是调整训练集群的大小,因为 SageMaker Autopilot 会使用基于数据大小和算法的启发式方法!
无需配置,即可使用 CreateAutoMl API 启动该作业:

auto_ml_job_name = 'automl-dm-' + timestamp_suffix
print('AutoMLJobName:' + auto_ml_job_name)
 
sm.create_auto_ml_job(AutoMLJobName=auto_ml_job_name,
                      InputDataConfig=input_data_config,
                      OutputDataConfig=output_data_config,
                      RoleArn=role)
 
AutoMLJobName: automl-dm-28-10-17-49

作业分四个步骤运行(可以使用 DescribeAutoMlJob API 查看):

  1. 将数据集分为训练集和验证集
  2. 分析数据,以便建议应在数据集上试用的管道
  3. 特征工程,将转换应用于数据集和单个特征
  4. 管道选择和超参数调整,选择性能最高的管道以及用于训练算法的最佳超参数

达到最大候选项数量(或其中一种停止条件)后,作业完成。随后可以使用 ListCandidatesForAutoMlJob API 获取有关所有候选项的详细信息,也可以在 AWS 控制台中查看。

candidates = sm.list_candidates_for_auto_ml_job(AutoMLJobName=auto_ml_job_name, SortBy='FinalObjectiveMetricValue')['Candidates']
index = 1
for candidate in candidates:
  print (str(index) + "" + candidate['CandidateName'] +"  "+ str(candidate['FinalAutoMLJobObjectiveMetric']['Value']))
  index += 1
 
1 automl-dm-28-tuning-job-1-fabb8-001-f3b6dead 0.9186699986457825
2 automl-dm-28-tuning-job-1-fabb8-004-03a1ff8a 0.918304979801178
3 automl-dm-28-tuning-job-1-fabb8-003-c443509a 0.9181839823722839
4 automl-dm-28-tuning-job-1-ed07c-006-96f31fde 0.9158779978752136
5 automl-dm-28-tuning-job-1-ed07c-004-da2d99af 0.9130859971046448
6 automl-dm-28-tuning-job-1-ed07c-005-1e90fd67 0.9130859971046448
7 automl-dm-28-tuning-job-1-ed07c-008-4350b4fa 0.9119930267333984
8 automl-dm-28-tuning-job-1-ed07c-007-dae75982 0.9119930267333984
9 automl-dm-28-tuning-job-1-ed07c-009-c512379e 0.9119930267333984
10 automl-dm-28-tuning-job-1-ed07c-010-d905669f 0.8873512744903564

目前,假设我们只对最佳试验感兴趣:验证准确率为 91.87%。让我们将其部署到 SageMaker 终端节点,就像部署任何模型一样:

  • 创建模型
  • 创建终端节点配置
  • 创建终端节点
model_arn = sm.create_model(Containers=best_candidate['InferenceContainers'],
                            ModelName=model_name,
                            ExecutionRoleArn=role)
 
ep_config = sm.create_endpoint_config(EndpointConfigName = epc_name,
                                      ProductionVariants=[{'InstanceType':'ml.m5.2xlarge',
                                                           'InitialInstanceCount':1,
                                                           'ModelName':model_name,
                                                           'VariantName':variant_name}])
 
create_endpoint_response = sm.create_endpoint(EndpointName=ep_name,
                                              EndpointConfigName=epc_name)

几分钟后终端节点开始运行,随后就可以用它进行预测。这意味着 SageMaker 正常运行!

那么模型的构建方式以及其他候选项又有什么用?下文将详细介绍。

使用 Amazon SageMaker Autopilot 实现完全可见和控制

SageMaker Autopilot 将训练工件存储在 S3 中,包括两个自动生成的笔记本。

job = sm.describe_auto_ml_job(AutoMLJobName=auto_ml_job_name)
job_data_notebook = job['AutoMLJobArtifacts']['DataExplorationNotebookLocation']
job_candidate_notebook = job['AutoMLJobArtifacts']['CandidateDefinitionNotebookLocation']
 
print(job_data_notebook)
print(job_candidate_notebook)
 
s3://<PREFIX_REMOVED>/notebooks/SageMakerAutopilotCandidateDefinitionNotebook.ipynb
s3://<PREFIX_REMOVED>/notebooks/SageMakerAutopilotDataExplorationNotebook.ipynb

第一个笔记本包含有关数据集的信息:

第二个笔记本包含有关 SageMaker Autopilot 作业的完整详细信息:候选项、数据预处理步骤等。所有代码均可用,我们可以更改“旋钮”以进行进一步的实验。

如上图所示,我们可以完全控制和查看模型的构建方式。

Amazon SageMaker Autopilot 使机器学习比以往任何时候都更加简单易用。无论是刚开始机器学习,还是经验丰富的从业者,SageMaker Autopilot 都可以帮助我们使用以下任一途径更快更好地构建模型:

  • Amazon SageMaker Studio 中的简单无代码路径
  • 使用 SageMaker Autopilot 开发工具包的简单代码路径
  • 候选项生成笔记本的深入途径

目前我们可以在以下区域使用 SageMaker Autopilot:

  • 美国东部(弗吉尼亚北部)、美国东部(俄亥俄)、美国西部(加利福尼亚北部)、美国西部(俄勒冈)、
  • 加拿大(中部)、南非(圣保罗)、
  • 欧洲(爱尔兰)、欧洲(伦敦)、欧洲(巴黎)、欧洲(法兰克福)、
  • 中东(巴林)、
  • 亚太地区(孟买)、亚太地区(首尔)、亚太地区(新加坡)、亚太地区(悉尼)、亚太地区(东京)。

正文完
 0