본문으로 건너뛰기
버전: docs v25.02

AI Contents 없이 AI Solution 만들기

Updated 2024.05.05

AI Contents를 그대로 활용하여 내가 풀고자 하는 문제에 대한 적용 범위나 성능에 한계를 느낄 경우, 사용자가 새로운 AI Contents를 개발할 수 있습니다. 이때 ALO에서 제공하는 '타이타닉' 예제를 참고 및 활용하여 나만의 AI Contents 를 제작할 수 있고, Asset 개발에 익숙해지면 Asset Template 상태에서 처음부터 개발도 가능합니다.

ALO에서 제공하는 '타이타닉' 예제는 신규 AI 콘텐츠를 효과적으로 개발하는 데 필요한 실용적인 가이드라인을 제시합니다. 사용자는 이 예제를 통해 AI Contents 제작 과정을 이해하고 자신의 과제에 적용하여, 빠른 시간 안에 AI Contents를 구현할 수 있게 됩니다.

Topics



타이타닉 설치

타이타닉 예제는 학습의 경우 input - train, 추론의 경우 input - inference - output 과 같은 형태로 Asset들이 ML pipeline을 형성하며, RandomForestClassifier 모델을 train pipeline에서 저장하고 inference pipeline에서 load하는 구조로 동작합니다.

먼저 ALO의 main.py가 존재하는 경로에서 타이타닉 soution을 아래와 같이 설치합니다.

git clone https://github.com/mellerikat/titanic.git solution


타이타닉 설명

타이타닉 예제의 solution/sample_data를 열어보면 아래와 같이 train_data와 inference_data가 존재하고, 각각에는 train.csv와 test.csv가 1개씩 들어있습니다.

./solution/
└ sample_data
└ train_data
└ train.csv
└ inference_data
└ test.csv

└ experimental_plan.yaml

각각의 csv 파일은 타이타닉 호 승객의 정보들을 담고 있으며, train.csv에는 학습 Label로 사용될 컬럼인 Survived 라는 컬럼을 하나 더 가지고 있습니다. Survived의 값이 1인 경우 해당 승객은 생존했다는 의미이고, 0인 경우 해당 승객은 생존하지 못했다는 의미입니다. titanic git을 solution 폴더로 다운로드 받고나서 python main.py 실행 시, assets라는 폴더가 생성되고 해당 폴더 하위에는 solution/experimental_plan.yaml에 구성된대로 input, train, inference, output 라는 이름의 Asset 폴더들이 설치됩니다. 각각의 Asset은 크게 다음과 같은 역할을 하게 됩니다.

- input

input Asset은 experimental_plan.yaml의 external_path의 load_train_data_path 혹은 load_inference_data_path에 적힌 데이터 폴더 경로로부터 ALO가 input/train (혹은 inference) 폴더 하위로 데이터 폴더를 복사해오면, 해당 데이터 폴더들이 존재하는 경로를 self.asset.get_input_path() API를 통해 받아와서, 데이터를 실제로 읽어들이는 동작을 진행하게 됩니다. 기본 input path 하위에는 사용자가 external path에 작성한 경로의 마지막 폴더 명과 같은 폴더가 존재하며 사용자는 해당 경로로 부터 data를 읽게끔 코드를 작성합니다.

타이타닉 예제에서는 그 다음, csv파일 1개를 읽어들여서 dataframe을 만든 후, self.data라는 dict형 변수에 self.data['dataframe0']와 같은 key를 만들어서 dataframe을 할당합니다. 또한 self.config라는 dict형 변수에는 experimental_plan.yaml의 user_paramters의 args 부분에 적힌 x_columns, y_column를 담아서 다음 Asset으로 넘겨주게 됩니다. 다음 Asset으로 넘겨주는 동작은 data, config에 대해서 각각 self.asset.save_data(self.data), self.asset.save_config(self.config) 라는 API를 통해 진행됩니다.

Note : 특정 Asset에서 이전 Asset으로부터 넘겨받은 data와 config의 key는 삭제하면 ALO에서 에러를 발생시킵니다. 이는 각 Asset의 개발자가 서로 다를 수 있기 때문에 이전 Asset에서 만들어낸 산출물을 오염시키지 않기 위해서 입니다.

- train

타이타닉 예제의 train Asset에서는 self.asset.load_data() API를 통해 input Asset으로부터 넘겨 받은 data를 load하고, self.asset.load_config() API를 통해 input Asset으로부터 넘겨 받은 config를 load합니다. 이후 dataframe에서 사용할 x_columns와 y_column을 추출하여 간단한 scikit-learn RandomForestClassifier 모델을 학습하게 됩니다. 모델의 학습 및 추론 동작을 정의한 TITANIC Class는 titanic_source.py 에 정의되어 있으며 이는 train Asset 뿐 아니라 inference Asset에서도 동일하게 사용하게 됩니다.

RandomForestClassifier의 hyper-parameters는 여러가지 있지만, 그중 Tree 개수를 의미하는 n_estimators라는 파라미터를 experimental_plan.yaml의 args로 지정해놓았습니다. train Asset에서는 self.asset.load_args() API를 통해 해당 argument를 load하여 모델 파라미터로 넣어줄 수 있습니다.

학습이 완료된 이후에는 random_forest_model.pkl이라는 모델 파일을 모델 경로에 넣어줍니다. 모델 경로는 self.asset.get_model_path() 라는 API를 통해 받아올 수 있으며, 해당 경로에 파일을 저장해줍니다. 한편 self.asset.save_info(), self.asset.save_warning(), self.asset.save_error() 등의 API를 통해 logging 및 error 처리 또한 진행할 수 있습니다.

- inference

inference Asset에서는 대부분 train Asset과 유사한 흐름으로 진행되지만, 학습이 아닌 추론 함수를 호출하여 예측된 분류 값인 predicted_class와 해당 예측에 대한 확률 값인 predict_proba를 얻게 됩니다. 이후 output Asset에서 inference summary를 만들기 위해, data에 output이라는 key를 만들어 원본 input dataframe과 예측된 predicted_class dataframe을 concatenate 한 것을 할당해주고 output Asset으로 넘겨주게 됩니다. predict_proba 또한 data에 probability라는 key를 만들어 할당해주고 output Asset으로 넘겨줍니다.

Note 왜 predicted_class에 원본 input dataframe을 굳이 concatenate 해주는가? 추후 output Asset에서는 self.asset.get_output_path()를 통해 얻게된 output 경로에 output.csv를 저장하게 됩니다. 해당 output.csv는 추후 EdgeConductor UI에서 추론 결과로 보여질 table 형태의 데이터 파일이며 AI Solution 사용자는 해당 추론 결과물들을 그대로 이용하여 재학습 요청을 진행하게 됩니다. 즉 추론 결과 output 파일이 또 다시 학습 input 파일로 활용될 수 있기 때문에, 재학습을 지원하기 위해 원본 input 데이터의 형태는 그대로 유지하여 concatentate 해준 것 입니다.

- output

output Asset에서는 크게 output 파일을 저장하고, inference summary를 만드는 행위를 진행합니다. 먼저 output 파일은 self.asset.get_output_path()로 받아온 경로에 저장해줍니다. 이때 output 파일은 csv 파일만 1개 있거나 jpg(혹은 png, svg) 파일만 1개 있거나, 각각 1개씩 총 2개 있거나 하는 3가지 중 하나의 형태로 존재해야 합니다. 그 외의 output 파일 구성 시에는 ALO가 에러를 발생시킵니다. 이는 EdgeConductor에서 재학습을 지원하기 위한 제약입니다.

한편, 만약 추후 외부 Dashboard 혹은 Data Storage로의 연결이 필요하여 extra output 파일을 여러개 저장 해야할 때는 self.asset.get_extra_output_path()로 받아온 경로에 extra output 파일들을 저장해주면 됩니다. 또한, self.asset.save_summary() API를 통해 inference summary 파일을 만들어줍니다. 이 파일 또한 추후 Mellerikat 플랫폼 상에서 추론 결과를 확인하는 등의 동작에 필요한 파일이므로 필수적으로 생성해줍니다. API에 대한 설명은 Appendix : What is ALO API 페이지를 참고합니다.  



새 AI Solution 만들기

타이타닉 예제에 대한 이해가 어느정도 되었다면, 아래 페이지들의 순서에 따라 새 AI Contents 개발을 진행합니다.