添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
憨厚的圣诞树  ·  用 ChatGPT 武装 Siri ...·  3 月前    · 
一身肌肉的菠萝  ·  AzureAD ...·  6 月前    · 
帅气的火柴  ·  GiantPandaCV - ...·  1 年前    · 
谦和的小蝌蚪  ·  在java 8 ...·  1 年前    · 

sagemaker 是aws的托管机器学习的服务,具体的请看

什么是 Amazon SageMaker? - Amazon SageMaker Amazon SageMaker 是一项完全托管的机器学习服务。借助 SageMaker,数据科学家和开发人员可以快速、轻松地构建和训练机器学习模型,然后直接将模型部署到生产就绪托管环境中。它提供了一个集成的 Jupyter 编写 Notebook 实例,供您轻松访问数据源以便进行探索和分析,因此您无需管理服务器。此外,它还可以提供常见的机器学习算法,这些算法经过了优化,可以在分布式环境中高效处理非常大的数据。借助对自带算法和框架的原生支持,SageMaker 可以提供灵活并且适合具体工作流程的分布式训练选项。通过在 SageMaker Studio 或 SageMaker 控制台中单击几下鼠标按钮以启动模型,即可将模型部署到安全且可扩展的环境中。训练和托管按使用分钟数计费,没有最低费用,也不需要前期承诺。 https://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/whatis.html

在本地使用tf2.0以上的版本编写一个CNN模型,我测试的是编写是猫狗识别模型。

最后fit完成后,保存模型。其中1 是版本号,主要用于多模型部署,export这个名字可以随便改,但是/Servo 好像是sagemaker 规定好的,反正我没这个路径就部署不成功。你们可以试试。

model.save('export/Servo/1/')

保存好模型后,目录结构是这样的。

然后将该目录压缩成.tar.gz格式,这个格式是sagemaker规定格式。

import tarfile
model_archive = 'model.tar.gz'
with tarfile.open(model_archive, mode='w:gz') as archive:
    archive.add('export', recursive=True) 

本地会有一个

然后将该压缩文件上传到s3上。

from sagemaker import get_execution_role
from sagemaker import Session
role = get_execution_role()
sess = Session()
model_data = sess.upload_data(path=model_archive, key_prefix='model_dc_new')

下面开始部署:

在sagemaker-笔记本实例中创建一个新的笔记本实例,创建完成后,打开jupyter

这里要强调下role-用户权限,你在创建笔记本实例时,选择IAM角色时,一定要确定该用户具备sagemaker的读写部署等权限。

然后创建一个笔记本实例,我这边选择是conda-tensorflow2_p36

创建一个新的jupyter,导入必要的包,这样打印下tf,keras和sagemaker的版本,因为我的模型是用tf和kears编写,保证这两个包的版本一致,我用的2.6,sagemaker一定要2.0以上。

from sagemaker import get_execution_role
from sagemaker import Session
import tensorflow as tf
import keras,sagemaker
from sagemaker.tensorflow.model import TensorFlowModel ###2.0以上版本
role = get_execution_role()
sess = Session()
tf_framework_version = tf.__version__
print(tf.__version__) 
print(keras.__version__)
print(sagemaker.__version__)

 建立模型:这里需要注意的是framework_version,必须是整数,如果是2.3.4之类的部署的时候回报错,那个错误我忘记截图了,我这用的2.6,model_data是模型位置。

sm_model = TensorFlowModel(model_data='s3://sagemaker-ap-northeast-1-499396867125/local_model2/model.tar.gz',
framework_version='2.6.0',role=role)

部署模型:instance_type 是EC2的型号,按需设置。initial_instance_count 个数。

正常的大约在10-15分钟内就会完事。endpoint_name 可以指定节点名称,不写就会给你随机一个。

%%time
instance_type = 'ml.c5.xlarge' 
uncompiled_predictor = sm_model.deploy(initial_instance_count=1,instance_type=instance_type) 

TIP:deploy 中有序列化和反序列的配置serializer和deserializer可以按需配置。详细可以在api里查看

Use Version 2.x of the SageMaker Python SDK — sagemaker 2.77.0 documentation

 完成后 打印

uncompiled_predictor.endpoint_name 可以查看节点名称。

首先是数据处理,模型编写的时候怎么处理的,调用的还是怎么处理,例如我这里是这样的:

test_path ="test.jpg"
image = cv2.imread(test_path)
image = cv2.resize(image,(image_size,image_size),0,0,cv2.INTER_LINEAR)
image = image.astype(np.float32)
image_array = np.multiply(image,1./255.)
x_batch = image_array.reshape(1,image_size,image_size,3)
x_batch.shape
(1, 64, 64, 3)

首先部署完成后,uncompiled_predictor可以直接传参narray,返回结果。

res=uncompiled_predictor.predict(x_batch)
print(res)
##结果:{'predictions': [[0.94271487, 0.0572850853]]}

 然后打开终端节点:

可以看到刚刚部署的终端节点

 我们可以直接调用终端节点,这调用终端节点传参就比较奇怪了因为不能直接传入narray

传入会报错:"{"error": "Unsupported Media Type: application/x-npy"}",我目前也不知道咋解决,可能是序列化的问题,有知道的望告知,多谢。

所以我这只能已json的形式传入,也可以。

至于返回结果的json格式,可以修改成自定义的,你也可以改成不是json的。

结果不一样是因为我换了张图片,换成猫的了。

runtime = boto3.Session().client(service_name="runtime.sagemaker")
image = Image.open(test_path)
image = image.resize([image_size, image_size])
image = np.multiply(image,1./255.)
x_train = image.reshape(1,image_size,image_size,3)
input1 = {'instances': x_train.tolist()}
response = runtime.invoke_endpoint(EndpointName=uncompiled_predictor.endpoint_name,         
                               ContentType='application/json', Body=json.dumps(input1))
result = response["Body"].read()
result = json.loads(result)
print(result)
###结果{'predictions': [[0.0799172819, 0.920082748]]}

至此sagemaker部署节点并调用基本是完事了 ,但是里面有很多问题,比如:

1.invoke_endpoint函数调用传参问题,虽然结果没错但是很别扭

2.序列化问题

3.好像是图片大小不能超过5M,这是我在一个国外博客看到的,不知道是不是真的。

4.还有inference.py:

5.还有各种坑。

等以后在研究把。

给大家推荐一个网址,上面讲了一部分内容,挺好的,还有#799Serving a Tensorflow model fails with ConnectionClosedError · Issue #831 · aws/sagemaker-python-sdk · GitHub

#参数恢复 self.sess=tf.Session() saver = tf.train.import_meta_graph(os.path.join(model_fullpath,'model.ckpt-7.meta')) module_file = tf.train.latest_checkpoint(model_fullpath) saver.restore(self.sess, module_file) variable_names = [v.name for v in tf.trainabl 使用AWS SageMaker的机器学习部署 代码和相关文件 该存储库包含用于使用AWS SageMaker部署ML模型的代码和相关文件。 该存储库包含许多用于各种编码练习,微型项目和项目文件的教程笔记本,这些笔记本将用于补充Nanodegree的课程。 是最简单的笔记本电脑,它向您介绍SageMaker生态系统以及一切如何协同工作。 所使用的数据已经是干净的表格格式,因此无需执行其他处理。 使用批处理变换方法测试拟合模型。 执行与低级笔记本相同的分析,而不是使用低级api。 结果,它有点冗长,但是,它具有更灵活的优点。 即使您仅使用其中一种方法,也要了解每种方法是一个好主意。 是同名“批量转换”笔记本上的一种变体。 它没有使用批处理转换来测试模型,而是先部署然后将测试数据发送到已部署的端点。 也是上述“批处理转换”笔记本的变体。 这次使用低级api,再次部署模型并将测试 with tf.name_scope('input'): bottleneck_input = tf.placeholder_with_default( bottleneck_tensor, shape=[batch_size, bottleneck_tensor_size], name='Mul') TensorFlow查看pb数据库里面的输入节点和输出节点: import tensorflow as tf import os model_dir = './tmp/' model_name = 前端代码部署到docker 介绍 (Introduction) Deploying a model with AWS SageMaker is a great way to allow users or customers to interact with it. While you can use the many algorithms and models that come with Sag... 系统模型建立的几个步骤AWS (or Amazon) SageMaker is a fully managed service that provides the ability to build, train, tune, deploy, and manage large-scale machine learning (ML) models quickly.AWS(或Amazon)SageMak... 当算法工程师在本地使用TensorFlow深度学习框架训练好模型后,会创建模型服务器供应用程序调用实现在线推理。由于部署本身存在一定的复杂性,他们需要考虑如何安装TensorFlow Serving相关的依赖,如何实现模型服务的高可用、请求负载均衡、A/B测试、自动伸缩机制等。Amazon SageMaker可以帮助用户快速创建多台模型服务器进行负载均衡,利用云上多可用区的方式实现高可用,并且在请求量变化时可以根据用户配置的策略进行自动扩展或收缩。 将大规模的机器学习系统投入生产,建立一个漂亮的流线化功能库,这已经成为我一个新痴迷的技术点。 我最近开始了一系列关于学习和教学如何做到这一点的三部分教程,以实现不同的机器学习工作流程。本文假设了机器学习模型的基本知识,并重点介绍了如何在生产中建立工作流和部署。 在本系列的第一部分中,我们将在Amazon Sagemaker上设置此功能。我们将使用sklearn的波士顿住房数据集。 机器学习生命周期 让我们花点时 IDE: SageMaker Studio Console: SageMaker Notebook Instances Command line & SDK: AWS CLI, boto3, & SageMaker Python SDK 3rd party integrations: Kubeflow & Kubernetes operators 使用方法详细说明: IDE: SageMaker Studio Sagemaker Stuio Sagemaker学习 1. 使用boto3对S3操作 学sagemaker前先学习一下boto3库。因为使用Sagemaker要配合S3服务,使用这里 先学习boto3对S3服务的控制。 import boto3 指定使用AWS上哪种服务 #获取s3服务资源对象(相比client对象拥有更高级的抽象调用) s3 = boto3.resource('s3',region_name=region) #获取S3客户端对象(原生) s3_client = boto3.client('s3',region_ Artificial intelligence (AI) and machine learning (ML) are gaining momentum in the healthcare industry, especially in healthcare imaging. The Amazon SageMaker approach to ML presents promising potenti... 深度学习在图像处理、语音识别、自然语言处理领域的应用取得了巨大成功,但是它通常在功能强大的服务器端进行运算。如果智能手机通过网络远程连接服务器,也可以利用深度学习技术,但这样可能会很慢,而且只有在设备处于良好的网络连接环境下才行,这就需要把深度学习模型迁移到智能终端。 由于智能终端 CPU 和内存资源有限,为了提高运算性能和内存利用率,需要对服务器端的模型进行量化处理并支持低精度 亚马逊的sagemaker 提供了模型训练到部署的全流程支持,下面这个例子是其参考手册的入门例子,记录一下整体流程,具体代码操作可以查看其手册。1 创建Amazon账号,建立IAM 用户(identify and access management)2 建立 S3 bucket (Amazon simple storage service ) 用于存放训练数据和调优后的模型代码/模型工件(mode... 使用AWS SageMaker的机器学习部署 代码和相关文件 该存储库包含用于使用AWS SageMaker部署ML模型的代码和相关文件。 该存储库包含许多用于各种编码练习,微型项目和项目文件的教程笔记本,这些笔记本将用于补充Nanodegree的课程。 是最简单的笔记本电脑,它向您介绍SageMaker生态系统以及一切如何协同工作。 所使用的数据已经是干净的表格格式,因此无需进行其他处理。 使用批处理变换方法测试拟合模型。 执行与低级笔记本相同的分析,而不是使用低级api。 结果,它有点冗长,但是,它具有更灵活的优点。 即使您仅使用其中一种方法,也要了解每种方法是一个好主意。 是同名“批量转换”笔记本上的一种变体。 它没有使用批处理转换来测试模型,而是先部署然后将测试数据发送到已部署的端点。 也是上述“批处理转换”笔记本的变体。 这次使用低级api,再次部署模型并将测试