[SKN FAMILY AI CAMP]/월간

🐉 SKN FAMILY AI CAMP 13기 19주차(4개월차) 후기 (2025.07.28 ~ 2025.08.01)

ki-june 2025. 8. 1. 20:40

 

📍 간단 후기

 

 

🏷️ 최종 프로젝트

 

최종 프로젝트 2주 차이다. 생각보다 문서 작업이 많다. 월요일은 문서 작업 하는 데에만 전 팀원이 하루를 썼다. 초안은 그래도 내가 작성해 갔었다. 그래도 뭘 추가하고, 뭘 빼야 되고 하느라 꼬박 하루가 걸린 것이다. 문서 작업의 중요성을 다시 한번 깨닫게 됐다. 지치고 힘들었다. 그렇지만 더 중요한 사실이 있었다. 이제 2주 차라는 것이다. 문서? 작성할 것이 산더미다. 고민할 것도 산더미다. 프로젝트 진행 상황 및 구성을 작성함으로써 상당히 중요한 작업이긴 하다. 또 PM을 맡아서 그런지 몰라도 문서를 작성하면서 프로젝트의 구성이 머릿속으로 정리되는 것 같다. 약간 블로그 쓰는 거랑 비슷한 느낌? 아 생각해 보면 또 그건 아니다. 요지는 개념을 정리한다는 부분에 있어서는 글 쓰는 작업이 도움이 된다는 것이다.

 

🏷️ 코딩테스트 스터디

 

최종 프로젝트가 시작되고, 다들 엄청 바빠지기 시작했다. 그만큼 스터디 시간을 맞추기 힘들어졌다. 그렇지만 우리는 취업을 하기 위해 온거니까! 코테 스터디를 진행한다. 이번 주제는 Greedy Algorithm이었다. 모든 루트를 탐색하는 것이 이 알고리즘에 있어 핵심 개념이다. 난 그래서 while 문을 가장 많이 활용했다. 아니, 먼저 썼다. 많은 문제를 풀지는 않았지만, 이렇게 일주일 단위로 꾸준히 풀다 보면 언젠가 있을 코테 시험에서 멍 때리지 않는 자신을 볼 수 있으리라 다짐하고 문제를 푼다.

 


 

 

📍 좋았던 점

 

 

  • EC2 서버 개설

 

 

(pem 키는 chmod 400으로 설정해야 한다. 그렇지 않으면 위와 같은 오류가 발생한다. 너무 끔찍하다.)

 

이번 최종 프로젝트도 역시 서버를 담당하기로 했다. 서버 작업은 왠지 모르게 재미있다.

 

***

여담으로 군대에서도 이와 비슷한? 체계로 근무했었다. 씨씨티비가 망가지면 항상 불려 가서 씨씨티비 노선 다시 설정하고, 연결 다시 잡고, 씨씨티비 직접 가서 껐다 켜기....

생각해 보니까 서버 엔지니어도 불려 다니면서 일한다고 들었는데, 나 이게 적성인가...??!!!!

***

 

EC2 서버 개설과 동시에 이번에 사용해 볼 PostgreSQL과 연동해 보았다. RDS를 PostgreSQL로 설정한 것이다. PostgreSQL 접속은 다음과 같이 한다.

  • PosgreSQL 연결: psql -h <rds엔드포인트> -U <사용자명> -d <db이름> -p 5432</db이름></rds엔드포인트>

포트번호는 5432이다. MySQL은 3306이었다. 포트번호뿐만 아니라 많이 다른 것을 처음 깨달았다. db도 생성이 안되어있으면 기본 db인 templates1로 들어간 후 새로운 db를 생성해야 한다. 또 show databases; 를 통해 기본 db가 어떤 것이 있는지 확인해보려 해도, 사용하는 언어가 달라서 오류가 났다. 앞으로 PostgreSQL을 탐구해 보며 진행해 볼 필요가 있음을 느꼈다.

 

 

System Architecture

 

위는 이번 최종 프로젝트의 System Architecture이다. 내가 직접(팀원 한 분과 같이) 설계해서 그런지 몰라도 한눈에 알아보기 쉽게 정리된 것 같다. 큼지막하게 어떤 도구를 활용해서 프로젝트를 진행할 것인지 정한 것이다. Front는 React.js를 활용할 것이다. 또 세부적으로 들어가면 다양하게 쓰일 수도 있다. Back에서는 Django Framework를 사용할 것이다. 이는 Gunicorn과 Nginx를 통해 연결되어 Backend를 구성할 것이다. 이를 위해 나는 EC2 환경에서 적절히 연결될 수 있도록 환경 세팅을 진행해야 할 것이다. 또 Backend 서버에서는 DB를 두 가지로 나뉘어 활용할 계획이다.

  • Qdrant: VectorDB로 활용 / RAG에 쓰일 정보들이 들어간다.
  • PostgreSQL: RDB로 활용 / 사용자의 chat history 및 페이지에 들어가는 DB 테이블에 따른 정보들이 들어간다.

이렇게 Backend와 DB는 각각 Docker로 한 번에 묶어 관리하려고 한다. 이 과정도 공부가 필요하다. 역시 최종 프로젝트라 그런지, 공부하면서 해야 될 작업들이 상당하다. 물론 그만큼 얻어갈 것 같아 기대가 된다!!

Runpod을 둔 이유는 이미지 생성 및 3D 이미지와 영상 데이터를 만들 때의 서버 연결 용이다. 일반적인 대답은 우리의 sLLM이 다 대답해 줄 계획이다. 다만, 우리 프로젝트는 "사실상" Vision이 주된 업무라 GPU 환경이 많이 필요할 듯하다.

 

**Runpod: 일정 금액 충전 후 GPU 사용을 할 수 있도록 환경을 제공해 주는 플랫폼

 

 

 

  • LLM 모델 성능 평가

 

exaone 모델 사용 결과

 

 

Upstage-solar

 

화면이 잘 안 보일 것 같아 두 이미지 다 풀샷으로 보여주겠다. 총 5가지 모델을 테스트했다. 모델의 종류는 다음과 같다.

  • gemma-2b-it
  • Exaone-4.0-1.2B
  • kanana-1.5-v-3b-instruct
  • Mistral-7B-instruct-v0.3
  • SOLAR-10.7B-Instruct-v1.0

(왜 이렇게 모델 이름을 자세히 쓰는지 궁금하시다면... 나중을 위한 개인 기록용이라는 점 참고하시길 바란다.)

 

모든 모델의 결과를 보여주기보단, 가장 좋은 모델과 안 좋은 모델의 성능 비교를 하는 것이 분량에 좋다고 생각해 2가지 모델의 성능만 첨부했다. 전 모델이 궁금하시다면, 아래 링크를 통해 요약된 LLM 전 모델의 성능 평가 결과를 참고 바란다.

 

https://github.com/SKNETWORKS-FAMILY-AICAMP/SKN13-FINAL-3TEAM/blob/main/baseline_performance_report.md

 

SKN13-FINAL-3TEAM/baseline_performance_report.md at main · SKNETWORKS-FAMILY-AICAMP/SKN13-FINAL-3TEAM

Contribute to SKNETWORKS-FAMILY-AICAMP/SKN13-FINAL-3TEAM development by creating an account on GitHub.

github.com

 

결론적으로 말하면 Exaone이 채택됐다. 또 결론적으로 말하자면 SOLAR 너,.... 뭐야..?

SOLAR는 한국 기업인 Upstage에서 개발한 LLM 모델이다. 그런데 왜일까, 분명 한국어로 물어봤는데, 영어가 나온다. 또 갑자기 중국어와 일본어? 참으로 놀라운 결과였다.

 

그렇게 채택된 Exaone을 끝으로 우리의 Fine-tuning 대상이 될 LLM을 선정했다. 사실 이 과정이 너무 재밌었다. HuggingFace에서 모델을 써보는 것도, 요즘 핫한 모델을 써보는 것도, 기사로만 접하던 모델들을 직접 Fine-Tuning 해 볼 수 있는 기회가 주어졌다는 것도 너무 기대되고 재미있는 프로젝트이다.

 

 


 

 

📍 부족한 점

 

 

  • 크롤링

크롤링 결과

 

데이터 수집을 시작했다. 처음 저 로그가 떴을 땐 "와 크롤링 꽤 재밌는데?"였다. 페이지 뜨면서 자동화되는 모습에 반했다. 하지만 크롤링은 역시 첫날만 재밌다. 다음날부터 다시 하려니 "와 크롤링 또 하네?"였다.

 

용도에 맞는 데이터를 수집하는 일은 없어서는 안 되는 과정이다. 우리는 RAG도 쓰고, 파인튜닝도 해야 하기 때문이다. 그래서 다음에 해야 할 일은 전처리이다. 아니 그전에, 데이터 수집 및 전처리 결과서 문서 작성이다. 역시나 또 문서 작업을 진행했다. 이걸 쓰고 있는 지금도 문서 작성을 끝낸 후에 다시 작성하고 있다....

 

다음으로 전처리 할 때 json 구조를 맞춰야 한다. 문서 작성을 해보며 생각해 보니, 우리는 모델을 많이 쓰는데 모델 별로 입력받는 json 구조가 다르다는 것을 깨달았다. 모델에 맞춰 json 구조를 작성하려면 직접 전처리를 해보고 정해야 된다고 생각했다. 그래서 vectorDB에 넣는 데이터들에 한해서만 json 구조를 정해놓았다.

 

 

  • Vision Model: stabilityai/stable-diffusion-2-inpainting

 

**이미지 마스킹 작업: 사용자가 원하는 부분에 맞춰 이미지를 수정하는 작업

 

우리는 이미지 마스킹 작업을 기능에 넣기로 했다. 그에 맞춰 사용할(아직 평가 중인) 모델이 stable-diffusion-2-inpainting이다.

 

원본 이미지 마스킹 이미지 시행착오1 시행착오2

 

병아리 이미지를 마스킹해 보았다. 보시다시피 원본 이미지와 괴리감이 많~~~~~이 느껴진다. 처음 입력 데이터를 원본 이미지와 마스킹 이미지(바꾸고 싶은 곳을 흰색, 유지할 곳은 검은색으로 마스킹 후 저장한 이미지) 두 개로 입력한다. 그리고 위에 보이는 시행착오들이 결괏값으로 나온다. pormpt는 "change head to chicken"으로 입력했다. 참혹한 결과였다. 시행착오 1은 웬 출처모를 아저씨가 나왔다. 말도 안 됐다. 시행착오 2는 그나마 뭐가 잘 나왔다. 여기서 깨달은 바는 마스킹 범위이다. 마스킹 범위가 적절치 않아 저런 결과를 내보낸 것이다. 이 깨달음을 안고 다음 평가를 진행했다.

 

 

다음은 (이번 프로젝트에서 하려는) 대망의 자동차다.

 

원본 이미지 마스킹 이미지 범퍼를 삼각형으로 였던 것

 

마스킹 범위를 자동차 전체로 넓혀봤다. 그리고 "make bumper triangle"이라고 입력했다. 그랬더니 너무 웃긴 결과가 도출됐다. 다시 봐도 어이가 없었다. 그래서 결국 깨달은 마스킹 범위는 아래에 설명하겠다.

 

 

깨달은 마스킹 이미지 결과1 결과2

 

글 그대로 깨달은 마스킹 이미지이다. 아예 아무것도 안 보이도록 해야 결과가 잘 나온다. 결과 1은 헤드라이트를 동그라미로 해달라고 했다. 결과 2는 범퍼를 빨간색으로 바꿔달라 했다. 보시는 바와 같이 성능이 나쁘지 않다. 여태껏 이 모델(stable-diffusion-2-inpainting)을 욕한 나를 반성한다...

 

 

 

 


 

📍 성찰 및 마무리

 

4개월 차다. 최종 프로젝트가 시작되다 보니, 사실상 이제 마무리 단계이다. 지금까지의 4개월은 나에게 빠르진 않았다. 그렇다고 느리지도 않았다. 배운 내용의 심화과정이라고 생각된다. 최종 프로젝트가 본격적으로 시작된 건 사실상 이번 주다. 저번 주차에 기대했던 대로 모델 성능 평가하는 것부터 재밌다. 그래도 공부해야 될 건 너무 많아 보인다. 기존에는 길어봤자 5일씩 짧게 프로젝트를 진행했었다. 다만 이번에는 8주 동안 진행되니, 해야 될 작업이 많고 신경 써야 될 부분이 잡다하다. 빨리 끝내고 취업하고 싶다. 빨리 공부 끝내고 취업하고 싶다는 생각이 드는 최종 프로젝트 초반이다.

 

앞으로 있을 최종 프로젝트에 따라 내 계획도 바뀔 것이다. 부족한 부분이 많아 공부를 더 하며 취업준비를 할 계획이긴 하다. 그래도 앞으로 어떻게 할지 공고를 찾아보며, 자소서를 어느 정도 써보며, 지원도 해보며 발전해 나가는 사람이 되어야겠다.

 

오랜만에 외쳐본다. 다들 취뽀 합시다!