0
0

More than 1 year has passed since last update.

SegamakerのDirectマルチコンテナエンドポイントを構築してみる

Posted at

背景

  • 独自コンテナより推論エンドポイント
  • 複数モデル
  • コストを考えている

自動インフラ構築

  • InferenceExecutionConfig: { Mode: 'Direct' }の設定はAWS Consoleに設定できない、デフォルトは{ Mode: 'Serial' }で、推論パイプラインになる
  Model:
    Type: "AWS::SageMaker::Model"
    Properties:
      InferenceExecutionConfig: 
        Mode: 'Direct'
      Containers:
        - ContainerHostname: 'aaa'
          Image: !FindInMap [ConfigMap, !Ref EnvType, Image]
          Mode: 'SingleModel'
          ModelDataUrl: 's3://xxx'
        - ContainerHostname: 'bbb'
          Image: !FindInMap [ConfigMap, !Ref EnvType, Image]
          Mode: 'SingleModel'
          ModelDataUrl: 's3://yyy'
      ExecutionRoleArn: 'arn:aws:iam::xxx:role/xxxx'

独自コンテナ変更

  • 以下のラベルをDockerfileに追加
    • LABEL com.amazonaws.sagemaker.capabilities.accept-bind-to-port=true
  • 8080 番ポートではなく、SAGEMAKER_BIND_TO_PORT の環境変数のポートを使用している
print(os.environ.get("SAGEMAKER_BIND_TO_PORT"))
filename = '/opt/program/nginx_copy.conf'
with open(filename, 'r') as f:
    fileText = f.read()
    after = fileText.replace('SAGEMAKER_BIND_TO_PORT', os.environ.get("SAGEMAKER_BIND_TO_PORT"))
    print(after)
filename = '/opt/program/nginx.conf'
with open(filename, 'w') as f:
    f.write(after)

気になること

  • ml.g4dn系とml.inf1系のインスタンスは、Directマルチコンテナエンドポイントへサポートしていない

感想

  • マルチモデルの場合は、独自コンテナのソースコードを修正しないといけない
  • マルチコンテナの場合は、Dockerfileとnginxのみ修正してOK
  • 単一コンテナより低い負荷の場合は一つのインスタンスの価格で複数モデルへ対応できる
0
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
0
0