Amazon SageMaker和NVIDIA NGC加速AI和ML工作流

Amazon SageMaker和NVIDIA NGC加速AI和ML工作流
从自动驾驶汽车到药物发现,人工智能正成为主流,并迅速渗透到每个行业。但是,开发和部署AI应用程序是一项具有挑战性的工作。该过程要求通过组合硬件,软件和复杂的工作流程来构建可伸缩的基础结构,这既耗时又容易出错。为了加速端到端的AI工作流程,需要一个统一的平台来使更快地投入生产。
本文演示了Amazon SageMaker和NVIDIA NGC之间的集成如何帮助数据科学家加速其AI工作流程,构建功能强大的应用程序以及收集实现业务目标所需的宝贵见解。
亚马逊SageMaker
Amazon SageMaker是一项完全托管的服务,可为每个开发人员和数据科学家提供快速构建,训练和部署机器学习模型的能力。Amazon SageMaker消除了机器学习过程中每个步骤的繁重工作,从而使开发高质量模型变得更加容易。
Amazon SageMaker和NVIDIA NGC加速AI和ML工作流

图1.用于训练和部署的Amazon SageMaker IDE。
NVIDIA GPU和NGC
GPU非常适合训练和推理,但是还需要GPU优化的软件来加快解决时间,这就是NVIDIA构建NGC的原因。选择NGC的原因如下:
• 易用性-在建立模型和测试其功能时,Jupyter记事本电脑迅速成为数据科学家的首选工具。在Amazon SageMaker Jupyter会话中,可以使用一个简单的pull命令直接从NGC部署容器和模型。
• 高性能的容器-在大规模部署应用程序时,容器几乎是标准配置。容器使可以将应用程序,其库和依赖项打包到可移植且隔离的环境中。这意味着可以在从PC到Amazon云实例的任何位置运行容器。NGC容器每月更新一次,并针对性能进行了微调。当从NGC部署最新版本的容器时,在cuDNN,cuBLAS,DALI和NCCL等库和运行时中进行了性能改进,以从GPU中提取最大性能。
Amazon SageMaker和NVIDIA NGC加速AI和ML工作流

图2.通过优化库和运行时(例如cuDNN,cuBLAS,DALI和NCCL)来将框架的性能从一种版本提高到另一种版本。
• 加速的开发流程-NGC的预训练模型可帮助跨各种应用程序(包括自然语言处理(NLP),图像分析和推荐系统)使用100多种预训练模型来加快应用程序构建过程。这些模型经过精心设计和调整,可以在NVIDIA GPU上实现最佳性能,以实现最佳性能。应用转移学习,可以使用自己的数据集重新训练这些模型并创建自己的自定义模型。如果希望从头开始构建模型,使用NGC中的资源,提供了分步方法,根据NVIDIA工程师使用的最佳实践来构建高度准确和高性能的模型。
• 面向企业的产品-除了性能以外,在生产环境中部署容器时,安全性也是至关重要的要求。NGC中发布的容器经过通用漏洞和暴露(CVE)的全面质量检查流程,以确保是高度安全的,并且没有任何缺陷和漏洞,使有最大的信心在基础结构中部署。
NGC的例子
精心策划了一些示例,涵盖了整个工作负载和用例,从部署进行推理到部署容器以在Jupyter记事本中进行再训练。本文引导完成使用NGC的内容充分利用Amazon SageMaker所需的所有步骤。使用记事本实例,可以使用GitHub轻松访问七个示例。
对于列出的所有示例,从NGC部署容器或模型的一般过程都是相同的。在本文中,详细介绍了第一个示例,向展示如何将NGC中的资产部署到Amazon SageMaker实例中。有关部署每个示例的更多信息,参阅Amazon SageMaker和NVIDIA GPU Cloud(NGC)示例。
在Jupyter记事本上训练TensorFlow BERT-Large模型并部署到TensorRT
以下示例显示了如何使用NGC的NVIDIA TensorRT容器部署TensorFlow BERT-Large模型。可以充分利用NGC的以下三项资产:
• TensorRT容器
• BERT模型(TensorFlow)
• NGC资源
设置
尽管Jupyter记事本提供了许多信息并提供了有关此示例如何工作的逐步指南,但值得注意的是,容器中还包含一个附加脚本,可以帮助完成繁重的工作。该entrypoint.sh脚本在首次构建或启动容器时运行,并且将NGC模型和帮助程序脚本协调在一起以使API部署成为可能。该脚本执行以下操作:

  1. 从NGC下载预训练的BERT模型。
  2. 下载帮助程序脚本。
  3. 微调BERT模型。
  4. 将经过微调的模型转换为TensorRT引擎。
  5. 调用serve.py,定义并启动用于为模型提供推理的端点。
    鼓励更详细地研究此文件,并了解如何针对用例进行修改。
    Jupyter记事本
    第一步是基于TensorRT构建自定义Docker容器,并将映像推送到Amazon Elastic Container Registry(Amazon ECR)。此步骤允许部署自定义映像以进行推断。
    #构建映像并将其推送到ECR
    #build-and-push.sh接受一个arg:标记。在这里,使用0.1标记了映像,但可以随时更改标记
    #有关映像的详细信息,参见docker / Dockerfile.sagemaker.gpu
    !cd docker && bash build-和-push.sh 0.1
    接下来,导入与部署的模型和Amazon SageMaker配合使用所需的库和工具:
    将numpy导入为np
    进口圣人作为圣人
    从sagemaker import get_execution_role
    然后,配置Amazon SageMaker会话,以便可以将TensorRT容器和BERT模型部署到NVIDIA GPU。确定实例类型,部署实例数以及存储输出的位置。在这种情况下,使用默认存储桶。
    角色= get_execution_role()
    会话= sage.Session()
    TRAIN_INSTANCE_TYPE_ID =‘ml.p3.16xlarge’
    TRAIN_INSTANCE_COUNT = 1
    INFERENCE_INSTANCE_TYPE_ID =‘ml.p3.2xlarge’
    INFERENCE_INSTANCE_COUNT = 1
    OUTPUT_BUCKET =‘s3:// {bucket} /output’.format(bucket = session.default_bucket())
    配置好环境后,设置Estimators API以使用自定义的TensorRT容器并微调模型:
    帐户= session.boto_session.client(‘sts’)。get_caller_identity()[‘Account’]
    地区= session.boto_session.region_name
    image_name =’{acct} .dkr.ecr。{region} .amazonaws.com / ngc-tf-bert-sagemaker-demo:0.1’.format(acct = account,region = region)

estimator = sage.estimator.Estimator(image_name = image_name,
角色=角色
train_instance_count = TRAIN_INSTANCE_COUNT,
train_instance_type = TRAIN_INSTANCE_TYPE_ID,
output_path = OUTPUT_BUCKET,
sagemaker_session =会话)

estimator.fit(输入=无)
配置的最后一步是将自定义TensorRT容器,模型和脚本部署到Amazon SageMaker Estimator实例:
预测变量= estimator.deploy(initial_instance_count = INFERENCE_INSTANCE_COUNT,
instance_type = INFERENCE_INSTANCE_TYPE_ID)
然后,通过对自定义段落执行问答推断来充分利用已部署的模型。可以看到提供一个新的上下文并提出不同的问题是多么容易。希望该示例能为提供思想的思路,并为应用程序注入AI提供网关。
从sagemaker.predictor导入json_serializer
从sagemaker.content_types导入CONTENT_TYPE_JSON
将numpy导入为np
short_paragraph_text =“阿波罗计划是美国第三个人类太空飞行计划。最初被设想为跟随单人水星计划的三人飞船,这使第一批美国人进入太空,阿波罗致力于约翰·F·肯尼迪总统的国家目标“是在月球上着陆一个人。阿波罗号首次载人飞行是在1968年。阿波罗号于1961年至1972年运行,随后是阿波罗-联盟号试验项目,于1975年与苏联联合进行了地球轨道飞行任务。”
question_text =“哪个项目使第一个美国人进入太空?”
qa_test_sample = {‘short_paragraph_text’:short_paragraph_text,‘question_text’:question_text}
Forecastor.content_type = CONTENT_TYPE_JSON
dictor.serializer = json_serializer
预报器。预报(qa_test_sample)。解码(“ utf-8”)
证明!如所见,已部署的API知道月球着陆(或提供的任何其上下文)的全部信息:
“答案:“水星计划”,概率:73.069%,每秒100.112句。”
使用NGC PyTorch容器微调BERT模型。
在此示例中,将使用NGC上可用的BERT PyTorch容器,并将其部署在Amazon SageMaker上。首先从NGC获取现有容器和模型,在Amazon SageMaker中构建映像,然后将该映像推送到Amazon ECR。Amazon SageMaker广泛使用Docker容器。通过构建容器映像,可以指定此映像以用于模型训练或部署。
构建训练图像后,采用预训练的PyTorch BERT模型,并通过旋转一个在训练工作期间生成的训练实例并使用指定的超参数执行训练代码,从Amazon SageMaker记事本启动训练任务。此设置允许使用较小的实例进行探索性数据分析以节省成本,然后使用更多的重型实例进行训练。
训练代码使用带有Apex(PyTorch扩展)的GPU优化的PyTorch(自动混合精度训练库)微调BERT模型,以在SQuAD数据集上回答问题。Amazon SageMaker使使用多GPU实例轻松启动此容器以进行分布式训练。
训练完成后,获取保存到Amazon S3的模型权重,然后将经过微调的模型部署到Amazon SageMaker端点进行推理。最后,可以创建自己的服务容器,但是Amazon SageMaker使得使用专门的预先构建的服务容器轻松构建端点。现在,可以从部署在云中的模型中获取实时问题解答!
在PyTorch中使用NGC预训练的BERT-Large模型进行问题解答
通过将深度学习技术集成到应用程序中,可以采用NGC的任何模型并构建用于推理的API。使用NGC获取模型,wget并将其加载到在Amazon SageMaker上运行的Jupyter记事本实例中。然后,将模型打包为Amazon SageMaker推理API所需的格式并进行部署。完成后,将拥有一个可用于自己的问答系统的API。
在Amazon SageMaker上为PyTorch部署NGC SSD模型
如果想探索物体检测或图像分类,那么本示例将使快速入门。首先从NGC抓取PyTorch的Single Shot Detector(SSD)模型,然后将其打包为Amazon SageMaker所需的tarball格式。
Amazon SageMaker和NVIDIA NGC加速AI和ML工作流

图3. NGC目录页面中的PyTorch SSD。
接下来,使用示例transform_script.py文件,该文件配置Amazon SageMaker终端节点,以便了解如何执行以下任务:
• 加载模型,是基于ResNet50主干的SSD300对象检测器
• 处理输入数据
• 根据模型进行预测
然后,使用Amazon SageMaker内置的PyTorchModel函数将模型部署到NVIDIA GPU实例终端节点以进行推理。最后,提供一些示例图像,并从API获取预测。有关SSD如何工作或NGC模型的更多信息,参阅适用于PyTorch的SSD v1.1。
从NGC到Neo编译PyTorch模型并部署在Amazon SageMaker Neo上
在此示例中,从NGC取得了经过预训练的ResNet50模型(通用图像分类架构),并将其与Amazon SageMaker Neo一起部署。首先从NGC下载模型文件和资源,并将加载到记事本实例本地的\ NGC_assets目录中。然后,根据image_classification_resnet从NGC下载的Python脚本,从NGC构建ResNet50模型。此步骤从NGC下载预训练的权重,然后将重建的模型保存到可以与Neo一起使用的PyTorch文件中。将模型和权重存储并打包到.tar文件中后,可以调用Neo编译API。使用此API,可以配置以下内容:
• 目标模型(ResNet50)
• 模型框架(PyTorch)
• 在哪里存储编译后的模型(在本例中为S3)
• 任何超时或最大推理运行时间
最后一步是创建可与应用程序一起使用的预测端点API。为此,必须创建两个函数:
• Neo_preprocess—此函数捕获传入的求,确定的内容类型和数据本身,并将其转换为可由模型API解释的numpy数组。
• Neo_postprocess—当模型和API进行分类后,此函数将执行以获取预测结果并返回响应主体,即分类类别的文本值。
最后,可以根据上述配置,模型和功能配置端点,使用cat图像测试API,并检索最可能的类。希望是“猫”。
在Amazon SageMaker上使用NGC TensorFlow容器
在此示例中,向展示如何使用Python示例将NGC中的自定义TensorFlow容器打包,该示例与CIFAR-10数据集一起使用,并使用TensorFlow Serving进行推理。但是,可以通过修改Docker容器使用TensorFlow Serving以外的推理解决方案。
在此示例中,使用单个图像来支持训练和托管。因为只为两个任务管理一个映像,所以这简化了过程。有时可能需要单独的图像进行训练和托管,因为有不同的要求。在这种情况下,将讨论的部分分成单独的Dockerfile,并构建两个映像。选择使用单个图像还是使用两个图像是最方便开发和管理的问题。
在Amazon SageMaker上为TensorFlow部署NGC模型
在这里,正在处理图像。如果想探索物体检测或图像分类,那么这将使快速入门。首先从NGC抓取经过预训练的模型,然后将其打包为Amazon SageMaker所需的tarball格式。
接下来,创建一个Amazon SageMaker推理会话,并指定授予服务访问S3中存储的模型所需的IAM角色。配置了执行上下文后,可以使用Amazon SageMaker内置的TensorFlow服务模型功能部署模型,以将模型部署到GPU实例,可以在其中使用该模型进行推理。最后,提供一些示例图像,并从API获取预测。
NGC示例入门
Amazon SageMaker和NGC之间的集成为数据科学家和开发人员提供了理想的平台:Amazon SageMaker用于开发和部署AI / ML应用程序,并可以从NGC轻松访问企业级AI软件。
NGC示例入门非常简单。以下视频显示了如何将GitHub上可用的NGC示例链接到Amazon SageMaker实例,或者如何直接导航到NGC页面。
Amazon SageMaker和NVIDIA NGC加速AI和ML工作流

视频。将NGC示例加载到Amazon SageMaker实例的分步过程。

上一篇:TensorFlow分布式在Amazon AWS上运行


下一篇:在Ubuntu Amazon EC2上安装PhP curl