背景
- 独自コンテナより推論エンドポイント
- 複数モデル
- コストを考えている
自動インフラ構築
- 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
- 単一コンテナより低い負荷の場合は一つのインスタンスの価格で複数モデルへ対応できる