在AWS SageMaker容器中设置env变量(自带容器)

时间:2018-07-06 17:16:18

标签: aws-sdk amazon-sagemaker

我们正在使用使用ecs容器的aws sagemaker,有没有办法,当使用低级python sdk调用sagemaker api时,我们可以在容器中设置环境变量(例如stage或prod)

3 个答案:

答案 0 :(得分:1)

您可以配置environment variables for an ECS Task,这是区分开发/生产模式的常用方法。

  

environment-要传递给容器的环境变量。这个   参数在Docker的Create a container部分中映射到Env   远程API和docker的--env选项运行。

我的回答与Sagemaker无关,因为我认为问题仅涉及ECS。

答案 1 :(得分:1)

即使直接调用API(比使用python SDK更低的级别),您也不能直接在容器内设置环境任意变量。但是,您可以传入任意超参数作为TrainingJob的配置,例如传入{"mystage": "prod"}之类的超参数。超参数显示在名为/opt/ml/input/config/hyperparameters.json的文件中的容器中,该文件是作为JSON对象的简单键值映射。您可以使用此命令在启动脚本中设置环境变量,如下所示:

#!/bin/bash

export STAGE=$(jq -r ".mystage" /opt/ml/input/config/hyperparameters.json)

# Now run your code...

您可以通过在ENTRYPOINT中将其设置为Dockerfile,或通过将其命名为train并确保其位于PATH上来使SageMaker调用此脚本。如果您未设置ENTRYPOINT,则为shell。

答案 2 :(得分:0)

如果您使用的是低级Boto SageMaker客户端,则可以使用create_model方法为模型设置环境变量。通过此方法,您可以将环境变量定义为PrimaryContainer的一部分,该变量将与容器实例中的模型工件一起提供。

来源:

高级sagemaker Python软件包中,也可以设置环境变量,例如通过Estimator.deploy()Estimator.create_model()方法(因为其他参数将传递给Model)。

来源:

注意:该方法似乎仅在推理时有效,而在培训工作中无效。