고전적인 머신러닝과 생성형 AI 워크플로를 광범위하게 비교해 보면, 일반적인 워크플로 단계는 둘 다 비슷하다는 것을 알 수 있습니다. 둘 다 데이터 수집, 피처 엔지니어링, 모델 최적화, 배포, 평가 등을 필요로 하지만 실행 세부 정보와 시간 할당은 근본적으로 다릅니다. 가장 중요한 것은 생성형 AI는 제대로 관리하지 않으면 빠르게 누적될 수 있는 기술 부채의 고유한 원인을 야기한다는 것입니다. 여기에는 다음이 포함됩니다.
이 블로그에서는 기술 부채의 각 형태를 차례로 살펴보겠습니다. 궁극적으로, 클래식 ML에서 생성형 AI로 전환하는 팀은 클래식 ML 프로젝트에서 주를 이루었던 데이터 정제 및 피처 엔지니어링보다는 평 가, 이해관계자 관리, 주관적인 품질 모니터링, 계측에 더 많은 시간을 할애하여 새로운 부채 원인을 인식하고 그에 따라 개발 관행을 조정해야 합니다.
이 분야가 현재 어느 수준에 있는지 이해하려면, 생성형 AI 워크플로를 고전적인 machine learning 문제에 사용하는 워크플로와 비교해 보는 것이 도움이 됩니다. 다음은 개략적인 개요입니다. 이 비교에서 알 수 있듯이 광범위한 워크플로 단계는 동일하게 유지되지만, 실행 세부 정보의 차이로 인해 강조되는 단계가 달라집니다. 앞으로 살펴보겠지만 생성형 AI는 새로운 형태의 기술 부채를 도입하기도 하며, 이는 프로덕션 환경에서 시스템을 유지 관리하는 방식에 영향을 미칩니다.
| 워크플로 단계 | 클래식 ML | 생성형 AI |
|---|---|---|
| 데이터 수집 | 수집된 데이터는 소매 판매 또는 장비 고장과 같은 현실 세계의 사건을 나타냅니다. CSV 및 JSON과 같은 구조화된 형식은 자주 사용됩니다. | 수집된 데이터는 언어 모델이 관련성 있는 답변을 제공하는 데 도움이 되는 맥락적 지식을 나타냅니다. 정형 데이터(종종 실시간 테이블 형태)와 비정형 데이터(이미지, 동영상, 텍스트 파일)를 모두 사용할 수 있습니다. |
| 피처 엔지니어링/ 데이터 변환 | 데이터 변환 단계는 문제 공간을 더 잘 반영하기 위해 새로운 특성을 생성하거나(예: 타임스탬프 데이터에서 주중 및 주말 특성 생성) 모델이 데이터에 더 잘 맞도록 통계적 변환을 수행하는 것(예: k-평균 클러스터링을 위해 연속 변수를 표준화하고 편향된 데이터에 로그 변환을 적용하여 정규 분포를 따르게 하는 것)을 포함합니다. | 비정형 데이터의 경우 변환에는 청킹, 임베딩 표현 생성, (경우에 따라) 청크에 제목 및 태그와 같은 메타데이터 추가가 포함됩니다. 정형 데이터의 경우 대규모 언어 모델(LLM)이 테이블 조인을 고려할 필요가 없도록 테이블을 비정규화하는 작업이 포함될 수 있습니다. 테이블 및 열 메타데이터 설명을 추가하는 것도 중요합니다. |
| 모델 파이프라인 설계 | 보통 세 단계로 구성된 기본 파이프라인으로 처리됩니다.
| 일반적으로 쿼리 재작성 단계, 일종의 정보 검색, 도구 호출 가능성, 그리고 마지막으로 안전 확인이 포함됩니다. 파이프라인은 훨씬 더 복잡하며, 데이터베이스 및 API 통합과 같은 더 복잡한 인프라를 포함하고, 때로는 그래프와 유사한 구조로 처리됩니다. |
| 모델 최적화 | 모델 최적화는 교차 검증, 그리드 검색, 무작위 검색과 같은 방법을 사용한 하이퍼파라미터 튜닝을 포함합니다. | temperature, top-k, top-p와 같은 일부 하이퍼파라미터는 변경될 수 있지만, 대부분의 노력은 모델 동작을 유도하기 위해 프롬프트를 조정하는 데 사용됩니다. LLM 체인은 여러 단계를 포함할 수 있으므로 AI 엔지니어는 복잡한 작업을 더 작은 구성 요소로 분해하는 실험을 할 수도 있습니다. |
| 배포 | 모델은 LLM과 같은 파운데이션 모델보다 훨씬 작습니다. 전체 ML 애플리케이션은 GPU 없이도 CPU에서 호스팅할 수 있습니다. 모델 버전 관리, 모니터링, 리니지는 중요한 고려 사항입니다. 모델 예측은 복잡한 체인이나 그래프를 거의 필요로 하지 않으므로 트레이스는 일반적으로 사용되지 않습니다. | 파운데이션 모델은 매우 크기 때문에 중앙 GPU에서 호스팅되고 여러 사용자 대상 AI 애플리케이션에 API로 노출될 수 있습니다. 이러한 애플리케이션은 파운데이션 모델 API 주위에서 '래퍼' 역할을 하며 더 작은 CPU에서 호스팅됩니다. 애플리케이션 버전 관리, 모니터링, 리니지는 중요한 고려 사항입니다. 또한 LLM 체인과 그래프는 복잡할 수 있으므로 쿼리 병목 현상과 버그를 식별하려면 적절한 추적이 필요합니다. |
| 평가 | 모델 성능을 위해 데이터 사이언티스트는 분류용 F1 점수나 회귀용 평균 제곱근 오차와 같은 정의된 정량적 측정항목을 사용할 수 있습니다. | LLM 출력의 정확성은 요약이나 번역의 품질과 같은 주관적인 판단에 따라 달라집니다. 따라서 응답 품질은 일반적으로 정량적 측정항목보다는 가이드라인으로 판단됩니다. |
가격 예측 프로젝트와 도구 호출 에이전트 구축 프로젝트를 동시에 진행해 본 결과, 모델 개발 및 배포 단계에 몇 가지 주요한 차이점이 있다는 것을 알게 되었습니다.
내부 개발 루프는 일반적으로 machine learning 개발자가 모델 파이프라인을 구축 하고 개선할 때 거치는 반복적인 프로세스를 의미합니다. 보통 프로덕션 테스트 및 모델 배포 전에 발생합니다.
기존 ML 및 GenAI 전문가는 이 단계에서 시간을 다음과 같이 다르게 사용합니다.
고전적인 ML 모델 개발의 시간 낭비 요인
생성형 AI 모델 및 파이프라인 개발 시간 소모 요인
다음 다이어그램은 기존 ML과 생성형 AI의 모델 개발 루프 시간 할당을 비교합니다.
모델 개발 루프와 달리 모델 배포 루프는 모델 성능 최적화에 중점을 두지 않습니다. 대신 엔지니어는 프로덕션 환경에서의 체계적인 테스트, 배포, 모니터링에 중점을 둡니다.
여기서 개발자는 프로젝트 업데이트를 더 쉽게 하기 위해 구성을 YAML 파일로 옮길 수 있습니다. 또한 Pandas 대신 PySpark와 같은 더 강력한 프레임워크를 사용하여 정적 데이터 처리 파이프라인을 스트리밍 방식으로 실행되도록 리팩터링할 수 있습니다. 마지막으로 모델 품질을 유지하기 위해 테스트, 모니터링, 피드백 프로세스를 설정하는 방법을 고려해야 합니다.
이 시점에서는 자동화가 필수적이며, 지속적인 통합 및 제공은 필수 요구 사항입니다. Databricks에서 데이터 및 AI 프로젝트를 위한 CI/CD를 관리하는 데는 Databricks Asset Bundles 가 일반적으로 선택되는 도구입니다. 이를 통해 Databricks 리소스(예: 작업 및 파이프라인)를 소스 파일로 기술하고, 프로젝트의 소스 파일과 함께 메타데이터를 포함할 수 있습니다.
모델 개발 단계에서와 마찬가지로, 이 단계에서 생성형 AI 프로젝트와 기존 ML 프로젝트 간에 가장 많은 시간이 소요되는 활동은 동일하지 않습니다.
기존 ML 모델 배포 시간 소모 요인
for 루프 제거) 생성형 AI 모델 배포 시 시간이 많이 소요되는 부분
trace 데코레이터 는 모든 함수에 사용하여 입력과 출력을 캡처할 수 있습니다. 동시에 특정 코드 블록 내에 사용자 지정 MLflow Traces 스팬을 생성하여 더 세분화된 작업을 기록할 수 있습니다. 계측을 사용하여 에이전트 출력에서 신뢰할 수 있는 진실의 원천을 집계한 후에야 개발자는 실패 모드를 식별하고 그에 따라 테스트를 설계할 수 있습니다.make_judge API 또는 SIMBAAlignmentOptimizer와 같은 함수를 사용하여 그 평가를 LLM 기반 판정기에 안정적으로 통합할 수 있습니다.기술 부채는 개발자가 장기적인 유지 관리성을 희생하면서 임시방편의 솔루션을 구현할 때 쌓입니다.
기존 ML 기술 부채
Dan Sculley 등은 이러한 시스템이 축적할 수 있는 기술 부채의 유형에 대한 훌륭한 요약을 제공했습니다. 그들은 논문 '머신러닝: 기술 부채의 고금리 신용카드' 에서 이를 세 가지 광범위한 영역으로 나눕니다.
생성형 AI는 새로운 형태의 기술 부채를 야기하며, 그중 다수는 명확하게 드러나지 않을 수 있습니다. 이 섹션에서는 이러한 숨겨진 기술 부채의 원인을 살펴봅니다.
도구는 LLM의 기능을 확장하는 강력한 방법입니다. 하지만 사 용하는 도구의 수가 늘어날수록 관리가 어려워질 수 있습니다.
도구 확산은 검색 가능성 및 재사용 문제를 야기할 뿐만 아니라 생성형 AI 시스템의 품질에 부정적인 영향을 미칠 수도 있습니다. 도구가 확산되면 다음과 같은 두 가지 주요 실패 지점이 발생합니다.
도구 확산에 대한 가장 깔끔한 솔루션은 팀이 사용하는 도구를 전략적이고 최소한으로 유지하는 것입니다.
그러나 올바른 거버넌스 전략은 점점 더 많은 팀이 GenAI를 프로젝트와 시스템에 통합함에 따라 여러 도구와 액세스 관리를 확장 가능하게 만드는 데 도움이 될 수 있습니다. Databricks 제품인 Unity Catalog와 AI Gateway는 이러한 유형의 확장을 위해 구축되었습니다.
최신 모델은 수 페이지 분량의 지침을 처리할 수 있지만, 지나치게 복잡한 프롬프트는 모순되는 지침이나 오래된 정보와 같은 문제를 유발할 수 있습니다. 이는 특히 프롬프트가 편집되지 않고, 시간이 지나면서 여러 도메인 전문가나 개발자에 의해 내용이 추가되기만 할 때 발생합니다.
다양한 실패 모드가 발생하거나 새로운 query가 범위에 추가될 때 LLM 프롬프트에 지침을 계속해서 더 많이 추가하고 싶은 유혹이 듭니다. 예를 들어, 프롬프트는 재무 관련 질문을 처리하기 위한 지침을 제공하는 것으로 시작한 다음 제품, 엔지니어링 및 인적 리소스 관련 질문으로 확장될 수 있습니다.
소프트웨어 엔지니어링에서 "god class"가 좋은 아이디어가 아니며 분리되어야 하는 것과 마찬가지로, 메가 프롬프트도 더 작은 단위로 분리해야 합니다. 실제로 Anthropic은 프롬프트 엔지니어링 가이드에서 이 점을 언급하며, 일반적인 규칙으로 길고 복잡한 프롬프트 하나보다는 여러 개의 더 작은 프롬프트를 사용하는 것이 명확성, 정확성, 문제 해결에 도움이 됩니다.
프레임워크는 프롬프트 버전을 추적하고 예상 입력 및 출력을 강제함으로써 프롬프트를 관리하기 쉽게 유지하는 데 도움이 될 수 있습니다. 프롬프트 버전 관리 도구의 예시로는 MLflow Prompt Registry가 있으며, Databricks에서 실행할 수 있는 DSPy 와 같은 프롬프트 옵티마이저는 프롬프트를 개별적으로 또는 전체적으로 최적화할 수 있는 독립적인 모듈로 분해할 수 있습니다.
최근 추적(tracing)이 주목받는 데에는 이유가 있습니다. 대부분의 LLM 라이브러리와 추적 도구는 LLM 체인의 입력과 출력을 추적하는 기능을 제공하기 때문입니다. 응답이 "죄송합니다, 질문에 답변할 수 없습니다"와 같은 오류를 반환하는 경우, 중간 LLM 호출의 입력과 출력을 검토하는 것이 근본 원인을 정확히 파악하는 데 중요합니다.
저는 이전에 SQL 생성이 워크플로에서 가장 문제가 되는 단계일 것이라고 초기에 가정했던 애플리케이션 작업을 한 적이 있습니다. 하지만 추적 결과를 검토해 보니 이야기가 달랐습니다. 가장 큰 오류의 원인은 실제로는 사용자 질문의 엔터티를 데이터베이스 값과 일치하는 엔터티로 업데이트하는 쿼리 재작성 단계였습니다. LLM은 재작성이 필요 없는 쿼리를 재작성하거나 원래 쿼리에 온갖 종류의 추가 정보를 채워 넣기 시작했습니다. 이로 인해 후속 SQL 생성 프로세스가 정기적으로 엉망이 되었습니다. 여기서 추적은 문제를 신속하게 식별하는 데 도움이 되었습니다.
올바른 LLM 호출을 추적하는 데는 시간이 걸릴 수 있습니다. 기본으로 제공되는 추적 기능을 구현하는 것만으로는 충분하지 않습니다. MLflow Traces와 같은 프레임워크를 사용하여 앱에 관찰 가능성을 제대로 계측하는 것은 에이전트 상호 작용을 더 투명하게 만들기 위한 첫 번째 단계입니다.
LLM이 놀라운 이유는 몇 가지 간단한 프롬프트를 전달하고 결과를 함께 연결하면 뉘앙스와 지침을 정말 잘 이해하는 것처럼 보이는 결과물을 얻을 수 있기 때문입니다. 하지만 사용자 피드백으로 응답의 기반을 다지지 않고 이 길을 너무 멀리 가면 품질 부채가 빠르게 쌓일 수 있습니다. 이때 가능한 한 빨리 “데이터 플라이휠” 을 만드는 것이 도움이 될 수 있으며, 이는 세 단계로 구성됩니다.
저는 스포츠 통계를 쿼리하는 text-to-SQL 애플리케이션을 개발하면서 인간 피드백의 중요성을 다시 한번 깨달았습니다. 도메인 전문가는 스포츠 팬이 데이터와 어떻게 상호작용하고 싶어 하는지, 무엇을 중요하게 생각하는지를 명확히 설명해 주었고, 스포츠를 거의 보지 않는 저로서는 결코 생각하지 못했을 다른 인사이트를 제공해 주었습니다. 그들의 의견이 없었다면 제가 만든 애플리케이션은 사용자의 니즈를 충족하지 못했을 것입니다.
사람의 피드백을 수집하는 것은 매우 중요하지만, 보통은 시간이 너무 많이 걸립니다. 먼저 도메인 전문가와 시간을 조율하고, 전문가 간의 차이를 조정하기 위한 평가 기준을 만든 다음, 개선을 위해 피드백을 평가해야 합니다. 비즈니스 사용자가 액세스할 수 없는 환경에서 피드백 UI가 호스팅되는 경우, IT 관리자와 협의하여 적절한 수준의 액세스 권한을 제공하는 과정이 끝이 없는 것처럼 느껴질 수 있습니다.
올바른 결과물을 만들고 있는지 확인하기 위해 최종 사용자, 비즈니스 스폰서, 인접 팀과 정기적으로 협의하는 것은 모든 종류의 프로젝트에서 기본입니다. 하지만 생성형 AI 프로젝트에서는 이해관계자와의 소통이 그 어느 때보다 더 중요합니다.
빈번하고 긴밀한 커뮤니케이션이 중요한 이유:
생성형 AI 프로젝트에서는 적절한 데이터 액세스 제어 시행, 안전을 관리하고 프롬프트 주입을 방지하기 위한 가드레일 마련, 비용 급증 방지 등을 포함하여 해결해야 할 다른 여러 형태의 기술 부채가 있을 수 있습니다. 여기서는 가장 중요해 보이면서도 쉽게 간과될 수 있는 것들만 포함했습니다.
고전적인 ML과 생성형 AI는 동일한 기술 분야의 서로 다른 종류입니다. 두 시스템 간의 차이점을 인식하고 이러한 차이점이 솔루션을 구축하고 유지 관리하는 방식에 미치는 영향을 고려하는 것이 중요하지만, 어떤 진실은 변하지 않습니다. 즉, 소통은 여전히 격차를 해소하고, 모니터링은 여전히 재앙을 예방하며, 깨끗하고 유지 관리하기 쉬운 시스템은 장기적으로 혼란스러운 시스템보다 여전히 뛰어난 성능을 발휘합니다.
귀 조직의 AI 성숙도를 평가하고 싶으신가요? 가이드 읽기: AI 가치 실현: 기업을 위한 AI 준비 가이드.
(이 글은 AI의 도움을 받아 번역되었습니다. 원문이 궁금하시다면 여기를 클릭해 주세요)
