我们正在使用使用ecs容器的aws sagemaker,有没有办法,当使用低级python sdk调用sagemaker api时,我们可以在容器中设置环境变量(例如stage或prod)
答案 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
)。
来源:
注意:该方法似乎仅在推理时有效,而在培训工作中无效。