콘텐츠로 건너뛰기

AI 엔지니어링 스택

AI 스택의 세 가지 계층, AI 엔지니어링이 ML 엔지니어링이나 풀스택 엔지니어링과 어떻게 다른지, 그리고 그 외 다양한 내용을 다룹니다. 이 글은 Chip Huyen의 저서 『AI Engineering』에서 발췌한 내용입니다.

1. AI 엔지니어링 스택의 세 가지 계층

모든 AI 애플리케이션 스택은 세 가지 계층으로 구성됩니다: 애플리케이션 개발, 모델 개발, 그리고 인프라입니다. 실제로 AI 애플리케이션을 개발할 때는 보통 가장 상위 계층인 애플리케이션 개발부터 시작해, 필요에 따라 그 아래 계층으로 내려가며 작업하게 됩니다.

애플리케이션 개발

요즘은 다양한 AI 모델이 손쉽게 활용 가능해지면서, 누구나 이를 이용해 애플리케이션을 만들 수 있게 되었습니다. 지난 2년 동안 특히 이 영역에서 가장 많은 변화가 일어났고, 지금도 빠르게 진화하고 있습니다. 애플리케이션 개발에서는 모델에 적절한 프롬프트와 필요한 컨텍스트를 제공하는 것이 핵심입니다. 이 과정에서는 꼼꼼하게 성능을 검토해야 하며, 뛰어난 애플리케이션일수록 사용자에게 좋은 인터페이스를 제공해야 합니다.

모델 개발

이 계층은 모델을 개발하는 데 필요한 다양한 도구와 프레임워크를 제공합니다. 여기에는 모델링, 학습, 파인튜닝(fine-tuning), 추론 최적화 등을 위한 프레임워크가 포함됩니다. 모델 개발에서 데이터는 핵심적인 역할을 하기 때문에, 데이터셋 엔지니어링 역시 중요한 부분을 차지합니다. 또한, 모델 개발 과정에서도 꼼꼼하게 성능을 검토해야 합니다.

인프라

가장 하위 계층인 인프라는, 모델을 실제 서비스에 배포하고 운영하는 일, 데이터와 컴퓨팅 자원을 효율적으로 관리하는 일, 그리고 시스템을 모니터링하는 다양한 도구와 시스템을 포함합니다.

아래에는 이 세 가지 계층과 각 계층별 주요 역할의 예시가 정리되어 있습니다:

그림 1-14. AI 엔지니어링 스택의 세 가지 계층
그림 1-14. AI 엔지니어링 스택의 세 가지 계층

파운데이션 모델(Foundation Model)의 등장 이후 생태계가 어떻게 변화했는지 파악하기 위해, 2024년 3월 기준으로 GitHub에서 별(star)이 500개 이상인 AI 관련 저장소를 모두 검색해봤습니다. GitHub이 워낙 널리 쓰이고 있기 때문에, 이 데이터가 AI 생태계를 이해하는 데 좋은 지표가 될 수 있다고 판단했습니다. 분석에는 애플리케이션 개발 계층과 모델 개발 계층의 산출물인 애플리케이션 저장소와 모델 저장소도 함께 포함했습니다. 총 920개의 저장소가 확인되었고, 그림 1-15에는 각 카테고리별 저장소 누적 개수가 월별로 정리되어 있습니다.

그림 1-15. 시간에 따른 카테고리별 누적 Repo 개수의 변화 추이
그림 1-15. 시간에 따른 카테고리별 누적 Repo 개수의 변화 추이

데이터를 보면, Stable Diffusion과 ChatGPT가 등장한 이후인 2023년에 AI 관련 도구의 수가 크게 증가한 것을 알 수 있습니다. 특히 그 해에는 애플리케이션과 애플리케이션 개발 분야에서 가장 큰 폭의 성장이 나타났습니다. 인프라 계층도 다소 성장하긴 했지만, 다른 계층에 비하면 증가폭이 크지 않았습니다. 이는 자연스러운 현상입니다. 모델과 애플리케이션이 빠르게 변화하고 있지만, 자원 관리, 서비스 운영, 모니터링 등 인프라의 핵심적인 역할은 예전과 크게 달라지지 않았기 때문입니다.

다음으로 넘어가 보겠습니다. 파운데이션 모델을 둘러싼 열기와 창의성은 그 어느 때보다도 높지만, AI 애플리케이션을 구축하는 기본 원칙들은 크게 변하지 않았습니다. AI 애플리케이션이 실제 비즈니스 현장에서 문제를 해결하려면, 비즈니스 지표와 머신러닝 지표를 연결하고 체계적으로 실험을 진행하는 것이 여전히 중요합니다. 전통적인 머신러닝 엔지니어링에서는 다양한 하이퍼파라미터를 조정하며 실험을 진행하지만, 파운데이션 모델을 활용할 때는 여러 모델, 프롬프트, 검색 알고리즘, 샘플링 변수 등을 실험합니다. 또한, 모델을 더 빠르고 저렴하게 운영하는 것도 여전히 중요한 과제입니다. 마지막으로, 실제 운영 데이터를 활용해 애플리케이션을 반복적으로 개선할 수 있도록 피드백 루프를 구축하는 것 역시 매우 중요합니다.

즉, 지난 10년간 ML 엔지니어들이 쌓아온 경험과 노하우는 여전히 유효하다는 뜻입니다. 이렇게 축적된 지식과 실전 사례 덕분에, 누구나 AI 애플리케이션 개발을 시작하기가 한결 쉬워졌습니다. 다만, 이러한 기본 원칙 위에 AI 엔지니어링만의 새로운 혁신들이 더해지고 있다는 점이 특징입니다.

2. AI 엔지니어링과 ML 엔지니어링의 차이

AI 애플리케이션 구축의 기본 원칙이 여전히 유효하다는 점은 확실히 반가운 일이지만, 동시에 무엇이 달라졌는지도 이해하는 것이 중요합니다. 기존 플랫폼을 새로운 AI 활용 사례에 맞게 전환하려는 팀이나, 변화하는 시장에서 경쟁력을 유지하기 위해 어떤 역량을 키워야 할지 고민하는 개발자들에게 이런 변화는 큰 도움이 됩니다.

큰 틀에서 보면, 오늘날 파운데이션 모델을 활용해 애플리케이션을 만드는 방식은 기존의 전통적인 ML 엔지니어링과 세 가지 주요 측면에서 다릅니다.

  1. 파운데이션 모델이 없던 시절에는 애플리케이션을 만들 때 직접 모델을 학습시켜야 했습니다. 하지만 AI 엔지니어링에서는 이미 다른 누군가가 학습시킨 모델을 가져다 씁니다. 그래서 AI 엔지니어링은 모델을 새로 만들거나 학습시키는 것보다는, 이미 만들어진 모델을 우리 서비스나 목적에 맞게 효과적으로 활용하는 데 더 집중하게 됩니다.
  2. AI 엔지니어링에서는 기존의 전통적인 ML 엔지니어링에 비해 훨씬 더 크고, 더 많은 컴퓨팅 자원을 소모하며, 레이턴시(지연 시간)도 더 높은 모델을 다루게 됩니다. 그래서 효율적인 학습과 추론 최적화에 대한 압박이 훨씬 커졌습니다.
    이처럼 컴퓨팅 파워를 많이 요구하는 모델이 늘어나면서, 많은 기업들이 예전보다 훨씬 더 많은 GPU를 필요로 하고, 더 큰 컴퓨트 클러스터를 운영해야 하는 상황이 됐습니다. 그만큼 GPU와 대규모 클러스터를 제대로 다룰 수 있는 엔지니어에 대한 수요도 크게 늘고 있습니다. 실제로 한 포춘 500대 기업의 AI 책임자는, 자기 팀이 GPU 10대는 다룰 줄 알지만 1,000대를 다루는 방법은 모른다고 말하기도 했습니다.
  3. AI 엔지니어링에서는 정해진 답이 없는, 열린 형태의 결과를 만들어내는 모델을 다루는 경우가 많습니다. 이런 모델들은 다양한 작업에 유연하게 활용할 수 있다는 장점이 있지만, 그만큼 결과를 평가하기가 훨씬 더 까다롭습니다. 그래서 AI 엔지니어링에서는 평가가 훨씬 더 중요한 과제로 떠오르고 있습니다.

정리하면, AI 엔지니어링은 모델 자체를 개발하는 데 집중하는 ML 엔지니어링과 달리, 이미 만들어진 모델을 어떻게 잘 활용하고 평가할지에 더 초점을 둡니다. 앞서 여러 번 언급한 ‘모델 맞춤화(model adaptation)’이라는 개념에 대해, 본격적으로 넘어가기 전에 정확히 짚고 넘어가고자 합니다.일반적으로 모델 맞춤화 방법은, 모델의 가중치를 바꿔야 하는지 여부에 따라 두 가지로 나눌 수 있습니다.

프롬프트 기반 기법은 프롬프트 엔지니어링을 포함해 모델의 가중치를 건드리지 않고 모델을 맞춤화(model adaptation)하는 방법입니다. 즉, 모델 자체를 바꾸는 대신 원하는 지시나 컨텍스트를 입력해 모델이 적절한 결과를 내도록 유도하는 방식입니다. 프롬프트 엔지니어링은 비교적 쉽게 시작할 수 있고, 많은 데이터를 필요로 하지 않는다는 장점이 있습니다. 실제로 많은 성공적인 AI 애플리케이션들이 프롬프트 엔지니어링만으로도 만들어졌습니다. 사용법이 간단하다 보니 여러 모델을 자유롭게 실험해볼 수 있고, 의외로 특정 애플리케이션에 아주 잘 맞는 모델을 발견할 가능성도 높아집니다. 다만, 프롬프트 엔지니어링만으로는 복잡한 작업이나 성능 기준이 높은 애플리케이션에는 한계가 있을 수 있습니다.

반면, 파인튜닝은 모델의 가중치를 실제로 수정하는 방식입니다. 즉, 모델 자체를 바꿔서 맞춤화(model adaptation)하는 것이죠. 일반적으로 파인튜닝은 프롬프트 엔지니어링보다 더 복잡하고 많은 데이터를 필요로 하지만, 그만큼 모델의 품질이나 속도, 비용 측면에서 큰 개선 효과를 얻을 수 있습니다. 특히, 학습 과정에서 한 번도 다뤄보지 않은 새로운 작업에 모델을 적용하려면, 이렇게 가중치를 직접 변경하는 방법이 필수적입니다.

이제 AI 엔지니어링 시대에 애플리케이션 개발과 모델 개발 계층이 각각 어떻게 달라졌는지 좀 더 자세히 살펴보겠습니다. 먼저 ML 엔지니어들이 익숙한 부분부터 시작할 텐데요, 이 섹션에서는 AI 애플리케이션을 개발하는 과정에서 어떤 단계와 절차들이 있는지 전체적인 흐름을 소개합니다.

모델 개발

모델 개발은 전통적인 ML 엔지니어링과 가장 밀접하게 연관된 계층입니다. 이 영역의 핵심 역할은 모델링과 학습, 데이터셋 엔지니어링, 그리고 추론 최적화가 중심이 됩니다. 평가 역시 중요한데, 많은 사람들이 애플리케이션 개발 단계에서 먼저 접하게 되기 때문입니다.

모델링과 학습

모델링과 학습은 어떤 모델 구조를 설계하고, 이를 실제로 학습시키며, 필요에 따라 파인튜닝까지 진행하는 전 과정을 의미합니다. 이 분야에서 대표적으로 사용되는 도구로는 Google의 TensorFlow, Hugging Face의 Transformers, Meta의 PyTorch 등이 있습니다.

ML 모델을 개발하려면 전문화된 머신러닝 지식이 필요합니다. 여기에는 클러스터링(clustering), 로지스틱 회귀(logistic regression), 결정 트리(decision trees), 협업 필터링(collaborative filtering) 등 다양한 머신러닝 알고리즘에 대한 이해는 물론, 피드포워드(feedforward), 순환 신경망(recurrent), 합성곱 신경망(convolutional), 트랜스포머(transformer)와 같은 신경망 아키텍처까지 폭넓게 알아야 합니다. 또한 경사하강법(gradient descent), 손실 함수(loss function), 정규화(regularization) 등 모델이 학습되는 원리를 이해하는 것도 필수적입니다.

파운데이션 모델이 널리 보급되면서, 이제 AI 애플리케이션을 만들기 위해 꼭 머신러닝에 대한 깊은 지식이 필요한 시대는 아닙니다. 실제로 저는 경사하강법 같은 개념에는 전혀 관심이 없지만, 멋진 AI 서비스를 성공적으로 만들어낸 개발자들을 많이 봤습니다. 그렇다고 해서 머신러닝 지식이 쓸모없어진 것은 아닙니다. 오히려 이런 지식이 있으면 사용할 수 있는 도구의 폭이 훨씬 넓어지고, 모델이 기대한 대로 동작하지 않을 때 문제를 진단하고 해결하는 데 큰 도움이 됩니다.

학습, 사전 학습, 파인튜닝, 그리고 후속 학습의 차이

학습(training)은 언제나 모델의 가중치를 변경하는 과정을 포함하지만, 모든 가중치 변화가 곧 학습을 의미하는 것은 아닙니다. 예를 들어, 모델 가중치의 정밀도를 낮추는 양자화(quantization)는 기술적으로는 가중치 값을 바꾸지만, 일반적으로 학습 과정으로 보진 않습니다.

실제로 “학습”이라는 용어는 사전 학습(pre-training), 파인튜닝(fine-tuning), 후속 학습(post-training) 등 다양한 단계에서 폭넓게 쓰입니다. 이 용어들은 각각 서로 다른 과정을 가리키지만, 문맥에 따라 통칭해서 “학습”이라고 부르기도 합니다.

사전 학습(Pre-training)은 모델을 처음부터 학습시키는 것을 의미합니다. 이때 모델의 가중치는 무작위로 초기화된 상태에서 시작합니다. 대규모 언어 모델(LLM)의 경우, 사전 학습은 주로 텍스트 완성(text completion)을 목표로 진행됩니다. 모든 학습 단계 중에서도 사전 학습은 압도적으로 가장 많은 컴퓨팅 자원과 데이터를 소모합니다. 예를 들어 InstructGPT 모델의 경우, 사전 학습에 전체 자원의 98%가 투입됩니다. 또한 이 과정은 시간도 매우 오래 걸리며, 사소한 실수 하나가 막대한 재정적 손실을 초래하거나 프로젝트를 몇 주​, 길게는 몇 달까지 지연시킬 수 있습니다. 이처럼 자원 집약적인 특성 때문에, 사전 학습은 소수의 전문가들만이 제대로 다룰 수 있는 고급 기술로 인식되고 있습니다. 반면, 대규모 모델 사전 학습에 숙련된 인력은 시장에서 극히 희귀하며 [이들의 연봉은 천문학적 수준으로 치솟는 경우가 많습니다].

파인튜닝(fine-tuning)은 이미 한 번 학습된 모델을 기반으로 추가 학습을 진행하는 과정을 말합니다. 이때 모델의 가중치는 이전 학습에서 얻은 값을 그대로 이어받아 사용합니다. 사전 학습을 통해 모델이 이미 기본적인 지식을 갖추고 있기 때문에, 파인튜닝 단계에서는 사전 학습에 비해 훨씬 적은 데이터와 컴퓨팅 자원만으로도 원하는 결과를 얻을 수 있습니다.

후속 학습(post-training)은 많은 사람들이 사전 학습(pre-training) 이후에 모델을 추가로 학습시키는 과정을 일컫는 용어로 사용합니다. 개념적으로는 파인튜닝(fine-tuning)과 거의 동일하며, 실제로 두 용어를 혼용해서 쓰는 경우도 많습니다. 다만, 상황에 따라 두 용어를 구분해 쓰기도 하는데, 주로 모델 개발자가 특정 목적을 위해 후속 학습을 진행할 때 ‘포스트 트레이닝’이라고 부르기도 합니다. 예를 들어, OpenAI가 모델을 출시하기 전에 사용자의 지시를 더 잘 따르도록 추가 학습을 시키는 경우가 바로 포스트 트레이닝에 해당합니다.

애플리케이션 개발자가 모델을 추가로 학습시키는 경우에는 주로 파인튜닝(fine-tuning)이라고 부릅니다. 예를 들어, OpenAI에서 이미 포스트 트레이닝을 거친 모델을 가져와, 우리 서비스에 맞게 다시 학습시키는 과정이 바로 파인튜닝입니다.

사전 학습(pre-training)과 포스트 트레이닝(post-training)은 하나의 연장선상에 있다고 볼 수 있으며, 실제로 두 과정에서 사용하는 방법이나 도구도 상당히 비슷합니다.

[주석: 혹시 “사전 학습(pre-training)”과 “후속 학습(post-training)”이라는 용어가 너무 단조롭다고 느낀다면, 당신만 그런 게 아닙니다. AI 연구자들이 여러 방면에서 뛰어난 건 사실이지만, 작명 센스만큼은 예외인 것 같습니다. “대규모 언어 모델(large language model)”이라는 용어도 사실 과학적으로 명확하다고 보기 어렵죠. ‘대규모’라는 표현 자체가 애매하니까요. 그리고 제발 논문 제목에 “X is all you need” 같은 문구는 그만 좀 썼으면 하는 바람입니다.]

일부 사람들은 프롬프트 엔지니어링까지도 “학습(training)”이라고 부르곤 하는데, 사실 이건 정확한 표현은 아닙니다. 예를 들어, 제가 본 Business Insider 기사에서는 한 저자가 ChatGPT에게 자신의 어린 시절 모습을 흉내 내도록 “학습시켰다”고 표현했더라고요. 실제로는 자신의 어린 시절 일기 내용을 ChatGPT에 입력한 것뿐이었습니다. 일상적인 대화에서는 이렇게 “학습시켰다”고 말해도 어색하지 않지만, 기술적으로 보면 이런 방식은 모델에게 맥락(Context)을 입력해 원하는 행동을 유도하는 프롬프트 엔지니어링(prompt engineering)에 해당합니다. 비슷하게, 프롬프트 엔지니어링을 “파인튜닝(fine-tuning)”이라고 부르는 경우도 종종 볼 수 있습니다.

데이터셋 엔지니어링

데이터셋 엔지니어링은 AI 모델을 학습시키거나 맞춤화(model adaptation)하는 데 필요한 데이터를 수집, 생성, 그리고 라벨링하는 모든 과정을 의미합니다.

전통적인 머신러닝에서는 대부분의 활용 사례가 ‘정답이 정해진’ 형태였습니다. 예를 들어, 스팸 분류처럼 결과가 “스팸” 또는 “스팸 아님” 두 가지로만 나뉘는 문제는 닫힌 형태(close-ended)라고 할 수 있습니다. 하지만 파운데이션 모델은 훨씬 더 열린 형태(open-ended)로, 결과가 무한하게 다양해질 수 있습니다. 예를 들어, 이메일이 스팸인지 아닌지 판단하는 것보다, 에세이를 직접 작성하거나 창의적인 답변을 생성하는 작업이 훨씬 더 어렵고, 이런 열린 형태의 데이터에 라벨을 다는 것은 훨씬 더 까다롭습니다. 그래서 데이터 라벨링은 AI 엔지니어링에서 훨씬 더 큰 도전 과제입니다.

또 다른 차이점은, 전통적인 머신러닝에서는 주로 표 형태의 정형 데이터(tabular data)를 다루는 반면, 파운데이션 모델은 비정형 데이터(unstructured data)를 주로 활용한다는 점입니다. AI 엔지니어링에서는 데이터 처리의 초점이 중복 제거, 토큰화(tokenization), 컨텍스트 검색(context retrieval), 그리고 품질 관리(예: 민감 정보나 유해한 데이터를 걸러내는 작업) 등으로 옮겨가고 있습니다.

최근에는 모델 자체가 점점 범용 상품처럼 취급되면서, 데이터가 차별화의 핵심이 되고 있다는 주장도 많아졌습니다. 이 때문에 데이터셋 엔지니어링의 중요성은 그 어느 때보다 커졌습니다. 필요한 데이터의 양은 어떤 맞춤화(model adaptation) 기법을 쓰느냐에 따라 달라집니다. 모델을 처음부터 학습시키려면 가장 많은 데이터가 필요하고, 파인튜닝은 이보다 적은 양, 프롬프트 엔지니어링은 훨씬 적은 데이터로도 충분합니다.

데이터가 얼마나 필요하든, 데이터에 대한 전문성은 모델을 분석할 때 매우 유용합니다. 모델이 어떤 데이터를 학습했는지 살펴보면, 그 모델의 강점과 한계를 이해하는 데 큰 도움이 됩니다.

추론 최적화

추론 최적화는 모델이 더 빠르고 저렴하게 동작하도록 만드는 작업을 의미합니다. 추론 최적화는 전통적인 ML 엔지니어링에서도 항상 중요한 과제였습니다. 사용자 입장에서는 더 빠른 모델을 마다할 이유가 없고, 기업 입장에서는 추론 비용이 낮아질수록 이득이 크기 때문입니다. 최근에는 파운데이션 모델의 규모가 커지면서 추론에 드는 비용과 지연 시간이 크게 늘어났고, 그만큼 추론 최적화의 중요성도 더욱 커졌습니다.

파운데이션 모델의 또 다른 어려움 중 하나는, 대부분이 순차적으로 생성하는 방식(autoregressive) 방식이라는 점입니다. 즉, 토큰이 하나씩 순차적으로 생성되기 때문에, 예를 들어 한 토큰을 만드는데 10ms가 걸린다면 100개 토큰을 출력하는 데 1초, 더 긴 결과물에는 그 이상이 소요됩니다. 대기 시간이 조금만 길어도 금방 불편함을 느끼기 때문에, 일반적인 인터넷 서비스에서 기대하는 100ms 수준의 응답 속도를 AI 애플리케이션에서 구현하는 것은 상당히 어려운 과제입니다. 이런 이유로 추론 최적화는 산업계와 학계 모두에서 매우 활발하게 연구되는 분야가 되었습니다.

아래는 AI 엔지니어링 시대에 모델 개발 각 분야의 중요도가 어떻게 달라졌는지 요약한 내용입니다.

표 1-4. 파운데이션 모델 도입 이후 모델 개발 과정에서의 역할 변화
표 1-4. 파운데이션 모델 도입 이후 모델 개발 과정에서의 역할 변화

3. AI 엔지니어링 시대의 애플리케이션 개발

전통적인 ML 엔지니어링에서는 각 팀이 자체적으로 개발한 모델을 활용해 서비스를 만들었기 때문에, 모델의 성능 자체가 차별화 요소가 됐습니다. 하지만 파운데이션 모델이 보편화된 지금은 여러 팀이 똑같은 모델을 사용하는 경우가 많아, 애플리케이션 개발 과정에서 어떻게 차별화를 만들어내느냐가 훨씬 더 중요해졌습니다.

애플리케이션 개발 계층에서는 평가(evaluation), 프롬프트 엔지니어링(prompt engineering), 그리고 AI 인터페이스(AI interface)라는 세 가지 핵심 역할이 중심이 됩니다.

평가(Evaluation)

평가는 위험 요소를 줄이고 개선 방향을 찾는 과정으로, 모델 맞춤화(model adaptation) 전반에 걸쳐 반드시 필요한 단계입니다. 평가를 통해 어떤 모델을 쓸지 결정하고, 개발이 얼마나 진척됐는지 비교하며, 애플리케이션이 실제 서비스에 투입될 준비가 됐는지 판단할 수 있습니다. 또한 운영 중에도 문제를 조기에 발견하거나 개선할 부분을 찾아내는 데 평가가 중요한 역할을 합니다.

평가는 ML 엔지니어링에서 늘 중요한 역할을 해왔지만, 파운데이션 모델에서는 그 중요성이 훨씬 더 커졌습니다. 그 이유는 여러 가지가 있지만, 핵심적으로는 파운데이션 모델이 가진 개방형 특성과 확장된 기능 때문입니다. 예를 들어, 사기 탐지처럼 정답이 정해진(close-ended) ML 작업에서는 모델의 출력 결과를 미리 정해진 정답(ground truth)과 비교해 맞고 틀림을 쉽게 판단할 수 있습니다. 하지만 챗봇처럼 하나의 질문에 수많은 답변이 가능한 작업에서는, 모델의 응답을 비교할 만한 모든 정답 리스트를 만들 수가 없기 때문에 평가가 훨씬 더 까다로워집니다.

다양한 모델 맞춤화 기법이 존재한다는 사실 자체가 평가를 더 어렵게 만듭니다. 한 기법에서 성능이 좋지 않은 시스템이 다른 기법에서는 훨씬 더 나은 성과를 낼 수 있기 때문입니다. 2023년 12월 구글이 Gemini를 출시했을 때, 그들은 Gemini가 MMLU 벤치마크(Hendrycks et al., 2020)에서 ChatGPT보다 우수하다고 주장했습니다. 구글은 CoT@32라는 프롬프트 엔지니어링 기법을 사용해 Gemini를 평가했는데, 이 기법에서는 Gemini에 32개의 예시를 보여준 반면 ChatGPT에는 5개의 예시만 보여주었습니다. 두 모델 모두 5개의 예시를 받았을 때는 ChatGPT가 더 좋은 성능을 보였습니다.

표 1-5. 프롬프트 방식에 따라 모델 성능이 크게 달라질 수 있음을 보여주는 Gemini 기술 보고서(2023년 12월)
표 1-5. 프롬프트 방식에 따라 모델 성능이 크게 달라질 수 있음을 보여주는 Gemini 기술 보고서(2023년 12월)

프롬프트 엔지니어링과 컨텍스트 구성

프롬프트 엔지니어링(prompt engineering)은 모델 가중치(model weights)를 변경하지 않고 입력(prompt)만으로 AI 모델이 원하는 동작을 하도록 유도하는 기술입니다. 앞서 언급한 Gemini 평가 사례는 프롬프트 엔지니어링이 모델 성능에 얼마나 큰 영향을 미치는지 잘 보여줍니다. 다른 프롬프트 기법을 적용함으로써 Gemini Ultra의 MMLU 점수가 83.7%에서 90.04%로 크게 향상된 것이 그 예입니다.

적절한 지시문만으로도 모델이 놀라운 일을 하도록 만들 수 있습니다. 원하는 작업을 원하는 형식으로 수행시키는 것도 가능하죠. 프롬프트 엔지니어링은 단순히 모델에게 “무엇을 하라”고 명령하는 것 이상입니다. 모델이 특정 작업을 수행하는 데 필요한 컨텍스트(context)와 도구(tools)를 제공하는 과정까지 포함됩니다. 예를 들어, 긴 맥락이 필요한 복잡한 작업의 경우 모델이 이전 기록을 추적할 수 있도록 메모리 관리 시스템을 구축해야 할 수도 있습니다.

AI 인터페이스

AI 인터페이스란, 최종 사용자가 AI 애플리케이션과 직접 상호작용할 수 있도록 제공되는 접점을 의미합니다. 파운데이션 모델이 등장하기 전에는, AI 모델을 개발할 수 있는 충분한 자원을 가진 조직만이 AI 애플리케이션을 만들 수 있었습니다. 그리고 이렇게 만들어진 AI 기능들은 대부분 기존 서비스에 자연스럽게 녹아들어 있었습니다. 예를 들어, 사기 탐지 기능은 Stripe, Venmo, PayPal 같은 결제 서비스에 내장돼 있었고, 추천 시스템은 Netflix, TikTok, Spotify 같은 소셜 네트워크나 미디어 앱의 한 부분으로 포함되어 있었습니다.

파운데이션 모델 덕분에 이제 누구나 AI 애플리케이션을 만들 수 있게 되었습니다. 이러한 AI 애플리케이션은 독립적인 제품으로 제공할 수도 있고, 다른 제품에 통합해서 사용할 수도 있습니다. 예를 들어, ChatGPT와 Perplexity는 독립 실행형 제품이고, GitHub의 Copilot은 주로 VSCode의 플러그인으로 활용되며, Grammarly는 구글 문서(Google Docs)에서 사용할 수 있는 브라우저 확장 프로그램으로 널리 쓰입니다. 또 Midjourney는 독립 웹 앱으로도 쓸 수 있고, Discord에 연동해서 이용하는 것도 가능합니다.

AI 애플리케이션이 독립형 제품으로 제공되거나 기존 제품에 쉽게 통합될 수 있으려면, 이를 위한 다양한 인터페이스와 도구가 필요합니다. 최근 AI 애플리케이션에서 점점 더 많이 활용되는 인터페이스 유형은 다음과 같습니다.

  • 독립 실행형 웹, 데스크톱, 모바일 앱: Streamlit, Gradio, Plotly Dash 같은 도구들이 대표적으로, AI 웹앱을 쉽고 빠르게 만들 수 있게 해줍니다.
  • 브라우저 확장 프로그램: 사용자가 웹 서핑 중에 바로 AI 모델에 질문하거나 기능을 활용할 수 있도록 도와줍니다.
  • 챗봇: Slack, Discord, WeChat, WhatsApp 같은 메신저 앱에 통합되어, 대화형으로 AI와 소통할 수 있게 해줍니다.
  • 플러그인·애드온 형태의 통합: VSCode, Shopify, Microsoft 365 등 다양한 제품은 개발자가 AI 기능을 플러그인이나 애드온 형태로 쉽게 추가할 수 있는 API를 제공합니다. 이런 API는 AI 에이전트가 외부 서비스와 상호작용하는 데도 활용됩니다.

​​채팅 인터페이스가 가장 널리 사용되지만, AI 인터페이스는 음성 기반일 수도 있습니다. 예를 들어 음성 비서가 이에 해당하며, 증강현실(AR)이나 가상현실(VR)처럼 구현된 형태로 제공될 수도 있습니다.

이러한 새로운 AI 인터페이스는 사용자 피드백을 수집하고 추출하는 방식에도 변화를 가져옵니다. 대화형 인터페이스 덕분에 사용자는 자연어로 손쉽게 피드백을 남길 수 있지만, 이렇게 받은 피드백을 실제로 분석하고 추출하는 일은 오히려 더 어려워집니다.

아래는 AI 엔지니어링 시대에 애플리케이션 개발 각 분야의 중요도가 어떻게 변화하는지 요약한 내용입니다.

표 1-6. AI 엔지니어링과 ML 엔지니어링에서 애플리케이션 개발 시 주요 영역의 중요도 변화
표 1-6. AI 엔지니어링과 ML 엔지니어링에서 애플리케이션 개발 시 주요 영역의 중요도 변화

4. AI 엔지니어링과 풀스택 엔지니어링의 차이

AI 엔지니어링에서는 애플리케이션 개발, 특히 인터페이스의 중요성이 크게 높아지면서 풀스택 개발과의 경계가 점점 흐려지고 있습니다. [주석: Anton Bacaj는 “AI 엔지니어링은 그냥 소프트웨어 엔지니어링에 AI 모델만 추가된 것”이라고 말하기도 했습니다.]

인터페이스의 중요성이 커지면서 AI 도구 설계에도 변화가 생겨, 더 많은 프론트엔드 엔지니어를 유치하는 방향으로 나아가고 있습니다. 전통적으로 머신러닝 엔지니어링은 파이썬 중심이었는데, 파운데이션 모델이 등장하기 전까지는 대부분의 인기 있는 머신러닝 프레임워크가 주로 파이썬 API를 지원했습니다. 오늘날에도 파이썬은 여전히 인기가 높지만, 자바스크립트 API에 대한 지원도 점점 늘어나고 있습니다. 예를 들어 LangChain.js, Transformers.js, OpenAI의 Node 라이브러리, 그리고 Vercel의 AI SDK 등이 있습니다.

많은 AI 엔지니어들이 전통적인 머신러닝(ML) 배경을 가지고 있지만, 점점 더 많은 이들이 웹 개발이나 풀스택 개발 배경을 갖고 있습니다. 풀스택 엔지니어가 전통적인 ML 엔지니어에 비해 가지는 장점 중 하나는 아이디어를 빠르게 시연용 데모로 구현하고, 피드백을 받아 이를 반복 개선할 수 있다는 점입니다.

전통적인 ML 엔지니어링에서는 보통 데이터 수집과 모델 학습부터 시작하며, 제품 개발은 그 이후에 이루어집니다. 하지만 오늘날 AI 모델이 쉽게 활용 가능한 상황에서는, 제품을 먼저 만들어보고 가능성이 보일 때에만 데이터와 모델에 투자를 하는 방식도 가능합니다. 이러한 접근 방식은 그림 1-16에 시각화되어 있습니다.

그림 1-16. 새로운 AI 엔지니어링 워크플로우에서는 빠르게 반복하고 개선할 수 있는 사람이 더 큰 성과를 거둘 수 있습니다. 이 이미지는 “The Rise of the AI Engineer”(Shawn Wang, 2023)을 참고하여 재구성한 것입니다.
그림 1-16. 새로운 AI 엔지니어링 워크플로우에서는 빠르게 반복하고 개선할 수 있는 사람이 더 큰 성과를 거둘 수 있습니다. 이 이미지는 “The Rise of the AI Engineer”(Shawn Wang, 2023)을 참고하여 재구성한 것입니다.

전통적인 ML 엔지니어링에서는 모델 개발과 제품 개발이 서로 분리되어 진행되는 경우가 많았고, 많은 조직에서 ML 엔지니어가 실제 제품 결정 과정에 거의 참여하지 않는 경우가 많았습니다. 하지만 파운데이션 모델이 등장하면서, AI 엔지니어들은 제품 개발 과정에 훨씬 더 깊이 관여하는 경향이 뚜렷해졌습니다.

요약

AI 엔지니어링이 이렇게 빠르게 성장하는 배경에는 파운데이션 모델이 제공하는 새로운 가능성 덕분에 다양한 애플리케이션이 현실화되고 있다는 점이 있습니다. 이미 수많은 AI 애플리케이션이 실제 서비스로 운영되고 있지만, AI 엔지니어링 분야는 아직 시작 단계에 불과하며 앞으로도 무궁무진한 혁신이 계속 나올 것으로 기대됩니다.

AI 엔지니어링이라는 용어는 비교적 최근에 등장했지만, 사실 모든 머신러닝(ML) 모델을 활용해 애플리케이션을 만드는 포괄적인 분야인 ML 엔지니어링에서 발전해 온 개념입니다. ML 엔지니어링의 여러 원칙들은 AI 엔지니어링에도 그대로 적용되지만, 동시에 AI 엔지니어링만의 새로운 과제와 해법도 함께 등장하고 있습니다.

AI 엔지니어링 분야에서 말로 다 표현하기 어려운 부분 중 하나는, 모두가 함께 만들어내는 열정과 참신한 아이디어, 그리고 뛰어난 엔지니어링 역량입니다. 새로운 기술과 발견, 혁신적인 엔지니어링 성과가 끊임없이 쏟아져 나오기 때문에, 이 열정과 속도를 따라잡는 것만으로도 벅차게 느껴질 때가 많습니다.

그나마 위안이 되는 점은, AI 자체가 정보를 모으고 요약하는 데 강점을 가지고 있어서, 이런 새로운 소식들을 한데 모아 정리하는 데 도움을 줄 수 있다는 사실입니다. 하지만 어떤 도구도 한계가 있기 마련이고, 정보가 넘쳐날수록 그 흐름을 이해하고 길을 찾을 수 있는 프레임워크가 더욱 중요해집니다.


원문: The AI Engineering Stack


blog by ash에서 더 알아보기

구독을 신청하면 최신 게시물을 이메일로 받아볼 수 있습니다.

댓글 남기기

AI 엔지니어링 스택의 세 가지 계층

blog by ash에서 더 알아보기

지금 구독하여 계속 읽고 전체 아카이브에 액세스하세요.

계속 읽기