使用Sagemaker的四种途径:
- 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 是一个python IDE,界面类似于pycharm,可以设置GPU等 - Console: SageMaker Notebook Instances
界面类似于Jupyterlab Notebook,更适合新手,和SageMaker Notebook Studio一样都是在SageMaker内使用 - Command line & SDK: AWS CLI, boto3, & SageMaker Python SDK
在Sagemaker外部调用sagemaker的方法,可以在本地调用SageMaker - 3rd party integrations: Kubeflow & Kubernetes operators
没用过
使用AWS CLI上传本地文件至目标bucket
1. 输入「aws configure」设置本地角色权限
使用类似于user_credentials_sagemaker_role.csv内的账号密码进行设置
注:这个csv文件是管理员在控制台里新增role(角色)后,管理员通过邮件发送的
AWS Access Key ID [None]:Access key ID
注意:此 ID 的形式应为AKIAPWINCOKAO3U4FWTN
AWS Secret Access Key [None]:Secret access key
注意:Secret access key的形式应为 5dqQFBaGuPNf5z7NhFrgou4V5JJNaWPy1XFzBfX3
Default region name [None]:输入目标region,例如「us-east-1」
Default output format [None]:输入 “json”
2. 如果需要上传目标bucket不存在,则需要创建新的bucket
aws s3 mb s3://my-first-backup-bucket
3. 上传目标文件
aws s3 cp “C:\users\my first backup.bak” s3://my-first-backup-bucket/
4. 上传目标文件夹
aws s3 cp C:\users\myfolder s3://my-first-backup-bucket/targetfolder/ --recursive
参考链接:https://docs.aws.amazon.com/cli/latest/userguide/cli-services-s3-commands.html
Pycharm+Sagemaker配置教程
- 首先是安装Sagemaker的package,觉得慢的可以使用清华源镜像
pip install sagemaker
- 设置本地的credential,根据给你的csv文件内的信息进行设置
参考链接:AWS官方文档
aws configure
AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Default region name [None]: us-west-2
Default output format [None]: json
- 由于AWS将数据处理和训练分成了两部分,所以需要先进行数据预处理(pre-processing)
参考链接:AWS github
a).预处理的python脚本如果有引用到其他外部的脚本,则需要将这些引用到的python脚本存储在S3内而不是本地
b).在预处理前添加一段链接Sagemaker的代码,role 可以使用管理员权限在AWS的角色界面查看,AWS是使用Docker启动镜像的,所有数据在启动阶段会从S3复制到镜像内,在python脚本内引用的位置都是镜像内的位置(例如/opt/ml/processing等,参考:AWS关于/opt/ml/的说明)
# Sagemaker SDK 初始化
training_data_uri = '需要进行处理的数据存储的S3位置'
sagemaker_session = sagemaker.Session()
role = 'arn:aws-cn:iam::12位数字:role/角色名'
region = sagemaker_session.boto_session.region_name
# 创建SKLearnProcessor实例,并初始化参数
from sagemaker.sklearn.processing import SKLearnProcessor
sklearn_processor = SKLearnProcessor(
framework_version="0.20.0",
role=role,
instance_type="ml.m4.xlarge",#ml.m4.xlarge是AWS提供的免费测试用节点,具体参见官网
instance_count=1,
)
sklearn_processor.run(
code="xxxx.py",
inputs=[
ProcessingInput(source="s3://数据的S3存储位置", destination="/opt/ml/processing/input/数据的Docker存储位置"),#输入数据
],
outputs=[
# copy the generated features to s3 for training
ProcessingOutput(output_name="输出任务名(可任意)", source="/opt/ml/processing/存储位置",
destination = "s3://生成的数据存储的S3路径位置"),#输出数据
]
#arguments=["--train-test-split-ratio", "0.2"], 运行时参数,可以被传递进python脚本内并被parser = argparse.ArgumentParser()捕捉
)
- 训练阶段
训练阶段的所有代码都保存在本地,使用inputs可以将S3内某个文件夹A
存储至Docker镜像目录/opt/ml/input/data/A
下,如果在脚本内需要保存模型,则指定model_dir至某个S3文件夹内,并且在python脚本内指定存储模型至/opt/ml/model/
,Sagemaker会自动将/opt/ml/model/
下的模型存储至model_dir指定的S3文件夹内
mnist_estimator = TensorFlow(entry_point='xxxx.py',
source_dir='本地代码路径',
model_dir='模型存储的S3路径',
role=role,
instance_count=1,
instance_type='ml.m4.xlarge',
framework_version='2.0.0',
py_version='py3',
distributions={'parameter_server': {'enabled': True}})
#training_data_uri
mnist_estimator.fit(inputs = {"数据集名(任意)":"需要复制到Docker镜像内的数据集的S3路径名"}) # data url
Sagemaker 上使用 Tensorflow serving 部署
如果不是使用pb格式保存的话,在保存过程中会出现以上warning
后续在部署模型的时候,sagemaker endpoint内置的tfs服务,只支持pb的savedmodel,所以如果在训练的时候保存的不是pb,就会写这个warning