TabNet์„ ์‚ฌ์šฉํ•œ ๋ชจ๋ธ ํ•™์Šต

์ด ํŽ˜์ด์ง€์—์„œ๋Š” TabNet์šฉ ํ…Œ์ด๋ธ” ํ˜•์‹ ์›Œํฌํ”Œ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ด๋ธ” ํ˜•์‹์˜ ๋ฐ์ดํ„ฐ ์„ธํŠธ์—์„œ ๋ถ„๋ฅ˜ ๋˜๋Š” ํšŒ๊ท€ ๋ชจ๋ธ์„ ํ•™์Šต์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

TabNet์šฉ ํ…Œ์ด๋ธ” ํ˜•์‹ ์›Œํฌํ”Œ๋กœ์—๋Š” ๋‘ ๊ฐ€์ง€ ๋ฒ„์ „์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • HyperparameterTuningJob์€ ๋ชจ๋ธ ํ•™์Šต์— ์‚ฌ์šฉํ•  ์ตœ์ ์˜ ์ดˆ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ’ ์ง‘ํ•ฉ์„ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.
  • CustomJob์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ชจ๋ธ ํ•™์Šต์— ์‚ฌ์šฉํ•  ์ดˆ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ’์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ์ดˆ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ’์„ ์ •ํ™•ํžˆ ์•Œ๊ณ  ์žˆ์œผ๋ฉด ํ•ด๋‹น ๊ฐ’์„ ๊ฒ€์ƒ‰ํ•˜์ง€ ์•Š๊ณ  ์ง€์ •ํ•˜๊ณ  ํ•™์Šต ๋ฆฌ์†Œ์Šค์— ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์›Œํฌํ”Œ๋กœ์— ์‚ฌ์šฉ๋˜๋Š” ์„œ๋น„์Šค ๊ณ„์ •์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ํ…Œ์ด๋ธ” ํ˜•์‹ ์›Œํฌํ”Œ๋กœ์˜ ์„œ๋น„์Šค ๊ณ„์ •์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์›Œํฌํ”Œ๋กœ API

์ด ์›Œํฌํ”Œ๋กœ์—์„œ๋Š” ๋‹ค์Œ API๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • Vertex AI
  • Dataflow
  • Compute Engine
  • Cloud Storage

HyperparameterTuningJob์„ ์‚ฌ์šฉํ•œ ๋ชจ๋ธ ํ•™์Šต

๋‹ค์Œ ์ƒ˜ํ”Œ ์ฝ”๋“œ์—์„œ๋Š” HyperparameterTuningJob ํŒŒ์ดํ”„๋ผ์ธ์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

pipeline_job = aiplatform.PipelineJob(
    ...
    template_path=template_path,
    parameter_values=parameter_values,
    ...
)
pipeline_job.run(service_account=SERVICE_ACCOUNT)

pipeline_job.run()์˜ ์„ ํƒ์  service_account ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Vertex AI Pipelines ์„œ๋น„์Šค ๊ณ„์ •์„ ์›ํ•˜๋Š” ๊ณ„์ •์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒŒ์ดํ”„๋ผ์ธ๊ณผ ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ’์€ ๋‹ค์Œ ํ•จ์ˆ˜๋กœ ์ •์˜๋ฉ๋‹ˆ๋‹ค. ํ•™์Šต ๋ฐ์ดํ„ฐ๋Š” Cloud Storage์˜ CSV ํŒŒ์ผ์ด๊ฑฐ๋‚˜ BigQuery์˜ ํ…Œ์ด๋ธ”์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

template_path, parameter_values =  automl_tabular_utils.get_tabnet_hyperparameter_tuning_job_pipeline_and_parameters(...)

๋‹ค์Œ์€ get_tabnet_hyperparameter_tuning_job_pipeline_and_parameters ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ํ•˜์œ„ ์ง‘ํ•ฉ์ž…๋‹ˆ๋‹ค.

๋งค๊ฐœ๋ณ€์ˆ˜ ์ด๋ฆ„ ์œ ํ˜• ์ •์˜
data_source_csv_filenames ๋ฌธ์ž์—ด Cloud Storage์— ์ €์žฅ๋œ CSV์˜ URI์ž…๋‹ˆ๋‹ค.
data_source_bigquery_table_path ๋ฌธ์ž์—ด BigQuery ํ…Œ์ด๋ธ”์˜ URI์ž…๋‹ˆ๋‹ค.
dataflow_service_account ๋ฌธ์ž์—ด (์„ ํƒ์‚ฌํ•ญ) Dataflow ์ž‘์—…์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์ปค์Šคํ…€ ์„œ๋น„์Šค ๊ณ„์ •์ž…๋‹ˆ๋‹ค. ๋น„๊ณต๊ฐœ IP์™€ ํŠน์ • VPC ์„œ๋ธŒ๋„ท์„ ์‚ฌ์šฉํ•˜๋„๋ก Dataflow ์ž‘์—…์€ ๋น„๊ณต๊ฐœ IP์™€ ํŠน์ • VPC ์„œ๋ธŒ๋„ท์„ ์‚ฌ์šฉํ•˜๋„๋ก ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๊ธฐ๋ณธ Dataflow ์ž‘์—…์ž ์„œ๋น„์Šค ๊ณ„์ •์„ ์žฌ์ •์˜ํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
study_spec_parameters_override List[Dict[๋ฌธ์ž์—ด, ๋ฌด๊ด€]] (์„ ํƒ์‚ฌํ•ญ) ์ดˆ๋งค๊ฐœ๋ณ€์ˆ˜ ์กฐ์ •์„ ์žฌ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๋น„์–ด ์žˆ๊ฑฐ๋‚˜ ๊ฐ€๋Šฅํ•œ ์ดˆ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ•˜๋‚˜ ์ด์ƒ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ดˆ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ’์ด ์„ค์ •๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ Vertex AI๋Š” ์ดˆ๋งค๊ฐœ๋ณ€์ˆ˜์— ๊ธฐ๋ณธ ์กฐ์ • ๋ฒ”์œ„๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

study_spec_parameters_override ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ดˆ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๊ตฌ์„ฑํ•˜๋ ค๋ฉด Vertex AI์˜ ๋„์šฐ๋ฏธ ํ•จ์ˆ˜ get_tabnet_study_spec_parameters_override๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํ•จ์ˆ˜์˜ ์ž…๋ ฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • dataset_size_bucket: ๋ฐ์ดํ„ฐ ์„ธํŠธ ํฌ๊ธฐ์˜ ๋ฒ„ํ‚ท
    • 'small': ํ–‰ 100๋งŒ๊ฐœ ๋ฏธ๋งŒ
    • 'medium': ํ–‰ 100๋งŒ~1์–ต ๊ฐœ
    • 'large': ํ–‰ 1์–ต๊ฐœ ์ดˆ๊ณผ
  • training_budget_bucket: ํ•™์Šต ์˜ˆ์‚ฐ์˜ ๋ฒ„ํ‚ท
    • 'small': $600 ๋ฏธ๋งŒ
    • 'medium': $600~$2,400
    • 'large': $2,400 ์ดˆ๊ณผ
  • prediction_type: ์›ํ•˜๋Š” ์ถ”๋ก  ์œ ํ˜•

get_tabnet_study_spec_parameters_override ํ•จ์ˆ˜๋Š” ์ดˆ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ๋ฒ”์œ„์˜ ๋ชฉ๋ก์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ get_tabnet_study_spec_parameters_override ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์˜ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

study_spec_parameters_override = automl_tabular_utils.get_tabnet_study_spec_parameters_override(
    dataset_size_bucket="small",
    prediction_type="classification",
    training_budget_bucket="small",
)

CustomJob์„ ์‚ฌ์šฉํ•œ ๋ชจ๋ธ ํ•™์Šต

๋‹ค์Œ ์ƒ˜ํ”Œ ์ฝ”๋“œ์—์„œ๋Š” CustomJob ํŒŒ์ดํ”„๋ผ์ธ์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

pipeline_job = aiplatform.PipelineJob(
    ...
    template_path=template_path,
    parameter_values=parameter_values,
    ...
)
pipeline_job.run(service_account=SERVICE_ACCOUNT)

pipeline_job.run()์˜ ์„ ํƒ์  service_account ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Vertex AI Pipelines ์„œ๋น„์Šค ๊ณ„์ •์„ ์›ํ•˜๋Š” ๊ณ„์ •์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒŒ์ดํ”„๋ผ์ธ๊ณผ ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ’์€ ๋‹ค์Œ ํ•จ์ˆ˜๋กœ ์ •์˜๋ฉ๋‹ˆ๋‹ค. ํ•™์Šต ๋ฐ์ดํ„ฐ๋Š” Cloud Storage์˜ CSV ํŒŒ์ผ์ด๊ฑฐ๋‚˜ BigQuery์˜ ํ…Œ์ด๋ธ”์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

template_path, parameter_values = automl_tabular_utils.get_tabnet_trainer_pipeline_and_parameters(...)

๋‹ค์Œ์€ get_tabnet_trainer_pipeline_and_parameters ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ํ•˜์œ„ ์ง‘ํ•ฉ์ž…๋‹ˆ๋‹ค.

๋งค๊ฐœ๋ณ€์ˆ˜ ์ด๋ฆ„ ์œ ํ˜• ์ •์˜
data_source_csv_filenames ๋ฌธ์ž์—ด Cloud Storage์— ์ €์žฅ๋œ CSV์˜ URI์ž…๋‹ˆ๋‹ค.
data_source_bigquery_table_path ๋ฌธ์ž์—ด BigQuery ํ…Œ์ด๋ธ”์˜ URI์ž…๋‹ˆ๋‹ค.
dataflow_service_account ๋ฌธ์ž์—ด (์„ ํƒ์‚ฌํ•ญ) Dataflow ์ž‘์—…์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์ปค์Šคํ…€ ์„œ๋น„์Šค ๊ณ„์ •์ž…๋‹ˆ๋‹ค. ๋น„๊ณต๊ฐœ IP์™€ ํŠน์ • VPC ์„œ๋ธŒ๋„ท์„ ์‚ฌ์šฉํ•˜๋„๋ก Dataflow ์ž‘์—…์€ ๋น„๊ณต๊ฐœ IP์™€ ํŠน์ • VPC ์„œ๋ธŒ๋„ท์„ ์‚ฌ์šฉํ•˜๋„๋ก ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๊ธฐ๋ณธ Dataflow ์ž‘์—…์ž ์„œ๋น„์Šค ๊ณ„์ •์„ ์žฌ์ •์˜ํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ๋‹จ๊ณ„

๋ถ„๋ฅ˜ ๋˜๋Š” ํšŒ๊ท€ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ถ”๋ก ํ•  ์ค€๋น„๊ฐ€ ๋˜๋ฉด ๋‹ค์Œ ๋‘ ๊ฐ€์ง€ ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.