Shl*_*rtz 6 python machine-learning state-machine hyperparameters aws-step-functions
我用一个步骤编写了一个简单的 AWS 步骤函数工作流程:
from stepfunctions.inputs import ExecutionInput
from stepfunctions.steps import Chain, TuningStep
from stepfunctions.workflow import Workflow
import train_utils
def main():
workflow_execution_role = 'arn:aws:iam::MY ARN'
execution_input = ExecutionInput(schema={
'app_id': str
})
estimator = train_utils.get_estimator()
tuner = train_utils.get_tuner(estimator)
tuning_step = TuningStep(state_id="HP Tuning", tuner=tuner, data={
'train': f's3://my-bucket/{execution_input["app_id"]}/data/'},
wait_for_completion=True,
job_name='HP-Tuning')
workflow_definition = Chain([
tuning_step
])
workflow = Workflow(
name='HP-Tuning',
definition=workflow_definition,
role=workflow_execution_role,
execution_input=execution_input
)
workflow.create()
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
我的目标是从运行时提供的执行 JSON 中提取训练输入。当我执行工作流(从步骤函数控制台)时,提供 JSON{"app_id": "My App ID"}调整步骤不会获得正确的数据,而是获得stepfunctions.inputs.placeholders.ExecutionInput. 此外,在查看生成的 ASL 时,我可以看到执行输入被呈现为字符串:
...
"DataSource": {
"S3DataSource": {
"S3DataType": "S3Prefix",
"S3Uri": "s3://my-bucket/<stepfunctions.inputs.placeholders.ExecutionInput object at 0x12261f7d0>/data/",
"S3DataDistributionType": "FullyReplicated"
}
},
...
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
更新: 正如@yoodan 提到的,SDK 可能落后了,所以我必须在调用 create 之前编辑定义。我可以看到有一种方法可以在调用 create 之前查看定义,但是我可以修改图形定义吗?如何?
小智 2
用于步骤函数的Python SDK会生成相应的代码,我们需要亚马逊状态语言中内置的字符串连接/格式来完成您想要的。
最近在 2020 年 8 月,Amazon States Language 在其语言规范中引入了字符串格式等内置功能。https://states-language.net/#appendix-b
不幸的是,python SDK 不是最新的并且不支持新的更改。
作为解决方法,也许可以在调用工作流创建之前手动修改定义?
| 归档时间: |
|
| 查看次数: |
448 次 |
| 最近记录: |