Airflow 用气流清洗过去的ai平台模型版本

Airflow 用气流清洗过去的ai平台模型版本,airflow,google-cloud-composer,apache-airflow-xcom,gcp-ai-platform-training,Airflow,Google Cloud Composer,Apache Airflow Xcom,Gcp Ai Platform Training,我正在使用airflow计划gcloud AI平台中模型版本的培训 我成功地安排了模型的培训、版本的创建,然后使用此DAG将最后一个版本设置为默认版本: 将DAG(“ml\U管道”,计划间隔=无,默认参数=默认参数)作为DAG: uuid=str(uuid4()) 培训\u op=MLEngineTrainingOperator( 任务\'u id='submit \'u job \'u for \'u training', 项目id=项目id, 作业id='training'.{}.格式(uu

我正在使用airflow计划gcloud AI平台中模型版本的培训 我成功地安排了模型的培训、版本的创建,然后使用此DAG将最后一个版本设置为默认版本:

将DAG(“ml\U管道”,计划间隔=无,默认参数=默认参数)作为DAG:
uuid=str(uuid4())
培训\u op=MLEngineTrainingOperator(
任务\'u id='submit \'u job \'u for \'u training',
项目id=项目id,
作业id='training'.{}.格式(uuid),
#包_uris=培训师_BIN,
package_uris=[os.path.join(TRAINER_BIN)],
培训模块=培训师模块,
运行时版本=运行时版本,
地区='us-central1',
训练=[
'--base dir={}'。格式(base_dir)
],
python_version='3.5')
创建\u version\u op=MLEngineVersionOperator(
task_id='create_version',
项目id=项目id,
型号名称=型号名称,
版本={
“名称”:版本名称,
“deploymentUri”:导出uri,
“runtimeVersion”:运行时版本,
“Python转换”:“3.5”,
“框架”:“SCIKIT_学习”,
},
操作(创建)
设置\u版本\u默认值\u op=MLEngineVersionOperator(
task_id='set_version_为默认值',
项目id=项目id,
型号名称=型号名称,
version={'name':version_name},
操作=“设置默认值”)
培训\u操作>>创建\u版本\u操作>>设置\u版本\u默认\u操作
我想在此dag中清理模型的早期版本。我想我应该使用MLEngineVersionOperator的“list”和“delete”操作,如下所示:

list\u model\u versions=MLEngineVersionOperator(
task_id=“列出版本”,
项目id=项目id,
型号名称=型号名称,
operation=“list”,
)
删除其他版本=MLEngineVersionOperator(
任务\u id=“删除\u先例\u版本”,
项目id=项目id,
型号名称=型号名称,
operation=“删除”,
版本={'name':某些名称}
)
我读过关于使用Xcom在delete中使用list操作符的结果的文章,但我不知道如何做到这一点


任何关于如何进行的建议或解决方案都将不胜感激。谢谢

您可以使用模板化属性通过Xcom传递上一个运算符的结果。例如:

delete\u other\u version=MLEngineVersionOperator(
任务\u id=“删除\u先例\u版本”,
项目_id=“阿西莫夫基金会”,
model_name=“IrisPredictor”,
version_name=“{{task_instance.xcom_pull(task_id='my_previous_task')}”,
operation=“删除”,
)
其中,version_name的值使用Jinja模板来使用Xcom。现在,前一个操作符的结果是一个版本列表,因此在向其传递要删除的版本的名称之前,需要进行额外的处理

下面是一个PythonOperator示例,它从上一个操作符获取列表,并获取部署的第二个最新版本的编号

def get_版本(**上下文):
#从上一个操作符获取版本列表
versions=context['task\u instance'].xcom\u pull(task\u id='list\u versions')
#按createTime对版本列表进行排序,并获取第二个最新版本的名称
全名=排序(版本,key=lambda x:x['createTime'],reverse=True)[1]['name']
#名称的格式为“projects/PROJECT/models/MODEL/versions/VERSION”,因此我们只使用VERSION
返回全名。拆分('/')[-1]
获取版本任务=PythonOperator(
task\u id='get\u version\u task',
python\u callable=get\u version,
提供上下文=True,
)
在PythonOperator中,可以

完整的dag是:

def get_版本(**上下文):
#从上一个操作符获取版本列表
versions=context['task\u instance'].xcom\u pull(task\u id='list\u versions')
#按createTime对版本列表进行排序,并获取第二个最新版本的名称
全名=排序(版本,key=lambda x:x['createTime'],reverse=True)[1]['name']
#名称的格式为“projects/PROJECT/models/MODEL/versions/VERSION”,因此我们只使用VERSION
返回全名。拆分('/')[-1]
列表\模型\版本=MLEngineVersionOperator(
task_id=“列出版本”,
项目id=项目id,
型号名称=型号名称,
operation=“list”,
)
获取版本任务=PythonOperator(
task\u id='get\u version\u task',
python\u callable=get\u version,
提供上下文=True,
)
删除其他版本=MLEngineVersionOperator(
任务\u id=“删除\u先例\u版本”,
项目id=项目id,
型号名称=型号名称,
version_name=“{{task_instance.xcom_pull(task_id='get_version_task')}”,
operation=“删除”,
)
列出\u型号\u版本>>获取\u版本\u任务>>删除\u其他\u版本

很高兴它有帮助:)