AI Contents 수정
AI Contents는 데이터의 입력, 전처리, 모델링 및 데이터의 출력 단계 별로 구분된 Asset(혹은 Step)들로 구성됩니다.
이러한 Asset 들은 정의된 순서에 따라 연결되어 ML Pipeline을 형성하고, 이 Pipeline을 통해 data가 흘러가면서 Asset들이 순차적으로 실행됩니다.
experimental_plan.yaml 파일에는 데이터 소스의 경로 설정을 비롯하여 전처리 파라미터, 모델 사양 및 하이퍼 파라미터 조정, 결과 artifacts 저장 경로 및 Pipeline 동작 컨트롤 등 AI Pipeline 구성에 필요한 내용이 기술됩니다.
이 experimental_plan.yaml 파일을 통해 데이터 경로를 지정하면 ALO은 해당 경로의 데이터를 input/train(혹은 inference) 경로로 복사하여 가져와서
실험 과정에 활용하게 됩니다. 이는 데이터 소스 변경과 실험 반복이 원활하도록 하여, 다양한 실험 시나리오를 손쉽게 진행 할 수 있게 합니다.
AI Contents를 실행하였는데 원하는 성능 기준을 충족하지 못하는 경우, 사용자는 특정 Asset을 수정하거나 자체 개발한 새로운 Asset을 추가 혹은 교체 할 수 있습니다.
예를 들어, 기존의 전처리 Asset이 데이터에 맞지 않는다고 판단되면, 새로운 전처리 로직을 개발하여 새로운 Asset을 만들어 이를 교체하여 모델 성능 극대화를 할 수 있습니다.
또한 ML Pipeline의 실행 속도를 개선하고자 한다면, 비효율적인 Asset을 식별해 제거함으로써 Pipeline의 가벼움과 빠른 실행을 도모할 수 있습니다.
ALO는 이처럼 각각의 Asset들이 환경에 적합하도록 쉽게 삽입 및 삭제될 수 있도록 설계되어 있습니다. 이를 통해 데이터 과학자 및 개발자는 과제에 대한 심층적인 통찰을 얻고,
신속한 실험을 통해 AI 모델의 성능을 지속적으로 향상 시킬 수 있습니다. ALO의 유연한 구조는 다양한 과제와 환경에서의 적용을 가능하게 하며, 적절한 AI Solution의 빠른 개발 및 통합을 추진합니다.
Topics
- 기존 Asset 수정하기
- 새 Asset 추가하기
- 기존 Asset 삭제하기
- ML Pipeline 동작 컨트롤하기
- Single Pipeline 만들기 (TBD)
- Inference Summary 정보 생성하기
- Inference Output 수정하기
- AI Solution 등록하기
기존 Asset 수정하기
특정 AI Contents 혹은 AI Solution 가 사용하는 각 Asset (= step)들 중 일부를 수정하려면 최초에 ALO의 main.py를 한 번 실행하여 assets 폴더에 각 Asset 코드를 먼저 다운로드 받습니다.
각 Asset의 코드 다운로드 완료 이후에는 Asset 수정 중에 각 Asset의 git에서 Asset 코드를 다시 다운로드 받지 않도록 experimental_plan.yaml의 asset_source 부분의 해당 Asset step의 code라는 key 영역을 git 주소가 아닌 local로 변경합니다.
Note : local로 사용하는 경우는 특히, 기존에 git에 존재하지 않는 아예 새로운 Asset을 최초 개발할 때에도 사용할 수 있습니다.
Note : 혹은 새로운 Asset을 개발 하는게 아닌 기존에 git 상에 존재하는 Asset을 일부 수정하여 사용할 때는
experimental_plan.yaml의 control 부의 get_asset_source 부분을 once로 설정하면 최초 main.py 실행 이후에 재실행 할 시에는 각 Asset을 git으로부터 재다운로드 하지 않습니다.
#experimental_plan.yaml
asset_source:
...
- inference_pipeline:
...
- step: output
source:
code: local # git 주소가 아닌 local로 설정
branch: custom_output
requirements:
- requirements.txt
이후, alo/assets 폴더에서 수정하려는 Asset step의 폴더 하위의 파일 내 코드를 수정하고 main.py를 실행하여 동작을 확인합니다.
새 Asset 추가하기
Note: 참고로, step은 Asset과 동일하지만, AI pipeline 상에서 특정 asset의 실행 순서가 정해짐으로써, step이라는 명칭으로도 사용됩니다.
assets 폴더에 신규 Asset step 이름으로 폴더를 생성하고 asset_[step_name].py 파일을 생성합니다.
./{solution_name}/assets/[step_name]
└ asset_[step_name].py
└ requirements.txt
아래와 같은 Asset Template을 기반으로 asset_[step_name].py 를 생성하고 목적에 맞게 개발 합니다.
#asset_[step_name].py
# -*- coding: utf-8 -*-
import os
import sys
from alolib.asset import Asset
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
#--------------------------------------------------------------------------------------------------------------------------
# CLASS
#--------------------------------------------------------------------------------------------------------------------------
class UserAsset(Asset):
def __init__(self, asset_structure):
super().__init__(asset_structure)
## experimental_plan.yaml 에서 작성한 이번 Asset의 user_parameters를 dict로 load
self.args = self.asset.load_args()
## 이전 step의 Asset으로부터 넘겨 받은 config 정보를 이번 Asset에서 dict로 load
self.config = self.asset.load_config()
## 다음 step의 Asset에 전달할 정보를 dict로 저장
## - self.config['new_key'] = 'new_value' 와 같은 형태를 통해 다음 Asset으로 정보 전달 가능
## 이전 step의 Asset에서 전달해준 데이터 load하기
self.input_data = self.asset.load_data()
## (참고: 이전 Asset에서 넘겨받은 config 및 data 내의 key를 지우면 ALO 에러가 발생하게 됩니다.)
@Asset.decorator_run
def run(self):
## 다음 Asset으로 data, config 전달하기
## 아래 예시는 이전 Asset으로부터 전달 받은 data, config를 그대로 다음 Asset에 전달
output_data = self.input_data
output_config = self.config
self.asset.save_data(output_data)
self.asset.save_config(output_config)
#--------------------------------------------------------------------------------------------------------------------------
# MAIN
#--------------------------------------------------------------------------------------------------------------------------
if __name__ == "__main__":
ua = UserAsset(envs={}, argv={}, data={}, config={})
ua.run()
experimental_plan.yaml의 user_parameters 및 asset_source 부에 개발 완료한 Asset을 추가하여 ML pipeline을 구성을 변경합니다.
#experimental_plan.yaml
user_parameters:
...
- train_pipeline:
...
- step: {step_name}
args:
- handling_missing: dropna
asset_source:
...
- train_pipeline:
...
- step: {step_name}
source:
code: local
branch:
requirements:
- requirements.txt
기존 Asset 삭제하기
ML pipeline 상에서 특정 Asset의 실행이 불필요한 경우 experimental_plan.yaml 에서 주석 처리 하거나 삭제 할 수 있습니다.
Note : user_parameters와 asset_source에서 해당 Asset을 둘 다 삭제 혹은 주석처리 해야 에러가 발생하지 않습니다.
#experimental_plan.yaml
user_parameters:
...
- train_pipeline:
...
# - step: preprocess
# args:
# - mode: auto # auto, custom
# custom: {}
asset_source:
...
- train_pipeline:
...
# - step: preprocess
# source: ## git / local 지원
# code: {preprocess Asset git 주소}
# branch: prep_v1.0.0
# requirements:
# - requirements.txt
ML Pipeline 동작 컨트롤하기
#experimental.yaml
control:
## 1. 패키지 설치 및 asset 존재 여부를 실험 시마다 체크할지, 한번만 할지 결정 / requirements.txt 및 종속 패키지들 한번만 설치할 지 매번 설치할지도 결정
- get_asset_source: once ## once, every
## 2. 생성된 artifacts 를 backup 할 지를 결정 True / False
- backup_artifacts: True
## 3. pipeline 로그를 backup 할 지를 결정 True / False
- backup_log: True
## 4. 저장 공간 사이즈를 결정 (단위 MB)
- backup_size: 1000
## 5. Asset 사이 데이터 전달 방법으로 memory, file 를 지원
- interface_mode: file
## 6. 실행 중 memory, cpu 등의 리소스 체크를 할 지 결정 True / False
- check_resource: False
## 7. inference artifacts를 외부 경로로 전달할 때 압축 포맷을 zip으로 할지 tar.gz으로 할 지 결정 tar.gz / zip
- save_inference_format: tar.gz
-get_asset_source: # once / every
이미 존재하는 AI Contents나 AI Solution을 solution 폴더에 설치하고 python main.py를 최초 실행하면 ALO는 assets라는 폴더를 생성하고 그 하위에 각종 Asset 폴더들을 생성한 후 각 Asset의 git으로부터 소스코드를 다운로드 받습니다.
매번 python main.py를 실행할 때 마다 Asset들을 새로 다운로드 받는다면 만약 사용자가 일부 Asset코드들을 수정하였을 시 해당 코드가 날아갈 것 입니다.
따라서 experimental_plan.yaml의 control 부의 get_asset_source를 once로 설정하게 되면 최초 실행 시 1회만 Asset 코드들을 다운로드 받고, 이후 실행부터는 가령 assets 폴더 밑에 이미 input이라는 Asset 폴더가 존재하면, input Asset의 git으로부터 재차 코드를 다운로드 받지 않고 skip하게 됩니다. 만약 every로 설정하면, 실행 시 마다 Asset 코드들을 다운로드 받습니다.
- backup_artifacts: # True / False
python main.py를 실행하고 나면 train_artifacts 혹은 inference_artifacts 와 같은 결과물 폴더가 생성됩니다. backup_artifacts가 True로 돼있다면 ALO는 history 폴더로 artifacts 폴더들을 복사하여 history backup을 진행합니다.