Machine Learning(ML) 기술이 발전하면서 빠르게 기존 시스템과 통합이 이루어 지고 있다. LLM도 단순히 사람들이 ChatGPT와 같은 서비스를 사용하는 것을 넘어서서 Cloud를 통해서 여러 시스템과 통합이 이루어 지고 있다. 아래 그림데로 많은 ML 시스템에서 실제로 학습이나 예측에 사용되는 코드가 극히 일부에 불과하다는 것이 이미 알려져 있다[1]. 이러한 관점에서 기존의 여러 기술들이 ML 기술들과 통합되어야 한다. 이러한 관점에서 숨겨진 기술 부채(Hidden Technical Debt in Machine Learning)가 많을 수 있다.

ML 시스템에서 ML Code(검은색 부분)

 

 

특히, 기존의 성능과 관련된 항목에서도 이러한 부분을 살펴 볼 수 있다. 여기서는 성능 관점의 지연 시간(Latency)와 규모확장성(Scalability)에 대해서 잠시 살펴 보자.

 

기존 기술의 경우에도 Cloud를 기반으로 하게 되면 최종 사용자의 위치에 따라서 실재 연산을 처리하는 서버의 위치(Region)은 중요한 부분 중에 하나이다. 간단히 말하자면, 한국에 있는 사용자가 미국에 있는 서버에 접속해야 하는 경우라면 결국 요청을 미국 서버에 보내고 처리한 결과를 다시 한국에 있는 사용자에게 보내려면 시간이 걸릴 수 밖에 없다. 그렇다면, LLM의 Foundation Model을 운영하는 Cloud의 Region을 최종 사용자에 맞게 최적화 할 필요가 있다.

 

규모 확정성(Scalability)의 경우도 사용자가 많아 지면 하나의 LLM 인스턴스로 처리하는 것은 문제가 될 수 있을 것이다. 이것도 결국에는 Load balancing 이슈에 해당한다고 할수 있다. 결국 이러한 전통적인 문제는 기존과 같이 요청을 잘 분배해서 처리하는 구조가 필요하다[2].

 

참고 문헌

[1] D. Sculley et al., "Hidden Technical Debt in Machine Learning Systems",  https://papers.neurips.cc/paper/5656-hidden-technical-debt-in-machine-learning-systems.pdf

[2] https://aws.amazon.com/ko/blogs/tech/multi-rag-and-multi-region-llm-for-chatbot/

 

 

[1]의 4장 초기 이해에서는 소스 코드의 초기 분석을 위한 세 가지 주요 패턴을 제시한다. 퍼시스턴트 데이터 분석하기, 디자인 추측하기, 예외적인 엔터티 연구하기가 그것이다. 각 패턴은 리엔지니어링 프로젝트의 성공적인 진행을 위한 필수적인 단계이다.

퍼시스턴트 데이터 분석하기

  • 의도: 데이터베이스 시스템 내부에 보관해야 할 중요한 개체를 식별하고 이해한다.
  • 문제: 귀중한 데이터는 외부 저장 장치에 보관되어야 하지만, 정리되지 않은 데이터와 혼재될 수 있다.
  • 해결:
    1. 모든 테이블 이름을 열거하여 초기 모델을 준비.
    2. 각 테이블에 대해 열 이름을 수집하고 속성으로 추가.
    3. 후보 키 및 외래 키 관계를 분석.
    4. 상속 관계를 유추하여 클래스 다이어그램을 도출.
    5. 데이터 샘플과 SQL 문을 통해 검증.
  • 장점: 팀 커뮤니케이션 개선, 가치 있는 데이터 추출.
  • 단점: 범위 제한, 정크 데이터 포함, 전문 지식 필요.

디자인 추측하기

  • 의도: 소스코드에서 디자인 개념을 복구하여 가설을 검증하고 구체화한다.
  • 문제: 많은 디자인 개념이 있으며 프로그래밍 언어에서 이를 표현하는 방법이 다양하다.
  • 해결:
    1. 초기 가설 역할을 하는 클래스 다이어그램 작성.
    2. 클래스, 연산, 속성 이름을 소스 코드에서 찾아 가설 검증.
    3. 불일치를 기반으로 클래스 다이어그램을 조정.
    4. 만족스러운 다이어그램을 얻을 때까지 반복.
  • 장점: 대규모 객체 지향 프로그램에 유리, 저렴한 리소스 투자.
  • 단점: 전문 지식 필요, 시간이 많이 소요됨.

예외적인 엔터티 연구하기

  • 의도: 시스템에서 예외적인 엔터티를 식별하고 분석하여 전체 구조를 이해한다.
  • 문제: 예외적인 엔터티는 일반적인 패턴을 따르지 않으며, 특별한 처리가 필요하다.
  • 해결:
    1. 예외적인 엔터티를 식별.
    2. 해당 엔터티의 특성과 동작을 분석.
    3. 다른 엔터티와의 관계를 이해하여 시스템 전체의 구조를 파악.
  • 장점: 시스템의 비정상적인 부분을 이해하고 해결하는 데 도움.
  • 단점: 예외적인 상황을 처리하기 위한 추가 분석이 필요.

이 세 가지 패턴은 소프트웨어 리엔지니어링 프로젝트의 초기 분석 단계에서 시스템을 이해하고 문서화하는 데 필수적인 방법들이다. 이를 통해 프로젝트의 안정적인 기반을 구축하고, 성공적인 진행을 보장할 수 있다. [2]에서 번역된 내용을 찾을 수 있다.

 

참고 문헌

[1] Serge Demeyer et al., "Object-oriented Reengineering Patterns"

[2] https://github.com/blcktgr73/OORP/blob/master/OORP_latest.pdf

[1]에서는 [2]에서 소개한 LLM Application의 Architecture를 위한 추상화 모델을 소개했다. [2]에서는 LLM 앱을 직접 구축하는 다섯 단계를 소개하고 있다. 그 내용을 살펴 보자.

 

  • 문제에 집중: 처음에는 하나의 문제에 집중한다. 문제는 충분히 구체적이어서 빠르게 반복하고 진행할 수 있지만, 사용자를 감탄하게 할 정도로 충분히 큰 문제여야 한다.
  • 올바른 LLM 선택: 특정 과제에 맞게 사전 훈련된 LLM을 선택한다. 상업적 사용이 가능한 라이센스가 있는 모델을 사용해야 할 수도 있다.
  • LLM 맞춤화: LLM을 특정 작업에 맞게 조정하기 위해 인컨텍스트 학습, 인간 피드백에서의 강화학습(RLHF), 미세조정 등의 기술을 사용할 수 있다.
  • 앱 아키텍처 설정: 사용자 입력, 입력 풍부화 및 프롬프트 구성 도구, 효율적이고 책임 있는 AI 도구 등 필요한 구성 요소를 설정한다.
  • 온라인 평가 실시: 앱의 성능을 평가하여 사용자와의 상호작용 중에 모델의 출력 품질을 평가한다. 또한, 다양한 도구를 활용하여 사용자의 요구에 맞는 적절한 반응을 생성할 수 있도록 LLM을 최적화하고, 실시간 사용자 피드백을 통해 앱을 지속적으로 개선한다.

 

 

참고 문헌

[1] "Large Language Model의 추상화", https://technical-leader.tistory.com/127

[2] Nicole Choi, "The architecture of today’s LLM applications", https://github.blog/2023-10-30-the-architecture-of-todays-llm-applications/?fbclid=IwAR2daV0oLZAU8ZS45SeL5Wh7aVDcscJBL1hsEBBRVXW2rywoeqd6AnfwzJg

+ Recent posts