LoginSignup
3
0

More than 1 year has passed since last update.

SageMakerで既存の学習済みモデルをS3から取得してデプロイする

Last updated at Posted at 2022-12-02

背景

SageMaker関連の記事では、コードの中で学習させたモデルをそのままデプロイする
というようなサンプルコードを多く見かける。
例えば以下のように、モデル(コード中ではbt_model)を定義して学習し、そのままその変数を使ってデプロイする(コード中ではbt_model.deploy)というようなもの。

# データの準備部分は省略
# モデルを定義
import boto3
region_name = boto3.Session().region_name
container = sagemaker.image_uris.retrieve("blazingtext", region_name)
bt_model = sagemaker.estimator.Estimator(container,
                                         role=role,
                                         instance_count=1, 
                                         instance_type='ml.m4.xlarge',
                                         input_mode= 'File',
                                         sagemaker_session=sess)
# パラメータを設定
bt_model.set_hyperparameters(mode="supervised",
                            epochs=10,
                            vector_dim=10,
                            early_stopping=True,
                            patience=4,
                            min_epochs=5)
# 学習
bt_model.fit(inputs=data_channels, logs=True)
# デプロイ
text_classifier = bt_model.deploy(initial_instance_count = 1,instance_type = 'ml.m4.xlarge')

しかし例えば、前日に学習させたモデルを翌日にデプロイするといった場合、
Pythonを一度終了してしまうと、モデルの変数(上記の場合bt_model)は消えているため、デプロイができない。
bt_modelを再度学習するのはもちろん避けたい。
ではどうするか?

既存の学習済みモデルをS3から取得してデプロイする

こういった場合は、sagemaker.model.Modelを使う。
学習されたモデルはS3上に出力されているので、それを参照してデプロイすることができる。
公式ドキュメント

image_urlはモデルを動かすための(学習にも使ったであろう)Dockerコンテナイメージ
model_dataは学習したモデルが格納されているS3の場所(URI)
roleはSageMakerを使うためのAWSのrole
predictor_clsはよくわからんけど必須。詳しくはこちら

import sagemaker
# 既存のモデルを取得して、bt_modelに入れる
bt_model = sagemaker.model.Model(
    image_uri = sagemaker.image_uris.retrieve("blazingtext", "ap-northeast-1") 
    ,model_data = "s3://sagemaker-ap-northeast-1-****************************/model.tar.gz"
    ,role = "arn:aws:iam::*********************************"
    ,predictor_cls = sagemaker.predictor.RealTimePredictor
)

# bt_modelをデプロイする
text_classifier = bt_model.deploy(initial_instance_count = 1,instance_type = 'ml.m4.xlarge')

これで、以前に作成した学習済みモデルや、他人の作ったモデルをデプロイすることができます。

おわり

終わりです。お疲れ様でした。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0